da
xyz » 3 giu 2013, 12:26
Rabeluk ha scritto:-ogni riga di codice vale un indirizzo di word?
No, gli opcode del linguaggio macchina degli AVR sono in generale lunghi 2 byte (1 word) ma ci sono delle eccezioni come la "call" con un indirizzo assoluto, occupa 4 byte (2 word).
Rabeluk ha scritto:-se inizio con il vettore degli interrupt all'indirizzo 0x0000 come hai fatto tu,all'indirizzo 0x0001 (sempre di word) cosa troverò
Questo è per me scritto chiaramente nel datasheet. Una delle prime cose che uno guarda quando inizia a programmare un nuovo microcontrollore è la prima locazione eseguita dopo il reset . Per Atmega8535 è la tabella "Interrupt Vectors in ATmega8535" (pag. 46 del mio PDF):
- Codice: Seleziona tutto
1 0x000 RESET External Pin, Power-on Reset, Brown-out Reset and Watchdog Reset
2 0x001 INT0 External Interrupt Request 0
3 0x002 INT1 External Interrupt Request 1
4 0x003 TIMER2 COMP Timer/Counter2 Compare Match
5 0x004 TIMER2 OVF Timer/Counter2 Overflow
6 0x005 TIMER1 CAPT Timer/Counter1 Capture Event
7 0x006 TIMER1 COMPA Timer/Counter1 Compare Match A
8 0x007 TIMER1 COMPB Timer/Counter1 Compare Match B
9 0x008 TIMER1 OVF Timer/Counter1 Overflow
10 0x009 TIMER0 OVF Timer/Counter0 Overflow
11 0x00A SPI, STC Serial Transfer Complete
12 0x00B USART, RXC USART, Rx Complete
13 0x00C USART, UDRE USART Data Register Empty
14 0x00D USART, TXC USART, Tx Complete
15 0x00E ADC ADC Conversion Complete
16 0x00F EE_RDY EEPROM Ready
17 0x010 ANA_COMP Analog Comparator
18 0x011 TWI Two-wire Serial Interface
19 0x012 INT2 External Interrupt Request 2
20 0x013 TIMER0 COMP Timer/Counter0 Compare Match
21 0x014 SPM_RDY Store Program Memory Ready
Per un ATmega128 è questa:
- Codice: Seleziona tutto
1 $0000 RESET External Pin, Power-on Reset, Brown-out Reset, Watchdog Reset, and JTAG AVR Reset
2 $0002 INT0 External Interrupt Request 0
3 $0004 INT1 External Interrupt Request 1
4 $0006 INT2 External Interrupt Request 2
5 $0008 INT3 External Interrupt Request 3
6 $000A INT4 External Interrupt Request 4
7 $000C INT5 External Interrupt Request 5
8 $000E INT6 External Interrupt Request 6
9 $0010 INT7 External Interrupt Request 7
10 $0012 TIMER2 COMP Timer/Counter2 Compare Match
11 $0014 TIMER2 OVF Timer/Counter2 Overflow
12 $0016 TIMER1 CAPT Timer/Counter1 Capture Event
13 $0018 TIMER1 COMPA Timer/Counter1 Compare Match A
14 $001A TIMER1 COMPB Timer/Counter1 Compare Match B
15 $001C TIMER1 OVF Timer/Counter1 Overflow
16 $001E TIMER0 COMP Timer/Counter0 Compare Match
17 $0020 TIMER0 OVF Timer/Counter0 Overflow
18 $0022 SPI, STC SPI Serial Transfer Complete
19 $0024 USART0, RX USART0, Rx Complete
20 $0026 USART0, UDRE USART0 Data Register Empty
21 $0028 USART0, TX USART0, Tx Complete
22 $002A ADC ADC Conversion Complete
23 $002C EE READY EEPROM Ready
24 $002E ANALOG COMP Analog Comparator
25 $0030 TIMER1 COMPC Timer/Countre1 Compare Match C
26 $0032 TIMER3 CAPT Timer/Counter3 Capture Event
27 $0034 TIMER3 COMPA Timer/Counter3 Compare Match A
28 $0036 TIMER3 COMPB Timer/Counter3 Compare Match B
29 $0038 TIMER3 COMPC Timer/Counter3 Compare Match C
30 $003A TIMER3 OVF Timer/Counter3 Overflow
31 $003C USART1, RX USART1, Rx Complete
32 $003E USART1, UDRE USART1 Data Register Empty
33 $0040 USART1, TX USART1, Tx Complete
34 $0042 TWI Two-wire Serial Interface
35 $0044 SPM READY Store Program Memory Ready
Ogni modello di microntrollore ha una propria tabella, cambiano le varie funzioni (tranne la prima il RESET) e la grandezza, anche se fanno parte della stessa famiglia.
Quella tabella è un salto a un interrupt decisa dall'unità centrale, ci può essere un salto a un'altra istruzione con "rjmp LABEL" o un ritorno a un interrupt con "iret" (ritorna subito senza eseguire nessun altro codice). Se vedi un'altra istruzione di solito è un baco.