Я конвертирую 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)? или как дополнительно устранить проблему?