AVR汇编(二):AVR架构介绍

ATmega328P介绍

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内存空间

AVR内核包含两块内存空间:数据空间(data memory)和程序空间(program memory),另外,ATmega328P还包含额外用于数据存储的EEPROM空间(EEPROM memory)。

Program Memory

ATmega328P的程序指令存储在片上的32KB Flash中,由于AVR指令都是16位或32位的,因此Flash是以16位(1个字)为单元组织的,即16Kx16bit,地址空间为0x0000~0x3FFF。

ATmega328P的程序空间分为两个部分:Application和Bootloader。Bootloader存放在高地址处,大小可以通过fuse相关位进行配置,有256/512/1024/2048字4种选择。

可以通过 LPM 指令访问整个程序空间。

Data Memory

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;
    • I/O地址为0x00~0x1F的寄存器支持位寻址,可以通过 SBI / CBI / SBIS / SBIC 指令访问。
  • 扩展I/O空间:包含160个扩展I/O寄存器。
    • 只能通过 LD / LDS / LDD / ST / STS / STD 指令访问。
  • SRAM空间:2KB,地址从0x0100开始。

数据空间支持5种寻址方式:

  • 直接寻址(direct);
  • 间接寻址(indirect);
  • 带偏移的间接寻址(indirect with displacement);
  • 带前自减的间接寻址(indirect with pre-decrement);
  • 带后自增的间接寻址(indirect with post-increment)。

对SRAM的访问需要耗费2个CPU周期。

EEPROM Memory

ATmega328P拥有1KB的EEPROM空间,能够对其进行单字节的读写操作,需要通过 EEARHEEARLEEDREECR 寄存器进行访问。

AVR内核

如下图所示,AVR内核采用哈佛架构,程序空间和数据空间相互独立。指令以单级流水线方式执行,执行一条指令的同时预取出下一条指令。

AVR内核由ALU(算术逻辑单元)、 SREG (状态寄存器)、通用寄存器堆、 SP (最栈指针)、 PC (程序计数器)构成。

ALU能够以单周期的时间对32个通用寄存器进行算术、逻辑、位操作,一些实现中还支持乘法运算。

通用寄存器堆支持以下4种操作:

  • 1个8位操作数,1个8位结果;
  • 2个8位操作数,1个8位结果;
  • 2个8位操作数,1个16位结果;
  • 1个16位操作数,1个16位结果。

其中,只有 r16r31 支持立即数寻址,r26r31 可以两两组合为索引寄存器 XYZ ,供间接寻址时使用。

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。

参考资料

  1. ATmega328P Datasheet
  2. Programming and Interfacing ATMEL's AVRs

AVR汇编(二):AVR架构介绍的更多相关文章

  1. (转)OpenStack —— 原理架构介绍(一、二)

    原文:http://blog.51cto.com/wzlinux/1961337 http://blog.51cto.com/wzlinux/category18.html-------------O ...

  2. MemSQL分布式架构介绍(二)

    接上次的MemSQL分布式架构介绍(一),原文在这里:http://docs.memsql.com/latest/concepts/distributed_architecture/ 首先上张图,是我 ...

  3. 从零开始编写自己的C#框架(5)——三层架构介绍

    三层架构对于开发人员来说,已经是司空见惯了,除了大型与超小型项目外,大多都是这种架构来进行开发. 在这里为初学者们简单介绍一下三层架构: (下面内容摘自<趣味理解:三层架构与养猪—<.NE ...

  4. MemSQL分布式架构介绍(一)

    最近在了解MemSQL架构,看了些官方文档,在这里做个记录,原文在这里:http://docs.memsql.com/latest/concepts/distributed_architecture/ ...

  5. Apache Shiro 使用手册(一)Shiro架构介绍 - kdboy - ITeye技术网站

    转载 原文地址 http://kdboy.iteye.com/blog/1154644 一.什么是Shiro Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理 ...

  6. Apache Shiro 使用手册(一)Shiro架构介绍

    一.什么是Shiro Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能:  认证 - 用户身份识别,常被称为用户"登录": 授权 - ...

  7. 大型网站技术架构介绍--squid

    一.大型网站技术架构介绍 1.pv高  ip高 并发量 2.大型网站架构重点    1. 高性能:响应时间,TPS,系统性能计数器.缓存,消息队列等.     高可用性High Availabilit ...

  8. Android_进化史和平台架构介绍

    一.Android平台发展史  2008年9月,谷歌正式发布了Android 1.0系统,全球第一台Android设备HTC (G1)  2009年4月,谷歌正式推出了Android 1.5      ...

  9. 80x86汇编小站站长简单介绍-2014年08月23日

    [序言] 旧版的"80x86汇编小站站长简单介绍"已经过时了, 因此于2013年10月01日花费1个小时又一次更新和排版一次. [人生格言]  1] 一生都用头脑而不是情绪解决这个 ...

  10. Kylin系列之二:原理介绍

    Kylin系列之二:原理介绍 2018年4月15日 15:52 因何而生 Kylin和hive的区别 1. hive主要是离线分析平台,适用于已经有成熟的报表体系,每天只要定时运行即可. 2. Kyl ...

随机推荐

  1. python使用docxtpl生成word模板

    python-docxtpl包简单使用和实战,Python处理word,docx文件. 最近需要处理一些爬虫得到的数据来进行一些自动化报告的操作,因为需要生成的是word的报告,所以估选用docxtp ...

  2. 2020-11-30:java中,卡表和记忆集的区别?

    福哥答案2020-12-04:[答案来自此链接:](http://bbs.xiangxueketang.cn/question/530)这两个都是G1收集器中的概念记忆集,RemeberSet,用来记 ...

  3. 2021-10-12:验证回文串。给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串 。输入: “A man, a plan

    2021-10-12:验证回文串.给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写.说明:本题中,我们将空字符串定义为有效的回文串 .输入: "A man, a ...

  4. values_list() 元组形式显示查询结果

    values_list() 元组形式显示查询结果 name,age为数据库的两个列 Student.objects.values_list('name','age') values_list() 元组 ...

  5. Vue选日期滚动条自动定位到选定的日期位置

    html 这里的关键点就是   :id="'scroll'+index" 以及 :scroll-into-view="intoIndex" <view c ...

  6. 用批处理干掉汇编masm link六回车

    干掉麻烦的六回车 踏破铁鞋无觅处,得来全不费功夫 前言 最近在上汇编语言的课,在手动编译链接的时候你可能做过以下操作: 输入 masm 1.asm 回车 回车 回车 输入 link 1.obj 回车 ...

  7. mysql基础_视图

    介绍 MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中.行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的. 优 ...

  8. Java的CAS操作

    介绍 CAS 技术是为了解决问题而生的,通过 CAS 我们可以以无锁的方式,保证对共享数据进行 "读取 - 修改 - 写回" 操作序列的正确性. CAS 是乐观锁设计思想的实现.C ...

  9. 【重学C++】03 | 手撸C++智能指针实战教程

    文章首发 [重学C++]03 | 手撸C++智能指针实战教程 前言 大家好,今天是[重学C++]的第三讲,书接上回,第二讲<02 脱离指针陷阱:深入浅出 C++ 智能指针>介绍了C++智能 ...

  10. Terraform 改善基础架构的十个最佳实践

    Terraform 是一种非常流行的开源 IaC(基础设施即代码)工具,用于定义和提供完整的基础设施.Terraform 于 2014 年推出,其采用率已在全球范围内快速增长,越来越多的开发人员正在学 ...