ATmega128_EXT_INT
1
ATmega128_EXT_INT
27.10.2007 / Pieka
Ulkoinen keskeytys
Sisäinen keskeytysmoduuli
Ohjelmoitavat erikoistoimintaiset lohkot
Ohjaus-, tila-, kirjoitus- ja  lukurekisterit
Ohjaussanat
ATmega128_EXT_INT
2
Tarkastelukulmat
C-kääntäjä
I/O –laiteavaruus, esittelyt prosessorikohtaisessa otsikkotiedostossa
 atmega128.h, sfrb=”I/O:n tietotyyppi, juoksunumero”, keskeytysvektori
Prosessori ATmega128
Prosessorin pinnit (jalat, nastat)
Keskeytyspyyntö ja keskeytysohjain
I/O:n ohjelmoitavat erikoistoimintaiset lohkot ja niiden ohjaussanat
SRAM –I/O - rekisterit ja datamuisti
I/O –rekisterit (ohjaus-, tila-, kirjoitus- ja lukurekisterit)
Flash -ohjelmamuisti
Keskeytysvektori (hyppytaulu: JMP + keskeytysaliohjelman nimi)
Keskeytysaliohjelmat ja konekoodi
ATmega128_EXT_INT
3
Esittelyjä C –kääntäjälle
 atmega128.h
 sfrb
I/O:njuoksunumero
Makrot
#define
I/O:n laajennus
Keskeytystenjuoksunumero
sfrb EIFR=0x38;
sfrb EIMSK=0x39;
sfrb EICRB=0x3a;
#define EICRA(*(unsigned char *) 0x6a)
// Interrupt vectors
 definitions
#define EXT_INT0 2
#define EXT_INT1 3
#define EXT_INT2 4
#define EXT_INT3 5
#define EXT_INT4 6
#define EXT_INT5 7
#define EXT_INT6 8
#define EXT_INT7 9
ATmega128_EXT_INT
4
ATmega128
Pinnit (1 … 64
Portit (A…G)
INT0 … INT7
ATmega128_EXT_INT
5
Ulkoinen keskeytys
Keskeytysvektori
Flash -muistissa
sfrb EIFR=0x38;
sfrb EIMSK=0x39;
sfrb EICRB=0x3a;
#define EICRA(*(unsigned char *) 0x6a)
// Interrupt vectors
 definitions
#define EXT_INT0 2
#define EXT_INT1 3
#define EXT_INT2 4
#define EXT_INT3 5
#define EXT_INT4 6
#define EXT_INT5 7
#define EXT_INT6 8
#define EXT_INT7 9
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: On
// INT1 Mode: Rising Edge
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=0x0E;
EICRB=0x00;
EIMSK=0x03;
EIFR=0x03;
ATmega128_EXT_INT
6
Kääntäjä, .h (header)I/O, pinnit, sfrb, SRAM, I/O-moduuli, Flash-muisti, keskeytysohjelma
ATmega128pinnit
~AUT0088
Piikkirimaliitin
Ja kytkimet
#define EXT_INT0 2
#define EXT_INT1 3
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: On
// INT1 Mode: Rising Edge
EICRA=0x0E;
EICRB=0x00;
EIMSK=0x03;
EIFR=0x03;
unsigned int laskuri = 0;
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{ laskuri++; }
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{  laskuri--; }
sfrb EIFR=0x38;
sfrb EIMSK=0x39;
sfrb EICRB=0x3a;
  // 16 bit access
sfrb SFIOR=0x20;
#define EICRA (*(unsigned char *) 0x6a)
ATmega128_EXT_INT
7
Flash -muisti
 ;INTERRUPT VECTORS
000000 940c 0047 JMP  __RESET
000002 940c 007a JMP  _ext_int0_isr
000004 940c 007e JMP  _ext_int1_isr
000006 940c 0000 JMP  0x00
000008 940c 0000 JMP  0x00
.CSEG
                 _ext_int0_isr:
00007a d05a      RCALL SUBOPT_0x0
                 ;      31 // Place your code here
                 ;      32   laskuri++;
00007b 9631      ADIW R30,1
00007c d05e      RCALL SUBOPT_0x1
                 ;      33 }
00007d 9518      RETI
                 ;      34
                 ;      35 // External Interrupt 1 service routine
                 ;      36 interrupt [EXT_INT1] void ext_int1_isr(void)
                 ;      37 {
                 _ext_int1_isr:
00007e d056      RCALL SUBOPT_0x0
                 ;      38 // Place your code here
                 ;      39     laskuri--;
00007f 9731      SBIW R30,1
000080 d05a      RCALL SUBOPT_0x1
                 ;      40 }
