ATmega328P是Atmel公司(现Microchip公司)推出的一个基于AVR架构的高性能低功耗单片机,拥有32KB的Flash、1KB的EEPROM以及2KB的SRAM等资源,具体如下表:
资源
主要特征
Flash
32KB
频率
16MHz
EEPROM
1024B
定时器
2个8bit,1个16bit
PWM
6通道
ADC
8通道10bit
比较器
1
GPIO
23
USART
1
SPI
1
TWI
1
看门狗
1
RTC
1
电压
0~8MHz @ 2.7~5.5V
0~16MHz @ 4.5~5.5V
如下图所示,ATmega328P的AVR核心通过数据总线与各个外设相连,另外也可以发现AVR采用的是哈佛架构,Flash和SRAM相互独立,通过不同的总线与AVR核心相连。
AVR内核包含两块内存空间:数据空间(data memory)和程序空间(program memory),另外,ATmega328P还包含额外用于数据存储的EEPROM空间(EEPROM memory)。
ATmega328P的程序指令存储在片上的32KB Flash中,由于AVR指令都是16位或32位的,因此Flash是以16位(1个字)为单元组织的,即16Kx16bit,地址空间为0x0000~0x3FFF。
ATmega328P的程序空间分为两个部分:Application和Bootloader。Bootloader存放在高地址处,大小可以通过fuse相关位进行配置,有256/512/1024/2048字4种选择。
可以通过 LPM
指令访问整个程序空间。
ATmega328P的数据空间大小为2303字节,由4个部分组成:
寄存器堆:包含32个通用寄存器。
MOV
/ MOVW
指令访问,地址为0x00~0x1F。I/O空间:包含64个I/O寄存器。
IN
/ OUT
指令访问时,I/O空间独立编址到0x00~0x3F;LD
/ LDS
/ LDD
/ ST
/ STS
/ STD
访问时,地址为I/O地址+0x20;SBI
/ CBI
/ SBIS
/ SBIC
指令访问。扩展I/O空间:包含160个扩展I/O寄存器。
LD
/ LDS
/ LDD
/ ST
/ STS
/ STD
指令访问。SRAM空间:2KB,地址从0x0100开始。
数据空间支持5种寻址方式:
对SRAM的访问需要耗费2个CPU周期。
ATmega328P拥有1KB的EEPROM空间,能够对其进行单字节的读写操作,需要通过 EEARH
、 EEARL
、 EEDR
、 EECR
寄存器进行访问。
如下图所示,AVR内核采用哈佛架构,程序空间和数据空间相互独立。指令以单级流水线方式执行,执行一条指令的同时预取出下一条指令。
AVR内核由ALU(算术逻辑单元)、 SREG
(状态寄存器)、通用寄存器堆、 SP
(最栈指针)、 PC
(程序计数器)构成。
ALU能够以单周期的时间对32个通用寄存器进行算术、逻辑、位操作,一些实现中还支持乘法运算。
通用寄存器堆支持以下4种操作:
其中,只有 r16
至 r31
支持立即数寻址,r26
至 r31
可以两两组合为索引寄存器 X
、 Y
、 Z
,供间接寻址时使用。
SREG
(状态寄存器)包含8个标志位:
标志位
名称
描述
I
中断使能位
置位使能中断,使用 SEL
/ CLI
指令访问
T
传输位
使用 BLD
/ BST
指令访问
H
半进位标志
当bit 3向bit 4进位时置位
S
符号位
S
= N
xor V
V
溢出标志
结果超过符号数范围时置位
N
负数标志
结果是负数时置位
Z
零标志
结果为0时置位
C
进位标志
结果超过无符号数范围时置位
SP
(堆栈指针)位于I/O空间,用于存储局部变量、中断和子程序的返回地址。堆栈从地址高处往低处增长, SP
指向下一个可用的位置(即空减栈)。
PC
(程序计数器)指向下一条执行指令的地址。ATmega328P的 PC
为14位宽度,由于Flash存储单元是16位宽,所以可以寻址2^14=16K个字(即32KB)。上电时, PC
的值为0x0000。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章