Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: прерывания на ассемблере
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Doux
Подскажите пожалуйста, как написать прерывание на ассемблере в IAR. Я имею ввиду то, как дать понять компилятору, что адрес подпрограммы прерывания нужно поместить в вектор прерывания по определенному адресу. В мануалах я этого не нашел. Там описывается только то, как это работает в контроллере. В примерах кода нашел такое:
.sect ".int08"
.short label

только не понятно, откуда берется int08
rezident
Видимо вы недостаточно внимательно читали Хелп. См. EW430_AssemblerReference.pdf раздел Segment control directives.
Функция обработки прерывания на асме пишется точно также как и любая другая функция. Отличие лишь в том, что возврат из п/программы прерывания это инструкция reti, а ret.
Разместить адрес п/программы обработки прерывания по адресу вектора прерывания тоже достаточно просто. См. простейший пример от TI.
Код
;******************************************************************************
;   MSP-FET430P440 Demo - Timer_A Toggle P5.1, CCR0 Contmode ISR, DCO SMCLK
;
;   Description; Toggle P5.1 using using software and TA_0 ISR. Toggle rate is
;   set at 50000 DCO/SMCLK cycles. Default DCO frequency used for TACLK.
;   Durring the TA_0 ISR P5.1 is toggled and 50000 clock cycles are added to
;   CCR0.  TA_0 ISR is triggered exactly 50000 cycles. CPU is normally off and
;   used only durring TA_ISR.  
;   ACLK = n/a, MCLK = SMCLK = TACLK = default DCO
;
;                MSP430F449
;             -----------------
;         /|\|              XIN|-  
;          | |                 |
;          --|RST          XOUT|-
;            |                 |
;            |             P5.1|-->LED
;
;   M.Buccini
;   Texas Instruments, Inc
;   October 2003
;******************************************************************************
#include  "msp430x44x.h"
;------------------------------------------------------------------------------
            ORG     01100h                ; Program Start
;------------------------------------------------------------------------------
RESET       mov.w   #0A00h,SP             ; Initialize '449 stackpointer
StopWDT     mov.w   #WDTPW+WDTHOLD,&WDTCTL; Stop WDT
SetupP5     bis.b   #002h,&P5DIR          ; P5.1 output
SetupC0     mov.w   #CCIE,&CCTL0          ; CCR0 interrupt enabled
            mov.w   #50000,&CCR0          ;
SetupTA     mov.w   #TASSEL_2+MC_2,&TACTL ; SMCLK, contmode
                                          ;                          
Mainloop    bis.w   #CPUOFF+GIE,SR        ; CPU off, interrupts enabled
            nop                        ; Required for debugger
                                          ;
;------------------------------------------------------------------------------
TA0_ISR;    Toggle P5.1
;------------------------------------------------------------------------------
            xor.b   #002h,&P5OUT          ; Toggle P5.1
            add.w   #50000,&CCR0          ; Add Offset to CCR0
            reti                          ;        
                                          ;  
;-----------------------------------------------------------------------------
;           Interrupt Vectors Used MSP430F4xx        
;-----------------------------------------------------------------------------
            ORG     0FFFEh                ; MSP430 RESET Vector
            DW      RESET                 ;
            ORG     0FFECh                ; Timer_A0 Vector
            DW      TA0_ISR            ;
            END


Как видите, для размещения адреса подпрограммы обработки прерывания от TimerA TA0_ISR по вектору его прерывания достаточно двух команд.
Код
ORG 0FFECh
DW TA0_ISR
Рекомендую вам скачать для ознакомления примеры от TI с ее сайта.
Doux
Огромнейшее спасибо. Каюсь, был невнимателен с даташитом, я еще только учусь.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.