我目前正在使用 Crossworks ARM (2.1),我的 LPC2368 MCU 上的中断有一些问题。
两个操作过程(在 UART 示例中):
1)工作一:
- 整个 uart 初始化和 IRQ 实现位于 main.c 文件中
- 代码是使用 VECTORED_IRQ_INTERRUPTS 标志构建的,因为 Crossworks 需要它
- 一切正常(回声测试仪正在响应)
- 从 IRQ 退出后,cpu 将其模式更改为主管(它也设置了构建标志)这很酷并且可以工作..
2)不工作之一:
- cpu 由位于除 main.c ((ProjDir)/SystemCtrl/) 之外的其他目录中的其他文件中的例程初始化
- uart初始化函数设置在嵌套目录((ProjDir)/SystemCtrl/LPC/libuart)
- 启动后一切正常。波特率很好,UART 已正确初始化
第一件坏事:当第一次收到数据时,IRQ被正确调用。但接收到的数据不同(即发送:0x31,接收:0x82)。
第二个坏事:即使接收到错误的数据,echo 也会向 PC 发送不同的值!(即发送:0x31,接收:0x82,回显将发送:0xFE)
第三个坏事:IRQ 正在退出并且 CPSR 中的 IRQ 模式仍然设置!I 标志未清除。IRQ 具有属性((interrupt(IRQ)))。并且仍然无法正常工作。
有人知道吗?我不知道出了什么问题。我什至更改了堆栈大小(我认为它可能在奇怪的空间中以某种方式丢失了)。嵌套目录如何破坏一切?它还使用干净的项目进行了测试,无需更改任何设置。