使用查询方式
#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;
}