您好,欢迎访问三七文档
NuMicroCortex-M0SPI议题特性方块图功能描述应用示例特性四组SPI控制器支持主/从操作模式,主模式最高速度可达20Mbps@5V(16M@3.3V),从模式时最高速度可以达到10Mbps(不能超过HCLK频率的1/5)支持1通道或者2通道串行数据IN/OUT每笔传输长度可配置,最大32比特提供突发操作模式,一次收/发最多可以传输2个word,也就是两笔MSB或者LSB优先传输主模式提供2个从设备片选信号线,从模式时只有一个从设备片选支持ByteSleep和Wordsleep支持DMA收/发方块图APBIF(32-bits)DMAClockGeneratorStatus/ControlRegisterCoreLogicTXBufer/ShifterRXBufer/ShifterTXBufer/ShifterRXBufer/ShifterPIOMISOx1MOSIx1MISOx0MOSIx0SPICLKxSPISSx0SPISSx1APB1-channel2-channels主/从模式SLAVE(SPI_CNTRL[18])比特:设定SPI控制器为主或者从模式.SLAVE=1,从模式.SLAVE=0,主模式..NUC100(SPISlave)SPICLKMISOMOSISPISSx0SPISSx1SCLKMISOMOSISSMasterNUC100(SPIMaster)SPICLKMISOMOSISPISSx0SPISSx1SCLKMISOMOSISSSlave0SCLKMISOMOSISSSlave1MasterSlave从设备片选主模式:SPISSx0和SPISSx1输出.SS_LVL(SPI_SSR[2]):Low或者highactive或者edgeactive.从模式:SPISSx0输入.SS_LTRIG(SPI_SSR[4]):Level或者edgetrigger.SS_LVL(SPI_SSR[2]):Low/highlevel或者failing/risingedgeactive.level-trigger模式下,只要收到active-inactive的信号变化,slave就会认为收到了一个byte;edge-trigger模式下,则一定要收到两个edge才会认为收到了一个byteSPISSSPISSLowHighSPISSSPISSLevelEdge自动从设备选择ASS(SPI_SSR[3])比特:可以配置SPISSx0和SPISSx1上的从设备片选信号自动产生.只用于主模式.ASS=1,在设定GO_BUSY比特的时候片选自动有效,数据传输完成之后自动取消选定.ASS=0,通过设定SPI_SSR[1:0]寄存器,手动设定/清除片选信号.串行时钟主模式:DIVIDER(SPI_DIVIDER[15:0]):设定SPICLK的输出频率.从模式:片外主设备驱动串行时钟,通过SPICLK输入到SPI控制器时钟极性CLKP(SPI_CNTRL[11])比特:定义串行时钟idle状态.CLKP=1,空闲时SPICLK高.CLKP=0,空闲时SPICLK低.SPICLKCLKP=0CLKP=1IdleHighIdleLow收/发比特长度Tx_BIT_LEN(SPI_CNTRL[7:3])比特:定义一次传输的比特长度.0x00:一次传输32比特长.0x01~0x1f:一次传输1~31比特长32bits/wordSPICLKMOSIMISOTx0[30]Tx0[16]Tx0[15]Tx0[14]LSBTx0[0]MSBTx0[31]Rx0[30]Rx0[16]Rx0[15]Rx0[14]LSBRx0[0]MSBRx0[31]SPISS收/发次数Tx_NUM(SPI_CNTRL[9:8])比特:定义一次传输收/发的次数.0x00:收/发一次.(单次模式)0x01:收发两次.(突发模式)0x1x:预留.SPISSSPICLKMISOMOSITx0[30]Tx0[0]Tx1[31]Tx1[30]LSBTx1[0]MSBTx0[31]Rx0[30]Rx0[0]Rx1[31]Rx1[30]LSBRx1[0]MSBRx0[31]1stTransferWord2ndTransferWord2WordsLSB优先LSB(SPI_CNTRL[10])比特:定义数据传输LSB优先还是MSB优先.LSB=1,LSB优先.LSB=0,MSB优先.MSBfirstSPICLKMOSIMISOTx0[30]Tx0[16]Tx0[15]Tx0[14]LSBTx0[0]MSBTx0[31]Rx0[30]Rx0[16]Rx0[15]Rx0[14]LSBRx0[0]MSBRx0[31]SPISS发送沿Tx_NEG(SPI_CNTRL[2])比特:定义发送数据在SPICLK的上升沿还是下降沿.Tx_NEG=1,下降沿.Tx_NEG=0,上升沿.SPICLKMOSISPICLKMOSITx0[30]Tx0[16]Tx0[15]Tx0[14]LSBTx0[0]MSBTx0[31]Tx0[30]Tx0[16]Tx0[15]Tx0[14]LSBTx0[0]MSBTx0[31]NegativePositive接收沿Rx_NEG(SPI_CNTRL[1])比特:定义接收数据在SPICLK的上升沿还是下降沿.Rx_NEG=1,下降沿.Rx_NEG=0,上升沿.SPICLKSPICLKMISORx0[30]Rx0[16]Rx0[15]Rx0[14]LSBRx0[0]MSBRx0[31]MISORx0[30]Rx0[16]Rx0[15]Rx0[14]LSBRx0[0]MSBRx0[31]NegativePositiveSPIWaveformCLKP,Tx_NEG,Rx_NEG3个bit可以组合成8种type的waveformContMaster/SlaveTransferTypeMatchingTableDRVSPI_TYPE0==DRVSPI_TYPE3DRVSPI_TYPE1==DRVSPI_TYPE1DRVSPI_TYPE2==DRVSPI_TYPE2DRVSPI_TYPE3==DRVSPI_TYPE0DRVSPI_TYPE4==DRVSPI_TYPE7DRVSPI_TYPE5==DRVSPI_TYPE5DRVSPI_TYPE6==DRVSPI_TYPE6DRVSPI_TYPE7==DRVSPI_TYPE4WordSleepSuspendSLEEP(SPI_CNTRL[15:12])比特:提供一个可配置的挂起间隔:连续两次传输之间,2~17个串行时钟周期间隔.只用于主模式.0x00~0x0f:2~17个串行时钟周期.Tx_NUM=0x00,单次模式不起作用.WordSleepSPISSSPICLKMISOMOSITx0[30]Tx0[0]Tx1[31]Tx1[30]LSBTx1[0]MSBTx0[31]Rx0[30]Rx0[0]Rx1[31]Rx1[30]LSBRx1[0]MSBRx0[31]1stTransferWord2ndTransferWordByteSleepSuspendBYTE_SLEEP(SPI_CNTRL[19]):0x00~0x0f:2~17SPICLK.只用于32比特长(word).SPISSSPICLKMISOMOSITx0[30]Tx0[24]Tx0[23]Tx0[22]Tx0[16]MSBTx0[31]Rx0[30]Rx0[24]Rx0[23]Rx0[22]Rx0[16]MSBRx0[31]1stTransferByte2ndTransferByteByteSleepREORDERREORDER(SPI_CNTRL[20:19]):TX/RX缓存中的数据将被重新排列.只应用于MSBfirst中断IF(SPI_CNTRL[16]):=1,数据传输完成.写1清除.IE(SPI_CNTRL[17]):=1,使能SPI中断.Two-Bits传输模式TWOBbit(SPI_CNTRL[22]):Singlewordtransferonly,notsupportinburstmodetransferSPI_Tx0SPI_Rx0MOSIx0MISOx0SPI_Tx1SPI_Rx1MOSIx1MISOx1SPI_Tx0SPI_Rx0MOSIx0MISOx0SPI_Tx1SPI_Rx1MOSIx1MISOx1MastermodeSlavemodeI/Ochannel0I/Ochannel1一通道主模式应用方块图NUC100(SPIMaster)SPICLKMISOMOSISPISSx0SPISSx1SCLKMISOMOSISSSlave0SCLKMISOMOSISSSlave12SlaveSelect一通道从模式应用方块图NUC100(SPISlave)SPICLKMISOMOSISPISSx0SPISSx1SCLKMISOMOSISSMasterSPIClockSlaveSelectTwo-Bits主模式应用方块图NUC100(SPIMaster)SPICLKMISOx0MOSIx0SPISSx0SPISSx1SCLKMISOMOSISSSlave0SCLKMISOMOSISSSlave1MISOx1MOSIx1Channel0Channel1Two-Bits主模式时序图SPICLKMOSIx0MISOx0Tx0[30]Tx0[16]Tx0[15]Tx0[14]LSBTx0[0]MSBTx0[31]Rx0[30]Rx0[16]Rx0[15]Rx0[14]LSBRx0[0]MSBRx0[31]CLKP=0CLKP=1SPISSSS_LVL=1SS_LVL=0MOSIx1MISOx1Tx1[30]Tx1[16]Tx1[15]Tx1[14]LSBTx1[0]MSBTx1[31]Rx1[30]Rx1[16]Rx1[15]Rx1[14]LSBRx1[0]MSBRx1[31]Channel0Channel1SPI示例代码(1/4)测试条件SPI0是Master从设备片选使用SPISSx0lowactive并且使能自动片选功能单次传输,16比特长下降沿发送数据上升沿接收数据比特率是1MHz使能SPI0中断SPI示例代码(2/4)voidSPI0_Callback(uint32_tu32UserData);volatileuint32_tSPI0_INT_Flag;intmain(void){uint32_tau32SourceData,au32DestinationData;/*Unlocktheprotectedregisters*/UNLOCKREG();/*Enablethe12MHzoscillatoroscillation*/DrvSYS_SetOscCtrl(E_SYS_XTL12M,1);/*HCLKclocksource.0:external12MHz;4:internal22MHzRCoscillator*/DrvSYS_SetHCLKSource(0);/*Locktheprotectedregisters*/LOCKREG();/*HCLKclockfrequency=HCLKclocksource/(HCLK_N+1)*/DrvSYS_SetClockDivider(E_SYS_HCLK_DIV,0);写寄存器初始化HCLKSPI示例代码(3/4)/*ConfigureSPI0asamaster,type-5waveform,16-bittransaction*/DrvSPI_Open(eDRVSPI_PORT0,eDRVSPI_MASTER,eDRVSPI_TYPE5,16);/*EnabletheautomaticslaveselectfunctionofSS0.*/DrvSPI_EnableAutoCS(eDRVSPI_PORT0,eDRVSPI_SS0);/*Settheactivelev
本文标题:3_SPI
链接地址:https://www.777doc.com/doc-3220076 .html