使用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寄存器接收缓冲区里面的东西。具体可以看手册这里。
中断程序根据官方提供的例程编写的,有读取了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空中断,建议接收用中断,发送在主程序。