PWM定时器

  PWN:脉冲宽度调制

  每个定时器都有一个专用的由定时器时钟驱动的16位递减计数器。当递减计数器的计数值达到0的时候,就会产生定时中断请求来通知CPU定时器操作完成。当定时器递减计数器达到0的时候,相应的TCNTBn的值会自动重载到递减计数器中以继续下次操作。

  但是,如果定时器停止了,比如在定时器运行时清除TCON中的定时器使能位,TCNTBn的值不会被重载到递减计数器中

  TCMPBn的值用于脉冲宽度调制(PWM)。当定时器的递减计数器的值和比较寄存器的值相匹配的时候,定时器控制逻辑将改变输出电平。因此,比较寄存器决定了PWM输出的开关时间。

定时吕控制寄存器(TCON)

  定时器控制寄存器主要用于自动重载、定时器自动更新、定时器启停、输出翻转控制等

定时器n计数缓冲寄存器(TCNTBn)

  这个寄存器用于PWM定时器的时间计数

定时器n比较缓冲寄存器(TCMPBn)

  这个寄存器用于PWM波形输出占空比的设置


看门狗定时器

  看门狗(WatchDog)定时器和PWM定时器功能目的不一样。

特点

  需要不停地接收信号(一些外置看门狗芯片)或重新设置计数值(如S3C2410X的看门狗控制器),保持计数值不为0.一旦一段时间接收不到信号,或计数值到0,看门狗定时器将发出复位信号复位系统或产生中断。

作用

  看门狗定时器的作用是微控制器受到干扰进入错误状态后,使系统在一定时间间隔内复位。因此看门狗定时器是保证系统长期、可靠和稳定运行的有效措施。

  一旦看门狗定时器被允许,看门狗定时器数据寄存器(WTDAT)的值不能被自动地装载到看门狗计数器(WTCNT)中。因此,看门狗定时器启动前要将一个初始值写入看门狗计数器(WTCNT)中。

程序设计流程

  由于看门狗定时器是对系统的复位或者中断的操作,所以不需要外围的硬件电路。要实现看门狗定时器的功能,只需要对看门狗定时器的寄存器组进行操作,即对看门狗定时器的控制寄存器(WTCNT)进行操作。

  1)设置看门狗定时器中断操作包括全局中断和看门狗中断的全能及看门狗中断向量的定义,如果只是进行复位操作,这一步可以不用设置

  2)对看门狗控制寄存器(WTCON)的设置,包括设置预分频比例因子、分频器的分频值、中断全能和复位全能等

  3)对看门狗数据寄存器(WTDAT)和看门狗计数寄存器(WTCNT)的设置

  4)启动看门狗定时器


看门狗例子

 #include "2410lib.h"

 void watchdog_test(void);

 int main()

 {

    sys_init();

    uart_printf("\n Embest Arm S3CEB2410 Evaluation Board!\n");  

    watchdog_test();

 while();

 }

 void  __irq watchdog_int(void) ;//__attribute__((interrupt ("IRQ")));

 INT8T f_ucSecondNo;

 void watchdog_test(void)

 {   f_ucSecondNo = ;

    uart_printf("\n WatchDog Timer Test Example\n");

    uart_printf(" 10 seconds:\n");

    rSRCPND|=0x0200;

    rINTPND|=0x200;

 //ClearPending(BIT_WDT);                        // clear interrupt pending bit

    pISR_WDT = (unsigned)watchdog_int;              // Initialize WDT interrupt handler entry

    rWTCON = ((PCLK/-)<<)|(<<)|(<<);   // 1M,1/128, enable interrupt

    rWTDAT = ;                                  // 1M/128=7812

    rWTCNT = ;

    rWTCON = rWTCON & ~;

 //rWTCON = rWTCON | 1;                          // enable restart                

    rWTCON |=(<<);                                // start watchdog timer

    rINTMOD &= ~(BIT_WDT);

    rINTMSK &= ~(BIT_WDT);

 while((f_ucSecondNo)<);

    rINTMSK |= BIT_WDT;                             // mask watchdog timer interrupt

    uart_printf(" end.\n");      

 }

 void __irq watchdog_int(void)

 {

    ClearPending(BIT_WDT);

    f_ucSecondNo++;  

 if(f_ucSecondNo<)

        uart_printf(" %3ds ",f_ucSecondNo);

 else

        uart_printf("\n O.K.");

 }

