我用串口助手与DSP通讯 但是发现没有返回值 接收到的值也不对 这是我的接收发送 希望得到前辈帮助 感谢
USART_RX_STA(串口接收中断标志位---16位)
__interrupt void sciaRxFifoIsr(void)
/*
bit15:帧尾2--0xfd--USART_RX_STA & 0x8000--也是接收完成标志-
bit14: 帧头---0xfd--USART_RX_STA & 0x4000
bit13: 帧尾1--0xfc--USART_RX_STA & 0x2000
bit[12:0]: 存储一次接收的数据字节数,其最大为0x1fff
串口通信协议:数据帧格式为:帧头+字符串数据+帧尾1+帧尾2
本程序中实际格式为:0xfd+..........+0xfc +0xfd
*/
Uint8 Res;
Res = SciaRegs.SCIRXBUF.all; //读取接收到的数据
if(USART_RX_STA & 0x8000) //判断是否接收到 帧尾2,即是否接收完成一帧数据
{ //如果接收 帧尾2,在USART_RX_STA标志位没有清零时,不执行任何操作
}
else //如果没有接收 帧尾2,则执行下面程序
{
if(USART_RX_STA & 0x2000) //判断是否接收到 帧尾1
{
if(Res == 0xfd) //判断本次接收字符是否为 帧尾2--0x8000
{
USART_RX_STA |= 0x8000; //如果本次接收数据为 帧尾2,则表明本次数据接收完成,置位接收完成标志位
USART_RX_BUF[USART_RX_STA & 0x1fff] = '\0'; //并在接收到的字符数组后面添加字符串结束标志,即把接收到的所有字符组成一个字符串
}
else
{
USART_RX_STA = 0; //在接收到帧尾1后,没有接收到帧尾2,则表明数据接收出错,清除标志位,重新接收串口中断数据
}
}
else
{
if(USART_RX_STA & 0x4000) //在没有接收到帧尾1前提下,通过标志位判断是否接收到帧头
{
if(Res == 0xfc) //如果接收到帧头,则在判断本次接收到的数据是否为 帧尾1--0x2000
{
USART_RX_STA |= 0x2000; //如果本次接收到的字节数据是 帧尾1,则置位标志位
}
else //如果接收到帧头,而本次接收的字节数据不是 帧尾1,那么就是我们要的数据了
{
USART_RX_BUF[USART_RX_STA & 0x1fff] = Res;//将数据存储在缓存中
USART_RX_STA++; //利用标志位低13位存储缓存的数据字节数
}
}
else
{
if(Res == 0xfd) //如果之前没有接收到帧头,则判断本次接收到的字节数据是否为帧头 --0x4000
{
USART_RX_STA |= 0x4000; //如果是帧头,则置位标志位
}
else
{
USART_RX_STA = 0; //否则,清除标志位,重新接收
}
}
}
}
__interrupt void sciaTxFifoIsr(void)
{
Uint16 i;
for(i=0; i< 1; i++)
{
SciaRegs.SCITXBUF=sdataA[i]; // Send data
}
for(i=0; i< 1; i++) //Increment send data for next cycle
{
sdataA[i] = (sdataA[i]+1) & 0x00FF;
}
//SciaRegs.SCIFFTX.bit.TXFFIENA = 0;
SciaRegs.SCIFFTX.bit.TXFFINTCLR=1; // Clear SCI Interrupt flag
PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ACK
} |