應(yīng)用指南位cortexm0單片機(jī)numicr教程_第1頁
應(yīng)用指南位cortexm0單片機(jī)numicr教程_第2頁
應(yīng)用指南位cortexm0單片機(jī)numicr教程_第3頁
應(yīng)用指南位cortexm0單片機(jī)numicr教程_第4頁
應(yīng)用指南位cortexm0單片機(jī)numicr教程_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

目1簡 概 性 結(jié) 目1簡 概 性 結(jié) SPI應(yīng)用框 2-Bit模式下的Tx/Rx寄存器和I/O 2-Bit傳送模式時(shí)序 2代碼部 主函 檢查SPIFlash的MID和 擦除SPI 讀SPIFlash的狀態(tài)寄存器 檢查SPIflash的BUSY SPIFlash編 從SPIFlash讀數(shù) 3調(diào)用順 綜合SPI控制器和SPI NUC100設(shè) 有關(guān)的API參考 4運(yùn)行環(huán)境設(shè)置及結(jié) 測試 結(jié) 5修訂歷 Rev.-11簡本文檔描述了怎樣使用NUC1xx系列芯片SPI控1簡本文檔描述了怎樣使用NUC1xx系列芯片SPI控制器的2-bit模概本文中,I2-t主機(jī),使用2個(gè)IahW5,華邦ps)I主機(jī)使用串行時(shí)鐘(Cx),一個(gè)從機(jī)選擇(Sx0)以及2通道數(shù)據(jù)輸入/輸出(MO0,xIs。性可配置最大傳輸字1~32位,一次可傳輸1~2MSBLSB在前傳支持傳送和接收Rev.-2 結(jié)下圖描述了SPI控制器模塊圖。SPICLKx是SPI主機(jī)的串行時(shí)鐘,在主機(jī)模式下SPISSx0和SPISSx1xx0x1和MO1和MISOx0引腳組合成1SPIRev.-3Core TX 結(jié)下圖描述了SPI控制器模塊圖。SPICLKx是SPI主機(jī)的串行時(shí)鐘,在主機(jī)模式下SPISSx0和SPISSx1xx0x1和MO1和MISOx0引腳組合成1SPIRev.-3Core TX RX 2-ClockSPI應(yīng)用框下圖是應(yīng)用框圖,我們設(shè)定NUC100的SPI控制器2(SPI2)作為SPI2-bit模式主機(jī),SPICLK2是主SPI應(yīng)用框下圖是應(yīng)用框圖,我們設(shè)定NUC100的SPI控制器2(SPI2)作為SPI2-bit模式主機(jī),SPICLK2是主機(jī)用與兩個(gè)SPIflash收發(fā)數(shù)據(jù)的時(shí)鐘信號,SPISS20是SPI主機(jī)的從機(jī)選擇輸出,MISO20和第一通道接到SPIflash0,MISO21和MOSI21組成第二通道接到SPIflash1。MOSI20組2SPI2-Bit傳送模式應(yīng)用框Rev.-4 (SPI2SPI-Flash SPI-Flash 2-Bit模式下的Tx/Rx寄存器和I/O在2-Bit模式中一次傳送只能收發(fā)32位長度數(shù)據(jù),MOSIx02-Bit模式下的Tx/Rx寄存器和I/O在2-Bit模式中一次傳送只能收發(fā)32位長度數(shù)據(jù),MOSIx0和MISOx0引腳組成通道0,從SPI_Tx0寄存器發(fā)送數(shù)據(jù),用SPI_Rx0接收數(shù)據(jù)。MOSIx1和MISOx1引腳組成通道1,從SPI_Tx1寄存器發(fā)送數(shù)據(jù),Rev.-52-Bit傳送模式時(shí)序下圖描述SPI2-Bit傳送模式時(shí)序圖2-Bit傳送模式時(shí)Rev.-62-Bit傳送模式時(shí)序下圖描述SPI2-Bit傳送模式時(shí)序圖2-Bit傳送模式時(shí)Rev.-6 代碼部主函 代碼部主函主函數(shù)中首先檢查了這2個(gè)SPIflash的MID和DID,然后擦除這2個(gè)flash,接著寫數(shù)據(jù)0x00~0xff到的第一頁,寫數(shù)據(jù)0xff~0x00到flash1的第一頁,最后驗(yàn)證2個(gè)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主機(jī)發(fā)送0x90命令到這兩個(gè)SPIflash,讀回各自的制造ID(MID)和設(shè)備ID(DID),檢查讀到的數(shù)據(jù)是否等于0xEF14,如果數(shù)據(jù)正確則NUC1xxSPI主機(jī)和兩個(gè)flash從機(jī)連接成功。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主機(jī)可擦除SPISPI主機(jī)可以發(fā)送0xC7命令到這兩個(gè)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的狀態(tài)讀SPIFlash的狀態(tài)寄存器SPI主機(jī)發(fā)送0x05命令到這兩個(gè)SPIFlash可以讀回各自的狀態(tài)寄存器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主機(jī)讀回SPIflash狀態(tài)寄存器1的值并檢查SPIflash是否正Rev.-15void{uint32_tReturnValue=SpiFlash2_ReadStatusReg1();ReturnValue=ReturnValue&1;}while(ReturnValue!=0);//checktheBUSY}SPIFlash編SPI主機(jī)發(fā)送SPIFlash編SPI主機(jī)發(fā)送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主機(jī)發(fā)送從SPIFlashSPI主機(jī)發(fā)送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調(diào)用順綜合SPI控制器和Rev.-203調(diào)用順綜合SPI控制器和Rev.-20NUC100設(shè)硬件初始化:使能12MHz晶振,設(shè)置HCLK時(shí)鐘源及NUC100設(shè)硬件初始化:使能12MHz晶振,設(shè)置HCLK時(shí)鐘源及其分配置I控制器2為主機(jī),-tz整片擦除這兩個(gè)SPIflash對這兩個(gè)SPIFlash的第一頁寫入互補(bǔ)的數(shù)據(jù)從兩個(gè)SPIFlash中讀出數(shù)據(jù)并檢查關(guān)閉SPI控制器有關(guān)的API參考SPIDriverReferenceRev.-21 運(yùn)行環(huán)境設(shè)置及結(jié) 運(yùn)行環(huán)境設(shè)置及結(jié)-Is,slE下載到x系列學(xué)習(xí)板,然后用戶可以在E環(huán)境下執(zhí)行代碼,或者復(fù)位學(xué)習(xí)板運(yùn)行片內(nèi)h結(jié)Rev.-225修訂歷Rev.-23版5修訂歷Rev.-23版本日描1.初次發(fā)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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論