这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » AVR单片机的复位操作方法解析

共5条 1/1 1 跳转至

AVR单片机的复位操作方法解析

工程师
2020-01-05 07:52:38     打赏

采用了在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),从而获得对片内存储器不同的加密保护方式。

需要进一步说明是:

在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给出了具体的配置值。用户在使用中,首先要根据实际使用情况进行正确的设置,而且千万注意不要对这些熔丝位误操作!

AVR单片机的复位操作方法解析

在表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。




高工
2020-01-07 21:31:31     打赏
2楼

说的很到位


工程师
2020-01-09 21:13:54     打赏
3楼

多谢分享


菜鸟
2020-01-17 21:45:58     打赏
4楼

楼主解析的还蛮详细的


助工
2020-01-18 21:39:27     打赏
5楼

嗯嗯非常到位


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]