Programowanie mikrokontrolerów ATmega16

background image

Programowanie mikrokontrolerów

ATmega16

Marcin Engel

Marcin Peczarski

Instytut Informatyki Uniwersytetu Warszawskiego

23 września 2010

background image

Poznajemy ATmega16

(XCK/T0) PB0

(T1) PB1

(INT2/AIN0) PB2

(OC0/AIN1) PB3

(SS) PB4

(MOSI) PB5

(MISO) PB6

(SCK) PB7

RESET

VCC

GND

XT

AL2

XT

AL1

(RXD) PD0

(TXD) PD1

(INT0) PD2

(INT1) PD3

(OC1B) PD4

(OC1A) PD5

(ICP1) PD6

P

A0 (ADC0)

P

A1 (ADC1)

P

A2 (ADC2)

P

A3 (ADC3)

P

A4 (ADC4)

P

A5 (ADC5)

P

A6 (ADC6)

P

A7 (ADC7)

AREF

GND

A

VCC

PC7 (T

OSC2)

PC6 (T

OSC1)

PC5 (TDI)

PC4 (TDO)

PC3 (TMS)

PC2 (TCK)

PC1 (SDA)

PC0 (SCL)

PD7 (OC2)

background image

Architektura mikrokontrolera ATmega16

I

Procesor o zredukowanym zbiorze rozkazów (RISC)

I

Architektura little-endian

I

Architektura harwardzka (odrębne pamięci i magistrale dla
programu i danych)

I

16 kiB pamięci programu (pamięć flash)

I

1 kiB pamięci danych (SRAM)

I

32 rejestry ogólnego przeznaczenia

I

64 rejestry wejścia-wyjścia, układy peryferyjne

I

512 bajtów pamięci nieulotnej (EEPROM)

I

3 liczniki

I

21 przerwań (o ustalonej kolejności obsługi)

I

Interfejsy szeregowe: USART, I

2

C

I

8-kanałowy, 10-bitowy przetwornik A/C

background image

Architektura, schemat blokowy

Flash

Program

Memory

Instruction

Register

Instruction

Decoder

Program

Counter

Control Lines

32 x 8

General

Purpose

Registrers

ALU

Status

and Control

I/O Lines

EEPROM

Data Bus 8-bit

Data

SRAM

Direct Addressing

Indirect Addressing

Interrupt

Unit

SPI

Unit

Watchdog

Timer

Analog

Comparator

I/O Module 2

I/O Module1

I/O Module n

background image

Najprostszy układ

Podłączamy:

I

zasilanie (nóżki VCC, AVCC, GND),

I

układ reset (nóżka RESET),

I

złącze programatora (nóżki MOSI, MISO, SCK, RESET, VCC,
GND).

Wyjaśnienia:

I

VCC na schematach oznacza „+” zasilania (inne oznaczenie
to VDD),

I

AVCC oznacza „+” zasilania części analogowej,

I

GND to „” zasilania,

I

RESET oznacza odwróconą logikę (tj. reset jest aktywny, jeśli
podamy niski poziom napięcia).

background image

Zasilanie

I

Układ ATmega16 wymaga zasilania napięciem stałym
z zakresu od 4,5 do 5,5 V (wersja 16L od 2,7 V).

I

Nowsza wersja układu ATmega16A może być zasilana
napięciem z zakresu od 2,7 V do 5,5 V.

I

Zwykle stosujemy scalony stabilizator napięcia 5 V typu 7805.

1

background image

Zasilanie, cd.

I

Schemat połączeń znajduje się w nocie katalogowej.

7805

V

in

V

out

1

2

3

I

Na płytce testowej znajduje się mostek prostowniczy
i stabilizator o regulowanym napięciu wyjściowym.

background image

Układ resetu

I

Normalnie na nóżce RESET powinien być stan wysoki.

I

Chcemy móc ręczne zresetować urządzenie (np. przyciskiem).

I

Programator również musi móc zresetować układ.

I

Rezystor podciągający na ogół nie jest potrzebny (jest
wewnętrzny).

Rozwiązanie:

background image

Przestrzeń adresowa

Są trzy rozdzielne przestrzenie adresowe:

I

pamięć danych

I

zorganizowana w bajty

I

rejestry ogólnego przeznaczenia

I

rejestry wejścia-wyjścia

I

SRAM

I

nieulotna pamięć danych

I

zorganizowana w bajty

I

EEPROM

I

dostęp przez rejestry wejścia-wyjścia za pomocą odpowiedniej
sekwencji rozkazów

I

pamięć programu

I

zorganizowana w słowa 16-bitowe

