Rodzina AVR wykład 1
Architektura AVR Przestrzenie adresowe Tryby adresowania
Cechy mikrokontrolerów AVR ATtiny2313 /ATmega8515 : AVR - architektura 3/26 Cechy mikrokontrolerów AVR ATtiny2313 /ATmega8515 : architektura typu Harvard RISC z przetwarzaniem potokowym; 120 rozkazów wykonywanych głównie w jednym cyklu zegara; 1024x16b /4096x16b pamięci FLASH programu, reprogramowalnej (104) równolegle lub szeregowo po zamontowaniu w układzie; 128B /512B wewnętrznego SRAM danych; 128B /512B wewnętrznego EEPROM (105) na dane konfiguracyjne; 32 8-bitowe uniwersalne rejestry robocze; 18/35 programowalnych linii we/wy, wyjścia o obciążalności 20mA, zgrupowanych w 3 / 5 portach;
Cechy mikrokontrolerów AVR ATtiny2313 /ATmega8515 : AVR - architektura 4/26 Cechy mikrokontrolerów AVR ATtiny2313 /ATmega8515 : napięcie zasilania: 1,8..5,5V przy 4MHz; 2,7..5,5V przy 10MHz; 4,5..5,5V przy 20MHz wbudowany generator taktu fOSC=0..20MHz; czas cyklu rozkazowego min 100ns (przy 10MHz); obudowy: PDIP20/SOIC20/MLF20 PDIP40/SOIC40/PLCC44/TQFP44/MLF44; możliwość programowania w układzie interfejsem szeregowym SPI; możliwość programowego auto-programowania; mechanizm uruchomieniowy debugWIRE; wbudowane układy RESETU i kontroli zasilania;
Cechy mikrokontrolerów AVR ATtiny2313 /ATmega8515 : AVR - architektura 5/26 Cechy mikrokontrolerów AVR ATtiny2313 /ATmega8515 : 1 8-bitowy timer/licznik z preskalerem; 1 16-bitowy timer/licznik z preskalerem i układem porównująco-przechwytującym; dwukierunkowy port szeregowy, asynchroniczny; uniwersalny interfejs szeregowy (2- lub 3-przewodowy); wbudowany generator PWM o rozdzielczości 8, 9 lub 10 bitów; 4 wyjścia PWM; wbudowany kontroler przerwań wewnętrznych i dwóch zewnętrznych; wbudowany programowalny watchdog z własnym oscylatorem; wbudowany komparator analogowy; trzy tryby pracy z obniżonym poborem mocy; możliwość dołączenia zewnętrznej pamięci danych (do 64928B).
PAMIĘĆ PROGRAMU FLASH 2kB / 8kB AVR - architektura 6/26 Struktura blokowa układów: ATtiny2313 /ATmega8515 RESET XTAL2 XTAL1 Vcc REJ.WEJ. PINA B U F O RY PAMIĘĆ PROGRAMU FLASH 2kB / 8kB REJ.WYJ. PORTA OSCYLATOR SRAM 128B / 512B REJ.KIER. DDRA GND WATCHDOG UKŁAD TAKTUJĄCY WEWNĘTRZY OSCYLATOR PA7 .. PA0 REJ.KIER DDRA REJ.WYJ. PORTA BUFORY REJ.WEJ. PINA PC SP REJ.KONTROLNE PROCESORA REJESTR ROZKAZU Z Y X REJESTRY ROBOCZE TIMERY/ LICZNIKI DEKODER ROZKAZÓW UKŁAD PRZERWAŃ 8 UKŁAD STERUJĄCY ALU EEPROM 128B/512B PC7 .. PC0 REJ.KIER DDRC REJ.WYJ. PORTC BUFORY REJ.WEJ. PINC REJ. STANU USI/SPI UKŁAD PROGRAMOWANIA SPI slave UART PD7PD6 .. PD0 REJ.KIER DDRD REJ.WYJ. PORTD BUFORY REJ.WEJ. PIND KOMP. AN. REJ.WYJ. PORTB REJ.WEJ. PINB REJ.KIER DDRB PINE B U F O RY PORTE PE2 .. PE0 BUFORY DDRE PB7 .. PB0
Standardowe obudowy układu ATtiny2313 AVR - architektura 7/26 Standardowe obudowy układu ATtiny2313 DIP / SOIC (RESET/dW) PA2 (RxD) PD0 (TxD) PD1 (XTAL2) PA1 (XTAL1) PA0 (INT0/CKOUT/XCK) PD2 (INT1) PD3 (T0) PD4 (T1/OC0B) PD5 GND VCC PB7(SCK/UCSK/PCINT7) PB6(MISO/DO/PCINT6) PB5(MOSI/DI/SDA/PCINT5) PB4(OC1B/PCINT4) PB3(OC1A/PCINT3) PB2(OC0A/PCINT2) PB1(AIN1/PCINT1) PB0(AIN0/PCINT0) PD6(ICP) 1 2 3 4 5 6 7 8 9 10 20 19 18 17 16 15 14 13 12 11 (T0) PD4 (T1/OC0B) PD5 GND (ICP) PD6 (AIN0/PCINT0) PB0 (TxD) PD1 (XTAL2) PA1 (XTAL1) PA0 (INT0/CKOUT/XCK) PD2 (INT1) PD3 PB7(SCK/UCSK/PCINT7) PB6(MISO/DO/PCINT6) PA2 (RESET/dW) PD0 (RxD) VCC PB5(MOSI/DI/SDA/PCINT5) PB4(OC1B/PCINT4) PB3(OC1A/PCINT3) PB2(OC0A/PCINT2) PB1(AIN1/PCINT1) MLF
Standardowe obudowy układu ATmega8515 AVR - architektura 8/26 Standardowe obudowy układu ATmega8515 (MOSI) PB5 (MISO) PB6 (SCK) PB7 RESET (RxD) PD0 n.c. (TxD) PD1 (INT0) PD2 (INT1) PD3 (XCK) PD4 (OC1A) PD5 (WR) PD6 (RD) PD7 XTAL2 XTAL1 GND (A8) PC0 (A9) PC1 (A10) PC2 (A11) PC3 (A12) PC4 PA4 (AD4) PA5 (AD5) PA6 (AD6) PA7 (AD7) PE0 (ICP/INT2) PE1 (ALE) PE2 (OC1B) PC7 (A15) PC6 (A14) PC5 (A13) PB0 (OC0/T0) PB3 (AIN1) PB2 (AIN0) PA0 (AD0) PA1 (AD1) PA2 (AD2) PA3 (AD3) PB4 (SS) PB1 (T1) VCC (OC0/T0) PB0 (T1) PB1 (AIN0) PB2 (AIN1) PB3 (SS) PB4 (MOSI) PB5 (MISO) PB6 (SCK) PB7 RESET (RxD) PD0 (TxD) PD1 (INT0) PD2 (INT1) PD3 (XCK) PD4 (OC1A) PD5 (WR) PD6 (RD) PD7 XTAL2 XTAL1 GND 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 VCC PA0 (AD0) PA1 (AD1) PA2 (AD2) PA3 (AD3) PA4 (AD4) PA5 (AD5) PA6 (AD6) PA7 (AD7) PE0 (ICP/INT2) PE1 (ALE) PE2 (OC1B) PC7 (A15) PC6 (A14) PC5 (A13) PC4 (A12) PC3 (A11) PC2 (A10) PC1 (A9) PC0 (A8) DIP PLCC / TQFP / MLF
AVR - przestrzenie adresowe 9/26 Przestrzenie adresowe układu ATtiny2313 adres startowy programu = 0000h 19 pierwszych adresów - wektory przerwań 15 0 wektory obsługi zdarzeń program 000h 001h 012h 013h 3FFh rejestry robocze blok rejestrów we/wy 128B SRAM danych 00h 1Fh 20h adresy 5Fh 60h RAM 0DFh portów 3Fh 128B EEPROM 00h 7Fh
AVR - przestrzenie adresowe 10/26 Przestrzenie adresowe układu ATmega8515 adres startowy programu = 0000h 17 pierwszych adresów - wektory przerwań 15 0 wektory obsługi zdarzeń program 000h 001h 010h 011h FFFh 512B EEPROM 00h 7Fh rejestry robocze blok rejestrów we/wy SRAM danych 1Fh 20h adresy 5Fh 60h RAM 25Fh portów 3Fh 0260h RAM zewn FFFFh
AVR - rejestry robocze 11/26 Komórki wewnętrznego RAM z obszaru 00h..1Fh mogą być używane jako 32 rejestry robocze: R0 00h: R1 01h: R2 02h: R3 03h: R4 04h: R5 05h: R6 06h: R7 07h: R8 08h: R9 09h: R10 0Ah: R11 0Bh: R12 0Ch: R13 0Dh: R14 0Eh: R15 0Fh: R16 10h: R17 11h: R18 12h: R19 13h: R20 14h: R21 15h: R22 16h: R23 17h: R24 18h: R25 19h: R26 1Ah: R27 1Bh: R28 1Ch: R29 1Dh: R30 1Eh: R31 1Fh: Rejestry R26..R31 tworzą 16-bitowe pary adresujące pamięć. }X: }Z: }Y: 15 0 R26 R27 R28 R29 R30 R31
AVR - rejestry we/wy ATtiny2313/ATmega8515 12/26 Blok rejestrów wejścia-wyjścia: przestrzeń 64 adresów: - od 20h do 5Fh jako komórki RAM - od 00h do 3Fh jako porty we/wy; zawiera rejestry umożliwiające: - dostęp do wbudowanych peryferii - sterowanie pracą mikrokontrolera - kontrolowanie systemu przerwań ekstensywne wykorzystanie adresów pozwala na projektowanie wersji mikrokontrolera różniących się wbudowanymi urządzeniami zewn.; ... ICF1 TOV0 TIFR 38h bit nie zaimplementowany adres rejestru jako portu we/wy nazwa rejestru nazwa bitu 58h adres rejestru jako komórki RAM
AVR - rejestry we/wy ATtiny2313/mega8515 13/26 H S V N Z C SREG 3Fh 5Fh 3Eh SPH 5Eh 3Dh SPL 5Dh INT1 INT0 INT2 PCIE GIMSK 3Bh 5Bh GICR INTF1 INTF0 INTF2 PCIF GIFR 3Ah 5Ah EIFR TOIE1 OCIE1A OCIE1B TICIE1 TOIE0 OCIE0 ICIE1 OCIE0B OCIE0A TIMSK 39h 59h TOV1 OCF1A OCF1B ICF1 TOV0 OCF0 OCF0B OCF0A TIFR 38h 58h CTPB RFLB PGWRT PGERS SELFPRGEN SPMCSR 37h 57h SPMIE RWWSB RWWSRE BLBSET PGWRT PGERS SELFPRGEN SPMCR 37h 57h
AVR - rejestry we/wy ATtiny2313/mega8515 14/26 timer/licznik 0 - bajt wzorca A OCR0A 36h 56h EMCUCR 56h SM0 SRL2 SRL1 SRL0 SRW01 SRW00 SRW11 ISC2 36h PUD SM1 SE SM0 ISC11 ISC10 ISC01 ISC00 MCUCR 35h 55h SRE SRW10 SE SM1 ISC11 ISC10 ISC01 ISC00 MCUCR 35h 55h WRDF BORF EXTRF PORF MCUSR 34h 54h MCUCSR 54h SM2 WRDF BORF EXTRF PORF 34h FOC0A FOC0B WGM02 CS02 CS01 CS00 TCCR0B 33h 53h FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00 TCCR0 33h 53h 8-bitowy timer/licznik 0 TCNT0 32h 52h CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0 OSCCAL 31h 51h timer/licznik 0 - bajt wzorca OCR0 31h 51h COM0A1 COM0A0 COM0B1 COM0B0 WGM01 WGM00 TCCR0A 30h 50h SFIOR 50h XMBK XMM2 XMM1 XMM0 PUD PSR10 30h
AVR - rejestry we/wy ATtiny2313/mega8515 15/26 COM1A1 COM1A0 COM1B1 COM1B0 WGM11 WGM10 TCCR1A 2Fh 4Fh COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B WGM11 WGM10 TCCR1A 2Fh 4Fh ICNC1 ICES1 WGM13 WGM12 CS12 CS11 CS10 TCCR1B 2Eh 4Eh timer/licznik 1 - st. bajt licznika TCNT1H 2Dh 4Dh timer/licznik 1 - mł. bajt licznika TCNT1L 2Ch 4Ch timer/licznik 1 - st. bajt wzorca A OCR1AH 2Bh 4Bh timer/licznik 1 - mł. bajt wzorca A OCR1AL 2Ah 4Ah timer/licznik 1 - st. bajt wzorca B OCR1BH 29h 49h timer/licznik 1 - mł. bajt wzorca B OCR1BL 28h 48h CLKPCE CLKPS3 CLKPS2 CLKPS1 CLKPS0 CLKPR 26h 46h timer/licznik 1 - st. bajt przechwytujący ICR1H 25h 45h timer/licznik 1 - mł. bajt przechwytujący ICR1L 24h 44h PSR10 GTCCR 23h 43h FOC1A FOC1B TCCR1C 22h 42h
AVR - rejestry we/wy ATtiny2313/mega8515 16/26 WDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDP0 WDTCSR 21h 41h WDCE WDE WDP2 WDP1 WDP0 WDTCR 21h 41h PCINT7 PCINT6 PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT0 PCMSK 20h 40h rej. szybk. transmisji: UBRR11..8 UBRRH URSEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL UCSRC 20h 40h EEAR8 EEARH 1Fh 3Fh adres dostępu do EEPROM EEAR6..0 EEAR 1Eh 3Eh adres dostępu do EEPROM EEAR7..0 EEARL 1Eh 3Eh rejestr buforowy danych EEPROM EEDR 1Dh 3Dh EEPM1 EEPM0 EERIE EEMPE EEPE EERE EECR 1Ch 3Ch EERIE EEMWE EEWE EERE EECR 1Ch 3Ch PORTA 1Bh 3Bh rej. wyjściowy PORTA 1Bh 3Bh rej. wyjściowy DDRA 1Ah 3Ah rej. kierunku DDRA 1Ah 3Ah rej. kierunku rej. wejściowy PINA 19h 39h rej. wejściowy PINA 19h 39h
AVR - rejestry we/wy ATtiny2313/mega8515 17/26 PORTB 18h 38h DDRB 17h 37h rej. wejściowy PINB 16h 36h rej. kierunku rej. wyjściowy GPIOR2 15h 35h uniwersalny rejestr I/O #2 PORTC 15h 35h rej. wyjściowy GPIOR1 14h 34h uniwersalny rejestr I/O #1 DDRC 14h 34h rej. kierunku uniwersalny rejestr I/O #0 GPIOR0 13h 33h rej. wejściowy PINC 13h 33h rej. wyjściowy PORTD 12h 32h rej. wyjściowy PORTD 12h 32h rej. kierunku DDRD 11h 31h rej. kierunku DDRD 11h 31h rej. wejściowy PIND 10h 30h rej. wejściowy PIND 10h 30h
AVR - rejestry we/wy ATtiny2313/mega8515 18/26 rej. uniwersalnego portu szeregowego USI USIDR 0Fh 2Fh rej. portu szeregowego SPI SPDR 0Fh 2Fh USISIF USIOIF USIPF USIDC USICNT3 USICNT2 USICNT1 USICNT0 USISR 0Eh 2Eh SPIF WCOL SPSR 0Eh 2Eh SPI2X USISIE USIOIE USIWM1 USIWM0 USICS1 USICS0 USICLK USITC USICR 0Dh 2Dh SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0 SPCR 0Dh 2Dh rej. portu szeregowego UDR 0Ch 2Ch RXC TXC UDRE FE DOR UPE U2X MPCM UCSRA 0Bh 2Bh RXC TXC UDRE FE DOR PE U2X MPCM UCSRA 0Bh 2Bh RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8 UCSRB 0Ah 2Ah rejestr szybkości transmisji: UBRR7..0 UBRRL 09h 29h ACD ACO ACI ACIE ACIC ACIS1 ACIS0 ACSR 08h 28h ACD ACBG ACO ACI ACIE ACIC ACIS1 ACIS0 ACSR 08h 28h
AVR - rejestry we/wy ATtiny2313/mega8515 19/26 PORTE 07h 27h rej. wyjściowy DDRE 06h 26h rej. kierunku rej. wejściowy PINE 05h 25h CAL7 CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0 OSCCAL 04h 24h UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL UCSRC 03h 23h UBRR11..8 UBRRH 02h 22h AIN1D AIN0D DIDR 01h 21h
AVR - rejestry we/wy - SREG 20/26 I T H S V N Z C SREG 3Fh 5Fh I - flaga zezwolenia na przerwania T - bit pośredni przy przesłaniach bitów rozkazami BST i BLD H - flaga przeniesienia połówkowego przy dodawaniu (między bitami 3 i 4) S - flaga znaku wyniku operacji na liczbach w U2 (=V xor N) V - flaga nadmiaru po operacjach na liczbach w U2 N - flaga ujemnej wartości wyniku operacji na liczbach w U2 Z - flaga zerowej wartości wyniku operacji C - flaga przeniesienia
AVR - rejestry we/wy - SPL,SPH i stos 21/26 3Eh SPH 5Eh 3Dh SPL 5Dh Rejestr adresujący wierzchołek stosu programowego - wskazuje na pierwszą wolną komórkę na stosie. Po resecie przyjmuje wartość 00h ! Stos Funkcjonuje tylko w wewnętrznym RAM - ograniczony obszar. Zapis na stos powoduje przesuwanie się wierzchołka stosu w kierunku niższych adresów, odczyt - odwrotnie. ! Możliwe jest „zawinięcie” stosu modulo rozmiar wbudowanej wewn. RAM. Przy zapisie na stos PC bardziej znaczący bajt trafia na niższy adres. 2Bh R7: 11h R9: 88h SPL: 22h 89h: x 88h: 87h: 33h 8Ah: RAM stos 88h 2Bh 87h 2Bh PUSH R7 POP R9
AVR - tryby adresowania 22/26 Tryby adresowania operandów - bajtów natychmiastowy kod rozkazu argument ldi r20,200 adiw r24,50 argument: 8bNB argument: 6bNB (0..63) rejestrowy operand kod rozkazu Rx: inc r6 bezpośredni kod rozkazu operand adres RAM wewn. lds r16,0x60
AVR - tryby adresowania 23/26 rejestrowy pośredni RAM wewn adres16b kod rozkazu X/Y/Z: ld r8,x FLASH adres16b kod rozkazu R31R30: lpm
AVR - tryby adresowania 24/26 rejestrowy pośredni z predekrementacją RAM wewn adres16b kod rozkazu X/Y/Z: ld r8,-y adres16b-1 operand rejestrowy pośredni z postinkrementacją RAM wewn adres16b kod rozkazu X/Y/Z: ld r8,z+ adres16b+1 operand
AVR - tryby adresowania 25/26 adresowanie bazowe Y/Z: kod rozkazu operand RAM wewn. baza ldd r3,z+10 std y+63,r5 d d: 6bNB (0..63) Tryb adresowania operandów - bitów bezpośredni kod rozkazu rejestr roboczy /port we-wy bst r10,3 cbi spl,0 bit adr
AVR - tryby adresowania 26/26 Dostępność trybów adresowania w ATtiny2313 FFFFh FFh DFh 60h 00h porty we/wy 20h RAM rejestrowy z predekrementacją bezpośredni rejestrowy bezpośredni-bitów rejestrowy pośredni z X/Y/Z bazowy z Y/Z rejestrowy z postinkrementacją 7 0 pamięć danych rejestry robocze rejestrowy pośredni z rej. Z 7FFh 7FEh 001h 000h pamięć programu 15 0 3FFh 000h