欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载
     

    基于LPC1788的SSP1引脚的正确使用方法及注意事项.doc

    • 资源ID:3411023       资源大小:41.50KB        全文页数:10页
    • 资源格式: DOC        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于LPC1788的SSP1引脚的正确使用方法及注意事项.doc

    基于LPC1788的SSP1引脚的正确使用方法及注意事项在学习过程中,发现一点容易被忽视而又很严重的问题-那就是关于SSP1的引脚使用P07-P08-P09时,是W型IO配置。寄存器的第7位很容易被我们设置为0-但是手册上是要求必须为1,否则不能正常工作,这里我走了一点弯路。#include“ssp_lpc1788.h”#define SPI_FLASH_PageSize 256 /页大小#define SPI_FLASH_PerWritePageSize 256 /写页大小/*-初始化SSP0-*/void SSP0_Init(unsigned long sysClk, unsigned spiClk)volatile uint32_t dummy;dummy = dummy;LPC_IOCON-P2_22 =0x22; / SSP0_SCKLPC_IOCON-P2_26 =0x22; / SSP0_MISOLPC_IOCON-P2_27 =0x22; / SSP0_MOSILPC_IOCON-P2_23=0x30; /SSP1_CS-直接普通上拉IOLPC_GPIO2-DIR “= (1UL 23); /输出LPC_GPIO2-SET|=(123);/置一LPC_SC-PCONP |= (1UL 21); /SSP0 时钟开启LPC_SSP0-CR0 = 0x0007; / 8Bit, CPOL=0, CPHA=0LPC_SSP0-CR1 = 0x0002; / SSP0-使能-主模式LPC_SSP0-CPSR = sysClk/spiClk; /时钟预分频寄存器while( LPC_SSP0-SR /忙while( LPC_SSP0-SR ">dummy = LPC_SSP0-DR; /假读取去清空FIFO/*-SSP0-发送数据-*/void SSP0_WriteByte(unsigned char data)uint8_t Dummy;LPC_SSP0-DR = data; /载入要发送的数据while (LPC_SSP0-SR ">Dummy=LPC_SSP0-DR; /假读取去清空FIFO/*-SSP0-接收数据-*/uint8_t SSP0_RegisterByte(void)LPC_SSP0-DR = 0xFF; /无效指令while (LPC_SSP0-SR ">return (LPC_SSP0-DR); /接收数据/*-SSP1-*/*-初始化SSP1-*/void SSP1_Init(unsigned long sysClk, unsigned spiClk)volaTIle uint32_t dummy;LPC_IOCON-P0_7 =0xA2; / SSP1_SCKLPC_IOCON-P0_8 =0xA2; / SSP1_MISOLPC_IOCON-P0_9 =0xA2; / SSP1_MOSILPC_IOCON-P0_6=0x30; /SSP1_CS-普通上拉IOLPC_GPIO0-DIR |= (1UL 6); /输出LPC_GPIO0-SET|=(16);/置一LPC_SC-PCONP |= (1UL 10); /SSP1 时钟开启LPC_SSP1-CR0 = 0x0007; / 8Bit, CPOL=0, CPHA=0LPC_SSP1-CR1 = 0x0002; / SSP1-使能-主模式LPC_SSP1-CPSR = sysClk/spiClk; /时钟预分频寄存器while( LPC_SSP1-SR /忙while( LPC_SSP1-SR ">dummy = LPC_SSP1-DR; /假读取去清空FIFO/*-SSP1-发送数据-*/void SSP1_WriteByte(unsigned char data)uint8_t Dummy;LPC_SSP1-DR = data; /载入要发送的数据while (LPC_SSP1-SR ">Dummy=LPC_SSP1-DR; /假读取去清空FIFO/*-SSP1-接收数据-*/uint8_t SSP1_RegisterByte(void)LPC_SSP1-DR = 0xFF; /无效指令while (LPC_SSP1-SR ">return (LPC_SSP1-DR); /接收数据/*-W25Q16-*/-写使能-void SSP_FLASH_WriteEnable(void)FLASH_CS_LOW();SSP0_WriteByte(0x06);FLASH_CS_HIGH();/-等待写完成-void SSP_FLASH_WaitForWriteEnd(void)uint16_t i=2000;uint8_t FLASH_Status = 0;FLASH_CS_LOW();SSP0_WriteByte(0x05);doFLASH_Status = SSP0_RegisterByte();i-;while (FLASH_Status FLASH_CS_HIGH();/*-关于擦除-在写入数据之前必须保证被写入的位值是0xff-这就是擦除的作用*/-扇区擦除-void SSP_FLASH_SectorErase(uint32_t SectorAddr)SSP_FLASH_WriteEnable();/写使能SSP_FLASH_WaitForWriteEnd();/忙状态FLASH_CS_LOW();/CS=0SSP0_WriteByte(0x20);/0x20SSP0_WriteByte(SectorAddr /擦除扇区起始地址SSP0_WriteByte(SectorAddr SSP0_WriteByte(SectorAddr FLASH_CS_HIGH();/CS=1SSP_FLASH_WaitForWriteEnd();/忙状态-等待擦除完成/-块擦除-void SSP_FLASH_BlockErase(uint32_t BlockAddr)BlockAddr*=65536;/0x010000SSP_FLASH_WriteEnable();/写使能SSP_FLASH_WaitForWriteEnd();FLASH_CS_LOW();SSP0_WriteByte(0xD8);/0xD8SSP0_WriteByte(BlockAddr /擦除块起始地址SSP0_WriteByte(BlockAddr SSP0_WriteByte(BlockAddr FLASH_CS_HIGH();SSP_FLASH_WaitForWriteEnd();/-整片擦除-void SSP_FLASH_BulkErase(void)SSP_FLASH_WriteEnable(); /写使能FLASH_CS_LOW();SSP0_WriteByte(0xc7); /整片擦除FLASH_CS_HIGH();SSP_FLASH_WaitForWriteEnd();/-单页写入-void SSP_FLASH_PageWrite(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite)SSP_FLASH_WriteEnable();FLASH_CS_LOW();SSP0_WriteByte(0x02);/CMD2-0x02-页写入SSP0_WriteByte(WriteAddr /写入起始地址SSP0_WriteByte(WriteAddr SSP0_WriteByte(WriteAddr if(NumByteToWrite SSP_FLASH_PerWritePageSize) /写入数据多余页最大数据NumByteToWrite = SSP_FLASH_PerWritePageSize;while (NumByteToWrite-)SSP0_WriteByte(*pBuffer); /写数据pBuffer+;FLASH_CS_HIGH();SSP_FLASH_WaitForWriteEnd();/-多页写入-void SSP_FLASH_BufferWrite(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite)uint8_t NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0, temp = 0;Addr = WriteAddr % SSP_FLASH_PageSize; /首页地址count = SSP_FLASH_PageSize - Addr;/首页要写入的数据个数NumOfPage = NumByteToWrite / SSP_FLASH_PageSize;/页数NumOfSingle = NumByteToWrite % SSP_FLASH_PageSize; /余数-最后一页不满一页个数if (Addr = 0)if (NumOfPage = 0) /只有一页SSP_FLASH_PageWrite(pBuffer, WriteAddr, NumByteToWrite); /?±?óDè?else /多页while (NumOfPage-) /写满页的数据SSP_FLASH_PageWrite(pBuffer, WriteAddr, SSP_FLASH_PageSize);WriteAddr += SSP_FLASH_PageSize;pBuffer += SSP_FLASH_PageSize;SSP_FLASH_PageWrite(pBuffer, WriteAddr, NumOfSingle);/写最后不满一页的数据elseif (NumOfPage = 0)if (NumOfSingle count)temp = NumOfSingle - count;SSP_FLASH_PageWrite(pBuffer, WriteAddr, count);WriteAddr += count;pBuffer += count;SSP_FLASH_PageWrite(pBuffer, WriteAddr, temp);elseSSP_FLASH_PageWrite(pBuffer, WriteAddr, NumByteToWrite);elseNumByteToWrite -= count;NumOfPage = NumByteToWrite / SSP_FLASH_PageSize;NumOfSingle = NumByteToWrite % SSP_FLASH_PageSize;SSP_FLASH_PageWrite(pBuffer, WriteAddr, count);WriteAddr += count;pBuffer += count;while (NumOfPage-)SSP_FLASH_PageWrite(pBuffer, WriteAddr, SSP_FLASH_PageSize);WriteAddr += SSP_FLASH_PageSize;pBuffer += SSP_FLASH_PageSize;if (NumOfSingle != 0)SSP_FLASH_PageWrite(pBuffer, WriteAddr, NumOfSingle);/-读数据-void SSP_FLASH_BufferRead(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead)FLASH_CS_LOW();SSP0_WriteByte(0x03); /CMD3-0x03-/读数据SSP0_WriteByte(ReadAddr SSP0_WriteByte(ReadAddrSSP0_WriteByte(ReadAddr while (NumByteToRead-)*pBuffer = SSP0_RegisterByte();/读入到指定数组pBuffer+;FLASH_CS_HIGH();/*-读取厂家ID-*/uint32_t SSP_FLASH_ReadID(void)uint32_t temp1=0,temp2=0,temp3=0,temp=0;LPC_GPIO0-CLR|=(16); /CS=0SSP1_WriteByte(0x9F); /读取ID指令temp1 =SSP1_RegisterByte(); /厂家编号temp2 =SSP1_RegisterByte();/存储类型temp3 =SSP1_RegisterByte();/容量temp =(temp116)|(temp28)|(temp3);LPC_GPIO0-SET|=(16);/CS=1;return temp;

    注意事项

    本文(基于LPC1788的SSP1引脚的正确使用方法及注意事项.doc)为本站会员(白大夫)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开