I

przy dostępie do rozkazów adresowana słowami

I

przy dostępie do danych adresowana bajtami

background image

Rejestry

7

0

Addr.

R0 $00

R1

$01

R2

$02

R13

$0D

General

R14

$0E

Purpose

R15

$0F

Working

R16

$10

Registers

R17

$11

R26

$1A

X-register Low Byte

R27

$1B

X-register High Byte

R28

$1C

Y-register Low Byte

R29

$1D

Y-register High Byte

R30

$1E

Z-register Low Byte

R31

$1F

Z-register High Byte

I

32 rejestry 8-bitowe: R0, . . . , R31

I

W rozkazach z adresowaniem natychmiastowym można
stosować tylko rejestry R16, . . . , R31.
LDI R16, 123
SUBI R18, 5

I

Przesłania wartości są możliwe między każdą parą rejestrów.
MOV R3, R19

I

Operacje arytmetyczno-logiczne można wykonywać na danych
w dowolnych rejestrach.
ADD R9, R17

background image

Rejestry

7

0

Addr.

R0 $00

R1

$01

R2

$02

R13

$0D

General

R14

$0E

Purpose

R15

$0F

Working

R16

$10

Registers

R17

$11

R26

$1A

X-register Low Byte

R27

$1B

X-register High Byte

R28

$1C

Y-register Low Byte

R29

$1D

Y-register High Byte

R30

$1E

Z-register Low Byte

R31

$1F

Z-register High Byte

I

Do adresowania pośredniego pamięci danych używa się par
rejestrów:

I

para rejestrów R27:R26 to rejestr X,

I

para rejestrów R29:R28 to rejestr Y,

I

para rejestrów R31:R30 to rejestr Z.
LD R16, X
ST Y, R17

I

Rejestr Z można stosować do adresowania pośredniego
pamięci programu (rozkazy LPM, SPM).

background image

Rejestry

7

0

Addr.

R0 $00

R1

$01

R2

$02

R13

$0D

General

R14

$0E

Purpose

R15

$0F

Working

R16

$10

Registers

R17

$11

R26

$1A

X-register Low Byte

R27

$1B

X-register High Byte

R28

$1C

Y-register Low Byte

R29

$1D

Y-register High Byte

R30

$1E

Z-register Low Byte

R31

$1F

Z-register High Byte

I

Rejestry R24, . . . , R31 mogą być używane, do operacji na
danych 16-bitowych.
ADDW R25:R24, 3

I

Para rejestrów R1:R0 jest domyślnym miejscem wyniku
operacji mnożenia.

I

Możliwe są przesłania 16-bitowe między parami rejestrów.
MOVW R13:R12, R17:R16

I

Rejestry są mapowane na adresy od $00 do $1F w przestrzeni
adresowej danych.

background image

Pamięć wejścia-wyjścia

I/O Registers

$00
$01
$02

$3D
$3E

$3F

...

I

Zawiera 64 rejestry wejścia-wyjścia odpowiedzialne m.in. za
konfigurację poszczególnych układów wejścia-wyjścia (np.
rejestry PORTx, DDRx, SP, SREG).

I

Adresowane od $00 do $3F.

I

Adresy mapowane na adresy od $20 do $5F pamięci danych.

I

Zapis odbywa się za pomocą rozkazu OUT, a odczyt za
pomocą rozkazu IN.

I

Na pierwszych 32 rejestrach we/wy można bezpośrednio
ustawiać bity (rozkazy SBI, CBI) i je sprawdzać (rozkazy
SBIS, SBIC).

background image

Rejestr stanu

I

Znajduje się w pamięci we-wy pod adresem SREG ($3F).

I

Jest uaktualniany po każdej operacji arytmetyczno-logicznej.

Bit

7

6

5

4

3

2

1

0

I

T

H

S

V

N

Z

C

SREG

Read/Write

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

Initial Value

0

0

0

0

0

0

0

0

I

bit I – włączone przerwania

I

bit T – do przechowania dowolnego bitu (rozkazy BLD, BST)

I

bit H – przeniesienie z młodszego półbajta do starszego

I

bit V – nadmiar w arytmetyce uzupełnieniowej do dwóch

I

bit N – bit znaku wyniku operacji

I

bit S – bit znaku rzeczywistego wyniku operacji S = V N

I

bit Z – wynikiem operacji jest zero

I

bit C – przeniesienie z najstarszego bitu

background image

Pamięć danych – podsumowanie

I

Adresowana od $0000 do $045F (stała RAMEND)

I

1 kiB o adresach od $0060 do $045F to pamięć ulotna SRAM

