资源预览内容
第1页 / 共73页
第2页 / 共73页
第3页 / 共73页
第4页 / 共73页
第5页 / 共73页
第6页 / 共73页
第7页 / 共73页
第8页 / 共73页
第9页 / 共73页
第10页 / 共73页
亲,该文档总共73页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
,主编:海 涛,广西大学电气工程学院,第2章 ATmega 的内部结构及接口特点,内容提要,本章主要介绍ATmega单片机的内部结构、指令特点、引脚封装及主要特性,详细描述系统复位、看门狗控制、I/O端口寄存器、状态寄存器及使用方法。,1、高性能、低功耗的 8 位AVR 微处理器 2、先进的RISC 结构 3、非易失性程序和数据存储器 4、JTAG 接口(与IEEE 1149.1 标准兼容) 5、外设特点 6、特殊的处理器特点,2.1.1 ATmega16 的主要特性,2.1 ATmega16单片机综述,图2.1 ATmega16 的引脚,2.1.2 引脚配置,图 2.2. ATmega16内部结构框图,2.1.3 ATmega单片机内部结构方框图,1、VCC:数字电路的电源 2、GND:地 3、端口A(PA7PA0) 端口A 为A/D 转换器的模拟输入端。为8 位双向 I/O 口,具有可编程的内部上拉电阻。其输出缓冲 器具有对称的驱动特性,可以输出和吸收大电流。 作为输入使用时,若内部上拉电阻使能,端口被外 部电路拉低时将输出电流。,2.1.4 引脚功能描述,4、端口B(PB7PB0) 为8位双向I/O 口,具有可编程的内部上拉电阻。 作为输入使用时,若内部上拉电阻使能,端口被 外部电路拉低时将输出电流。 5、端口C(PC7PC0) 为8 位双向I/O 口,具有可编程的内部上拉电阻。 作为输入使用时,若内部上拉电阻使能,端口被外 部电路拉低时将输出电流。在复位过程中,即使系 统时钟还未起振,端口C 也处于高阻状态。,6、 端口D(PD7PD0) 为8位双向I/O 口,具有可编程的内部上拉电阻。作为输入使用时,若内部上拉电阻使能,则端口被外部电路拉低时将输出电流。 7、RESET 复位输入引脚。 8、XTAL1 反向振荡放大器与片内时钟操作电路的输入端。 9、XTAL2 反向振荡放大器的输出端。 10、AVCC 端口A与A/D转换器的电源。 11、AREF A/D 的模拟基准输入引脚。,1、AVR 采用了Harvard 结构,具有独立的数据和程序总线。 2、快速访问寄存器文件包括32个8 位通用工作寄存器,访问时间为一个时钟周期。 3、寄存器文件里有6个寄存器,可以用作3个16位的间接寻址,2.2 AVR CPU 内核,2.2.1结构综述,4、ALU支持寄存器之间以及寄存器和常数之间的算术和逻 运算。 5、程序流程通过有/ 无条件的跳转指令和调用指令来控制,从而直接寻址整个地址空间。 6、程序存储器空间分为两个区:引导程序区(Boot 区)和应用程序区。 7、在中断和调用子程序时返回地址的程序计数器(PC)保存于堆栈之中。堆栈位于通用数据SRAM,因此其深度仅受限于SRAM 的大小。,图2.3 AVR 结构的方框图,8、这个指针位于I/O 空间,可以进行读写访问。 9、AVR有一个灵活的中断模块。控制寄存器位于 I/O空间。状态寄存器里有全局中断使能位。各个 中断的优先级与其在中断向量表的位置有关,中断 向量地址越低,优先级越高。 10、I/O 存储器空间包含64个可以直接寻址的地 址,作为CPU 外设的控制寄存器、SPI,以及其他 I/O 功能。,AVR的ALU 与32个通用工作寄存器直接相连。寄存器与寄存器之间、寄存器与立即数之间的ALU 运算只需要一个时钟周期。 ALU 操作分为3 类:算术、逻辑和位操作。,2.2.2 ALU算术逻辑单元,状态寄存器包含了最近执行的算术指令的结果信息。这些信息可以用来改变程序流程以实现条件操作,如指令集所述,所有ALU 运算都将影响状态寄存器的内容。 在进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢复。这些工作需要软件来处理。,2.2.3 状态寄存器,AVR 中断寄存器 SREG 定义如下:,Bit 7 I: 全局中断使能 Bit 6 T: 位拷贝存储 Bit 5 H: 半进位标志 Bit 4 S: 符号位, S = N V Bit 3 V: 2 的补码溢出标志 Bit 2 N: 负数标志 Bit 1 Z: 零标志 Bit 0 C: 进位标志,图2.4 为CPU 32个通用工作寄存器的结构,2.2.4 通用寄存器文件,寄存器文件针对AVR 增强型 RISC 指令集做了优化。 为了获得需要的性能和灵活性,寄存器文件支持以 下的输入/ 输出方案: 输出一个 8 位操作数,输入一个 8 位结果 输出两个 8 位位操作数,输入一个 8 位结果 输出两个 8 位位操作数,输入一个 16 位结果 输出一个 16 位位操作数,输入一个 16 位结果 如图2.4 所示,每个寄存器都有一个数据内存地址,将他们直接映射到用户数据空间的头32个地址。,寄存器R26R31 除了用作通用寄存器外,还可以作为数据间接寻址用的地址指针。,2.2.5 X、Y、Z 寄存器,2.2.6 堆栈指针,堆栈指针主要用来保存临时数据、局部变量和中断/ 子程序的返回地址。堆栈指针总是指向堆栈的顶部。 堆栈指针指向数据SRAM 堆栈区。 调用子程序和使用中断之前必须定义堆栈空间,且堆栈指针必须指向高于0x60 的地址空间。 使用PUSH指令将数据推入堆栈时指针减一;而子程序或中断返回地址推入堆栈时指针将减二。 使用POP 指令将数据弹出堆栈时,堆栈指针加一;而用RET 或RETI 指令从子程序或中断返回时堆栈指针加二。,AVR CPU 由系统时钟clkCPU 驱动,此时钟直接来自选定的时钟源,芯片内部对此时钟不分频。,2.2.7 指令执行时序,图2.7 描述的是寄存器文件内部访问时序。在一个时钟周期里,ALU 可以同时对两个寄存器操作数进行操作,同时将结果保存到目的寄存器中。,图2.7 单时钟周期ALU操作时序,2.2.8 中断与中断处理,1、中断处理 AVR有不同的中断源,每个中断和复位在程序空间都有独立的中断向量,所有的中断事件都有自己的使能位。当使能位置位,且状态寄存器的全局中断使能位I也置位时,中断可以进行。 2、两种类型的中断 第一种由事件触发并置位中断标志,对于这类中断,程序计数器跳转到实际的中断向量以执行中断处理程序,同时硬件将清除相应的中断标志。 第二种类型的中断则是只要中断条件满足,就会一直触发。这些中断不需要中断标志。,例2.1 在写EEPROM 时使用下列代码来防止中断发生以避免对EEPROM 内容的可能破坏。 char cSREG; cSREG = SREG; /*保存SREG*/ /*禁止中断*/ _CLI(); BECR |= (1EBMWB); /*启动EEPROM 写操作*/ EECR |= (1EBWE); SREG = cSREG; /*恢复SREG(I位)*/,例2.2 使用SEI 指令使能中断时,紧跟其后的第一条指令在执行任何中断之前一定会首先得到执行。 _SEI(); /*置位全局中断使能标志*/ _SLEEP(); /*进入休眠模式,等待中断发生*/ /*注意:在执行任何被挂起的中断之前MCU将首先进入休眠模式*/,3、中断响应时间 AVR 中断响应时间最少为4个时钟周期。4个时钟周期后,程序跳转到实际的中断处理程序。在这4个时钟期期间PC自动入栈。在通常情况下,中断向量为一个跳转指令,此跳转需要3个时钟周期。如果中断在一个多时钟周期指令执行期间发生,则在此多周期指令执行完毕后MCU 才会执行中断程序。若中断发生时MCU 处于休眠模式,中断响应时间还需增加4个时钟周期。,AVR 结构具有两个主要的存储器空间:数据存储器空间和程序存储器空间。,2.3 AVR ATmega16 的存储器,2.3.1 系统内可编程的Flash程序存储器 ATmega16具有16K字节的在线编程Flash,用于存放程序指令代码。,2.3.2 SRAM 数据存储器,数据存储器的寻址方式分为5 种:直接寻址、带偏移量的间接寻址、间接寻址、带预减量的间接寻址和带后增量的间接寻址。寄存器文件中的寄存器R26到R31为间接寻址的指针寄存器。 ATmega16的全部32个通用寄存器、64个I/O寄存器及1024个字节的内部数据SRAM可以通过所有上述的寻址模式进行访问。,图2.9 数据存储器映像,图2.10 片内SRAM 存取周期,如图2.10 所示,内部数据SRAM 访问时间为两个clkCPU 时钟。,2.3.3 数据存储器访问时序,2.3.4 EEPROM 数据存储器,EEPROM uchar test10;/*定义EEPROM参数地址*/ EEPROM uchar e_first; /*定义EEPROM参数变量*/ eeprom_write_byte( /*读取EEPROM参数变量值并写入变量ff*/ 1、 EEPROM 读/ 写访问 EEPROM 的访问寄存器位于I/O 空间。,2、 EEPROM 地址寄存器 EEARH和EEARL, Bits 159 Res: 保留 保留位,读操作返回值为零。 Bits 80 EEAR80: EEPROM 地址,3、EEPROM 数据寄存器 EEDR, Bits 70 EEDR7.0: EEPROM 数据 对于EEPROM 写操作,EEDR是需要写到EEAR单元的数据;对于读操作,EEDR是从地址EEAR读取的数据。,4、 EEPROM 控制寄存器 EECR, Bits 74 Res: 保留 Bit 3 EERIE: 使能EEPROM 准备好中断 Bit 2 EEMWE: EEPROM 主机写使能 Bit 1 EEWE: EEPROM 写使能 Bit 0 EERE: EEPROM 读使能,下表为CPU访问EEPROM的典型时间,表2.1 EEPROM编程时间,5、 在掉电休眠模式下的EEPROM写操作 若程序执行掉电指令时EEPROM 的写操作正在进行,EEPROM 的写操作将继续,并在指定的写访问时间之前完成。 6、 防止EEPROM 数据丢失 若电源电压过低,CPU 和EEPROM 有可能工作不正常,造成EEPROM 数据的毁坏( 丢失)。 EEPROM 数据损坏的问题可以通过以下方法解决: 当电压过低时保持AVR RESET信号为低。这可以通过使能芯片的掉电检测电路BOD来实现,如果BOD 电平无法满足要求则可以使用外部复位电路。,2.3.5 I/O 存储器,ATmega16所有的I/O及外设都被放置于I/O空间。所有的I/O位置都可以通过IN 与OUT指令来访问,在32个通用工作寄存器和I/O 之间传输数据。 地址为0x00 - 0x1F 的I/O 寄存器还可用SBI 和CBI 指令直接进行位寻址,而SBIS 和SBIC 则用来检查某一位的值。,2.4.1 时钟系统及其分布,2.4 系统时钟及时钟选项,1、CPU 时钟 clkCPU 2、I/O 时钟 clk I/O 3、Flash 时钟 clkFLASH 4、异步定时器时钟 clkASY 5、ADC 时钟 clkADC,图2.11 时钟分布,2.4.2 时钟源,ATmega16 有如下几种通过Flash熔丝位进行选择的时钟源。,表2.2 时钟源选择,2.4.3 缺省时钟源,器件出厂时CKSEL =“0010”,SUT =“10”。这个缺省设置的时钟源是1MHz 的内部RC振荡器,启动时间为最长。这种设置保证用户可以通过ISP或并行编程器得到所需的时钟源。,图2.12 晶体振荡器连接图,图2.13 外部RC 配置,XTAL1 与XTAL2 分别为用作片内振荡器的反向放大器的输入和输出。,2.4.4 晶体振荡器,表2.4 晶体振荡器工作模式,表2.5 启动时间由熔丝位SUT确定和片内RC振荡器工作模式, Bits 7,5,4 SM20: 休眠模式选择位 2、1 和0 Bit 6 SE: 休
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号