000081 9518      RETI
ATmega128_EXT_INT
8
External Interrupt ControlRegister A – EICRA
Ulkoisten keskeytysten ohjausrekisteri A
Bits 7..0 – ISC31, ISC30 – ISC00, ISC00:
External Interrupt 3 - 0 Sense Control bits
Ulkoisten keskeytysten 3 – 0 tunnistamista ohjaavat bitit
ATmega128_EXT_INT
9
EICRA: Keskeytystentunnistamisen ohjaus
Interrupt request = keskeytyspyyntö
Tasoliipaisu = The low level of INT
Laskeva reuna = The falling egde
Nouseva reuna = The rising egde
ATmega128_EXT_INT
10
External Interrupt ControlRegister B – EICRB
Ulkoisten keskeytysten ohjausrekisteri B
Bits 7..0 – ISC71, ISC70 - ISC41, ISC40:
External Interrupt 7 - 4 Sense Control Bits
ATmega128_EXT_INT
11
ATmega128_EXT_INT
11
External Interrupt MaskRegister – EIMSK
Bits 7..0 – INT7 – INT0: ExternalInterrupt Request 7 - 0 Enable
When an INT7 – INT0 bit is written to one and the I-bit in the StatusRegister (SREG) is set (one), the corresponding external pin interrupt isenabled. The Interrupt Sense Control bits in the External Interrupt ControlRegisters – EICRA and EICRB – defines whether the external interrupt isactivated on rising or falling edge or level sensed. Activity on any of thesepins will trigger an interrupt request even if the pin is enabled as an output.This provides a way of generating a software interrupt.
External Interrupt FlagRegister – EIFR
ATmega128_EXT_INT
12
EIFR ja MCU
Bits 7..0 – INTF7 - INTF0: ExternalInterrupt Flags 7 - 0
When an edge or logic change on the INT7:0 pin triggers an interruptrequest, INTF7:0 becomes set (one). If the I-bit in SREG and thecorresponding interrupt enable bit, INT7:0 in EIMSK, are set (one), the MCUwill jump to the interrupt vector. The flag is cleared when the interruptroutine is executed. Alternatively, the flag can be cleared by riting a logicalone to it. These flags are always cleared when INT7:0 are configured aslevel interrupt. Note that when entering sleep mode with the INT3:0interrupts disabled, the input buffers on these pins will be disabled. Thismay cause a logic change in internal signals which will set the INTF3:0flags. See “Digital Input Enable and Sleep Modes”
ATmega128_EXT_INT
13
MCU Control Register –MCUCR
MCU --- Muistin / Ulkoisen muistinuhjaukseen liittyvä yksikkö
the MCU will jump to the interrupt vector.
Hoitaa vain hypyn keskytysvektorinkautta keskytysaliohjemaan ???
ATmega128_EXT_INT
14
ATmega128_EXT_INT
15
SREG
Status Register, ALUN tilarekisteri
Bit 7 – I: Global Interrupt Enable
Bit 7 on yleinen keskeytysten sallinta ja kieltäminen.
The Global Interrupt Enable bit must be set for the interrupts to be enabled.
The individual interrupt enable control is then performed in separate control registers.
If the Global Interrupt Enable Register is cleared, none of the interrupts are enabledindependent of the individual interrupt enable settings.
The I-bit is cleared by hardware after an interrupt has occurred, and is set by the RETIinstruction to enable subsequent interrupts.
The Ibit can also be set and cleared in software with the SEI and CLI instructions, asdescribed in the instruction set reference.
ATmega128_EXT_INT
16
ATmega128_EXT_INT
16
SFIOR
TSM (Timer/Counter Synchronization Mode)
Kyseisen moodin ykköstilaan laittaminen pysäyttää ajastimen/laskurin ja pitää psr0 ja psr312rekisterissä olevat arvot. Moodin poispäältä asettaminen resetoi psr0:an ja psr321:sen arvotja käynnistää ajastimen/laskurin samanaikaisesti
ACME (Analog Comparator Multiplexer Enable)
Asetettuna päälle enabloi analogisen multiplexerin komparaattorin
PUD (Pull-up Disable)
Asetettuna päälle estää porttien ylösvedot vaikka portit olisivatkin määritelty ylösveto-asentoon
PSR0 (Prescaler Reset Timer/Counter0)
Sama kuin PSR321 toiminta, mutta tämä resetoi vain ajastimen/laskurin 0
PSR321 (Prescaler Reset Timer/Counter3-1)
Kun asetetaan ykköstilaan tapahtuu ajastimien/laskurien 1,2 ja 3 resetointi. Normaalistiasetus palautuu nollaan melkein heti resetoinnin jälkeen, ellei sitten TSM ole päällä, jokaestää PSR321 rekisterin muuttumisen nollaksi.