TI中文支持网
TI专业的中文技术问题搜集分享网站

关于28027F串口接收中断的问题

unsigned char Msg_Tx_Buf[10] = {0x55, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

interrupt void sciARxISR(void)
{
HAL_Obj *obj = (HAL_Obj *)halHandle;
float temp = 0;
unsigned char loop = 2;

Msg_Rx_Buf[ ++RX_Data_counter] = halHandle->sciAHandle->SCIRXBUF;
PIE_clearInt(obj->pieHandle,PIE_GroupNumber_9);

if((RX_Data_counter == 0) & (Msg_Rx_Buf[0] != 0xAA))
{
RX_Data_counter = 0;

return;
}
if((RX_Data_counter == 1) & (Msg_Rx_Buf[1] != 0x55))
{
RX_Data_counter = 0;
return;
}
if(RX_Data_counter >= 9)
{
//第一步:清零操作
RX_Data_counter = 0;
SCI_disableRxInt(halHandle->sciAHandle);
SCI_disableRx(halHandle->sciAHandle);

for( ; loop < 9; loop ++)
{
Rx_Num_Check += Msg_Rx_Buf[loop];
}

if((Msg_Rx_Buf[0] == 0xAA) & (Msg_Rx_Buf[1] == 0x55) & Msg_Rx_Buf[9] == (Rx_Num_Check & 0x00FF)) //检查校验和
{

Rx_Num_Check = 0;
Rx_Flag = 0;

SCI_TxMsg(Msg_Tx_Buf, 10);
}
SCI_enableRx(halHandle->sciAHandle);
SCI_enableRxInt(halHandle->sciAHandle);

}
} // end of sciARxISR() function

这是我的中断程序,设计用这个程序接收十个数据然后处理,在调试的过程中发现,在接收数据多余十个或者少于十个的时候就会不正常,一次发送给DSP数据多余十个时,DSP发个上位机的数据和Msg_Tx_Buf里的数据不一样,在程序里没有对Msg_Tx_Buf进行过任何操作;

在发送数据持续几次大于十个时,接收中断就在也进不来了,但是其他中断正常,在其他中断里发送数据上位机也可以接收到,而且接收到的数据和Msg_Tx_Buf中内容一致

Green Deng:你好,建议先根据例程中的配置检查一下你的SCI 初始化配置是否正确。可以参考:C:\ti\c2000\C2000Ware_<version>\device_support\f2802x\examples\structs
另外再检查一下你的SCICCR寄存器是否使用Idle-line模式或Address-bit模式。

unsigned char Msg_Tx_Buf[10] = {0x55, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

interrupt void sciARxISR(void)
{
HAL_Obj *obj = (HAL_Obj *)halHandle;
float temp = 0;
unsigned char loop = 2;

Msg_Rx_Buf[ ++RX_Data_counter] = halHandle->sciAHandle->SCIRXBUF;
PIE_clearInt(obj->pieHandle,PIE_GroupNumber_9);

if((RX_Data_counter == 0) & (Msg_Rx_Buf[0] != 0xAA))
{
RX_Data_counter = 0;

return;
}
if((RX_Data_counter == 1) & (Msg_Rx_Buf[1] != 0x55))
{
RX_Data_counter = 0;
return;
}
if(RX_Data_counter >= 9)
{
//第一步:清零操作
RX_Data_counter = 0;
SCI_disableRxInt(halHandle->sciAHandle);
SCI_disableRx(halHandle->sciAHandle);

for( ; loop < 9; loop ++)
{
Rx_Num_Check += Msg_Rx_Buf[loop];
}

if((Msg_Rx_Buf[0] == 0xAA) & (Msg_Rx_Buf[1] == 0x55) & Msg_Rx_Buf[9] == (Rx_Num_Check & 0x00FF)) //检查校验和
{

Rx_Num_Check = 0;
Rx_Flag = 0;

SCI_TxMsg(Msg_Tx_Buf, 10);
}
SCI_enableRx(halHandle->sciAHandle);
SCI_enableRxInt(halHandle->sciAHandle);

}
} // end of sciARxISR() function

这是我的中断程序,设计用这个程序接收十个数据然后处理,在调试的过程中发现,在接收数据多余十个或者少于十个的时候就会不正常,一次发送给DSP数据多余十个时,DSP发个上位机的数据和Msg_Tx_Buf里的数据不一样,在程序里没有对Msg_Tx_Buf进行过任何操作;

在发送数据持续几次大于十个时,接收中断就在也进不来了,但是其他中断正常,在其他中断里发送数据上位机也可以接收到,而且接收到的数据和Msg_Tx_Buf中内容一致

mangui zhang:中断应该只是根据buffer中的数据量触发中断读的时候应该读走一包
然后去解析这样需要你的数据包有帧头 校验等

赞(0)
未经允许不得转载:TI中文支持网 » 关于28027F串口接收中断的问题
分享到: 更多 (0)