обработчик прерываний не выполняется для прерывания, для которого он был установлен - PullRequest
0 голосов
/ 17 апреля 2020

Я конвертирую BSP / драйверы vxWorks 6.9 в vxWorks 7. Это драйвер SPI a / d для MPC82xx PP C. В функции присоединения я вызываю функцию vxbIntConnect и передаю ее, затем имя моего ISR 'adc_isr'. Я использую отладчик Lauterbach JTAG, чтобы попытаться изолировать проблему.

После загрузки в консоли я запускаю intShow (), и мой установленный adc_isr () отображается, как и ожидалось.

В adc_write, как только я установил бит «передать сейчас», отладчик JTAG отображает ожидаемые значения в регистре SP IE (передано, получено, прерывание rx), а в регистрах SIU также отображается ожидание прерывания, а SPI int enabled.

Перед выполнением adc_write я установил точку останова hw в adc_isr. Запись SPI находится в блоке intLock / intUnlock. Как только я пытаюсь перешагнуть через intUnlock (), код НЕ выполняет adc_isr () {точка останова никогда не возникает}, вместо этого генерируется исключение, и он пытается запустить процедуру detach () для SPI-- но он не может завершить это и входит в бесконечный l oop в коде intLib. c. ISR имеет код для очистки int, но, поскольку он не выполняется, я считаю, что то, что выполняется, вызывает переполнение стека прерываний или другую катастрофическую ошибку c.

Я прекратил попытки отслеживать дальнейшее выполнение в этот момент. Следует отметить, что код vxWorks 6.9 выполняется правильно. Вызовы vxWorks 7 vxbIntConnect и vxbIntEnable, в прикрепленном состоянии, по всем признакам правильно подключаются к ISR (ie HW int происходит, при этих вызовах ошибок не возвращается, а intShow отображает ожидаемый обработчик ISR для int (2 Я пытался изменить DTS, чтобы изменить прерывание с низкого уровня на спад - но это ничего не исправило. Одна разница между кодом 6.9 и 7.0 в том, что 6.9 устанавливает уровень int равным 63. I Я не смог выяснить, как это сделать в vxWorks 7.0, хотя мне трудно поверить, что проблема приоритета может привести к неправильной установке обработчика.

Кто-нибудь имеет представление о возможной причине? (s)? или как дополнительно устранить проблему?

1 Ответ

0 голосов
/ 17 апреля 2020

Похоже, что прерывания неправильно отображаются в вашем файле конфигурации.

Когда речь идет о прерываниях, VxWorks 7 использует структуру дерева устройств (.dts) в каталоге BSP, который содержит описание оборудования. Одним из ключевых моментов является то, что запись для вашего оборудования AD C должна указывать правильное прерывание.

В VxWorks 6.9 это вместо этого настраивалось через серию таблиц данных, расположенных в hwconf. c файл в каталоге BSP. Убедитесь, что любое прерывание, указанное в файле 6.9 hwconf. c для вашего устройства, совпадает с указанным в файле dts.

...