I

Na adresy od $0000 do $005F są wirtualnie odwzorowane
rejestry ogólnego przeznaczenia i pamięć wejścia-wyjścia, np.:
rozkazy OUT $10, R18 oraz ST $30, R18 mają ten sam
efekt! Ale pierwszy działa szybciej.

R0
R1
R2

R29
R30
R31

I/O Registers

$00
$01
$02

...

$3D
$3E
$3F

...

$0000
$0001
$0002

$001D
$001E

$001F

$0020
$0021
$0022

...

$005D
$005E
$005F

...

$0060
$0061

$045E
$045F

...

Internal SRAM

background image

Stos

I

Znajduje się w pamięci danych.

I

Przed wykonaniem jakiejkolwiek operacji na stosie programista
musi ustawić dwubajtowy wskaźnik stosu SP w pamięci we-wy.

I

Wskaźnik stosu SP składa się z dwóch rejestrów SPH i SPL.

I

Stos rośnie w dół pamięci (od wysokich adresów do niskich).

I

SP pokazuje zawsze na pierwszy wolny bajt pod wierzchołkiem
stosu.

I

Rozkaz PUSH odkłada jeden bajt na stos, a POP zdejmuje
jeden bajt ze stosu.

I

Wywołanie podprogramu (RCALL, CALL) odkłada dwa bajty
(adres powrotu) na stos, a powrót z niego (RET) zdejmuje
dwa bajty.

background image

Typowa inicjacja stosu

LDI R16, HIGH (RAMEND)
OUT SPH, R16
LDI R16, LOW (RAMEND)
OUT SPL, R16

background image

Nieulotna pamięć danych

I

Stanowi odrębną przestrzeń adresową.

I

Dostęp do niej odbywa się za pomocą specjalnych rejestrów
we-wy (EEAR, EEDR, EECR).

I

Protokół dostępu do tej pamięci poznamy w dalszej części
wykładu.

background image

Pamięć programu

$0000

$1FFF

Application Flash Section

Boot Flash Section

I

Ma 16 kiB.

I

Jest podzielona na dwie części
z niezależną ochroną dostępu: boot
loader oraz część aplikacji.

I

Większość kodów rozkazów jest
2-bajtowa (1 słowo), ale są też
rozkazy 4-bajtowe (2 słowa).

I

Program może modyfikować sam
siebie.

background image

Tryby adresowania

I

natychmiastowe: LDI R16, 3

I

bezpośrednie: LDS R1, 100

I

pośrednie: LD R1, X

I

pośrednie z postinkrementacją: LD R1, X+

I

pośrednie z predekrementacją: LD R1, -X

I

pośrednie z przemieszczeniem: LDD R1, Y+2

I

pośrednie pamięci programu: LPM R1, Z

background image

Przerwania

I

Kod programu rozpoczyna się od wektora przerwań.

I

Zgłoszenie przerwania powoduje sprzętowe:

I

odłożenie na stos adresu powrotu (ale nie rejestru stanu!),

I

zablokowanie przerwań poprzez wyzerowanie bitu I w rejestrze
stanu SREG,

I

wykonanie rozkazu spod odpowiedniego adresu w pamięci
programu.

I

Program obsługi przerwania zwykle kończy się rozkazem
RETI, który włącza przerwania.

background image

Wektor przerwań

Vector No.

Program

Address

Source

Interrupt Definition

1

$000

RESET

External Pin, Power-on Reset, Brown-out
Reset, Watchdog Reset, and JTAG AVR
Reset

2

$002

INT0

External Interrupt Request 0

3

$004

INT1

External Interrupt Request 1

4

$006

TIMER2 COMP

Timer/Counter2 Compare Match

5

$008

TIMER2 OVF

Timer/Counter2 Overflow

6

$00A

TIMER1 CAPT

Timer/Counter1 Capture Event

7

$00C

TIMER1 COMPA

Timer/Counter1 Compare Match A

8

$00E

TIMER1 COMPB

Timer/Counter1 Compare Match B

9

$010

TIMER1 OVF

Timer/Counter1 Overflow

10

$012

TIMER0 OVF

Timer/Counter0 Overflow

11

$014

SPI, STC

Serial Transfer Complete

12

$016

USART, RXC

USART, Rx Complete

13

$018

USART, UDRE

USART Data Register Empty

14

$01A

USART, TXC

USART, Tx Complete

15

$01C

ADC

ADC Conversion Complete

16

$01E

EE_RDY

EEPROM Ready

17

$020

ANA_COMP

Analog Comparator

18

$022

TWI

