应用指南位cortexm0单片机numicr教程_第1页
应用指南位cortexm0单片机numicr教程_第2页
应用指南位cortexm0单片机numicr教程_第3页
应用指南位cortexm0单片机numicr教程_第4页
应用指南位cortexm0单片机numicr教程_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目1简 概 性 结 目1简 概 性 结 SPI应用框 2-Bit模式下的Tx/Rx寄存器和I/O 2-Bit传送模式时序 2代码部 主函 检查SPIFlash的MID和 擦除SPI 读SPIFlash的状态寄存器 检查SPIflash的BUSY SPIFlash编 从SPIFlash读数 3调用顺 综合SPI控制器和SPI NUC100设 有关的API参考 4运行环境设置及结 测试 结 5修订历 Rev.-11简本文档描述了怎样使用NUC1xx系列芯片SPI控1简本文档描述了怎样使用NUC1xx系列芯片SPI控制器的2-bit模概本文中,I2-t主机,使用2个IahW5,华邦ps)I主机使用串行时钟(Cx),一个从机选择(Sx0)以及2通道数据输入/输出(MO0,xIs。性可配置最大传输字1~32位,一次可传输1~2MSBLSB在前传支持传送和接收Rev.-2 结下图描述了SPI控制器模块图。SPICLKx是SPI主机的串行时钟,在主机模式下SPISSx0和SPISSx1xx0x1和MO1和MISOx0引脚组合成1SPIRev.-3Core TX 结下图描述了SPI控制器模块图。SPICLKx是SPI主机的串行时钟,在主机模式下SPISSx0和SPISSx1xx0x1和MO1和MISOx0引脚组合成1SPIRev.-3Core TX RX 2-ClockSPI应用框下图是应用框图,我们设定NUC100的SPI控制器2(SPI2)作为SPI2-bit模式主机,SPICLK2是主SPI应用框下图是应用框图,我们设定NUC100的SPI控制器2(SPI2)作为SPI2-bit模式主机,SPICLK2是主机用与两个SPIflash收发数据的时钟信号,SPISS20是SPI主机的从机选择输出,MISO20和第一通道接到SPIflash0,MISO21和MOSI21组成第二通道接到SPIflash1。MOSI20组2SPI2-Bit传送模式应用框Rev.-4 (SPI2SPI-Flash SPI-Flash 2-Bit模式下的Tx/Rx寄存器和I/O在2-Bit模式中一次传送只能收发32位长度数据,MOSIx02-Bit模式下的Tx/Rx寄存器和I/O在2-Bit模式中一次传送只能收发32位长度数据,MOSIx0和MISOx0引脚组成通道0,从SPI_Tx0寄存器发送数据,用SPI_Rx0接收数据。MOSIx1和MISOx1引脚组成通道1,从SPI_Tx1寄存器发送数据,Rev.-52-Bit传送模式时序下图描述SPI2-Bit传送模式时序图2-Bit传送模式时Rev.-62-Bit传送模式时序下图描述SPI2-Bit传送模式时序图2-Bit传送模式时Rev.-6 代码部主函 代码部主函主函数中首先检查了这2个SPIflash的MID和DID,然后擦除这2个flash,接着写数据0x00~0xff到的第一页,写数据0xff~0x00到flash1的第一页,最后验证2个flashRev.-7#defineTEST_NUMBER1intmain(void){uint32_tu32ByteCount,u32FlashAddress,u32PageNumber;uint8_tDataBuffer0[256];uint8_t/*Unlocktheprotectedregisters*//*Enablethe12MHzoscillatoroscillation*/DrvSYS_SetOscCtrl(E_SYS_XTL12M,1);/*HCLKclocksource.0:external12MHz;4:internal22MHzRCoscillator*//*HCLKclockfrequency=HCLKclocksource/(HCLK_N+1)*/DrvSYS_SetClockDivider(E_SYS_HCLK_DIV,0);/*ConfigureSPI2asamaster,Type1waveform,32-bittransaction*/DrvSPI_Open(eDRVSPI_PORT2,eDRVSPI_MASTER,eDRVSPI_TYPE1,32);/*MSBfirstDrvSPI_SetEndian(eDRVSPI_PORT2,/*DisabletheautomaticslaveselectfunctionofSS0.*/Rev.Rev.-8/*Settheactivelevelofslaveselect.*/DrvSPI_SetSlaveSelectActiveLevel(eDRVSPI_PORT2,eDRVSPI_ACTIVE_LOW_FALLING);/*ConfigureSPI2as2-bittransfermode*/DrvSPI_Set2BitSerialDataIOMode(eDRVSPI_PORT2,TRUE);/*SPIclockrate1MHz*/DrvSPI_SetClock(eDRVSPI_PORT2,1000000,0);/*CheckMID&DID*//*EraseSPIflash*//*Waitready*//*initialsourcedatafor(u32ByteCount=0;u32ByteCount<256;{DataBuffer0[u32ByteCount]=}/*ProgramSPIflash*/u32FlashAddress=for(u32PageNumber=0;u32PageNumber<TEST_NUMBER;{/*pageprogramSpiFlashx2_PageProgram(DataBuffer0,u32FlashAddress,256);u32FlashAddress+=}Rev.Rev.-9/*cleardatabufferfor(u32ByteCount=0;u32ByteCount<256;{DataBuffer0[u32ByteCount]=DataBuffer1[u32ByteCount]=}/*VerifySPIflash*/u32FlashAddress=0;for(u32PageNumber=0;u32PageNumber<TEST_NUMBER;{SpiFlashx2_ReadData(DataBuffer0,DataBuffer1,u32FlashAddress,256);u32FlashAddress+=0x100;for(u32ByteCount=0;u32ByteCount<256;{while(1);/*VerifyError!*/while(1);/*VerifyError!*/}/*cleardatabufferfor(u32ByteCount=0;u32ByteCount<256;{DataBuffer0[u32ByteCount]=DataBuffer1[u32ByteCount]=}}return检查SPIFlash的MID和SPI检查SPIFlash的MID和SPI主机发送0x90命令到这两个SPIflash,读回各自的制造ID(MID)和设备ID(DID),检查读到的数据是否等于0xEF14,如果数据正确则NUC1xxSPI主机和两个flash从机连接成功。Rev.-10////ForW25Q16BV,ManufacturerID:0xEF;DeviceID:0x14voidSpiFlashx2_ReadMidDid(void){uint32_tau32SourceData[2];uint32_tau32DestinationData[2];/*configuretransactionlengthas8bits*/DrvSPI_SetBitLength(eDRVSPI_PORT2,8);/*/CS:activeDrvSPI_SetCS(eDRVSPI_PORT2,/*sendCommand:0x90,ReadManufacturer/DeviceID*/au32SourceData[0]=0x90;au32SourceData[1]=0x90;DrvSPI_BurstWrite(eDRVSPI_PORT2,&au32SourceData[0]);/*waitwhile(DrvSPI_Busy(eDRVSPI_PORT2))/*configuretransactionlengthas24bits*/DrvSPI_SetBitLength(eDRVSPI_PORT2,24);/*send24-bit'0',dummy*/au32SourceData[0]=0x0;au32SourceData[1]=0x0;DrvSPI_BurstWrite(eDRVSPI_PORT2,/*wait}Rev.Rev.-11while(DrvSPI_Busy(eDRVSPI_PORT2))/*configuretransactionlengthas16bits*/DrvSPI_SetBitLength(eDRVSPI_PORT2,16);/*receive*/au32SourceData[0]=0x0;au32SourceData[1]=DrvSPI_BurstWrite(eDRVSPI_PORT2,/*waitwhile(DrvSPI_Busy(eDRVSPI_PORT2))/*/CS:de-active*/DrvSPI_ClrCS(eDRVSPI_PORT2,eDRVSPI_SS0);/*dumpRxregisterDrvSPI_DumpRxRegister(eDRVSPI_PORT2,&au32DestinationData[0],/*checktheMIDandDIDif((au32DestinationData[0]&au32DestinationData[1]&0xffff)!=0xEF14)while(1);/*MID&DIDError*/}擦除SPISPI主机可擦除SPISPI主机可以发送0xC7命令到这两个SPIflash将其擦Rev.-12void{uint32_t/*configuretransactionlengthas8bits*/DrvSPI_SetBitLength(eDRVSPI_PORT2,8);/*/CS:activeDrvSPI_SetCS(eDRVSPI_PORT2,/*sendCommand:0x06,Writeenable*/au32SourceData[0]=0x06;au32SourceData[1]=0x06;DrvSPI_BurstWrite(eDRVSPI_PORT2,/*waitwhile(DrvSPI_Busy(eDRVSPI_PORT2))/*/CS:de-active*/DrvSPI_ClrCS(eDRVSPI_PORT2,eDRVSPI_SS0);/*/CS:activeDrvSPI_SetCS(eDRVSPI_PORT2,/*sendCommand:0xC7,ChipErase*/au32SourceData[0]=0xc7;au32SourceData[1]=0xc7;DrvSPI_BurstWrite(eDRVSPI_PORT2,/*waitwhile(DrvSPI_Busy(eDRVSPI_PORT2))Rev.Rev.-13/*/CS:de-active*/DrvSPI_ClrCS(eDRVSPI_PORT2,eDRVSPI_SS0);}读SPIFlash的状态读SPIFlash的状态寄存器SPI主机发送0x05命令到这两个SPIFlash可以读回各自的状态寄存器Rev.-14uint32_t{uint32_tau32SourceData[2];uint32_tau32DestinationData[2];/*configuretransactionlengthas16bits*/DrvSPI_SetBitLength(eDRVSPI_PORT2,16);/*/CS:activeDrvSPI_SetCS(eDRVSPI_PORT2,/*sendCommand:0x05,Readstatusregister1*/au32SourceData[0]=0x0500;au32SourceData[1]=0x0500;DrvSPI_BurstWrite(eDRVSPI_PORT2,/*waitwhile(DrvSPI_Busy(eDRVSPI_PORT2))/*/CS:de-active*/DrvSPI_ClrCS(eDRVSPI_PORT2,eDRVSPI_SS0);/*dumpRxregisterDrvSPI_DumpRxRegister(eDRVSPI_PORT2,&au32DestinationData[0],return((au32DestinationData[0]|au32DestinationData[1])&}检查SPIflash的BUSY检查SPIflash的BUSYSPI主机读回SPIflash状态寄存器1的值并检查SPIflash是否正Rev.-15void{uint32_tReturnValue=SpiFlash2_ReadStatusReg1();ReturnValue=ReturnValue&1;}while(ReturnValue!=0);//checktheBUSY}SPIFlash编SPI主机发送SPIFlash编SPI主机发送0x02命令到SPIflash,可以对其Rev.-16voidSpiFlashx2_PageProgram(uint8_t*DataBuffer,uint32_tStartAddress,uint32_t{uint32_tau32SourceData[2];uint32_tCounter;/*configuretransactionlengthas8bits*/DrvSPI_SetBitLength(eDRVSPI_PORT2,8);/*/CS:activeDrvSPI_SetCS(eDRVSPI_PORT2,/*sendCommand:0x06,Writeenable*/au32SourceData[0]=0x06;au32SourceData[1]=0x06;DrvSPI_BurstWrite(eDRVSPI_PORT2,/*waitwhile(DrvSPI_Busy(eDRVSPI_PORT2))/*/CS:de-active*/DrvSPI_ClrCS(eDRVSPI_PORT2,eDRVSPI_SS0);/*/CS:activeDrvSPI_SetCS(eDRVSPI_PORT2,/*sendCommand:0x02,Pageprogram*/au32SourceData[0]=0x02;au32SourceData[1]=0x02;DrvSPI_BurstWrite(eDRVSPI_PORT2,/*waitwhile(DrvSPI_Busy(eDRVSPI_PORT2))Rev.Rev.-17/*configuretransactionlengthas24bits*/DrvSPI_SetBitLength(eDRVSPI_PORT2,24);/*send24-bitstartaddress*/au32SourceData[0]=StartAddress;au32SourceData[1]=DrvSPI_BurstWrite(eDRVSPI_PORT2,/*waitwhile(DrvSPI_Busy(eDRVSPI_PORT2))/*configuretransactionlengthas8bits*/DrvSPI_SetBitLength(eDRVSPI_PORT2,8);for(Counter=0;Counter<ByteCount;{/*senddatatoprogram*/au32SourceData[0]=DataBuffer[Counter];au32SourceData[1]=DrvSPI_BurstWrite(eDRVSPI_PORT2,/*waitwhile(DrvSPI_Busy(eDRVSPI_PORT2))}/*/CS:de-active*/DrvSPI_ClrCS(eDRVSPI_PORT2,eDRVSPI_SS0);}从SPIFlashSPI主机发送从SPIFlashSPI主机发送0x03命令到SPIFlash可以Rev.-18voidSpiFlashx2_ReadData(uint8_t*DataBuffer0,uint8_t*DataBuffer1,uint32_tStartAddress,uint32_tByteCount){uint32_tau32SourceData[2];uint32_tau32DestinationData[2];uint32_tCounter;/*configuretransactionlengthas8bits*/DrvSPI_SetBitLength(eDRVSPI_PORT2,8);/*/CS:activeDrvSPI_SetCS(eDRVSPI_PORT2,/*sendCommand:0x03,Readdata*/au32SourceData[0]=0x03;au32SourceData[1]=0x03;DrvSPI_BurstWrite(eDRVSPI_PORT2,/*waitwhile(DrvSPI_Busy(eDRVSPI_PORT2))/*configuretransactionlengthas24bits*/DrvSPI_SetBitLength(eDRVSPI_PORT2,24);/*send24-bitstartaddress*/au32SourceData[0]=StartAddress;au32SourceData[1]=DrvSPI_BurstWrite(eDRVSPI_PORT2,/*waitwhile(DrvSPI_Busy(eDRVSPI_PORT2))/*configuretransactionlengthas8bitsRev.Rev.-19DrvSPI_SetBitLength(eDRVSPI_PORT2,for(Counter=0;Counter<ByteCount;{/*receive*/au32SourceData[0]=0x0;au32SourceData[1]=DrvSPI_BurstWrite(eDRVSPI_PORT2,/*waitwhile(DrvSPI_Busy(eDRVSPI_PORT2))/*dumpRxregisterDrvSPI_DumpRxRegister(eDRVSPI_PORT2,&au32DestinationData[0],2);DataBuffer0[Counter]=(uint8_t)au32DestinationData[0];DataBuffer1[Counter]=(uint8_t)au32DestinationData[1];}/*/CS:de-active*/DrvSPI_ClrCS(eDRVSPI_PORT2,eDRVSPI_SS0);}3调用顺综合SPI控制器和Rev.-203调用顺综合SPI控制器和Rev.-20NUC100设硬件初始化:使能12MHz晶振,设置HCLK时钟源及NUC100设硬件初始化:使能12MHz晶振,设置HCLK时钟源及其分配置I控制器2为主机,-tz整片擦除这两个SPIflash对这两个SPIFlash的第一页写入互补的数据从两个SPIFlash中读出数据并检查关闭SPI控制器有关的API参考SPIDriverReferenceRev.-21 运行环境设置及结 运行环境设置及结-Is,slE下载到x系列学习板,然后用户可以在E环境下执行代码,或者复位学习板运行片内h结Rev.-225修订历Rev.-23版5修订历Rev.-23版本日描1.初次发ImportantNuvotonproductsImportantNuvotonproductsarenotdesigned,intended,authorizedorwarrantedforuseascomponentsinsystemsorequipmentintendedforsurgicalimplantation,atomicenergycontrolinstruments,airplaneorspaceshipinstruments,transportationinstruments,trafficsignalinstruments,combustioncontrolinstruments,orforotherapplicationsintendedtosupportorsustainlife.Furthermore,NuvotonproductsarenotintendedforapplicationswhereinfailureofNuvotonproductscouldresultorleadtoasituationwhereinpersonalinjury,deathorseverepropertyorenvironmentaldamagecouldoccur.NuvotoncustomersusingorsellingtheseproductsforuseinsuchapplicationsdosoattheirownriskandagreetofullyindemnifyNuvotonforanydamagesresultingfromsuchimproperuseorsales.Pleasenotethatalldataandspecificationsaresubjecttochangewithoutnotice.Allt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论