【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相当大,里面每一个调用到的函数都足够我们伤脑筋了,我这里只是浅尝 ...
随机推荐
- 观文章《Linux系统管理员修炼三层次》有感
层次,都不陌生,通俗讲,就是和档次挂钩的,初入江湖时,都想自己几年后,武艺精深,深藏百技,忙时带领团队打BOSS,闲时喝酒论道,博古纵今,想想都令人精神满满,干劲十足!!! 至今已入江湖几载,回首来 ...
- 深入解读键值产生原理,linux中的软链接和硬链接(转)
键值 = 文件标示符 + 项目ID 当用到进程间的通信时, 必须要注意到的是键值是怎么产生的,我们知道任何一个文件时通过文件名来访问的, 而内核在对应的给其一个值,也就是文件标示符. 系统建立IPC通 ...
- Linux操作系统中文件结构stat中st_size的说明以及对于文件中洞(Holes)的理解
文件stat结构体中st_size成员 对于所有的文件类型,st_size成员对其中的普通文件.目录以及符号链接有实在的意义.其中,对于普通文件而言,st_size记录了该文件的实际大小:对于目录而言 ...
- php bccomp的替换函数
if (!function_exists('bccomp')) { /** * 支持正数和负数的比较 * ++ -- +- * @param $numOne * @param $numTwo * @p ...
- k近邻算法-java实现
最近在看<机器学习实战>这本书,因为自己本身很想深入的了解机器学习算法,加之想学python,就在朋友的推荐之下选择了这本书进行学习. 一 . K-近邻算法(KNN)概述 最简单最初级的分 ...
- Swift 类
1.类概念 类是一种抽象的概念,它实际上并不存在于现实中的时间和空间里. 在定义一个类时,我们就会在类中定义该类事物的特性和行为,从术语上讲,特性叫类的属性,行为叫类的方法. 类是一个静态的概念,类本 ...
- 【java基础】Java反射机制
一.预先需要掌握的知识(java虚拟机) 1)java虚拟机的方法区: java虚拟机有一个运行时数据区,这个数据区又被分为方法区,堆区和栈区,我们这里需要了解的主要是方法区.方法区的主要作用是存 ...
- numpy 的通用函数
1 CSV文件 CSV,Comma Separate Values,是逗号分隔文件的缩写,是一种存储数据的纯文本格式,通常用于存储电子表格或数据库软件 特点 每条记录占一行 以逗号为分隔符 逗号前后的 ...
- ldconfig命令
ldconfig是一个动态链接库管理命令 为了让动态链接库为系统所共享,还需运行动态链接库的管理命令--ldconfigldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib) ...
- Java:集合,对列表(List)中的自定义对象按属性(字段)排序(正序、倒序)的方法
1. 要求 对列表(List)中的自定义对象,要求能够按照对象的属性(字段)进行排序(正序.倒序). 如:用户对象(Member)有用户名(username).级别(level).出生日期(birth ...