/*SCI的回送测试模式下的通信*/
主函数部分
#include"DSP28_Device.h"
unsigned int Sci_VarRx[10]; //用于存放接到的数据
unsigned int i,a;
void main(void)
{
InitSysCtrl();
DINT;
IER=0x0000;
IFR=0x0000;
InitPieCtrl();
InitPieVectTable();
InitGpio();
InitSci();
for(i=0;i<100;i++)
{
Sci_VarRx[i] =0;
}
i=0;
for(;;)
{
//查询方式实现发送功能
if(SciaTx_Ready()==1)//发送准备已经就绪而且有数据需要发送
{
SciaRegs.SCITXBUF=Sci_VarRx[i]; //发送数据
i++;
if(i==100)
{
i=0;
}
}
for(a=0;a<1000;a++)
NOP;
//查询方式实现接收功能
if(SciaRx_Ready()==1)
{
Sci_VarRx[i]=SciaRegs.SCIRXBUF.all+1; //接收数据
}
}
}
void InitGpio(void)
{
EALLOW;
GpioMuxRegs.GPFMUX.bit.SCIRXDA_GPIOF5=1;//设置SCIA的接受引脚
GpioMuxRegs.GPFMUX.bit.SCITXDA_GPIOF4=1;//设置SCIB的发送引脚
EDIS;
}
void InitSci(void)
{
SciaRegs.SCICCR.bit.STOPBITS=0; //1位停止位
SciaRegs.SCICCR.bit.PARITYENA=0; //禁止极性功能
SciaRegs.SCICCR.bit.LOOPBKENA=1; //使能回送测试模式功能
SciaRegs.SCICCR.bit.ADDRIDLE_MODE=0; //空闲线模式
SciaRegs.SCICCR.bit.SCICHAR=7; //8位数据位
SciaRegs.SCICTL1.bit.TXENA=1; //SCIA模块的发送使能
SciaRegs.SCICTL1.bit.RXENA=1; //SCIA模块的接受使能
SciaRegs.SCIHBAUD=0;
SciaRegs.SCILBAUD=0xF3; //波特率为19200
SciaRegs.SCICTL1.bit.SWRESET=1; //重启SCI
}
/*===========================================================================
查询SCICTL2寄存器的TXRDY标志位,来确认发送准备是否就绪
入口参数:无
出口参数:i,即TXRDY的状态。1 发送准备已经就绪;0 发送准备尚未就绪
*==========================================================================*/
int SciaTx_Ready(void)
{
unsigned int j;
if(SciaRegs.SCICTL2.bit.TXRDY==1)
{
j=1;
}
else
{
j=0;
}
return(j);
}
/********************************************************************************
查询SCIRXST寄存器的RXRDY标志位,来确认接受准备是否就绪
入口参数:无
出口参数:i,即RXRDY的状态。 1 接受准备已经就绪; 0 接受准备尚未就绪
*********************************************************************************/
int SciaRx_Ready(void)
{
unsigned int j;
if(SciaRegs.SCIRXST.bit.RXRDY==1)
{
j=1;
}
else
{
j=0;
}
return(j);
}
|