📄 spi.txt
字号:
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_Examples.h" // DSP281x Examples Include File
#define SCI_IO 0x0030
//void delay_loop(void);
void spi_xmit(Uint16 a);
void spi_fifo_init(void);
void spi_init(void);
void error(void);
void Scib_init(void);
void Scib_xmit(int a);
void main(void)
{ Uint16 sdata; // send data
Uint16 rdata; // received data
InitSysCtrl();
EALLOW;
GpioMuxRegs.GPFMUX.all=0x000F; // Select GPIOs to be SPI pins
GpioMuxRegs.GPGMUX.all|=SCI_IO; //SCIB口功能口
EDIS;
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
PieCtrlRegs.PIECRTL.bit.ENPIE = 1; // Enable the PIE block
PieCtrlRegs.PIEIER9.bit.INTx3=1; // PIE Group 9, INT3
IER = 0x101; // Enable CPU INT
EINT;
ERTM; // 允许DEBUG中段
Scib_init();
spi_fifo_init(); // Initialize the Spi FIFO
spi_init(); // init SPI
/*while(SpiaRegs.SPIFFRX.bit.RXFFST >0)
rdata = SpiaRegs.SPIRXBUF;
sdata = 0x0000;*/
for(;;)
{
spi_xmit(0x01);
while(SpiaRegs.SPIFFRX.bit.RXFFST ==0 ) { }
rdata = SpiaRegs.SPIRXBUF;
if(rdata != sdata) error();
Scib_xmit(rdata);
}
}
/*void delay_loop()
{
long i;
for (i = 0; i < 1000000; i++) {}
}*/
void error(void)
{
asm(" ESTOP0"); // Test failed!! Stop!
for (;;);
}
void Scib_xmit(int a)
{
ScibRegs.SCITXBUF=(a&0xff); //发送数据缓冲寄存器
while(ScibRegs.SCICTL2.bit.TXRDY!=1){}; //发送缓冲寄存器准备好标志位
}
void spi_xmit(Uint16 a)
{
SpiaRegs.SPITXBUF=a;
while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG==1) { }
}
void Scib_init(void)
{
ScibRegs.SCIFFTX.all =0xE040; //允许接收,使能FIFO,没有FIFO中断
//清除TXFIFINT,
ScibRegs.SCIFFRX.all =0x2021; //使能FIFO接收,清除RXFFINT,16级FIFO
ScibRegs.SCIFFCT.all =0x0000; //禁止波特率校验
ScibRegs.SCICCR.all =0x0007; //1个停止位,无校验,禁止自测试,
//空闲地址模式,字长8位
ScibRegs.SCICTL1.all =0x0003; //复位
ScibRegs.SCICTL2.all =0x0003;
ScibRegs.SCIHBAUD =0x0001; //设定波特率9600bps
ScibRegs.SCILBAUD =0x00E7; //设定波特率9600bps
ScibRegs.SCICTL1.all =0x0023; //退出RESET
}
void spi_init()
{
SpiaRegs.SPICCR.all =0x000F; // 复位,上升沿有效,16位数据
SpiaRegs.SPICTL.all =0x0006; // 主模式, 使能发送,SPI禁止中断
SpiaRegs.SPIBRR =0x007F; // SPICLK=37.5M/(127+1)
SpiaRegs.SPICCR.all =0x008F; // 退出复位,禁止内部连接
SpiaRegs.SPIPRI.bit.SOFT = 1; // 自由运行
SpiaRegs.SPIPRI.bit.FREE = 1; // 自由运行
}
void spi_fifo_init()
{
SpiaRegs.SPIFFTX.all=0xE040;
SpiaRegs.SPIFFRX.all=0x204f;
SpiaRegs.SPIFFCT.all=0x0;
}
//===========================================================================
// No more.
//===========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -