FPGA 串口中断_敏矽微电子Cortex-M0学习笔记15-看门狗定时中断实例

f9f6c28ca99ed6bc0ef8121d3e94dd78.png

学习笔记

1、看门狗时钟

在上一章节的学习中,我们使用了看门狗的系统复位功能,通过触摸按键触发喂狗的方式,演示了看门狗的复位功能。这一章节再讲解下看门狗的定时中断功能。既然提到了定时功能,那就需要先介绍下看门狗的时钟系统。

看门狗定时器模块使用两个时钟:PCLK和WDCLK。PCLK由系统时钟生成,供APB 访问看门狗寄存器使用。WDCLK由看门狗时钟振荡器中的wdt_clk生成,供看门狗定时器计数使用。wdt_clk时钟可以从IRC和看门狗振荡器中选择一个作为时钟源。

这两个时钟源之间存在一些同步逻辑。当MOD和TC寄存器通过APB操作更新时,新的值将由WDCLK时钟设定并生效。当看门狗定时器处于WDCLK时钟周期时,同步逻辑会先锁定WDCLK上计数器的值,然后使其与PCLK同步,以作为TV寄存器的值供 CPU 读取。

2、看门狗中断

首先介绍下看门狗警告中断比较值寄存器(WDWARNINT寄存器),它决定产生看门狗警告中断的看门狗定时器值。当计数器的低10位与WARNINT的10位具有相同值,且计数器其余高位均为0时,便触发看门狗警告中断。如例图所示,设置看门狗中断比较值寄存器的定时值位0x3FF,当看门狗计数器到03FF时,看门狗中断触发。

cc2f6d49855af79a942e85a338cdaec6.png

图1 看门狗中断

除了看门狗警告中断之外,还有看门狗超时中断。这个是通过看门狗模式寄存器的WDRESET位置1,来选择看门狗超时引发中断。模式寄存器的WDTOF位就是看门狗超时标志位。在看门狗超时、发生喂狗错误或当 WDPROTECT=1 且尝试向 WDTC 寄存器写入时,便会设置看门狗超时标志。通过软件向此位写入 0 可将该标志清零。 WDTOF 位置 1,都可以触发中断。在任何情况下,非看门狗超时引起的看门狗超时标志置位都不会触发系统复位。

3、看门狗中断例程

接下来写个小例程来测试下看门狗定时中断功能的运行情况,程序源码如下。

int main(void){//初始化串口PA_2_INIT(PA_2_TX0);UART_Open(UART0,9600,UART_NO_PARITY,0);UART_PutString(UART0,"System Reset...");//Send System Inital StringWDT_Init ();//看门狗初始化WDT_SetIntervalinMiliSec(4000);//设置看门狗超时时间4秒WDT->WARNINT_b.WARNINT = 0x3FF;//警告中断定时值设置为最大值,方便演示NVIC_EnableIRQ(WDT_IRQn);//设置看门狗NVIC中断WDT_Enable_Timer;//启动看门狗WDT_Feed();//喂狗while(1);} void WDT_IRQHandler(void)//看门狗中断服务子程序{if(WDT->MOD_b.WDINT == 1)//警告中断{WDT_Feed();UART_PutString(UART0,"WDT Warning Int...");UART_ByteWrite(UART0,'');}if(WDT->MOD_b.WDTOF == 1)//超时中断{WDT_Feed();UART_PutString(UART0,"WDT Timeout Int...");UART_ByteWrite(UART0,'}WDT_ClearIntFlag();//清除看门狗中断return;}

例程首先对串口进行初始化,然后串口输出提示系统复位。随后就是看门狗的初始化。将看门时间设置为4秒钟,并且为中断模式。并且使能看门狗中断。在看门狗中断服务程序中,根据触发的中断不同,输出相应的提示信息。

程序编译无误后,便可以下载仿真调试了。首先全速运行,看下串口输出的信息。根据输出的信息我们发现只有看门狗警告中断信息输出,并没有超时中断信息。这是因为在警告中断发生后及时进行了喂狗操作。所以看门狗并不会超时。

807c72d1d166798af13241b61a3cde84.png

图2 看门狗中断实例1

接下来我们可以把看门狗警告中断的喂狗函数WDT_Feed()屏蔽掉,然后再下载仿真看看效果。这时候我们就会看到看门狗超时中断的信息输出。因为警告中断后没有及时喂狗操作,导致看门狗超时发生。

4285e4520121206b437ba7688d40d05e.png

图3 看门狗中断实例2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值