我正在为 VxWorks 开发 BSP 并遇到以下问题:
UART3 TX 中断已启用,IIR 显示 PENDING THR 中断,但 Cortex A-9 GIC 无法识别它。因此 VxWorks IO 缓冲区已满,但 UART FIFO 仍为空。
当我在 GIC 中手动将相应的中断设置为 PENDING 时,它会传播中断并执行 ISR,从而将 64 字节发送到 UART FIFO 并正确打印在 RS232 上。证明 ISR 设置正确且正常运行,并且在 GIC 分发器中启用了中断。
OMAP4430 具有 16550 兼容的 UART。波特率配置很好,因为我可以在轮询模式下成功使用它。
UART TX 中断没有被断言的可能原因是什么?
编辑:找到了我的问题的原因,看起来中断号被移动了 32 位:
OMAP4430 TRM 指出 UART3 有中断线 74,但是当我查看 GIC 的 PENDING 寄存器时,我看到第 106 行有一个中断正在等待。考虑到 106 是 74 + 32 的总和,我尝试将中断线 106 配置为 UART3 中断号,看看它是否有效!
串行驱动程序是来自 VxWorks 的 vxbNs16550,GIC 驱动程序也来自 VxWorks,中断线是从 UART 到 TI 定义的 GIC 的物理连接。那么为什么物理中断线的编号会出现这种差异呢?