DSP

F28335 SPI 自发自收

2019-07-13 11:15发布

使用查询方式

#include "DSP2833x_Project.h" void Spi_xmit(Uint16 a); void Init_Spi(void); Uint16 rdata; Uint16 tdata; int main(void) { InitSysCtrl(); InitSpiaGpio(); DINT; InitPieCtrl(); IFR = 0x0000; IER = 0x0000; InitPieVectTable(); Init_Spi(); tdata = 0x0000; while(1){ Spi_xmit(tdata); rdata = SpiaRegs.SPIRXBUF; tdata ++; } return 0; } void Init_Spi(void) { EALLOW; SpiaRegs.SPICCR.all = 0x001F; //1F自测模式,0F主从交互模式 SpiaRegs.SPICTL.all = 0x0006; //06不开中断,07开中断 SpiaRegs.SPIBRR = 0x001D; SpiaRegs.SPICCR.bit.SPISWRESET = 1; SpiaRegs.SPIPRI.bit.FREE = 1; EDIS; } void Spi_xmit(Uint16 a){ SpiaRegs.SPITXBUF = a; }

使用中断方式 

#include "DSP2833x_Project.h" void Spi_xmit(Uint16 a); void Init_Spi(void); void SpiRxIsr(void); Uint16 rdata; Uint16 tdata; int main(void) { InitSysCtrl(); InitSpiaGpio(); DINT; InitPieCtrl(); IFR = 0x0000; IER = 0x0000; InitPieVectTable(); Init_Spi(); EALLOW; PieVectTable.SPIRXINTA = &SpiRxIsr; EDIS; IER |= M_INT6; PieCtrlRegs.PIEIER6.bit.INTx1 = 1; EINT; ERTM; tdata = 0x0000; while(1){ Spi_xmit(tdata); tdata ++; DELAY_US(1000000); } return 0; } void Init_Spi(void) { EALLOW; SpiaRegs.SPICCR.all = 0x001F; SpiaRegs.SPICTL.all = 0x0007; //0006没开中断,0007开了中断 SpiaRegs.SPIBRR = 0x001D; SpiaRegs.SPICCR.bit.SPISWRESET = 1; SpiaRegs.SPIPRI.bit.FREE = 1; EDIS; } void Spi_xmit(Uint16 a){ SpiaRegs.SPITXBUF = a; } interrupt void SpiRxIsr(void){ rdata = SpiaRegs.SPIRXBUF; PieCtrlRegs.PIEACK.bit.ACK6 = 1; }

使用查询加FIFO方式 

#include "DSP2833x_Project.h" void Spi_xmit(Uint16 a); void Init_Spi(void); Uint16 rdata; Uint16 tdata; int main(void) { InitSysCtrl(); InitSpiaGpio(); DINT; InitPieCtrl(); IFR = 0x0000; IER = 0x0000; InitPieVectTable(); Init_Spi(); tdata = 0x0000; while(1){ Spi_xmit(tdata); while(SpiaRegs.SPIFFRX.bit.RXFFST != 1); rdata = SpiaRegs.SPIRXBUF; tdata ++; } return 0; } void Init_Spi(void) { EALLOW; SpiaRegs.SPICCR.all = 0x001F; //001F是自发自收,000F是和从机交互 SpiaRegs.SPICTL.all = 0x0006; SpiaRegs.SPIBRR = 0x001D; SpiaRegs.SPICCR.bit.SPISWRESET = 1; SpiaRegs.SPIPRI.bit.FREE = 1; SpiaRegs.SPIFFTX.all = 0xE040; SpiaRegs.SPIFFRX.all = 0x204F; SpiaRegs.SPIFFCT.all = 0x0; EDIS; } void Spi_xmit(Uint16 a){ SpiaRegs.SPITXBUF = a; }