裸机——wdt

1. 首先晓得看门狗的基本知识

  看门狗是带复位功能的定时器,用于在系统跑飞时复位系统。

 

  接下来按照上次的知识对看门狗进行推导

  看门狗的关键词是 定时器 复位

  定时器 关键是 时间段 中断

  时间段 关键的是 时钟周期 计数值

  时间周期 关键是 时钟源 分频

  

  至此,我们就晓得处理看门狗定时器的基本思路,

  即设置 时钟源 和 分频 和 计数值 完成 基本初始化,

  这里,只是用中断功能,所以还需要设置使用中断,禁止复位。

 

2. 有了基本思路,下面来看数据手册(由于看门狗是SoC内部的,原理图上没有)

  找到最关键的图

 

  可以看出符合上面猜想的思路,

  即 时钟源 为 PCLK, 分频 两次, 得到时钟周期

  WTDAT 设置 计数值

  WTCON[2] ,WTCON[0],设置是否产生 中断 或 复位

 

3. 既然思路清晰了,下面开始编程

 

#define        WTCON        (0xE2700000)
#define        WTDAT        (0xE2700004)
#define        WTCNT        (0xE2700008)
#define     WTCLRINT    (0xE270000C)

#define     rWTCON        (*(volatile unsigned int *)WTCON)
#define     rWTDAT        (*(volatile unsigned int *)WTDAT)
#define     rWTCNT        (*(volatile unsigned int *)WTCNT)
#define     rWTCLRINT    (*(volatile unsigned int *)WTCLRINT)

#include "stdio.h"

void intc_clearvectaddr(void);

void wdt_init()
{
    // 设置时钟周期
    rWTCON &= ~((0xFF << 8) | (3 << 3));
    rWTCON |= (65 << 8) | (3 << 3);
    
    // 设置计数值
    rWTDAT = 1000;
    rWTCNT = 1000;
    
    // 关闭复位,开启中断
    rWTCON |= 1 << 2;
    rWTCON &= ~(1 << 0);
    
    // 开启看门狗
    rWTCON |= 1 << 5;
}

static int i = 0;

void isr_wdt()
{
    printf("----isr_wdt %d----\n", i++);
    rWTCLRINT = 1;
    intc_clearvectaddr();
}

 

转载于:https://www.cnblogs.com/yangxinrui/p/9956343.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值