CH438Q中断问题

/**************************************************************************

          设置CH438串口7的寄存器

**************************************************************************/

//    UART7_Reset();

    div = ( Fpclk >> 4 ) / CH438UART7_BPS;

    DLM = div >> 8;

    DLL = div & 0xff;

    WriteCH438Data( REG_LCR7_ADDR, BIT_LCR_DLAB );    /* 设置DLAB为1 */

HAL_Delay(5);

    WriteCH438Data( REG_DLL7_ADDR, DLL );             /* 设置波特率 */

HAL_Delay(5);

    WriteCH438Data( REG_DLM7_ADDR, DLM );

HAL_Delay(5);

WriteCH438Data( REG_LCR7_ADDR, 0X00 );    /* 设置DLAB为0 */

HAL_Delay(5);

WriteCH438Data( REG_FCR7_ADDR, BIT_FCR_FIFOEN| BIT_FCR_TFIFORST|BIT_FCR_RFIFORST );    /* 设置FIFO模式,触发点为1字节 */

HAL_Delay(5);

    WriteCH438Data( REG_LCR7_ADDR, BIT_LCR_WORDSZ1 | BIT_LCR_WORDSZ0 );      /* 字长8位,1位停止位、无校验 */

HAL_Delay(5);

//    WriteCH438Data( REG_IER7_ADDR, BIT_IER_IERECV  );    /* 使能中断 */

//HAL_Delay(5);

//

//WriteCH438Data( REG_MCR7_ADDR, BIT_MCR_OUT2);              /* 允许中断输出 */

}

上述是对串口7的初始化配置,麻烦看下有没有问题?

现在出现的现象是:

1、我在初始化中没有打开中断,但是当数据输入时,INT引脚依然能变化,引发中断。

2、SSR专用寄存器,不管是在允许还是不允许中断的情况下,读这个寄存器,均是0XF1,即使是刚上电,没有数据输入,读这个寄存器也不是0.

您好,芯片的INT不仅是只针对串口7一个的,所有串口都会共用这个中断,您可以在产生的中断里面读取,查看实际产生的中断是否为串口7产生。如果您希望串口不产生中断,您代码里面需要对MCR操作一下把OUT2位写0.

SSR寄存器只是一个读取当前8个串口是否有中断产生,读取的值是会产生变化的。


我现在只打开了一个串口7,,其他串口我并未初始化。那么,SSR寄存器中是否只应该S7INT是对应的中断标志位,SSR的其他中断标志位是否应该为0?

我现在的问题是,SSR寄存器中的中断标志位是乱的,上电初始化时就是一个固定值,我换了2块芯片,都是一个不同的固定值,也不会随着相应串口的中断来置位和清零。

我认为,或者这个SSR寄存器就是坏了,或者就应该有这个SSR的清零的机制?


看着配置没啥问题,你可以试试通过IER的LOWPOWER位,把其他不用的串口在初始化时关掉,再监测SSR寄存器看看


您好,您可以在串口初始化之后,优先读取以下SSR寄存器,正常这个寄存器读出来应该是00。而不是随机值。如果读出一直是随机值,您可以看一下是否读寄存器的地址输入有误。


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