CH438Q接收数据出现问题

使用CH438Q接收,上电前几次数据接收没问题,收了几次后,中断一直拉低,不会拉高了,查询了SSR寄存器是01  IIR寄存器是04,用的是CH438Q串口0,这个问题要怎么解决?

您好,CH438中断输出是低电平输出,IIR寄存器为0x04根据手册中可知为“接收数据可用”中断,此时处于产生中断状态,所以需要根据IIR寄存器所报中断类型,根据清中断方法来清除所有的中断,才能撤销实际的INT中断电平


清中断方法来清除所有的中断,才能撤销实际的INT中断电平,具体怎么做啊?


读取数据后,还要进行什么寄存器的操作吗?


 case INT_RCV_SUCCESS:    // 串口接收可用数据中断

  if((Receive_Bit==20)|| (Receive_Bit==8))

{

Receive_Bit=8;

ET0 = 1;

Time_Count=0;

RcvNum = CH438Seril8Rcv(Data_Buf);

for(i=0;i

{

Uart_Data_Buf[Uart_Data_Length+i]=Data_Buf[i];

}

Uart_Data_Length=Uart_Data_Length+RcvNum;

}

          break;



在你的串口收到数据之后,只需要你在串口中断的程序里面去读取IIR寄存器,之后该中断就会被清除,然后就是正常的在对应的中断里面做对应的事情,例如Fifo触发中断或者超时中断就去读取RBR寄存器接收缓冲区里面的东西。具体可以看手册这里。M2GB13}78NSWTZV$XQK%QRL.png


中断程序根据官方提供的例程编写的,有读取了gInterruptStatus = RS485_ReadCH438Data( REG_SSR_ADDR ); SSR寄存器是01,之后

if( gInterruptStatus & 0x01  )    // 检测串口0是否有中断产生 

  {

InterruptStatus = RS485_ReadCH438Data( REG_IIR_ADDR ) & ( ~ CH438_IIR_FIFOS_ENABLED );    // 读串口0的中断状态 

读取了IIR寄存器了,这是运行完中断程序后,中断引脚INT的电平应该是恢复高电平,但是有时候运行工作一段时间后,中断引脚一直是低电平,这样就进不了中断程序了,在主程序读取IIR和SSR寄存器,也不会恢复成高电平,得重新断电上电才正常,这如何解决呢?


出现这个情况,CH438Q串口发送数据正常,由于中断引脚一直是低电平,没法进入中断处理接收的数据,所以接收不到数据。重启后又正常了。


您好,如果CH438中断脚为低电平的话说明有中断没有处理完,都中断寄存器看看。建议可以使用电平中断或者定时查询中断状态处理。或者在出中断前再次查询中断处理。


中断程序已经处理完退出中断函数了,刚发现,就是接收数据处理的时候,发送数据就会出现这样的情况


您好,假如在接收数据的时候,发送数据,发送数据的时候回产生THR空中断,建议接收用中断,发送在主程序。


只有登录才能回复,可以选择微信账号登录