0

Atmega8535 マイクロコントローラと STK200 開発ボードを使用しています。複数の外部割り込みを使用しようとしていますが、何らかの理由で INT0 のみが機能し、他は何もしません。関連するコードは次のとおりです。

;Interrupt Vector Addresses 
.equ     INT0addr=$001            ;External Interrupt0 Vector Address 
.equ     INT1addr=$002
.equ     INT2addr=$003
.equ     INT3addr=$004
.equ     INT4addr=$005

//interrupts
.org     INT0addr 
         rjmp   INT0              ;External Interrupt0 Vector 
.org     $0015                    ;Program address 

.org     INT1addr 
         rjmp   INT1              ;External Interrupt1 Vector 
.org     $0015                    ;Program address

.org     INT2addr 
         rjmp   INT2              ;External Interrupt0 Vector 
.org     $0017

.org     INT3addr 
         rjmp   INT3              ;External Interrupt0 Vector 
.org     $0018

.org     INT4addr 
         rjmp   INT4              ;External Interrupt0 Vector 
.org     $0019
;External Interrupt0 Service Routine 
INT0:    cli                      ;Prevent any more interrupts while ISR is running

     rjmp reset 
     reti                     ;Return and enable interrupts again

;External Interrupt1 Service Routine 
INT1:    cli                      ;Prevent any more interrupts while ISR is running

         rjmp reset 
         reti                     ;Return and enable interrupts again
;External Interrupt1 Service Routine 
INT2:    cli                      ;Prevent any more interrupts while ISR is running

         rjmp reset 
         reti                     ;Return and enable interrupts again
;External Interrupt1 Service Routine 
INT3:    cli                      ;Prevent any more interrupts while ISR is running

         rjmp reset 
         reti                     ;Return and enable interrupts again
;External Interrupt1 Service Routine 
INT4:    cli                      ;Prevent any more interrupts while ISR is running

         rjmp reset 
         reti                     ;Return and enable interrupts again
4

1 に答える 1

0

このプロセッサーに要求しすぎているかもしれません。プロセッサ リファレンス(pg. 65)によると、このプロセッサには 3 つの外部割り込み INT0、INT1、INT2 (それぞれ PORTD.2、PORTD.3、PORTB.2) しかありません ... pg 68ff も読む価値があります!

グローバル割り込みイネーブル ビット (SREG のビット 7) を最初に設定したことがわかりません。リセット後は 0 になり、割り込みが処理されなくなります。また、個々の割り込みを有効にする必要があります (GICR レジスタ)。

コードには余分なものがたくさんあり.orgます (例: 11 行目、13 行目)。

デバイス固有の inc ファイルを含めることをお勧めします。また、明確にするために、完全な割り込みベクトル テーブルを指定することをお勧めします。

.nolist
.include <m8535def.inc>
.list

.org 0x0000
                     ; .... highest priority
    jmp V_RESET      ; Reset
    jmp V_ExtINT0    ; External Interrupt 0
    jmp V_ExtINT1    ; External Interrupt 1
    jmp V_NOINT      ; Timer/Counter2 Compare Match
    jmp V_NOINT      ; Timer/Counter2 Overflow
    jmp V_NOINT      ; Timer/Counter1 Capture Event
    jmp V_NOINT      ; Timer/Counter1 Compare Match A
    jmp V_NOINT      ; Timer/Counter1 Compare Match B
    jmp V_NOINT      ; Timer/Counter1 Overflow
    jmp V_NOINT      ; Timer/Counter0 Overflow
    jmp V_NOINT      ; SPI Serial Transfer Complete
    jmp V_NOINT      ; USART, RX Complete
    jmp V_NOINT      ; USART Data Register Empty
    jmp V_NOINT      ; USART, TX Complete
    jmp V_NOINT      ; ADC Conversion Complete
    jmp V_NOINT      ; EEPROM Ready
    jmp V_NOINT      ; Analog Comparator
    jmp V_NOINT      ; Two-wire Serial Interface
    jmp V_ExtINT2    ; External Interrupt Request 2
    jmp V_NOINT      ; TimerCounter0 Compare Match
    jmp V_NOINT      ; Store Program Memory Read
                     ; .... lowest priority

V_RESET:
    ; define stack pointer
    ; set individual interrupt bits
    ; initialize ports, etc.

    sei              ; enable general interrupts

MAIN:
    rjmp MAIN

V_ExtINT0:
    ; INT0 handler
    reti

V_ExtINT1:
    ; INT1 handler
    reti

V_ExtINT2:
    ; INT2 handler
    reti

V_NOINT:
    ; e.g. flash a LED otherwise unused to show abnormal condition
    reti
于 2013-04-25T09:46:34.950 に答える