Приветствую! Помогите разобраться, куда копать. Проблема следующая.
Есть программа, заливаю её в процессор всё работает. В CCS v5.5 останавливаю процессор нажимаю "Suspend", далее нажимаю "CPU Reset", "Restart", "Resume", всё заново запускается и работает.
Добавляю кусок кода, который настраивает и использует прерывария от McBSP и тогда всё работает только один раз после включения питания либо Hard Reset-a.
В начале программы использую настройку прерываний, все функции из AM1808_StarterWare:
Код
IntAINTCInit();
//Enable IRQ for ARM (in CPSR)*/
IntMasterIRQEnable();
// Enable AINTC interrupts in GER */
IntGlobalEnable();
// Enable IRQ in AINTC */
IntIRQEnable();
при инициализации McBSP выполняется следующий кусок кода:
Код
IntRegister((device_num ? SYS_INT_MCBSP1_RINT : SYS_INT_MCBSP0_RINT), isr);
IntChannelSet((device_num ? SYS_INT_MCBSP1_RINT : SYS_INT_MCBSP0_RINT), (device_num ? AINTC_CHANNEL_5_MCBSP1RX : AINTC_CHANNEL_4_MCBSP0RX));
IntSystemEnable((device_num ? SYS_INT_MCBSP1_RINT : SYS_INT_MCBSP0_RINT));
Если поставить точку останова на IntIRQEnable(), дойдёт до неё, далее при нажатии на "Resume" опять попадает на эту же строку (каким-то образом само перезапустилось). Если убираем из программы настройку прерываний McBSP, всё будет работать нормально.
UPP:
Хочу уточнить. Ещё раз всё посмотрел, получается, программа сбрасывается на самое начало. Ещё нашёл, что в CCS можно выбирать кнопку сброса "CPU Reset (SW)", "CPU Reset (HW)" и "System Reset". Так вот, если для программы с "глючным куском кода" делать "CPU Reset", то перезапустить её не получится, выполнение доходит до определённого места, а потом каким-то образом происходит сброс на начало. Если выполнить "System Reset" и "Restart", то программа запустится нормально. Для программы без использования прерывания от McBSP можно использовать любой вариант сброса. В чём отличие? И как сделать правильно, чтоб запускалось в любом случае?