没有合适的资源?快使用搜索试试~ 我知道了~
AVR教程系列一(8):ATmega16 简介(三).docx
0 下载量 172 浏览量
2022-10-24
14:53:30
上传
评论
收藏 191KB DOCX 举报
温馨提示
试读
18页
AVR教程系列一(8):ATmega16 简介(三)
资源详情
资源评论
资源推荐
ATmega16 简介(三)
ATmega16 指令执行时序
这一节介绍指令执行过程中的访问时序。AVR CPU 由系统时钟 clkCPU 驱动。此时钟直接来自选定的时钟源。
芯片内部不对此时钟进行分频。
Figure 6 说明了由 Harvard 结构决定的并行取指和指令执行,以及可以进行快速访问的寄存器文件的概念。
这是一个基本的流水线概念,性能高达 1 MIPS/MHz,具有优良的性价比、功能/ 时钟比、功能/ 功耗比。
Figure 7 演示的是寄存器文件内部访问时序。在一个时钟周期里,ALU 可以同时对两个寄存器操作数进行
操作,同时将结果保存到目的寄存器中去。
ATmega16 复位与中断处理
AVR 有不同的中断源。每个中断和复位在程序空间都有独立的中断向量。所有的中断事件都有自己的使能
位。当使能位置位,且状态寄存器的全局中断使能位 I 也置位时,中断可以发生。根据程序计数器 PC 的不
同,在引导锁定位 BLB02 或 BLB12 被编程的情况下,中断可能被自动禁止。这个特性提高了软件的安全性。
详见 P247“ 存储器编程” 的描述。
程序存储区的最低地址缺省为复位向量和中断向量。完整的向量列表请参见 P43“中断”。列表也决定了
不同中断的优先级。向量所在的地址越低,优先级越高。RESET 具有最高的优先级,第二个为 INT0 – 外
部中断请求 0。通过置位 MCU 控制寄存器 (MCUCR) 的 IVSEL,中断向量可以移至引导 Flash 的起始处。编
程熔丝位 BOOTRST 也可以将复位向量移至引导 Flash 的起始处。具体参见 P234“支持引导装入程序 – 在
写的同时可以读(RWW,Read-While-Write) 的自我编程能力”。
任一中断发生时全局中断使能位 I 被清零,从而禁止了所有其他的中断。用户软件可以在中断程序里置位
I 来实现中断嵌套。此时所有的中断都可以中断当前的中断服务程序。执行 RETI 指令后 I 自动置位。
从根本上说有两种类型的中断。第一种由事件触发并置位中断标志。对于这些中断,程序计数器跳转到实
际的中断向量以执行中断处理程序,同时硬件将清除相应的中断标志。中断标志也可以通过对其写”1”
的方式来清除。当中断发生后,如果相应的中断使能位为“0”,则中断标志位置位,并一直保持到中断执
行,或者被软件清除。类似的,如果全局中断标志被清零,则所有已发生的中断都不会被执行,直到 I 置
位。然后挂起的各个中断按中断优先级依次执行。
第二种类型的中断则是只要中断条件满足,就会一直触发。这些中断不需要中断标志。若中断条件在中断
使能之前就消失了,中断不会被触发。
AVR 退出中断后总是回到主程序并至少执行一条指令才可以去执行其他被挂起的中断。要注意的是,进入
中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢复。这些工作必须由用户通过软件来
完成。
使用 CLI 指令来禁止中断时,中断禁止立即生效。没有中断可以在执行 CLI 指令后发生,即使它是在执行
CLI 指令的同时发生的。下面的例子说明了如何在写 EEPROM 时使用这个指令来防止中断发生以避免对
EEPROM 内容的可能破坏。
汇编代码例程
in r16, SREG ; 保存 SREG
cli ; 禁止中断
sbi EECR, EEMWE ; 启动 EEPROM 写操作
sbi EECR, EEWE
out SREG, r16 ; 恢复 SREG (I 位)
C 代码例程
char cSREG;
cSREG = SREG; /* 保存 SREG */
/* 禁止中断*/
_CLI();
EECR |= (1<<EEMWE); /* 启动 EEPROM 写操作*/
EECR |= (1<<EEWE);
SREG = cSREG; /* 恢复 SREG (I 位) */
使用 SEI 指令使能中断时,紧跟其后的第一条指令在执行任何中断之前一定会首先得到执行。
汇编代码例程
sei ; 置位全局中断使能标志
sleep ; 进入休眠模式,等待中断发生
; 注意: 在执行任何被挂起的中断之前 MCU 将首先进入休眠模式
C 代码例程
_SEI(); /* 置位全局中断使能标志*/
_SLEEP(); /* 进入休眠模式,等待中断发生*/
/* 注意: 在执行任何被挂起的中断之前 MCU 将首先进入休眠模式*/
AVR 中断响应时间最少为 4 个时钟周期。4 个时钟周期后,程序跳转到实际的中断处理例程。在这 4 个时
钟期期间 PC 自动入栈。在通常情况下,中断向量为一个跳转指令,此跳转需要 3 个时钟周期。如果中断在
一个多时钟周期指令执行期间发生,则在此多周期指令执行完毕后 MCU 才会执行中断程序。若中断发生时
MCU 处于休眠模式,中断响应时间还需增加 4 个时钟周期。此外还要考虑到不同的休眠模式所需要的启动
时间。这个时间不包括在前面提到的时钟周期里。
中断返回需要 4 个时钟。在此期间 PC( 两个字节) 将被弹出栈,堆栈指针加二,状态寄存器 SREG 的 I 置
位。
ATmega16 Flash 程序存储器
系统内可编程的 Flash 程序存储器
ATmega16 具有 16K 字节的在线编程 Flash,用于存放程序指令代码。因为所有的 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 的串行下载。
常数可以保存于整个程序存储器地址空间( 参考 LPM 加载程序存储器指令的说明)。取指与执行时序图请参
见 P11“ 指令执行时序”。
ATmega16 SRAM 数据存储器
SRAM 数据存储器
Figure 9 给出了 ATmega16 SRAM 空间的组织结构。
前 1120 个数据存储器包括了寄存器文件、I/O 存储器及内部数据 SRAM。起始的 96 个地址为寄存器文件与 64
个 I/O 存储器,接着是 1024 字节的内部数据 SRAM。
数据存储器的寻址方式分为 5 种:直接寻址、带偏移量的间接寻址、间接寻址、带预减量的间接寻址和带
后增量的间接寻址。寄存器文件中的寄存器 R26 到 R31 为间接寻址的指针寄存器。
直接寻址范围可达整个数据区。
带偏移量的间接寻址模式能够寻址到由寄存器 Y 和 Z 给定的基址附近的 63 个地址。
在自动预减和后加的间接寻址模式中,寄存器 X、Y 和 Z 自动增加或减少。
ATmega16 的全部 32 个通用寄存器、64 个 I/O 寄存器及 1024 个字节的内部数据 SRAM 可以通过所有上述的
寻址模式进行访问。寄存器文件的描述见 P9“ 通用寄存器文件” 。
SRAM 数据存储器访
本节说明访问内部存储器的时序。如 Figure 10 所示,内部数据 SRAM 访问时间为两个 clkCPU 时钟。
剩余17页未读,继续阅读
猫一样的女子245
- 粉丝: 95
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0