欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    AVR教程系列一(12):ATmega16 简介(六).docx

    • 资源ID:1662145       资源大小:196.13KB        全文页数:9页
    • 资源格式: DOCX        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    AVR教程系列一(12):ATmega16 简介(六).docx

    ATmega16 简介(六)ATmega16 控制和状态寄存器MCUCSRAVR 控制和状态寄存器提供了有关引起AVR复位的复位源的信息。? Bit 4 JTRF: JTAG 复位标志通过JTAG 指令AVR_RESET 可以使JTAG 复位寄存器置位,并引发MCU 复位,并使JTRF 置位。上电复位将使其清零,也可以通过写”0” 来清除。? Bit 3 WDRF: 看门狗复位标志看门狗复位发生时置位。上电复位将使其清零,也可以通过写”0” 来清除。? Bit 2 BORF: 掉电检测复位标志掉电检测复位发生时置位。上电复位将使其清零,也可以通过写”0” 来清除。? Bit 1 EXTRF: 外部复位标志外部复位发生时置位。上电复位将使其清零,也可以通过写”0” 来清除。? Bit 0 PORF: 上电复位标志上电复位发生时置位。只能通过写”0” 来清除。为了使用这些复位标志来识别复位条件,用户应该尽早读取此寄存器的数据,然后将其复位。如果在其他复位发生之前将此寄存器复位,则后续复位源可以通过检查复位标志来了解。 ATmega16 基准电压使能信号和启动时间ATmega16 具有片内能隙基准源,用于掉电检测,或者是作为模拟比较器或ADC的输入。ADC 的2.56V 基准电压由此片内能隙基准源产生。电压基准的启动时间可能影响其工作方式。启动时间列于Table 16。为了降低功耗,可以控制基准源仅在如下情况打开:1. BOD 使能 ( 熔丝位BODEN 被编程)2. 能隙基准源连接到模拟比较器(ACSR 寄存器的ACBG 置位)3. ADC 使能因此,当BOD 被禁止时,置位ACBG 或使能ADC 后要启动基准源。为了降低掉电模式的功耗,用户可以禁止上述三种条件,并在进入掉电模式之前关闭基准源。 ATmega16 看门狗定时器看门狗定时器由独立的1 Mhz 片内振荡器驱动。这是VCC = 5V 时的典型值。请参见特性数据以了解其他VCC 电平下的典型值。通过设置看门狗定时器的预分频器可以调节看门狗复位的时间间隔,如P41Table 17 所示。看门狗复位指令WDR 用来复位看门狗定时器。此外,禁止看门狗定时器或发生复位时定时器也被复位。复位时间有8 个选项。如果没有及时复位定时器,一旦时间超过复位周期, ATmega16 就复位,并执行复位向量指向的程序。具体的看门狗复位时序在P39 有说明。为了防止无意之间禁止看门狗定时器,在看门狗禁用后必须跟一个特定的修改序列。详见看门狗定时器控制寄存器。看门狗定时器控制寄存器WDTCR ? Bits 7.5 Res: 保留位ATmega16 保留位,读操作返回值为零。? Bit 4 WDTOE: 看门狗修改使能清零WDE 时必须置位WDTOE,否则不能禁止看门狗。一旦置位,硬件将在紧接的4 个时钟周期之后将其清零。请参考有关WDE 的说明来禁止看门狗。? Bit 3 WDE: 使能看门狗WDE为"1“ 时,看门狗使能,否则看门狗将被禁止。只有在WDTOE为"1“ 时WDE 才能清零。以下为关闭看门狗的步骤:1. 在同一个指令内对WDTOE 和WDE 写"1“,即使WDE 已经为"1“2. 在紧接的4 个时钟周期之内对WDE 写"0”? Bits 2.0 WDP2, WDP1, WDP0: 看门狗定时器预分频器2, 1 和 0WDP2、WDP1 和WDP0 决定看门狗定时器的预分频器,如Table 17 所示。下面的例子分别用汇编和C 语言实现了关闭WDT 的操作。在此假定中断处于用户控制之下 ( 比如禁止全局中断) ,因而在执行下面程序时中断不会发生。 汇编代码例程WDT_off:; WDT 复位WDR; 置位 WDTOE 和 WDEin r16, WDTCRori r16, (1<<WDTOE)|(1<<WDE)out WDTCR, r16; 关闭WDTldi r16, (0<<WDE)out WDTCR, r16retC 代码例程void WDT_off(void)/* WDT 复位*/_WDR();/* 置位 WDTOE 和 WDE*/WDTCR |= (1<<WDTOE) | (1<<WDE);/* 关闭WDT */WDTCR = 0x00; ATmega16 中断向量本节描述ATmega16的中断处理。Table 19给出了不同的BOOTRST/IVSEL设置下的复位和中断向量的位置。如果程序永远不使能中断,中断向量就没有意义。用户可以在此直接写程序。同样,如果复位向量位于应用区,而其他中断向量位于Boot 区,则复位向量之后可以直接写程序。反过来亦是如此。 ATmega16 典型的复位和中断设置如下:地址 符号代码说明$000 jmp RESET ; 复位中断向量$002 jmp EXT_INT0 ; IRQ0 中断向量$004 jmp EXT_INT1 ; IRQ1 中断向量$006 jmp TIM2_COMP ; Timer2 比较中断向量$008 jmp TIM2_OVF ; Timer2 溢出中断向量$00A jmp TIM1_CAPT ; Timer1 捕捉中断向量$00C jmp TIM1_COMPA ; Timer1 比较A 中断向量$00E jmp TIM1_COMPB ; Timer1 比较B 中断向量$010 jmp TIM1_OVF ; Timer1 溢出中断向量$012 jmp TIM0_OVF ; Timer0 溢出中断向量$014 jmp SPI_STC ; SPI 传输结束中断向量$016 jmp USART_RXC ; USART RX 结束中断向量$018 jmp USART_UDRE ; UDR 空中断向量$01A jmp USART_TXC ; USART TX 结束中断向量$01C jmp ADC ; ADC 转换结束中断向量$01E jmp EE_RDY ; EEPROM 就绪中断向量$020 jmp ANA_COMP ; 模拟比较器中断向量$022 jmp TWSI ; 两线串行接口中断向量$024 jmp EXT_INT2 ; IRQ2 中断向量$026 jmp TIM0_COMP ; 定时器0 比较中断向量$028 jmp SPM_RDY ; SPM 就绪中断向量;$02A RESET: ldi r16,high(RAMEND) ; 主程序$02B out SPH,r16 ; 设置堆栈指针为RAM 的顶部$02C ldi r16,low(RAMEND)$02D out SPL,r16$02E sei ; 使能中断$02F <instr> xxx. . .当熔丝位BOOTRST 未编程,Boot 区为 2K 字节,且寄存器GICR 的IVSEL 置位时,典型的复位和中断设置如下:地址符号代码说明$000 RESET: ldi r16,high(RAMEND) ; 主程序$001 out SPH,r16 ; 设置堆栈指针为RAM 的顶部$002 ldi r16,low(RAMEND)$003 out SPL,r16$004 sei ; 使能中断$005 <instr> xxx;.org $1C02$1C02 jmp EXT_INT0 ; IRQ0 中断向量$1C04 jmp EXT_INT1 ; IRQ1 中断向量. . . ;$1C28 jmp SPM_RDY ; SPM 就绪中断向量当熔丝位BOOTRST 已编程,且Boot 区为 2K 字节时,典型的复位和中断设置如下:地址符号代码说明.org $002$002 jmp EXT_INT0 ; IRQ0 中断向量$004 jmp EXT_INT1 ; IRQ1 中断向量. . . ;$028 jmp SPM_RDY ; SPM 就绪中断向量;.org $1C00$1C00 RESET: ldi r16,high(RAMEND) ; 主程序$1C01 out SPH,r16 ; 设置堆栈指针为RAM 的顶部$1C02 ldi r16,low(RAMEND)$1C03 out SPL,r16$1C04 sei ; 使能中断$1C05 <instr> xxx当熔丝位BOOTRST 已编程,Boot 区为2K 字节,且寄存器GICR 的IVSEL 置位时,典型的复位和中断设置如下:地址符号代码说明.org $1C00$1C00 jmp RESET ; Reset 中断向量$1C02 jmp EXT_INT0 ; IRQ0 中断向量$1C04 jmp EXT_INT1 ; IRQ1 中断向量. . . ;$1C28 jmp SPM_RDY ; SPM 就绪中断向量;$1C2A RESET: ldi r16,high(RAMEND) ; 主程序$1C2B out SPH,r16 ; 设置堆栈指针为RAM 的顶部$1C2C ldi r16,low(RAMEND)$1C2D out SPL,r16$1C2E sei ; 使能中断$1C2F <instr> xxx在应用区和Boot 区之间移动中断向量 通用中断控制寄存器决定中断向量表的放置地址通用中断控制寄存器 GICR? Bit 1 IVSEL: 中断向量选择当IVSEL 为"0“ 时,中断向量位于Flash 存储器的起始地址;当IVSEL 为"1“ 时,中断向量转移到Boot 区的起始地址。实际的Boot 区起始地址由熔丝位BOOTSZ 确定。具体请参考P234“ 支持引导装入程序 在写的同时可以读(RWW, Read-While-Write) 的自我编程能力” 。 为了防止无意识地改变中断向量表,修改IVSEL 时需要遵照如下过程:1. 置位中断向量修改使能位IVCE2. 在紧接的4 个时钟周期里将需要的数据写入IVSEL,同时对IVCE 写”0”执行上述序列时中断自动被禁止。其实,在置位IVCE 时中断就被禁止了,并一直保持到写IVSEL 操作之后的下一条语句。如果没有IVSEL 写操作,则中断在置位IVCE 之后的4 个时钟周期保持禁止。需要注意的是,虽然中断被自动禁止,但状态寄存器的位I 的值并不受此操作的影响。Note: 若中断向量位于Boot区,且Boot锁定位BLB02被编程,则执行应用区的程序时中断被禁止;若中断向量位于应用区,且Boot 锁定位BLB12 被编程, 则执行Boot 区的程序时中断被禁止。有关Boot 锁定位的细节请参见P234“ 支持引导装入程序 在写的同时可以读(RWW, Read-While-Write) 的自我编程能力” 。? Bit 0 IVCE: 中断向量修改使能改变IVSEL 时IVCE 必须置位。在IVCE 或IVSEL 写操作之后4 个时钟周期, IVCE 被硬件清零。如前面所述,置位IVCE 将禁止中断。代码如下:汇编代码例程:Move_interrupts:; 使能中断向量的修改ldi r16, (1<<IVCE)out GICR, r16; 将中断向量转移到boot 区ldi r16, (1<<IVSEL)out GICR, r16retC 代码例程void Move_interrupts(void)/* 使能中断向量的修改*/GICR = (1<<IVCE);/* 将中断向量转移到boot 区 */GICR = (1<<IVSEL); ATmega16 通用中断控制寄存器GICR  ? Bit 1 IVSEL: 中断向量选择当IVSEL 为"0“ 时,中断向量位于Flash 存储器的起始地址;当IVSEL 为"1“ 时,中断向量转移到Boot 区的起始地址。实际的Boot 区起始地址由熔丝位BOOTSZ 确定。具体请参考P234“ 支持引导装入程序 在写的同时可以读(RWW, Read-While-Write) 的自我编程能力” 。 为了防止无意识地改变中断向量表,修改IVSEL 时需要遵照如下过程:1. 置位中断向量修改使能位IVCE2. 在紧接的4 个时钟周期里将需要的数据写入IVSEL,同时对IVCE 写”0”执行上述序列时中断自动被禁止。其实,在置位IVCE 时中断就被禁止了,并一直保持到写IVSEL 操作之后的下一条语句。如果没有IVSEL 写操作,则中断在置位IVCE 之后的4 个时钟周期保持禁止。需要注意的是,虽然中断被自动禁止,但状态寄存器的位I 的值并不受此操作的影响。Note: 若中断向量位于Boot区,且Boot锁定位BLB02被编程,则执行应用区的程序时中断被禁止;若中断向量位于应用区,且Boot 锁定位BLB12 被编程, 则执行Boot 区的程序时中断被禁止。有关Boot 锁定位的细节请参见P234“ 支持引导装入程序 在写的同时可以读(RWW, Read-While-Write) 的自我编程能力” 。? Bit 0 IVCE: 中断向量修改使能改变IVSEL 时IVCE 必须置位。在IVCE 或IVSEL 写操作之后4 个时钟周期, IVCE 被硬件清零。如前面所述,置位IVCE 将禁止中断。代码如下:汇编代码例程:Move_interrupts:; 使能中断向量的修改ldi r16, (1<<IVCE)out GICR, r16; 将中断向量转移到boot 区ldi r16, (1<<IVSEL)out GICR, r16retC 代码例程void Move_interrupts(void)/* 使能中断向量的修改*/GICR = (1<<IVCE);/* 将中断向量转移到boot 区 */GICR = (1<<IVSEL);

    注意事项

    本文(AVR教程系列一(12):ATmega16 简介(六).docx)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开