LPUART调教记

最近感觉技术上又有退步了,竟然要研究LPUART,其实就是在测试的时候发现有很多细节上的东西需要把握好,LPUART模块本身不是特别复杂,但是搞技术,你有一点点东西搞不到位就很麻烦,所以这里就把这几天碰到的一点问题记录一下,希望有遇到同样问题的童鞋不要重蹈覆辙。

起不来的中断

在调试LPUART中断的时候,我碰到的问题是中断死活出不来,后来找了好久的原因才发现问题有两个。这里就记录一下调试过程和问题的原因。

中断向量号

中断起不来,首先要看LPUART这个模块是不是按照预期产生了中断,这个可以直接通过寄存器来看,比如对于接收中断来说,我们可以直接看LPUART_CTRL_RIE是否为1,如果置位说明中断已经开启,再看LPUART_STAT_RDRF是否置位,如果置位,说明中断正常产生,至此LPUART模块就算搞定了,不要再怀疑是不是有其他配置的问题。LPUART模块正常产生中断,剩下的就是要看这个中断能不能正常到NVIC,这里可以直接看0xE000_E100的中断使能寄存器上相应的位是否为1,另外还可以看0xE000E200的中断pending寄存器相应的位是否置位,如果均置位而中断没有产生,那么就看中断向量表,看中断有没有正常装载,如果都没有问题,就是玄学,接着看下面的另外一种情况。

中断玄学

在调试一个双核的MCU的时候,我也碰到了中断不能正常运行的情况,这个搞起来比较麻烦,也调试了挺长时间,具体情况就像上面说的那样,各种中断路径都分析了,就是没能产生中断,并且串口的波特率也怪怪的,偶然间发现串口配置时钟的时候报了一个错,当时没在意,后来发现这就是线索呀,报错的原因是这个模块已经在另外一个核中配置好时钟了,不能在这里重新配置,猛然间恍然大悟,原来我在另外一个核中跑了一个无关的程序,这个程序刚好配置好了LPUART,这样我当前核配置时钟的时候就冲突了,但是LPUART_BAUD寄存器可以正常写,所以时钟没能配置,但是波特率改了,所以我得到了一个怪怪的时钟。不过这个核中断好像没有太大关系,这个问题的解决方法我找到了,但是问题的原因到现在也没找到,所以这里就写下解决方法,其实也很简单,不要在IAR调试中出中断,直接加电运行就好了,完全木有问题呢!具体原因找到了再聊。


本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。

发表新评论