2014-09-22 2 views
0

Пытается написать ISR в сборе, когда кнопка нажимается на мой MSP430. Я следил за некоторыми инструкциями в Интернете, но у меня возникли проблемы с «связыванием» ISR с нажатием кнопки.MSP430 - сборка ISR не запускается

В частности, я пытаюсь подключить к порту P1.1 кнопку, чтобы запустить мой ISR.

шаги я сделал

1) Включить прерывание для Р1.1 P1IE |= BIT1;

2) Выбранные H-> L Переход: P1IES |= BIT1;

3) Очищенный регистр флага: P1IFG &= ~BIT1;

4) Разрешенные глобальные прерывания: __enable_interrupt();

Тем не менее, я думаю, что чего-то не хватает. Я не понимаю, как сказать программе запустить мой ISR, и, к сожалению, я не нашел в Интернете каких-либо рекомендаций, которые очень понятны в этой части. Вот мой ISR в сборе:

.cdecls C,LIST,"msp430.h" 
    .sect ".text:_isr" 

buttonISR:  push R4 
       mov.w #1000, R4 
loop:   dec.w R4 
       jnz loop 
       reti 


    .sect BUTTON_ISR 
    .word buttonISR 
    .end 
+1

Я не достаточно знаком с MSP430, чтобы ответить на вопрос, но с большинством архитектур вы должны зарегистрировать ISR, поместив его адрес в слот таблицы векторов прерываний, соответствует IRQ, который вы хотите обработать , – reirab

+0

Означает ли этот язык ассемблера метки с завершающим двоеточием и те, которые этого не делают? Если да, в чем разница? – wallyk

+0

Ok @reirab, да, я слышал об этой «таблице векторов прерываний», но я не уверен, как ее использовать в этот момент. @wallyk К сожалению, это была опечатка – krb686

ответ

1

Хорошо, я понял. По-видимому, таблица векторов прерываний является жестко запрограммированной ячейкой памяти. Из таблицы, я обнаружил, что вектор прерывания для порта 1 был 0xFFDE, что переводится INT47, таким образом, я изменил нижнюю часть моей сборки программы:

.sect ".int47" 
.word buttonISR 
.end 

И теперь он прекрасно работает!

+0

Как это переводится в INT47? –

+0

См. Стр. 52, раздел 6.3 «Адреса вектор прерываний» в техническом описании MSP430 и найдите порт I1 p1 в таблице. – krb686

Смежные вопросы