C6748 串口在中断模式下时为什么在错误波特率情况下的收发通讯会长时间出现异常中断 出现串口的收发无法正常进行

2019-07-15 19:11发布

在使用C6748时 出现一个问题 基于此芯片设计的不同设备在进行协议通讯时 偶尔会出现C6748的通讯端口无法输入输出的情况 若故意设置为错误通讯波特率时 C6748的通讯端口无法输入输出的情况(可以不识别或者不响应发送的命令或协议,但不应该出现此端口后续均无法发送的情况) 也问了ti的人 给不出明确的原因和说法 看下坛里有没有大侠遇到过这种问题  原因是什么?

串口配置初始化: 1、配置管脚为uart模式 2、使能 free_run,URRST,UTRST 3、设置串口的波特率为115200 4、设置串口的数据位(8位)、停止位(1位)和校验位(无校验) 5、设置串口为FIFO模式,设置uart的接收触发为一个字节 6、使能ERBI中断和ELSI中断
串口中断程序: 1、读取IIR寄存器以判断中断类型 2、清除串口1对应的event38中断; 3、根据中断类型进入不同的中断分支 (1)为发送中断:屏蔽接收中断;从缓冲buf中往THR寄存器中发数;若缓冲buf没有新数,禁止发送中断;打开接收中断; (2)为接收中断:屏蔽发送中断;从接收RBR寄存器中读数;打开发送中断;触发上层的接收线程; (3)为接收error中断:判断error类型,读取RBR寄存器,一直到没有错误为止; (4)为超时中断,读取RBR寄存器; 其中将event38中断映射到外部中断5上;
1.C6748串口波特率为115200,每秒连续发送200字节数据;同时,测试终端以14400的波特率向C6748发送数据,发送内容为hijklmn,发送间隔为10ms; 2.C6748在正常输出大概1分钟左右的时间后停止输出; 3.查看C6748停止输出时串口相应的寄存器,IER寄存器的值为0x7;IIR寄存器的值为0x6;LSR寄存器的值刚开始为0xFB,紧接着为0xF9 分析不出原因在哪儿

    中断处理函数如下:
static unsigned char txArray[256];
static unsigned int length = sizeof(txArray) ;
static  unsigned int count = 0;
static unsigned char receive_buf[128]={0};
unsigned char len = 0;
static void UARTIsr()
{
unsigned int int_id = 0;
signed char retVal = -1;
int _id = UARTIntStatus(SOC_UART_0_REGS);
IntEventClear(SYS_INT_UART0_INT);

if(0x1 == int_id)
{
HWREG(SOC_UART_0_REGS+UART_THR)=txArray[count];
count++;
if(count>=length)
{
count = 0;
UARTIntDisable(SOC_UART_0_REGS,UART_INT_TX_EMPTY);
}
}
if(0x2== int_id)
{
receive_buf[len] = HWREG(SOC_UART_0_REGS+UART_RHR);
len++;
len = len % 128;
SEM_post(handle);//触发上层接收数据线程
}
if(0x3== int_id)
{
while(UARTRxErrorGet(SOC_UART_0_REGS))
{
UARTCharGetNonBlocking(SOC_UART_0_REGS);
}
}
if(0x6== int_id)
{
UARTCharGetNonBlocking(SOC_UART_0_REGS);
}
}
1、接收中断和异常中断上电后一直使能
2、上层每秒钟发送txArray-buf中的固定数据,当把要发送的数据全部放到发送buf-txArray后,使能发送中断;
3、在开机30s左右给uart发送15个字节左右的数据,正常情况下数据的发送和接收都是正常的,当给uart发送的数据的速率与给定的波特率有偏差时,会触发错误中断,当进行压力试验时(多次重复做这种试验),会出现串口无响应的现象;
4、此时查看C6748停止输出时串口相应的寄存器,IER寄存器的值为0x7;IIR寄存器的值为0x6;LSR寄存器的值刚开始为0xFB,紧接着为0xF9

或者有用过此芯片开发板或者用过此芯片的人是否可解答此问题或者遇到过此问题 如果可以帮做一个试验 看您那边是否有相同情况
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。