您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > AVR教程系列一(10):ATmega16 简介(9)
ATmega16简介(四)ATmega16时钟系统及其分布时钟系统及其分布Figure11为AVR的主要时钟系统及其分布。这些时钟并不需要同时工作。为了降低功耗,可以通过使用不同的睡眠模式来禁止无需工作的模块的时钟。时钟系统详见Figure11。CPU时钟-clkCPUCPU时钟与操作AVR内核的子系统相连,如通用寄存器文件、状态寄存器及保存堆栈指针的数据存储器。终止CPU时钟将使内核停止工作和计算。I/O时钟-clkI/OI/O时钟用于主要的I/O模块,如定时器/计数器、SPI和USART。I/O时钟还用于外部中断模块。要注意的是有些外部中断由异步逻辑检测,因此即使I/O时钟停止了这些中断仍然可以得到监控。此外,USI模块的起始条件检测在没有clkI/O的情况下也是异步实现的,使得这个功能在任何睡眠模式下都可以正常工作。Flash时钟-clkFLASHFlash时钟控制Flash接口的操作。此时钟通常与CPU时钟同时挂起或激活。异步定时器时钟-clkASY异步定时器时钟允许异步定时器/计数器与LCD控制器直接由外部32kHz时钟晶体驱动。使得此定时器/计数器即使在睡眠模式下仍然可以为系统提供一个实时时钟。ADC时钟-clkADCADC具有专门的时钟。这样可以在ADC工作的时候停止CPU和I/O时钟以降低数字电路产生的噪声,从而提高ADC转换精度。ATmega16时钟源ATmega16芯片有如下几种通过Flash熔丝位进行选择的时钟源。时钟输入到AVR时钟发生器,再分配到相应的模块。不同的时钟选项将在后续部分进行介绍。当CPU自掉电模式或省电模式唤醒之后,被选择的时钟源用来为启动过程定时,保证振荡器在开始执行指令之前进入稳定状态。当CPU从复位开始工作时,还有额外的延迟时间以保证在MCU开始正常工作之前电源达到稳定电平。这个启动时间的定时由看门狗振荡器完成。看门狗溢出时间所对应的WDT振荡器周期数列于Table3。看门狗振荡器的频率由工作电压决定,详见P286“ATmega16典型特性”。缺省时钟源器件出厂时CKSEL=“0010”,SUT=“10”。这个缺省设置的时钟源是1MHz的内部RC振荡器,启动时间为最长。这种设置保证用户可以通过ISP或并行编程器得到所需的时钟源。ATmega16晶体振荡器XTAL1与XTAL2分别为用作片内振荡器的反向放大器的输入和输出,如Figure12所示,这个振荡器可以使用石英晶体,也可以使用陶瓷谐振器。熔丝位CKOPT用来选择这两种放大器模式的其中之一。当CKOPT被编程时振荡器在输出引脚产生满幅度的振荡。这种模式适合于噪声环境,以及需要通过XTAL2驱动第二个时钟缓冲器的情况。而且这种模式的频率范围比较宽。当保持CKOPT为未编程状态时,振荡器的输出信号幅度比较小。其优点是大大降低了功耗,但是频率范围比较窄,而且不能驱动其他时钟缓冲器。对于谐振器,CKOPT未编程时的最大频率为8MHz,CKOPT编程时为16MHz。C1和C2的数值要一样,不管使用的是晶体还是谐振器。最佳的数值与使用的晶体或谐振器有关,还与杂散电容和环境的电磁噪声有关。Table8给出了针对晶体选择电容的一些指南。对于陶瓷谐振器,应该使用厂商提供的数值。若想得到更多的有关如何选择电容以及振荡器如何工作的信息,请参考多用途振荡器应用手册。振荡器可以工作于三种不同的模式,每一种都有一个优化的频率范围。工作模式通过熔丝位CKSEL3..1来选择,如Table4所示。如Table5所示,熔丝位CKSEL0以及SUT1..0用于选择启动时间。Notes:1.这些选项只能用于工作频率不太接近于最大频率,而且启动时的频率稳定性对于应用而言不重要的情况。不适用于晶体。2.这些选项是为陶瓷谐振器设计的,可以保证启动时频率足够稳定。若工作频率不太接近于最大频率,而且启动时的频率稳定性对于应用而言不重要时也适用于晶体。ATmega16低频晶体振荡器为了使用32.768kHz钟表晶体作为器件的时钟源,必须将熔丝位CKSEL设置为“1001”以选择低频晶体振荡器。晶体的连接方式如Figure12所示。通过对熔丝位CKOPT的编程,用户可以使能XTAL1和XTAL2的内部电容,从而去除外部电容。内部电容的标称数值为36pF。选择了这个振荡器之后,启动时间由熔丝位SUT确定,如Table6所示。ATmega16外部RC振荡器对于时间不敏感的应用可以使用Figure13的外部RC振荡器。频率可以通过方程f=1/(3RC)进行粗略地鼓估计。电容C至少要22pF。通过编程熔丝位CKOPT,用户可以使能XTAL1和GND之间的片内36pF电容,从而无需外部点燃。若想获取有关振荡器如何工作以及如何选择R和C的具体信息,请参考外部RC振荡器应用手册。振荡器可以工作于四个不同的模式,每个模式有自己的优化频率范围。工作模式通过熔丝位CKSEL3..0选取,如Table7所示。选择了这个振荡器之后,启动时间由熔丝位SUT确定,如Table8所示。ATmega16标定的片内RC振荡器标定的片内RC振荡器提供了固定的1.0、2.0、4.0或8.0MHz的时钟。这些频率都是5V、25°C下的标称数值。这个时钟也可以作为系统时钟,只要按照Table9对熔丝位CKSEL进行编程即可。选择这个时钟(此时不能对CKOPT进行编程)之后就无需外部器件了。复位时硬件将标定字节加载到OSCCAL寄存器,自动完成对RC振荡器的标定。在5V,25°C和频率为1.0MHz时,这种标定可以提供标称频率±1%的精度。当使用这个振荡器作为系统时钟时,看门狗仍然使用自己的看门狗定时器作为溢出复位的依据。选择了这个振荡器之后,启动时间由熔丝位SUT确定,如Table10所示。XTAL1和XTAL2要保持为空(NC)。振荡器标定寄存器-OSCCAL?Bits7..0–CAL7..0:振荡器标定数据将标定数据写入这个地址可以对内部振荡器进行调节以消除由于生产工艺所带来的振荡器频率偏差。复位时1MHz的标定数据(标识数据的高字节,地址为0x00)自动加载到OSCCAL寄存器。如果需要内部RC振荡器工作于其他频率,标定数据必须人工加载:首先通过编程器读取标识数据,然后将标定数据保存到Flash或EEPROM之中。这些数据可以通过软件读取,然后加载到OSCCAL寄存器。当OSCCAL为零时振荡器以最低频率工作。当对其写如不为零的数据时内部振荡器的频率将增长。写入0xFF即得到最高频率。标定的振荡器用来为访问EEPROM和Flash定时。有写EEPROM和Flash的操作时不要将频率标定到超过标称频率的10%,否则写操作有可能失败。要注意振荡器只对1.0、2.0、4.0和8.0MHz这四种频率进行了标定,其他频率则无法保证。
本文标题:AVR教程系列一(10):ATmega16 简介(9)
链接地址:https://www.777doc.com/doc-23877 .html