реклама на сайте
подробности

 
 
> прерывания на ассемблере
Doux
сообщение Feb 25 2007, 23:10
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 25-02-07
Из: Москва
Пользователь №: 25 663



Подскажите пожалуйста, как написать прерывание на ассемблере в IAR. Я имею ввиду то, как дать понять компилятору, что адрес подпрограммы прерывания нужно поместить в вектор прерывания по определенному адресу. В мануалах я этого не нашел. Там описывается только то, как это работает в контроллере. В примерах кода нашел такое:
.sect ".int08"
.short label

только не понятно, откуда берется int08
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
rezident
сообщение Feb 26 2007, 02:21
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Видимо вы недостаточно внимательно читали Хелп. См. 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 с ее сайта.
Go to the top of the page
 
+Quote Post
Doux
сообщение Feb 26 2007, 22:09
Сообщение #3





Группа: Новичок
Сообщений: 6
Регистрация: 25-02-07
Из: Москва
Пользователь №: 25 663



Огромнейшее спасибо. Каюсь, был невнимателен с даташитом, я еще только учусь.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 12:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01362 секунд с 7
ELECTRONIX ©2004-2016