中断处理程序未在为其安装的中断上执行

问题描述 投票:0回答:1

我正在将vxWorks 6.9 BSP /驱动程序转换为vxWorks7。这是MPC82xx PPC的SPI a / d驱动程序。在附加函数中,我调用vxbIntConnect函数并将其传递给ISR'adc_isr'。我正在使用Lauterbach JTAG调试器来尝试找出问题。

启动后,在控制台上运行intShow()并按预期显示安装的adc_isr()。

在adc_write中,一旦我设置了“立即发送”位,JTAG调试器就会在SPIE寄存器(发送,接收,rx中断)中显示期望值,而SIU寄存器也显示未决中断,并且SPI int已启用。

在执行adc_write之前,我在adc_isr中设置了一个硬件断点。 SPI写入位于intLock / intUnlock块中。一旦我尝试越过intUnlock(),代码就不会执行adc_isr(){永不发生断点},而是会生成异常,并尝试为SPI运行detach()例程-但它无法完成该操作,并在intLib.c代码中陷入无限循环。 ISR具有清除int的代码,但是由于未执行int操作,因此我认为执行的操作会导致中断堆栈溢出或其他灾难性错误。

我放弃了尝试在那一点上进一步执行的跟踪。我应该指出vxWorks 6.9代码可以正确执行。附带说明的vxWorks 7 vxbIntConnect和vxbIntEnable调用正确地连接了ISR(即HW int正在发生,这些调用没有返回错误,并且intShow显示了int的预期ISR处理程序(2)。我尝试过更改DTS,以将中断从低级更改为下降沿,但这并不能解决任何问题,6.9和7.0代码之间的一个差是6.9将int级别设置为63。无法确定如何在vxWorks 7.0中执行此操作。尽管我很难相信优先级问题可能导致处理程序无法正确引导。

有人对可能的原因有任何想法吗?或如何进一步解决问题?

driver interrupt interrupt-handling powerpc vxworks
1个回答
0
投票

听起来好像中断未在您的配置文件中正确映射。

涉及中断时,VxWorks 7在BSP目录中使用设备树结构(.dts),其中包含硬件描述。关键之一是ADC硬件的条目应指定正确的中断。

在VxWorks 6.9中,这是通过位于BSP目录的hwconf.c文件中的一系列数据表进行配置的。确保在6.9 hwconf.c文件中为您的设备指定的中断与在dts文件中指定的中断相同。

© www.soinside.com 2019 - 2024. All rights reserved.