Two-wire Serial Interface

19

$024

INT2

External Interrupt Request 2

20

$026

TIMER0 COMP

Timer/Counter0 Compare Match

21

$028

SPM_RDY

Store Program Memory Ready

background image

Kiedy pojawia się przerwanie RESET

Po włączeniu zasilania (power-on reset)

V

RESET

TIME-OUT

INTERNAL

RESET

t

TOUT

V

POT

V

RST

CC

background image

Kiedy pojawia się przerwanie RESET

Na skutek resetu zewnętrznego

CC

background image

Kiedy pojawia się przerwanie RESET

Przy spadku napięcia (brown-out detection)

V

CC

RESET

TIME-OUT

INTERNAL

RESET

V

BOT-

V

BOT+

t

TOUT

background image

Kiedy pojawia się przerwanie RESET

Przy braku wyzerowania układu watchdog

CK

CC

background image

Co się dzieje po resecie?

I

Ustawienie rejestrów we/wy na wartości początkowe

I

Rozpoczęcie wykonania programu od instrukcji znajdującej się
pod adresem 0 (przerwanie 0)

background image

Pierwszy program

.CSEG

; segment kodu

.ORG 0

; przerwanie o adresie 0 = reset

JMP START

.ORG 42

; pierwszy adres za wektorem przerwań

START:

LDI R16, 0b00001111
OUT DDRA, R16

; nogi PA0..PA3 jako wyjścia

LDI R16, 0b00001011
OUT PORTA, R16

; nogi PA0,PA1,PA3 stan wysoki
; noga PA2 stan niski

PETLA:

RJMP PETLA

; główna pętla programu

background image

Cykl wykonania instrukcji

I

Gdy nie ma skoków.

takt zegara

T1

T2

T3

T4

instrukcja 1

fetch

execute

instrukcja 2

fetch

execute

instrukcja 3

fetch

execute

I

Gdy instrukcja 1 wykona skok do instrukcji 3.

takt zegara

T1

T2

T3

T4

instrukcja 1

fetch

execute execute

instrukcja 2

fetch

instrukcja 3

fetch

execute

background image

Cykl wykonania instrukcji, cd.

I

Gdy instrukcja 1 potrzebuje więcej taktów do wykonania.

takt zegara

T1

T2

T3

T4

instrukcja 1

fetch

execute execute

instrukcja 2

fetch

execute

I

Dokumentacja podaje liczbę taktów execute.

I

Z wyjątkiem dwóch instrukcji (SPM, BREAK) wszystkie
pozostałe potrzebują maksymalnie cztery takty execute.

I

Większość instrukcji potrzebuje jeden lub dwa takty execute.

I

Czas wykonywania programu jest w pełni przewidywalny –
brak spekulatywnego wykonywania instrukcji.

background image

Jednostka arytmetyczno-logiczna ALU

I

Rozkazy arytmetyczne 8-bitowe wykonuje w jednym cyklu
zegara.

I

Rozkazy arytmetyczne 16-bitowe i rozkazy mnożenia wykonuje
w dwóch cyklach zegara.

I

Wspiera operacje na liczbach bez znaku, ze znakiem (notacja
uzupełnieniowa do dwóch) oraz ułamkowych
(stałoprzecinkowych).

I

Rejestr stanu (SREG) jest uaktualniany po każdej operacji
ALU.


Wyszukiwarka

Podobne podstrony:
Programowanie Mikrokontrolera Atmega 16 PL
ZL5PRG Programator mikrokontrol Nieznany
AVR i ARM7 Programowanie mikrokontrolerow dla kazdego avrar7
Podstawy Programowania Mikrokontrolera 8051
Programowanie mikrokontrolerow 8051 w jezyku C
Galka Galka Podstawy Programowania Mikrokontrolera 8051
Podstawy programowania mikrokontrolera 8051
Podstawy programowania mikrokontrolerów AVR8 w środowisku AVR Studio 4
Podstawy programowania mikrokontrolera 8051(300dpi)
Programowanie mikroprocesora Atmega, ELEKTRONIKA, ATMEGA(1)(1)
programowanie mikrokontrolerów
kurs programowania w języku ms basic, Programowanie mikrokontrolerów
Podstawy programowania mikrokontrolera 8051
Programowanie mikrokontrolerów za pomocą programatora USBasp
programator mikrokomputerow 89C Nieznany
Programowanie mikrokontrolerów PIC
proj, Edukacja, studia, Semestr V, Programowanie Mikrokomputerów, Ćwiczenia
ZL5PRG Programator mikrokontrol Nieznany

więcej podobnych podstron