第2章_ATmega_的内部结构及接口特点.ppt_第1页
第2章_ATmega_的内部结构及接口特点.ppt_第2页
第2章_ATmega_的内部结构及接口特点.ppt_第3页
第2章_ATmega_的内部结构及接口特点.ppt_第4页
第2章_ATmega_的内部结构及接口特点.ppt_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2 1ATmega16单片机综述2 2AVRCPU结构2 3AVRATmega16的存储器2 4系统时钟及时钟选项2 5电源管理及睡眠模式2 6系统控制和复位2 7看门狗定时器2 9I O端口描述 第2章ATmega的内部结构及接口特点 内容提要 本章主要介绍ATmega单片机外部引脚封装及主要特性 内部结构 CPU内核 指令时序 存储器类别和读写 详细描述系统时钟和复位控制 I O端口寄存器 状态寄存器及使用方法 1 高性能 低功耗的8位AVR 微处理器2 先进的RISC结构 与哈佛体系关系 3 非易失性程序和数据存储器 EEPROM Flash 4 JTAG接口 方便调试 有完整开发工具5 外设特点 4双向I 0口 定时器 ADC USART SPI 6 特殊的处理器特点 复位 掉电 RC振动器 6休眠 2 1 1ATmega16的主要特性 8位RISC指令微控制器 内部集成了CPU 内存 I O设备及定时器 辅助电路等 2 1ATmega16单片机综述 补充 RISC指令结构 一 指令集简化 单周期指令系统 指令长度固定 指令格式种类少 寻址方式种类少 二 采用大量的寄存器 使大部分指令操作在寄存器之间进行 只有取数 存数指令会访问存储器 提高处理速度 三 大部分指令在一个机器周期内完成 四 采用流水线以及常用指令均可用硬件执行 图2 1ATmega16的引脚 2 1 2引脚配置 2 1 3ATmega单片机内部结构方框图 AVR单片机内部结构哈佛体系结构 指令通路和数据通路 Flash存指令 SRAM存数据ALU直接连接所有寄存器 可同时访问两个寄存器定时器 串行接口 模拟比较器和A D多种资源功能复用的四组I 0接口Flash在线编程方式 ISP 图2 2 ATmega16内部结构框图 地址线 指令 数据线 数据 长期数据 ATmega16内部结构框图 1 端口A PA7 PA0 端口A为A D转换器的模拟输入端 为8位双向I O口 具有可编程的内部上拉电阻 其输出缓冲器具有对称的驱动特性 可以输出和吸收大电流 作为输入使用时 若内部上拉电阻使能 端口被外部电路拉低时将输出电流 还复用为8通道ADC电路 2 1 4引脚功能描述 2 端口B PB7 PB0 为8位双向I O口 PB4 7复用为SPI通讯接口3 端口C PC7 PC0 为8位双向I O口 PC2 5复用为JTAG接口4 端口D PD7 PD0 为8位双向I O口 复用串行通讯接口 外部中断和定时器输出 其它管脚5 VCC 电源 GND 地6 RESET复位输入引脚 7 XTAL1 XTAL2反向振荡放大器的输入 输出端 8 AVCC端口A与A D转换器的电源 9 AREFA D的模拟基准输入引脚 数据通道 1 AVR采用了Harvard结构 具有独立的数据和程序总线 2 快速访问寄存器文件包括32个8位通用工作寄存器 访问时间为一个时钟周期 3 寄存器文件里有6个寄存器 可以用作3个16位的间接寻址 组成X Y Z寄存器 作为数据 程序间接寻址指针 C语言中 怎么用指针访问数据 4 ALU支持寄存器之间以及寄存器和常数之间的算术和逻运算 思考 ALU能操作内存单元吗 如果不能 内存数据怎样运算 5 I O空间包括64外设控制寄存器 直接访问 如SPI I O空间也映射到数据空间 地址在通用寄存器之后 为0 x20 0 x5F 2 2 1结构综述 2 2AVRCPU结构 指令通道 6 程序流程通过有 无条件的跳转指令和调用指令来控制 从而直接寻址整个地址空间 7 程序存储器空间分为两个区 引导程序区 Boot区 和应用程序区 8 在中断和调用子程序时返回地址的程序计数器 PC 保存于堆栈之中 堆栈位于通用数据SRAM 因此其深度仅受限于SRAM的大小 什么是堆栈 9 堆栈指针位于I O空间 可以进行读写访问 10 AVR有一个灵活的中断模块 控制寄存器位于I O空间 状态寄存器里有全局中断使能位 各个中断的优先级与其在中断向量表的位置有关 中断向量地址越低 优先级越高 图2 3AVR结构的方框图 指令通道 X Y Z间接 AVR的ALU与32个通用工作寄存器直接相连 寄存器与寄存器之间 寄存器与立即数之间的ALU运算只需要一个时钟周期 ALU操作分为3类 算术 逻辑和位操作 2 2 2ALU算术逻辑单元 状态寄存器包含了最近执行的算术指令的结果状态 程序依据改变程序流程以实现条件操作 所有ALU运算都将影响状态寄存器的内容 在进入中断服务程序时状态寄存器不会自动保存 中断返回时也不会自动恢复 需要软件来处理 中断现场保护 通过压入和弹出堆栈实现 2 2 3状态寄存器 AVR中断寄存器SREG定义如下 Bit7 I 全局中断使能 Bit6 T 位拷贝存储 Bit5 H 半进位标志 Bit4 S 符号位 S N V Bit3 V 2的补码溢出标志 Bit2 N 负数标志 Bit1 Z 零标志 Bit0 C 进位标志 图2 4为CPU32个通用工作寄存器的结构 2 2 4通用寄存器文件 寄存器文件针对AVR增强型RISC指令集做了优化 为了获得需要的性能和灵活性 寄存器文件支持以下的输入 输出方案 输出一个8位操作数 输入一个8位结果 输出两个8位位操作数 输入一个8位结果 输出两个8位位操作数 输入一个16位结果 输出一个16位位操作数 输入一个16位结果如图2 4所示 每个寄存器都有一个数据内存地址 将他们直接映射到用户数据空间的头32个地址 寄存器R26 R31除了用作通用寄存器外 还可以作为数据间接寻址用的地址指针 2 2 5X Y Z寄存器 1 堆栈指针主要用来保存临时数据 局部变量和中断 子程序的返回地址 堆栈指针指向数据SRAM堆栈区 总是指向堆栈的顶部 2 调用子程序和使用中断之前必须定义堆栈空间 且堆栈指针必须指向高于0 x60的地址空间 3 使用PUSH指令将数据推入堆栈时指针减一 而子程序或中断返回地址推入堆栈时指针将减二 使用POP指令将数据弹出堆栈时 堆栈指针加一 而用RET或RETI指令从子程序或中断返回时堆栈指针加二 数据进出加减一 指令加减二 2 2 6堆栈指针 堆栈定义 堆栈主要用来保存临时数据 局部变量和中断 子程序的返回地址的 按照 后进先出 原则组织数据存储结构 堆栈指针指向堆栈的顶部 AVR的堆栈是向下生长的 即新数据压入堆栈时 指针数值将减小 工作过程 使用前需要定义堆栈空间 堆栈指针指向高于0 x60的SRAM数据区 用PUSH压入指令和数据 堆栈指针减一 调用中断 子程序 返回地址压入堆栈 指针减二 用POP弹出堆栈时 指针加一 用返回指令时 指针加二 2 2 6堆栈 补充 AVRCPU由系统时钟clkCPU驱动 此时钟直接来自选定的时钟源 芯片内部对此时钟不分频 2 2 7指令执行时序 图2 7描述的是寄存器文件内部访问时序 在一个时钟周期里 ALU可以同时对两个寄存器操作数进行操作 同时将结果保存到目的寄存器中 图2 7单时钟周期ALU操作时序 2 2 8中断与中断处理 1 中断处理AVR有不同的中断源 每个中断和复位在程序空间都有独立的中断向量 所有的中断事件都有自己的使能位 当使能位置位 且状态寄存器的全局中断使能位I也置位时 中断可以进行 2 两种类型的中断第一种由事件触发并置位中断标志 对于这类中断 程序计数器跳转到实际的中断向量以执行中断处理程序 同时硬件将清除相应的中断标志 第二种类型的中断则是只要中断条件满足 就会一直触发 这些中断不需要中断标志 例2 1在写EEPROM时使用下列代码来防止中断发生以避免对EEPROM内容的可能破坏 charcSREG cSREG SREG 保存SREG 禁止中断 CLI BECR 1 EBMWB 启动EEPROM写操作 EECR 1 EBWE SREG cSREG 恢复SREG I位 例2 2使用SEI指令使能中断时 紧跟其后的第一条指令在执行任何中断之前一定会首先得到执行 SEI 置位全局中断使能标志 SLEEP 进入休眠模式 等待中断发生 注意 在执行任何被挂起的中断之前MCU将首先进入休眠模式 3 中断响应时间AVR中断响应时间最少为4个时钟周期 4个时钟周期后 程序跳转到实际的中断处理程序 在这4个时钟期期间PC自动入栈 在通常情况下 中断向量为一个跳转指令 此跳转需要3个时钟周期 如果中断在一个多时钟周期指令执行期间发生 则在此多周期指令执行完毕后MCU才会执行中断程序 若中断发生时MCU处于休眠模式 中断响应时间还需增加4个时钟周期 AVR结构具有8Kx16位格式 分两个主要的存储器空间 数据存储器空间和程序存储器空间 2 3 1系统内可编程的Flash程序存储器ATmega16具有16K字节的在线编程Flash 用于存放程序指令代码 2 3AVRATmega16的存储器 2 3 2SRAM数据存储器 1 SRAM配置共计1120存储器单元 为通用寄存器文件 I O寄存器 和内部数据存储器 2 SRAM寻址方式数据存储器的寻址方式分为5种 直接寻址 间接寻址 带偏移量的间接寻址 带预减量的间接寻址和带后增量的间接寻址 ATmega16的全部32个通用寄存器 64个I O寄存器及1024个字节的内部数据SRAM可以通过所有上述的寻址模式进行访问 图2 9数据存储器映像 图2 10片内SRAM存取周期 如图2 10所示 内部数据SRAM访问时间为两个clkCPU时钟 2 3 3数据存储器访问时序 2 3 4EEPROM数据存储器 1 EEPROM读 写访问EEPROM的访问寄存器位于I O空间 EEPROMuchartest 10 定义EEPROM参数地址 EEPROMuchare first 定义EEPROM参数变量 eeprom write byte 读取EEPROM参数变量值并写入变量ff 2 EEPROM地址寄存器 EEARH和EEARL Bits15 9 Res 保留保留位 读操作返回值为零 Bits8 0 EEAR8 0 EEPROM地址 3 EEPROM数据寄存器 EEDR Bits7 0 EEDR7 0 EEPROM数据对于EEPROM写操作 EEDR是需要写到EEAR单元的数据 对于读操作 EEDR是从地址EEAR读取的数据 4 EEPROM控制寄存器 EECR Bits7 4 Res 保留 Bit3 EERIE 使能EEPROM准备好中断 Bit2 EEMWE EEPROM主机写使能 Bit1 EEWE EEPROM写使能 Bit0 EERE EEPROM读使能 下表为CPU访问EEPROM的典型时间 表2 1EEPROM编程时间 5 在掉电休眠模式下的EEPROM写操作若程序执行掉电指令时EEPROM的写操作正在进行 EEPROM的写操作将继续 并在指定的写访问时间之前完成 6 防止EEPROM数据丢失若电源电压过低 CPU和EEPROM有可能工作不正常 造成EEPROM数据的毁坏 丢失 EEPROM数据损坏的问题可以通过以下方法解决 当电压过低时保持AVRRESET信号为低 这可以通过使能芯片的掉电检测电路BOD来实现 如果BOD电平无法满足要求则可以使用外部复位电路 2 3 5I O存储器 ATmega16所有的I O及外设都被放置于I O空间 1 所有的I O位置都可以通过IN与OUT指令来访问 地址是0 x00 0 x1F 在32个通用工作寄存器和I O之间传输数据 2 地址为0 x00 0 x3F的I O寄存器还可用SBI和CBI指令直接进行位寻址 而SBIS和SBIC则用来检查某一位的值 2 4 1时钟系统及其分布 1 CPU时钟 clkCPU2 I O时钟 clkI O3 Flash时钟 clkFLASH4 异步定时器时钟 clkASY5 ADC时钟 clkADC 2 4系统时钟及时钟选项 图2 11时钟分布 2 4 1时钟系统及分配 CPU时钟 clkcpu与AVR内核子系统相连I O时钟 连接I O模块 外部中断模块Flash时钟异步定时器ADC时钟 2 4 2时钟源 ATmega16有如下几种通过Flash熔丝位进行选择的时钟源 表2 2时钟源选择 1 时钟源选择 ATmega16提供系统时钟源时 有三种主要的选择 1 直接使用片内的1 2 4 8M的RC振荡源 2 在引脚XTAL1和XTAL2上外接由石英晶体和电容组成的谐振回路 配合片内的OSC Oscillator 振荡电路构成的振荡源 3 直接使用外部的时钟源输出的脉冲信号 2 缺省时钟源 器件出厂时CKSEL 0010 SUT 10 这个缺省设置的时钟源是1MHz的内部RC振荡器 启动时间为最长 这种设置保证用户可以通过ISP或并行编程器得到所需的时钟源 图2 12晶体振荡器连接图 图2 13外部RC配置 XTAL1与XTAL2分别为用作片内振荡器的反向放大器的输入和输出 2 4 4晶体振荡器 表2 4晶体振荡器工作模式 表2 5启动时间由熔丝位SUT确定和片内RC振荡器工作模式 Bits7 5 4 SM2 0 休眠模式选择位2 1和0 Bit6 SE 休眠使能为了使MCU在执行SLEEP指令后进入休眠模式 SE必须置位 2 5 1MCU控制寄存器 MCUCR 2 5电源管理及睡眠模式 表2 6休眠模式选择 2 5 2最小化功耗 降低AVR控制系统的功耗时需考虑几个问题 下面的模块需要特殊考虑以达到尽可能低的功耗 1 模数转换器2 模拟比较器3 掉电检测BOD4 片内基准电压5 看门狗定时器6 端口引脚7 JTAG接口与片上调试系统 2 6 1复位AVR 复位时所有的I O寄存器都被设置为初始值 程序从复位向量处开始执行 1 复位源ATmega16有5个复位源 上电复位 外部复位 看门狗复位 掉电检测复位 JTAGAVR复位 2 6系统控制和复位 图2 14工作过程中发生外部复位时序 2 上电复位上电复位 POR 脉冲由片内检测电路产生 3 外部复位外部复位由外加于RESET引脚的低电平产生 4 掉电检测 1 上电复位 AVR内部含有上电复位POR Power onReset 电路 POR确保了只有当Vcc超过一个安全电平时 器件才开始工作 图2 15MCU上电复位启动 RESET连到Vcc 2 外部复位 外部复位是由外加在RESET引脚上的低电平将产生的 当RESET引脚被拉低于Vrst的时间大于1 5 s时既触发复位过程 图2 15工作过程中发生掉电检测复位时序 3 掉电检测 BOD 复位 片内的BOD Brown outDetection 电源检测电路 用于在系统运行时对系统电压VCC的检测 并同一个固定的阈值电压相比较 BOD检测阈值电压可以通过BODLEVEL熔丝位设定为2 7V或4 0V 表2 7内部电压基准源的特性 片内基准电压 ATmega16具有片内能隙基准源 用于掉电检测 或者是作为模拟比较器或ADC的输入 ADC的2 56V基准电压由此片内能隙基准源产生 5 看门狗复位 ATmega16片内还集成一个独立的看门狗定时器WDT 该WDT由片内独立的1M振荡器提供时钟信号 并且可用专用的熔丝位或由用户通过指令控制WDT的启动和关闭 以及设置和清零计数值 当WDT启动计数后 一旦发生计数溢出 它将触发产生一个时钟周期宽度的复位脉冲 脉冲的上升沿将使器件进入复位状态 脉冲的下降沿启动延时计数器计数 经过设定的启动延时时间 CPU重新开始运行 使用WDT功能 可以防止系统受到干扰而引起的程序运行紊乱和跑飞 提高了系统的可靠性 图2 16工作过程中发生看门狗复位时序 5 看门狗复位看门狗定时器溢出时将产生持续时间为1个CK周期的复位脉冲 在脉冲的下降沿 延时定时器开始对tTOUT记数 6 MCU控制和状态寄存器 MCUCSR Bit4 JTRF JTAG复位标志 Bit3 WDRF 看门狗复位标志 Bit2 BORF 掉电检测复位标志 Bit1 EXTRF 外部复位标志 Bit0 PORF 上电复位标志 2 7看门狗定时器 看门狗定时器由独立的1MHz片内振荡器驱动 其复位指令WDR用来复位看门狗定时器 禁止看门狗定时器或发生复位时定时器也被复位 复位时间有8个选项 1 看门狗定时器控制寄存器 WDTCR Bits7 5 Res 保留位 Bit4 WDTOE 看门狗修改使能 Bit3 WDE 使能看门狗 Bits2 0 WDP2 WDP1 WDP0 看门狗定时器预分频器2 1和0 例2 5用C语言实现了关闭WDT的操作 在此假定中断处于用户控制之下 比如禁止全局中断 因而在执行下面程序时中断不会发生 voidWDT off void WDR WDT复位WDTCR 1 WDTOE 1 WDB 置位WDTOE和WDEWDTCR 0 x00 关闭WDT 2 8 1ATmega16的中断向量 2 8 中断 1 熔丝位BOOTRST被编程时 MCU复位后程序跳转到BootLoader 2 当寄存器GICR的IVSEL置位时 中断向量转移到Boot区的起始地址 此时各个中断向量的实际地址为表中地址与Boot区起始地址之和 表2 9复位和中断向量 表2 10复位和中断向量位置的确定 下表给出了在不同的BOOTRST IVSEL设置下 复位和中断向量的位置 用户可以在此直接写程序 2 8 2通用中断控制寄存器 GICR Bit1 IVSEL 中断向量选择 Bit0 IVCE 中断向量修改使能 例2 6改变IVSEL时IVCE必须置位 在IVCE或IVSEL写操作之后4个时钟周期 IVCE被硬件清零 如前面所述 置位IVCE将禁止中断 代码如下 voidMove interrupts void GICR 1 IVCE 使能中断向量的修改GICR 1 IVSEL 将中断向量转移到boot区 作为通用数字I O使用时 所有AVRI O端口都具有真正的读 修改 写双向数字输入 输出功能 其中每一位都可以由指令 SBI CBI 设置为独立的输入口 或输出口 作为输出口时 可以输出或吸收大电流 当其输出高电平时 能够输出20mA的电流 输出低电平时 可以吸收40mA的电流 能直接驱动LED 所有的端口引脚都有上拉电阻 有保护二极管与VCC和地相连 上拉电阻可通过编程设置为有效或无效 2 9 1端口使用介绍 2 9I O端口描述 端口寄存器每个端口配置3个I O地址 1 数据寄存器 PORTx 2 数据方向寄存器 DDRx 3 输入引脚寄存器 PINx 每个端口引脚对应三个寄存器相应位 DDxn PORTxn和PINxn X 端口号 n 管脚号 输出工作方式 IO口的输出性能指标 AVR的IO口灌电流 拉电流能力均达40 20mA51的拉电流能力 100uA 灌电流能力10mA 灌电流能力 能够流入IO口的最大电流 拉电流能力 能够从IO口流出的最大电流 输入工作方式 I O寄存器与变量 IO口与IO寄存器的映射 x代表A D 方向控制寄存器 DDRx数据寄存器 PORTx输入引脚寄存器 PINxC语言变量与寄存器的映射io h这个文件中将所有寄存器映射为同名的变量 对这些变量的读写相当于对寄存器的读写输出状态IO寄存器设置DDRx某一位置1 相应位的IO口被设置为输出PORTx某一位置1或0 对应IO口相应位的电平高低PINx是只读寄存器 为端口管脚电平 2 9 2作为通用数字I O的端口端口为具有可选上拉电阻的双向I O端口 输出方式 图2 18I O引脚等效原理图 表2 11端口状态配置 2 9 3配置引脚在AVR单片机中 I O端口中都有上拉电阻 1 DDxn为 0 时 引脚配置为输入 PORTx为 1 上拉电阻使能 PORTx清零 关闭配置2 DDxn为 1 时 引脚配置为输出 PORTx为 1 输出高电平 PORTx为 0 输出低电平 注意 DDxn用来选择引脚的方向 DDxn为 1 时 Pxn配置为输出 否则配置为输入 引脚配置为输入时 若PORTxn为 1 上拉电阻将使能 如果需要关闭这个上拉电阻 可以将PORTxn清零 或者将这个引脚配置为输出 复位时各引脚为高阻态 即使此时并没有时钟在运行 2 9 4读取引脚上的数据不论如何配置DDxn 都可以通过读取PINxn寄存器来获得引脚电平 图2 20

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论