今天学习sci 自己想写一个scia的自测模式 没有使用fifo功能 可是调试了很长时间都没有实现自回归测试 看寄存器是数据没有发送
程序如下 希望各位帮忙看一下 谢谢
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
/*------------------------端口宏定义---------------------------*/
/*------------------------常量宏定义---------------------------*/
/*------------------------全局变量定义--------------------------*/
Uint16 errdata=0;
Uint16 sdata=0x0001;
Uint16 rdata;
/*------------------------函数声明- ---------------------------*/
void Init_Sci(void);
void Init_Fifo(void);
void Sci_xmit(Uint16 a);
void error(void);
void main(void) {
InitSysCtrl();
//reference led
EALLOW;
GpioCtrlRegs.GPBMUX2.bit.GPIO60=0;//
GpioCtrlRegs.GPBDIR.bit.GPIO60=1;//输出
GpioDataRegs.GPBDAT.bit.GPIO60=0;
EDIS;
Init_Sci();
Init_Fifo();
while(1)
{
Sci_xmit(sdata);
while(SciaRegs.SCIRXST.bit.RXRDY!=1) {} //cpu等待直到接收寄存器告诉它 我已经收到了 你可以来读取了
rdata=SciaRegs.SCIRXBUF.all;
if(rdata!= sdata) error();
sdata++;
}
}
void Init_Sci(void)
{
//footpin
EALLOW;
GpioCtrlRegs.GPBPUD.bit.GPIO36 = 0; //使能内部的上拉功能
GpioCtrlRegs.GPBPUD.bit.GPIO35 = 0;
GpioCtrlRegs.GPBQSEL1.bit.GPIO35 = 3;
GpioCtrlRegs.GPBQSEL1.bit.GPIO36 = 3; // Asynch input GPIO28 (SCIRXDA)
GpioCtrlRegs.GPBMUX1.bit.GPIO36 = 1; // Configure GPIO36 for SCIRXDA operation
GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 1; // Configure GPIO35 for SCITXDA operation
EDIS;
//SciaRegs.SCICTL1.bit.SWRESET=0;//复位
SciaRegs.SCICTL1.bit.RXERRINTENA=0;
SciaRegs.SCICTL1.bit.TXWAKE=0;
SciaRegs.SCICTL1.bit.SLEEP=0;
//通信格式
SciaRegs.SCICCR.bit.STOPBITS=0;
SciaRegs.SCICCR.bit.PARITYENA=0;
SciaRegs.SCICCR.bit.ADDRIDLE_MODE=0;
SciaRegs.SCICCR.bit.SCICHAR=7;
//bad configure
SciaRegs.SCIHBAUD=0x01;
SciaRegs.SCILBAUD=0xe7;
//interrupt configure forbid
SciaRegs.SCICTL2.bit.RXBKINTENA=1;
SciaRegs.SCICTL2.bit.TXINTENA=1;
SciaRegs.SCICCR.bit.LOOPBKENA=1;
SciaRegs.SCICTL1.bit.RXENA=1;
SciaRegs.SCICTL1.bit.TXENA=1;
SciaRegs.SCICTL1.bit.SWRESET=1;
}
void Init_Fifo(void)
{
SciaRegs.SCIFFTX.all=0x800;
}
void Sci_xmit(Uint16 a)
{
while(SciaRegs.SCICTL2.bit.TXRDY==0) {}
SciaRegs.SCITXBUF=a;
}
void error(void)
{
errdata++;
asm(" ESTOP0"); // Test failed!! Stop!
for (;;);
}