单片机交流
直播中

张览秀

7年用户 1164经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

AVR的复位源和复位方式是什么?

AVR的复位源和复位方式是什么?

回帖(1)

王丹青

2021-10-29 14:30:42
最小系统:
   
  
  

   采用了在ATmega16引脚XTAL1和XTAL2上外接由石英晶体和电容组成的谐振回路,并配合片内的OSC(Oscillator)振荡威廉希尔官方网站 构成的振荡源作为系统时钟源的。更简单的威廉希尔官方网站 是直接使用片内的4M的RC振荡源,这样就可以将C1、C2、R2和4M晶体省掉,引脚XTAL1和XTAL2悬空,当然此时系统时钟频率精准度不如采用外部晶体的方式,而且也易受到温度变化的影响。
   AVR的复位源和复位方式:
   复位是单片机芯片本身的硬件初始化操作,例如,单片机在上电开机时都需要复位,以便CPU以及其它内部功能部件都处于一个确定的初始状态,并从这个初始状态开始工作。
   AVR单片机的复位操作,其主要功能是把程序计数器PC初始化为$0000(指非BOOT LOAD方式启动),使单片机从$0000单元开始执行程序。同时决大部分的寄存器(通用寄存器和I/O寄存器)也被复位操作清零。
   ATmega16单片机共有5个复位源,它们是:
   1、上电复位。当系统电源电压低于上电复位门限Vpot时,MCU复位。
   2、外部复位。当外部引脚RESET为低电平,且低电平持续时间大于1.5us时,MCU复位。
3、掉电检测(BOD)复位。BOD使能时,且电源电压低于掉电检测复位门限(4.0v或2.7v)时,MCU复位。
4、看门狗复位。WDT使能时,并且WDT超时溢出时,MCU复位。
5、JTAG AVR复位。当使用JTAG接口时,可由JTAG口控制MCU复位。
    AVR复位启动后,由于程序计数器PC置为$0000,因此CPU取出的第一条指令就是在Flash空间的$0000处,即复位后系统程序从地址$0000处开始执行(指非BOOT LOAD方式启动)。通常在$0000地址中放置的指令为一条相对转移指令RJMP或JMP指令,跳到主程序的开始。这样,系统复位启动后,首先执行$0000处的跳转指令,然后转到执行主程序的指令。
   AVR内部的MCU控制和状态寄存器MCUCSR还将引起复位的复位源进行了记录,用户程序启动后,可以读取MCUCSR中的标记,查看复位是由于何种情况造成的,是正常复位还是异常复位,从而根据实际情况执行不同的程序,实现不同的处理。
   对AVR的编程下载:串行编程方式(ISP)。
   mega16的熔丝位:
   ATmega16单片机在售出时,片内的Flash 存储器和EEPROM 存储器阵列是处在擦除的状态(即内容 = $FF),且可被编程。同时其器件配置熔丝位的缺省值为使用内部1M的RC振荡源作为系统时钟!
   1.存储器加密锁定位
   ATmage16有2个加密锁定位LB1和LB2,用于设定对片内存储器的加密方式,用户可在编程方式下,对LB1、LB2不编程(1),或编程(0),从而获得对片内存储器不同的加密保护方式,见表2.3。
   
  

  

   需要进一步说明是:
在AVR的器件手册中,使用已编程(Programmed)和未编程(Unprogrammed)定义加密位和熔丝位的状态。“Unprogrammed”表示熔丝状态为“1”(禁止),“Programmed”表示熔丝状态为“0”(允许),即
   1:未编程
   0:编程
   AVR的加密位和熔丝位可多次编程,不是OPT熔丝。
AVR芯片加密锁定后(LB2/LB1 = 1/0,0/0),在外部不能通过任何方式读取芯片内部Flash和EEPROM中的数据,但熔丝位的状态仍然可以读取,不能修改配置。
需要重新下载程序时,或芯片被加密锁定后,或发现熔丝位配置不对,都必须先在编程状态使用芯片擦除命令,清除芯片内部存储器中的数据,同时解除加密锁定。然后重新下载运行代码和数据,修改和配置相关的熔丝位,最后再次配置芯片的加密锁定位。
编程状态的芯片擦除命令是将Flash和EEPROM中的数据清除,并同时将两位锁定位状态配置成无锁定状态(LB2/LB1 = 1/1)。但芯片擦除命令并不改变其它熔丝位的状态。
下载编程的正确的操作程序是:在芯片无锁定状态下,下载运行代码和数据,配置相关的熔丝位,最后配置芯片的加密锁定位。

   2.系统时钟类型的配置
   ATmega16可以使用多种类型的系统时钟源,最常用的为2种:使用内部的RC振荡源(1M/2M/4M/8M)和外接晶体(晶体可在0-16MHz之间选择)配合内部振荡放大器构成的振荡源。具体系统时钟类型的配置由CKOPT和CKSEL[3-0]共5个熔丝设定,表2.4、表2.5给出了具体的配置值。用户在使用中,首先要根据实际使用情况进行正确的设置,而且千万注意不要对这些熔丝位误操作!
   
  

  

   在表2.5中,当CKOPT = 0时,振荡器的输出振幅较大,容易起振,适合在干扰大的场合以及使用的晶体超过8M时的情况下使用。而CKOPT = 1时,振荡器的输出振幅较小,这样可以减小对电源的消耗,对外的电磁幅射也较小。
   
  
  

   尤其需要说明的是,一旦RESET脚的电平被外部拉低,当满足某些特殊条件后,芯片将进入编程状态。例如,如果芯片带有SPI接口,支持SPI串行编程,则通过以下方式将使芯片进入SPI编程状态:
外部将SPI口的SCK引脚拉低,然后外部在RESET引脚上施加一个至少为2个系统周期以上低电平脉冲;
延时等待20ms后,由外部通过AVR的SPI口向芯片下发允许SPI编程的指令;
   
  

  

   如果外围连接在上电情况时表现为强上拉或强下拉(最极端情况为接高电平或GND),那么为了保证AVR的SPI功能的正常工作,应该如图2-20中所示,串入3个隔离电阻,阻值在2K左右。
   AVR熔丝位的配置:
   对于刚开始学习使用AVR的读者,建议改变的熔丝位有:
系统时钟采用内部4M的RC振荡源。其优点是速度适中,且应用于RS-232通信时,分频产生的9600bps速率与标准值的误差最小(0.2%)。
禁止片内的JTAG口功能。不使用JTAG在线仿真,将4个引脚PC2-PC5释放,作为普通的I/O使用。
启用低电压检测复位功能。检测电平设置为4.0V。
   
  
举报

更多回帖

发帖
×
20
完善资料,
赚取积分