IRQ在LPC238(Crossworks + GCC)上无法正常工作

时间:2012-12-11 20:34:00

标签: assembly arm interrupt uart irq

我目前正在使用Crossworks ARM(2.1),我的LPC2368 mcu上有一些中断问题。

两个行动方案(在UART示例中):

1)工作一:

  • 整个uart初始化和IRQ实现位于main.c文件中
  • 使用VECTORED_IRQ_INTERRUPTS标记构建代码,因为Crossworks需要该标记
  • 一切正常(回声测试员正在回应)
  • 退出IRQ后cpu将其模式更改为Supervisor(它也设置了构建标志)  这很酷,很有效..

2)不工作:

  • cpu由位于main.c以外的其他目录中的例程初始化((ProjDir)/ SystemCtrl /)
  • uart init函数在嵌套目录中设置((ProjDir)/ SystemCtrl / LPC / libuart)
  • 启动后一切正常。波特率很好,UART正确初始化

第一件坏事:第一次收到数据时,正确调用IRQ。但收到的数据不同(即发送:0x31,收到:0x82)。

第二件坏事:即使接收到错误的数据,回声也会向PC发送不同的值! (即发送:0x31,收到:0x82,echo将发送:0xFE)

第三件坏事:IRQ正在退出,CPSR中的IRQ模式仍然存在!我的旗子没有被清除。 IRQ具有属性((中断(IRQ)))。并且仍然无法正常工作。

有人有任何想法吗?我不知道什么是错的。我甚至改变了堆栈大小(我想也许它在奇怪的空间中以某种方式丢失了)。嵌套目录如何破坏一切?它也经过了干净的项目测试,没有改变任何设置。

0 个答案:

没有答案