AVR.1    基本架構

 

 

AVR 90S4414是一顆Embedded Controller, 它是由下列單元組成 : CPU核心 (包括算術邏輯單元ALU, 程式計數器PC, 指令解碼器, 32個一般用途暫存器, 堆疊指標SP), 資料寬度為16-bit的程式記憶體 (共2K Words), 256 bytes SRAM和各式周邊I/O

 

 

32個一般用途暫存器 (General Purpose Working Registers)

AVR的CPU一共有32個一般用途的暫存器,分別是R0 ~ R31,屬於資料記憶空間的一部分; 這32個暫存器是一個多埠 (Multi-Port) 記憶體,可同時讀取2個暫存器, 並寫回一個暫存器, 例如 : ADD R16,R17; 就是同時讀取暫存器R16和暫存器R17, 最後寫回暫存器R16

 

 

算術邏輯單元 (Arithmetic Logic Unit, ALU)

算術邏輯單元ALU直接連接到32個一般用途暫存器, ALU負責暫存器與暫存器之間的運算, 或是暫存器與常數之間的運算; ALU的運算可分為3種類型 : 算術的運算, 邏輯的運算和位元的運算

 

 

程式計數器 (Program Counter, PC)

程式計數器PC連接到程式記憶體的Address Port, 作為程式讀取的指標; 讀取完一個Word的指令後,PC會自動加1, 指向下一行指令, 即PC + 1; 但是如果遇到相對分支指令, 如RJMP, RCALL時, PC還會再加K, 即PC+K+1; 另一種是絕對分支指令, 如IJMP, ICALL, PC的計數情形是PC+K

 

 

指令解碼器 (Instruction Decoder)

指令解碼器將指令碼 (或稱機械碼) 轉為控制信號, 控制CPU內其他各個單元, 例如ALU和暫存器及PC

 

 

堆疊指標 (Stack Pointer, SP)

也是屬於AVR的CPU核心之一, 它實際的位址在I/O暫存器中, 在6-5節會進一步介紹

 

 

 

 

 

AVR的記憶空間 (Memory Space)

 

AVR的記憶空間分別是程式記憶空間資料記憶空間, 這兩個記憶空間是各自獨立的兩部分, 這種架構屬於 Havard architecture (圖6-2所示)

Havard architecture使得CPU可同時存取程式及運算所需的資料, 相較於另一種架構方式V--- architecture (共用同一個記憶空間), 前者有較好的執行效率 (在6-8節有進一步的描述)

 

 

程式記憶空間

 

 

 

 

 

 

 

 

 

 

Program FLASH

(2K x 16)

 

 

 

 

 

 

 

$000

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$7FF

 

 

 

 

資料記憶空間

 

 32

 一般用途

 暫存器

$0000

 

 

$001F

$0020

 

 

 

 

 

$005F

$0060

 

 

 

 

 

 

$015F

$0160

 

 

 

 

 

 

 

 

 

 

$FFFF

 

 64I/O

 特殊用途

 暫存器

 

 

 

內部

SRAM

(256x8)

 

 

 

外部

SRAM

 

 

 

 

 

 

 

 

 

 

程式記憶空間 (Program Memory Space, 2K x 16-bits)

90S4414的程式記憶空間最多容納2K Words指令碼, 位址從$000 ~ $7FF, 其中$000 ~ $00C是作為中斷向量之用, 所以程式最好在$00D之後開始放置, 不要佔據中斷向量的空間

 

 

資料記憶空間 (Data Memory Space, 8-bits)

包括32個一般用途暫存器, 64個I/O暫存器, 256個內建SRAM, 並且可另外擴充一顆外建SRAM, 它們的特性和相關的指令如下 :

 

 

 

 

32個一般用途暫存器

 

R0

R1

R2

....

R29

R30

R31

 

I/O暫存器

 

$ 00

$ 01

$ 02

....

$ 3D

$ 3E

$ 3F

 

 

 

 

 

資料記憶空間的位址

 

$ 0000

$ 0001

$ 0002

....

$ 001D

$ 001E

$ 001F

 

$ 0020

$ 0021

$ 0022

....

$ 005D

$ 005E

$ 005F

 

 

 

 

32個一般用途暫存器

 

                                      7                       0  位址

 

R0

 $00

 $01

 $02

 

 $0F

 $10

 

 $1A

 $1B

 $1C

 $1D

 $1E

 $1F

 

R1

 

R2

 

...

 

R15

 

R16

 

...

X暫存器低位元

R26

X暫存器高位元

R27

Y暫存器低位元

R28

Y暫存器高位元

R29

Z暫存器低位元

R30

Z暫存器高位元

R31

 

 

 

 

在資料記憶體位址從 $0000 ~ $001F; 絕大部分的指令可以直接存取到這32個暫存器; 但是有關暫存器和常數運算的指令 (SBCI, SUBI, CPI, ANDI, ORI, LDI), 只限於使用R16 ~ R31的暫存器 (6-2節有進一步的說明)

 

 

另外, R26 ~ R31這六個暫存器, 可以組合成為三組16-bits的暫存器, 分別稱之為X暫存器, Y暫存器和Z暫存器; 用來作為間接位址的指標暫存器 (indirect address pointer register); 6-4節有進一步的說明

 

 

                                 15                                                            0

 

 X暫存器

 7                     0

 7                     0

                                           R27($1B)                      R26($1A)

 

 

                                 15                                                            0

 Y暫存器

 7                     0

 7                     0

                                           R29($1D)                     R28($1C)

 

 

                                 15                                                            0

 Z暫存器

 7                     0

 7                     0

 

                                           R31($1F)                      R30($1E)

 

X暫存器 (R27:R26, R27在高位元,R26在低位元, 也可以以XH,XL表示)

 

Y暫存器 (R29:R28, R29在高位元,R28在低位元, 也可以以YH,YL表示)

 

Z暫存器 (R31:R30, R31在高位元,R30在低位元, 也可以以ZH,ZL表示)

 

 

64個I/O暫存器

 

在資料記憶體位址從 $0020 ~ $005F, 每一個暫存器各自有它的特殊用途, 例如 : 狀態暫存器, 堆疊指標, 計時/計數器, 中斷設定等

 

指令IN, OUT可以移轉 I/O暫存器和32個一般暫存器之間的資料; 指令SBI, CBI可以設定 I/O暫存器的位元為0或;而指令SBIS,SBIC 可以讀取I/O暫存器的位元, 做為分支與否的條件

 

 

256 bytes內部SRAM

 

在資料記憶體位址從 $0060~$015F

 

內部SRAM提供較大量資料的存取, 指令LD, ST, LDS, STS, PUSH, POP可直接存取內部SRAM的資料

 

 

外部SRAM

 

另外,若需更大的資料記憶體空間, 可自行擴充SRAM, 外部SRAM在資料記憶體位址從 $0160 ~ $FFFF

 

指令LDS, STS可以存取外部SRAM, 不過在存取外部SRAM前, 必須將MCUCR暫存器的bit 7 (SRE) 設定為1 (SRE設定為0,是無法存取外部SRAM的)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    

文章標籤
全站熱搜
創作者介紹
創作者 zeppe 的頭像
zeppe

ZEPPE

zeppe 發表在 痞客邦 留言(0) 人氣(813)