【ARM】定时器
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】定时器的更多相关文章
- 灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置
灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置 目录: 1.Timer1高级定时器Timer3通用定时器Timer14基本定时器简介 2.Timer1高级 ...
- 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-7底层驱动之滴嗒定时器
视频简介:该视频介绍iCore3应用开发平台中的配置方法,以及在应用开发平台中的应用. 源视频包下载地址:链接:http://pan.baidu.com/s/1o7UuUwi 密码:14cx 银杏科技 ...
- STM32学习及应用笔记一:SysTick定时器学习及应用
这几年一直使用STM32的MCU,对ARM内核的SysTick计时器也经常使用,但几乎没有仔细了解过.最近正好要在移植一个新的操作系统时接触到了这块,据比较深入的了解了一下. 1.SysTick究竟是 ...
- Linux_arm驱动之按键模拟脉冲实现定时器的精确计时
/***************************************************************** 内核驱动部分button_ker.c ************** ...
- 【整理】--【KERNEL】内核定时器
一.LINUX内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,其实现位于 <linux/timer.h> 和 kernel/timer.c 文件中 ...
- [转]设置Android手机以使用ARM Streamline进行性能分析(二)
原文因为arm社区改版访问不到了,原作者鲍方,原文地址,这篇是从google cache里挖出来的,希望能帮到要对cocos2dx优化的各位 Posted by Fang Bao, Leave C ...
- linux 定时器编程实例(完善中).....
最近在写linux 下的定时器编程实验,测试发现 usleep函数在 x86 架构下的定时还是比较准确的,在arm9下 就不太准了. 今天用linux 下的setitimer()函数进行了定时 器的测 ...
- ARM Linux系统的时钟机制
1. Linux下有两类时钟: 1.1 实时钟RTC 它由板上电池驱动的“Real Time Clock”也叫做RTC或者叫CMOS时钟,硬件时钟.当操作系统关机的时候,用这个来记录时间,但是对于运行 ...
- arm linux kernel启动之start_kernel
了解完kernel启动以前的汇编之后我们来看看正式的c语言启动代码,也就是我们的start_kernel函数了.start_kernel相当大,里面每一个调用到的函数都足够我们伤脑筋了,我这里只是浅尝 ...
随机推荐
- java struts2入门学习---常用标签学习总结
jsp页面中引入标签: <%@ taglib uri="/struts-tags" prefix="s"%> 常用标签知识点总结: <s:fi ...
- idea上activiti插件的安装及使用
最近做的东西需要用到activiti,做个笔记 首先下载activti插件- actiBPM File - settings-plugins-Browse-Repositories 搜索 actiBP ...
- 认识LINQ的第一步---从查询表达式开始
学习和使用C#已经有2个月了,在这两个月的学习中,深刻体会到,C#这门语言还真不适合编程初学者学习,因为它是吸取了很多其他语言,不仅是面向对象,还包括函数式语言的很多特性,导致它变成特性大爆炸的语言. ...
- Oracle 12C -- 使用local PDB克隆新的PDB
1.将用于克隆的PDB至于只读状态:startup open read only SQL> select con_id,name,open_mode from v$pdbs; CON_ID NA ...
- MySQL -- Fast Index Creation
1.fast index creation简介 MySQL5.5之后,对innodb表创建或删除辅助索引的效率提升了很多,即增加了新的功能fast index creation.因为MySQL5.5之 ...
- MyEclipse或Eclipse中project的导入和导出
project的导入:将project放到对应的目录中--打开MyEclipse--光标定位在PackageExp位置(即project创建位置),右键选中并点击"Import-" ...
- python ipython spyder
ipython usage: ipython qtconsole --pylab inline anacond usage: 1. spyder 1. source ~/anacond/bin/act ...
- 【转载】web网站css,js更新后客户浏览器缓存问题,需要刷新才能正常展示的解决办法
原文:http://blog.csdn.net/csdn100861/article/details/50684438 问题描述 部署到服务器后访问发现页面展示不正常,但是刷新之后就会展示正常. 问题 ...
- Android Studio入门指南 (历上最全,全球首发)
下载地址:http://pan.baidu.com/s/1CEMma 8月份的时候因为Android开发团队全部使用Android Studio进行开发,所以我整理了Android Studio的一些 ...
- U8客开插件-一、标准单据标准按钮执行前验证操作
今天要做的就是在标准的单据的标准按钮之前进行验证操作,如果验证通过执行保存,如果不通过给予提示不进行保存. 下面拿销售出库单的保存按钮进行举例: 第一步:在程序中 ctrl+Shift 点击保存之后 ...