【ARM】定时器的更多相关文章

  1. 灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置

    灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置 目录: 1.Timer1高级定时器Timer3通用定时器Timer14基本定时器简介 2.Timer1高级 ...

  2. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-7底层驱动之滴嗒定时器

    视频简介:该视频介绍iCore3应用开发平台中的配置方法,以及在应用开发平台中的应用. 源视频包下载地址:链接:http://pan.baidu.com/s/1o7UuUwi 密码:14cx 银杏科技 ...

  3. STM32学习及应用笔记一:SysTick定时器学习及应用

    这几年一直使用STM32的MCU,对ARM内核的SysTick计时器也经常使用,但几乎没有仔细了解过.最近正好要在移植一个新的操作系统时接触到了这块,据比较深入的了解了一下. 1.SysTick究竟是 ...

  4. Linux_arm驱动之按键模拟脉冲实现定时器的精确计时

    /***************************************************************** 内核驱动部分button_ker.c ************** ...

  5. 【整理】--【KERNEL】内核定时器

    一.LINUX内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,其实现位于 <linux/timer.h> 和 kernel/timer.c 文件中 ...

  6. [转]设置Android手机以使用ARM Streamline进行性能分析(二)

    原文因为arm社区改版访问不到了,原作者鲍方,原文地址,这篇是从google cache里挖出来的,希望能帮到要对cocos2dx优化的各位   Posted by Fang Bao, Leave C ...

  7. linux 定时器编程实例(完善中).....

    最近在写linux 下的定时器编程实验,测试发现 usleep函数在 x86 架构下的定时还是比较准确的,在arm9下 就不太准了. 今天用linux 下的setitimer()函数进行了定时 器的测 ...

  8. ARM Linux系统的时钟机制

    1. Linux下有两类时钟: 1.1 实时钟RTC 它由板上电池驱动的“Real Time Clock”也叫做RTC或者叫CMOS时钟,硬件时钟.当操作系统关机的时候,用这个来记录时间,但是对于运行 ...

  9. arm linux kernel启动之start_kernel

    了解完kernel启动以前的汇编之后我们来看看正式的c语言启动代码,也就是我们的start_kernel函数了.start_kernel相当大,里面每一个调用到的函数都足够我们伤脑筋了,我这里只是浅尝 ...

随机推荐

  1. iOS刻度尺换算之1mm等于多少像素理解

    刚好看到一个刻度尺文章,实现手机屏幕上画刻度尺. 然后就有一个疑问:这个现实中的1mm(1毫米)长度与手机像素之间的换算比怎么来的呢? 看了下demo代码,发现这样写的: CGFloat sc_w = ...

  2. nginx 中文和英文资料

    http://www.nginx.cn/doc/ http://manual.51yip.com/nginx/ http://tool.oschina.net/apidocs/apidoc?api=n ...

  3. linux达人养成计划学习笔记(一)——命令基本格式及文件处理命令

    一.shell终端初始 快捷键Ctrl + Alt + T,可以快速打开终端 bluemoutain 当前用户名 bluemoutain-CN155 本机名 ~ 当前目录(家目录,root用户为/ro ...

  4. hadoop下载地址

    hadoop下载地址 http://mirror.bit.edu.cn/apache/hadoop/common/ hadoop下载地址

  5. 【MyBatis】MyBatis之别名typeAliases标签的使用

    <configuration> <typeAliases> <typeAlias alias="Dept" type="cn.xdl.ent ...

  6. iOS 9 学习系列: Xcode Code Coverage

    Code coverage 是一个计算你的单元測试覆盖率的工具. 高水平的覆盖给你的单元測试带来信心.也表明你的应用被彻底的測试过了. 你可能写了几千个单元測试,但假设覆盖率不高.那么你写的这套測试可 ...

  7. [转]Java 变量和常量

    变量和常量 在程序中存在大量的数据来代表程序的状态,其中有些数据在程序的运行过程中值会发生改变,有些数据在程序运行过程中值不能发生改变,这些数据在程序中分别被叫做变量和常量. 在实际的程序中,可以根据 ...

  8. [转]MVC 框架教程

    Spring web MVC 框架提供了模型-视图-控制的体系结构和可以用来开发灵活.松散耦合的 web 应用程序的组件.MVC 模式导致了应用程序的不同方面(输入逻辑.业务逻辑和 UI 逻辑)的分离 ...

  9. 转 分享我在阿里工作十年接触过Java框架设计模式

    转 原文: 分享我在阿里工作十年接触过Java框架设计模式 一.前言 说起来设计模式,大家应该都耳熟能详,设计模式代表了软件设计的最佳实践,是经过不断总结提炼出来的代码设计经验的分类总结,这些模式或者 ...

  10. mac 下python使用venv 虚拟环境

    1.安装virtualenv :pip3 install virtualenv 2.创建虚拟环境命令:virtualenv --no-site-packages venv 在当前目录创建一个虚拟环境v ...