看门狗定时器
看门狗定时器由独立的1 MHz 片内振荡器驱动。这是VCC = 5V 时的典型值。请参见特性 数据以了解其他VCC 电平下的典型值。通过设置看门狗定时器的预分频器可以调节看门狗 复位的时间间隔,如P 41Table 17 所示。看门狗复位指令WDR 用来复位看门狗定时器。 此外,禁止看门狗定时器或发生复位时定时器也被复位。复位时间有8 个选项。如果没有 及时复位定时器,一旦时间超过复位周期, ATmega8 就复位,并执行复位向量指向的程 序。
为了防止无意之间禁止看门狗定时器,当看门狗禁用时,其后必须加入一个特定的关闭序 列,详见看门狗定时器控制寄存器说明。
看门狗定时器控制寄存器- WDTCR
• Bits 7..5 – Res: 保留
保留位,读操作返回值为零。
• Bit 4 – WDCE: 看门狗修改使能
清零WDE 时必须先置位WDCE,否则不能禁止看门狗。一旦置位,硬件将在紧接的4 个 时钟周期之后将其清零。请参考有关WDE 的说明来禁止看门狗。工作于安全级别1 和2 时也必须置位WDCE 以修改预分频器的数据,详见代码例程。
• Bit 3 – WDE: 看门狗使能
WDE为"1“时,看门狗使能,否则看门狗将被禁止。只有在WDCE为"1“时WDE才能清零。以下为关闭看门狗的步骤:
1. 在同一个指令内对WDCE 和WDE 写"1“,即使WDE 已经为"1“。
2. 在紧接的4 个时钟周期之内对WDE 写"0”。
• Bits 2..0 – WDP2, WDP1, WDP0: 看门狗定时器预分频器2, 1, 和0
WDP2、WDP1 和WDP0 决定看门狗定时器的预分频器,其预分频值及相应的溢出周期如Table 17 所示。
下面的例子分别用汇编和C 实现了关闭WDT 的操作。在此假定中断处于用户控制之下 ( 比如禁止全局中断) ,因而在执行下面程序时中断不会发生。
改变看门狗定时器配置的时间序列
改变配置的序列根据不同的安全级别略有不同。下面将逐一说明。
汇编代码例程 |
WDT_off: ; 复位WDT wdr ; 置位WDCE 和 WDE in r16, WDTCR ori r16, (1<out WDTCR, r16 ; 关闭WDT ldi r16, (0<out WDTCR, r16 ret |
C 代码例程 |
void WDT_off(void) { /* 复位WDT */ _WDR() /* 置位WDCE 和 WDE */ WDTCR |= (1</* 关闭WDT */ WDTCR = 0x00; } |
安全级别1(WDTON 熔丝位未编程)
在这个模式下,看门狗定时器的初始状态是禁止的,可以没有限制地通过置位WDE 来使能它。改变定时器溢出周期及禁止( 已经使能的) 看门狗定时器时需要执行一个特定的时间序列:
1. 在同一个指令内对WDCE 和WDE 写"1“,即使WDE 已经为"1“。
2. 在紧接的4 个时钟周期之内同时对WDE及WDP写入合适的数据,而WDCE 则写"0”。
安全级别2(WDTON 熔丝位已编程)
在这个模式下,看门狗定时器总是使能的, WDE 的读返回值为"1”。 改变定时器溢出周期需要执行一个特定的时间序列:
1. 在同一个指令内对WDCE和WDE写"1“。虽然WDE总是为置位状态,也必须写"1“以启动时序。
在紧接的4 个时钟周期之内同时对WDCE 写"0”,以及为WDP 写入合适的数据。WDE的数值可以任意。
关键字:ATmega8 看门狗 定时器
引用地址:
ATmega8 看门狗定时器
推荐阅读最新更新时间:2024-11-13 07:02
STM32 基本定时器
本文为野火学习笔记。 定时器分类 stm32f1系列。除互联型设备,共有8个定时器,分为基本,通用,高级3种定时器。不同的定时器有不同的功能。 基本定时器为 TIM6,TIM7 。其只能定时,没有外部IO,且16位计数器只能向上计数。 通用定时器为 TIM2/3/4/5 , 可以定时;也可输出比较和输入捕捉,每个定时器有4个IO,16位计数器可上下计数。 高级定时器为 TIM1/8 ,在通用的基础上多了互补输出信号的功能,每个定时器有8个IO口。 功能框图 下图为基本定时器的结构框图: 时钟源 定时器的时钟源名为 TIMxCLK,可以在时钟树中找到 可见 TIMxCLK 时钟是来自于APB
[单片机]
看门狗深度解析
往往我们发现的HWT看门狗问题:都是CPU间共享资源互锁造成的(即R 状态死锁),所以后续当发现HWT问题时,不要只是关注具体直接导致HWT对应的那个CPU核的堆栈信息,我们必须要查看每一个CPU堆栈信息。---------------其实往往此种问题是由于其它cpu核访问资源异常时死在了锁里,而等待获取资源的cpu核(直接报问题的核)由于长时间不能等到锁被释放造成被看门狗复位。 死锁概念 死锁是指多个进程(线程)因为长久等待已被其他进程占有的的资源而陷入阻塞的一种状态。当等待的资源一直得不到释放,死锁会一直持续下去。死锁一旦发生,程序本身是解决不了的,只能依靠外部力量使得程序恢复运行,例如重启,开门狗复位等。 Lin
[单片机]
5. avr定时器/计数器1 快速PWM输出 (比较输出--快速PWM模式)
快速PWM 模式(WGM13:0 = 5、6、 7、14 或15) 可用来产生高频的PWM 波形。快速PWM模式与其他PWM模式的不同之处是其单边斜坡工作方式。计数器从BOTTOM计到TOP,然后立即回到BOTTOM 重新开始。对于普通的比较输出模式,输出比较引脚OC1x在TCNT1 与OCR1x 匹配时置位,在TOP 时清零;对于反向比较输出模式,OCR1x 的动作正好相反。由于使用了单边斜坡模式,快速PWM 模式的工作频率比使用双斜坡的相位修正PWM 模式高一倍。此高频操作特性使得快速PWM 模式十分适合于功率调节,整流和DAC应用。高频可以减小外部元器件( 电感,电容) 的物理尺寸,从而降低系统成本。 工作于快速PWM 模式
[单片机]
ATmega64 定时器/计时器振荡器
对于拥有定时器/ 振荡器引脚(TOSC1 和TOSC2) 的AVR 微处理器,晶体可以直接与这 两个引脚连接,无需外部电容。此振荡器针对32.768 kHz 的钟表晶体作了优化。不建议 在TOSC1 引脚输入振荡信号。
[单片机]
基于STM32的软件定时器设计
1 什么是软件定时器 软件定时器是用程序模拟出来的定时器,可以由一个硬件定时器模拟出成千上万个软件定时器,这样程序在需要使用较多定时器的时候就不会受限于硬件资源的不足,这是软件定时器的一个优点,即数量不受限制。 但由于软件定时器是通过程序实现的,其运行和维护都需要耗费一定的CPU资源,同时精度也相对硬件定时器要差一些。 2 软件定时器的实现原理 在Linux,uC/OS,FreeRTOS等操作系统中,都带有软件定时器,原理大同小异。典型的实现方法是:通过一个硬件定时器产生固定的时钟节拍,每次硬件定时器中断到,就对一个全局的时间标记加一,每个软件定时器都保存着到期时间。 程序需要定期扫描所有运行中的软件定时器,将各个到期时间
[单片机]
STM32CUBEIDE(12)----定时器TIM捕获PWM测量频率与占空比
概述 本章 STM32 CUBEMX配置STM32F103输出PWM,并在 示波器 中查看效果。 最近在弄ST和GD的课程,需要GD样片的可以加群申请:615061293 。 生成例程 使用STM32CUBEMX生成例程,这里使用NUCLEO-F103RB开发板 查看原理图,PA2和PA3设置为开发板的串口。 配置串口。 查看原理图,PA8设置为PWM输出管脚,PA0设置为 定时器 输入捕获管脚。 配置 时钟 树 配置时钟为64M。 配置PWM 配置定时器1输出pwm的频率为1K。 配置输入捕获 开启中断 STM32CUBEIDE配置 若需要打印浮点型,需要勾选下面的选项。 串口重定向
[单片机]
STC15F104W使用定时器0模拟串口
#include reg51.h #include intrins.h //定义波特率常量 //BAUD = 65536 - FOSC/3/BAUDRATE/M (1T:M=1; 12T:M=12) //NOTE: (FOSC / 3 / BAUDRATE)必须大于98,(建议增加110) //#define BAUD 0xF400 // 1200bps @ 11.0592MHz #define BAUD 0xFA00 // 2400bps @ 11.0592MHz //#define BAUD 0xFD00 // 4800bps @ 11.0592MHz //#defin
[单片机]
avr定时器T0,T1,T2初始化配置及其说明
#include iom16v.h #include macros.h unsigned char shi,fen,miao; unsigned char t=0; #define DATA_T0_INIT 156 #define DATA_T1_INIT 31249 #define DATA_T2_INIT 156 unsigned int T0_CAPT=0; //T0/C0溢出中断向量端口 #pragma interrupt_handler Timer0_over:iv_TIMER0_OVF //T0/C0比较匹配中断向量端口 #pragma interrupt_handler Timer0_COMP:iv_TIMER
[单片机]