void InitSci(void)
{
SciaRegs.SCICCR.bit.STOPBITS = 0; //设置为1个停止位
SciaRegs.SCICCR.bit.PARITYENA = 0; //禁止奇偶校验
SciaRegs.SCICCR.bit.LOOPBKENA = 0; //禁止回送测试模式功能
SciaRegs.SCICCR.bit.ADDRIDLE_MODE = 0; //只与PC上位机进行通信,因此选择空闲线模式协议
SciaRegs.SCICCR.bit.SCICHAR = 7; //选择数据的长度为8位
SciaRegs.SCICTL1.bit.TXENA = 1; //启动发送器工作
SciaRegs.SCICTL1.bit.RXENA = 1; //使能接收位
SciaRegs.SCIHBAUD = 0;
SciaRegs.SCILBAUD = 0xF3;//设置波特率为19200
SciaRegs.SCICTL1.bit.SWRESET = 1; //复位SCI模块
}
****************************************************************************/
#include "DSP28_Device.h"
unsigned int Sci_Result[100];//用于存放接收到的数据
unsigned int i;
unsigned int Send_Flag; //发送标志位。1:有数据需要发送 0:无数据需要发送
/****************************************************************************
*
*名 称:SciaTx_Ready()
*
*功 能:查询SCICTL2寄存器的TXRDY标志位,来确认发送准备是否就绪
*
*入口参数:无
*
*出口参数:i,即TXRDY的状态
* 1:发送准备已经就绪
* 0:发送准备尚未就绪
*
****************************************************************************/
int SciaTx_Ready()
{
unsigned int ans;
if(SciaRegs.SCICTL2.bit.TXRDY == 1)
{
ans = 1;
}
else
{
ans= 0;
}
return ans;
}
/****************************************************************************
*
*名 称:SciaRx_Ready()
*
*功 能:查询SCIRXST寄存器的RXRDY标志位,来确认接收准备是否就绪
*
*入口参数:无
*
*出口参数:i,即RXRDY的状态
* 1:接收准备已经就绪
* 0:接收准备尚未就绪
*
****************************************************************************/
int SciaRx_Ready()
{
unsigned int ans;
if(SciaRegs.SCIRXST.bit.RXRDY == 1)
{
ans = 1;
}
else
{
ans = 0;
}
return ans;
}
void main()
{
DINT;
IER = 0x0000;
IFR = 0x0000;
InitSysCtrl();
InitPieCtrl();
InitPieVectTable();
InitGpio();
InitPeripherals();
for(i=0;i<100;i++)
{
Sci_Result[i] = 0;
}
Send_Flag = 0;
i=0;
PieCtrl.PIEIER9.bit.INTx1 = 1; //使能PIE中断的接收中断
PieCtrl.PIEIER9.bit.INTx2 = 1; //使能PIE中断的发送中断
IER|=M_INT9;
EINT;
DRTM;
while(1);
}
interrupt void SCIRXINTA_ISR() // SCI-A接收中断函数
{
Sci_Result[i] = SciaRegs.SCIRXBUF.all;
Send_Flag = 1;
if(SciaTx_Ready() == 1)
{
SciaRegs.SCITXBUF = Sci_Result[i];
}
PieCtrl.PIEACK.all = PIEACK_GROUP9;
//EINT;
}
interrupt void SCITXINTA_ISR() // SCI-A发送中断函数
{
if(Send_Flag == 1)
{
Send_Flag = 0;
i++;
if(i==100)
{
i=0;
}
}
PieCtrl.PIEACK.all = PIEACK_GROUP9;
//EINT;
} |