AVR教程系列一(8):ATmega16 简介(三).docx
《AVR教程系列一(8):ATmega16 简介(三).docx》由会员分享,可在线阅读,更多相关《AVR教程系列一(8):ATmega16 简介(三).docx(10页珍藏版)》请在三一办公上搜索。
1、ATmega16 简介(三)ATmega16 指令执行时序这一节介绍指令执行过程中的访问时序。AVR CPU 由系统时钟clkCPU 驱动。此时钟直接来自选定的时钟源。芯片内部不对此时钟进行分频。Figure 6 说明了由Harvard 结构决定的并行取指和指令执行,以及可以进行快速访问的寄存器文件的概念。这是一个基本的流水线概念,性能高达1 MIPS/MHz,具有优良的性价比、功能/ 时钟比、功能/ 功耗比。Figure 7 演示的是寄存器文件内部访问时序。在一个时钟周期里,ALU 可以同时对两个寄存器操作数进行操作,同时将结果保存到目的寄存器中去。ATmega16 复位与中断处理AVR有不
2、同的中断源。每个中断和复位在程序空间都有独立的中断向量。所有的中断事件都有自己的使能位。当使能位置位,且状态寄存器的全局中断使能位I 也置位时,中断可以发生。根据程序计数器PC 的不同,在引导锁定位BLB02 或BLB12 被编程的情况下,中断可能被自动禁止。这个特性提高了软件的安全性。详见 P247“ 存储器编程” 的描述。程序存储区的最低地址缺省为复位向量和中断向量。完整的向量列表请参见 P43“中断”。列表也决定了不同中断的优先级。向量所在的地址越低,优先级越高。RESET 具有最高的优先级,第二个为INT0 外部中断请求0。通过置位MCU 控制寄存器 (MCUCR) 的IVSEL,中断
3、向量可以移至引导Flash的起始处。编程熔丝位BOOTRST也可以将复位向量移至引导Flash的起始处。具体参见P234“支持引导装入程序 在写的同时可以读(RWW,Read-While-Write) 的自我编程能力”。任一中断发生时全局中断使能位I 被清零,从而禁止了所有其他的中断。用户软件可以在中断程序里置位I 来实现中断嵌套。此时所有的中断都可以中断当前的中断服务程序。执行RETI 指令后I 自动置位。从根本上说有两种类型的中断。第一种由事件触发并置位中断标志。对于这些中断,程序计数器跳转到实际的中断向量以执行中断处理程序,同时硬件将清除相应的中断标志。中断标志也可以通过对其写”1” 的
4、方式来清除。当中断发生后,如果相应的中断使能位为“0”,则中断标志位置位,并一直保持到中断执行,或者被软件清除。类似的,如果全局中断标志被清零,则所有已发生的中断都不会被执行,直到I 置位。然后挂起的各个中断按中断优先级依次执行。第二种类型的中断则是只要中断条件满足,就会一直触发。这些中断不需要中断标志。若中断条件在中断使能之前就消失了,中断不会被触发。AVR 退出中断后总是回到主程序并至少执行一条指令才可以去执行其他被挂起的中断。要注意的是,进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢复。这些工作必须由用户通过软件来完成。使用CLI 指令来禁止中断时,中断禁止立即生效。没
5、有中断可以在执行CLI 指令后发生,即使它是在执行CLI 指令的同时发生的。下面的例子说明了如何在写EEPROM 时使用这个指令来防止中断发生以避免对EEPROM 内容的可能破坏。汇编代码例程in r16, SREG ; 保存SREGcli ; 禁止中断sbi EECR, EEMWE ; 启动 EEPROM 写操作sbi EECR, EEWEout SREG, r16 ; 恢复SREG (I 位)C 代码例程char cSREG;cSREG = SREG; /* 保存SREG */* 禁止中断*/_CLI();EECR |= (1EEMWE); /* 启动 EEPROM 写操作*/EECR |
6、= (1EEWE);SREG = cSREG; /* 恢复SREG (I 位) */使用SEI 指令使能中断时,紧跟其后的第一条指令在执行任何中断之前一定会首先得到执行。 汇编代码例程sei ; 置位全局中断使能标志sleep ; 进入休眠模式,等待中断发生; 注意: 在执行任何被挂起的中断之前MCU 将首先进入休眠模式C 代码例程_SEI(); /* 置位全局中断使能标志*/_SLEEP(); /* 进入休眠模式,等待中断发生*/* 注意: 在执行任何被挂起的中断之前MCU 将首先进入休眠模式*/AVR 中断响应时间最少为4 个时钟周期。4 个时钟周期后,程序跳转到实际的中断处理例程。在这4
7、 个时钟期期间PC 自动入栈。在通常情况下,中断向量为一个跳转指令,此跳转需要3 个时钟周期。如果中断在一个多时钟周期指令执行期间发生,则在此多周期指令执行完毕后MCU 才会执行中断程序。若中断发生时MCU 处于休眠模式,中断响应时间还需增加4 个时钟周期。此外还要考虑到不同的休眠模式所需要的启动时间。这个时间不包括在前面提到的时钟周期里。中断返回需要4 个时钟。在此期间PC( 两个字节) 将被弹出栈,堆栈指针加二,状态寄存器SREG 的I 置位。 ATmega16 Flash程序存储器系统内可编程的Flash 程序存储器ATmega16具有16K字节的在线编程Flash,用于存放程序指令代码
8、。因为所有的AVR指令为16 位或32 位,故而Flash 组织成8K x 16 位的形式。用户程序的安全性要根据Flash程序存储器的两个区:引导(Boot) 程序区和应用程序区,分开来考虑。Flash存储器至少可以擦写10,000次。ATmega16的程序计数器(PC)为13位,因此可以寻址8K 字的程序存储器空间。引导程序区以及相关的软件安全锁定位请参见 P234“ 支持引导装入程序 在写的同时可以读(RWW, Read-While-Write) 的自我编程能力” ,而 P247“存储器编程” 详述了用SPI 或JTAG 接口实现对Flash 的串行下载。常数可以保存于整个程序存储器地址
9、空间( 参考LPM 加载程序存储器指令的说明)。取指与执行时序图请参见 P11“ 指令执行时序”。ATmega16 SRAM数据存储器SRAM数据存储器Figure 9 给出了ATmega16 SRAM 空间的组织结构。前1120 个数据存储器包括了寄存器文件、I/O 存储器及内部数据SRAM。起始的96 个地址为寄存器文件与64 个I/O 存储器,接着是1024 字节的内部数据SRAM。数据存储器的寻址方式分为5 种:直接寻址、带偏移量的间接寻址、间接寻址、带预减量的间接寻址和带后增量的间接寻址。寄存器文件中的寄存器R26 到R31 为间接寻址的指针寄存器。直接寻址范围可达整个数据区。带偏移
10、量的间接寻址模式能够寻址到由寄存器Y 和 Z 给定的基址附近的63 个地址。在自动预减和后加的间接寻址模式中,寄存器X、Y 和Z 自动增加或减少。ATmega16的全部32个通用寄存器、64个I/O寄存器及1024个字节的内部数据SRAM可以通过所有上述的寻址模式进行访问。寄存器文件的描述见 P9“ 通用寄存器文件” 。SRAM数据存储器访本节说明访问内部存储器的时序。如Figure 10 所示,内部数据SRAM 访问时间为两个clkCPU 时钟。 ATmega16 EEPROM数据存储器ATmega16 包含512 字节的EEPROM 数据存储器。它是作为一个独立的数据空间而存在的,可以按字
11、节读写。EEPROM 的寿命至少为100,000 次擦除周期。EEPROM 的访问由地址寄存器、数据寄存器和控制寄存器决定。通过SPI和JTAG及并行电缆下载EEPROM数据的操作请分别参见 P260、 P265及P250。EEPROM 读/ 写访问EEPROM 读/ 写访问EEPROM 的访问寄存器位于I/O 空间。EEPROM的写访问时间由Table 1给出。自定时功能可以让用户软件监测何时可以开始写下一字节。用户操作EEPROM 需要注意如下问题:在电源滤波时间常数比较大的电路中,上电/ 下电时VCC 上升/ 下降速度会比较慢。此时CPU 可能工作于低于晶振所要求的电源电压。请参见 P2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AVR教程系列一8:ATmega16 简介三 AVR 教程 系列 ATmega16 简介
链接地址:https://www.31ppt.com/p-1662116.html