专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
嵌入式
嵌入式Linux裸机开发(九)——S5PV210定时器
2019-07-12 22:46
发布
生成海报
站内文章
/
嵌入式Linux
11916
0
1423
嵌入式
Linux
裸机开发(九)——
S5PV210
定时器
S5PV210内部一共有四类定时器。
一、
PWM
定时器
1
、
PWM
定时简介
S5PV210内部共有5个32bit的PWM定时器。PWM定时器可以生成内部中断。PWM定时器0、1、2、3具有PWM功能,可以驱动外部I/O信号。PWM定时器4是一个无外部引脚的内部定时器。
PWM 定时器使用 PCLK_PSYS 作为时钟源
。
每个定时器有一个由定时器时钟驱动的32位递减计数器。递减计数器的初始值是由TCNTBn
自动
装载而获得的。如果递减计数器减到 0 时,定时器发出中断请求通知CPU定时器操作已经完成,当定时器递减计数器到达 0,相应的 TCNTBn的值也会自动的装载到递减计数器中以继续下一次循环操作。 在定时器正在运行模式下通过对TCON的
定时器
使能位清零,则TCNTBn的值不会自动装载到计数器中。TCMPBn 寄存器的值用于脉宽调制功能(PWM)。当递减计数器的值和定时器控制逻辑单元中的比较寄存器的值匹配时,定时器控制单元会改变输出电平。因此,比较寄存器的值决定了PWM的占空比。当定时器使能,定时器计数存寄存器(TCNTBn
)
得到一个被装载到递减计数器中的初始值。定时器比较缓存寄存器(TCMPBn)有一个被装载到比较寄存器中用来和递减计数器的值作比较的初始值。 TCNTBn和TCMPBn双缓存特点使得当频率和负荷发生改变时,定时器生成一个稳定的输出。
主要控制寄存器:
TCFG0
:预分频器参数设置,范围为
0-255,
定时器
0和1,用
Prescaler 0
,定时器
2,3,4用
Prescaler
1,预分频系数为1-256
TCFG
1
:分频器参数设置,
MUX开关,1/1,1/2,1/4,1/8,1/16
TCON
:定时器的设置
TCNTB
n
:定时计数寄存器
TCMPB
n
:占空比计数寄存器
TCNTO
n
:观察寄存器
PWM:PWM是一个周期性波形,每个周期内由一个高电平和一个低电平组成,PWM的参数有周期T和占空比duty。
TCNTBn和TCMPBn
决定了
PWM的周期和占空比,占空比等于
TCMPBn
/
TCNTBn
,周期等于
TCNTBn
/时钟频率。PWM可以用于对基波进行载波调制,通过对LED调制电流进行调光,驱动蜂鸣器buzzer。
输出电平翻转器:TCNT>TCMPB时为高电平,TCNT
2、
PWM
定时器驱动蜂鸣器
A、查阅底板电路原理图有关buzzer部分
蜂鸣器buzzer的引脚为
XpwmTOUT0
,使用
timer0
B、
查阅核心板电路原理图有关
PWM timer部分
XpwmTOUT0
对应的
GPIO引脚为GPD0_0
C、相关寄存器设置
//GPIO
相关功能选择,
GPD0_0
的
PWM
模式
TOUT_1
,
10
GPD0CON &= ~(0xF<<0);
GPD0CON |= (0x2<<0);
//
设置预分频器参数为
65
,则预分频系数为
66
,
1MHZ
TCFG0 &= ~(0xFF<<0);
TCFG0 |= (65<<0);
//
设置分频器参数为
1
,分频系数为
1/2,500KHZ
TCFG1 &= ~(0xFF<<0);
TCFG1 |= (0x1<<0);
//
设置自动重载
TCON |= (1<<3);
//
设置
TCNTB
TCNTB0 = 300;
//
设置
TCMPB
TCMPB0 = 150;
//
手动刷新
TCNTB0,TCMPB0
TCON |= (1<<1);
//
关闭刷新
TCON &= ~(1<<1);
//
打开
timer0
TCON |= (1<<0);
工程源码见附件,编译后烧录到smart210可以正常听到蜂鸣器的声音。
一、
看门狗定时器
1
、看门狗定时简介
看门狗定时器相当于一个普通的 16bit 的定时器,看门狗定时器可以产生 reset信号
。
相关寄存器:
WTCON
:选择中断、复位模式,时钟,如果使用看门狗提供定时器功能,打开中断,关闭复位
WTDAT
:看门狗递减计数器的重载值,初始化时不能自动重载
WTCNT
:看门狗递减计数器的初始值,初始化时不能从
WTDAT
自动加载
WTCLRINT
:写任意值,清除中断
2、
看门狗定时器编程
A、中断方式
工程实现采用按键中断工程为模本,主要修改了中断源部分,看门狗中断属于内部中断,无需设置外设GPIO引脚、外部中断控制寄存器,只需设置中断向量控制寄存器。修改部分如下:
//
看门狗寄存器初始化
void wdt_interrupt_init(void)
{
//
设置预分频
WTCON &= ~(0xFF<<8);
WTCON |= (65<<8);//1M
//
设置分频
WTCON &= ~(3<<3);
WTCON |= (3<<3);//1/128
//
禁止
RESET
WTCON &= ~(1<<0);
//
打开中断
WTCON |= (1<<2);
//
设置定时时间
WTDAT = 10000;
WTCNT = 10000;
//
最后打开看门狗
WTCON |= (1<<5);
}
//
中断服务程序
static int i = 0;
void isr_wdt(void)
{
printf("interrupt %d ", i++);
interrupt_clear_vicaddr();
WTCLRINT = 0;
}
Makefile和中断源等其它修改见附件。工程编译后正常在smart210运行,运行结果:每隔一定时间打印出中断信息。
B、复位方式
工程实现以UART串口移植printf工程为模本,修改部分主要是寄存器控制部分。
void wdt_reset_init(void)
{
//
设置预分频
WTCON &= ~(0xFF<<8);
WTCON |= (65<<8);//1M
//
设置分频
WTCON &= ~(3<<3);
WTCON |= (3<<3);//1/128
//
禁止中断
WTCON &= ~(1<<2);
//
打开
reset
WTCON |= (1<<0);
//
设置定时时间
WTDAT = 10000;
WTCNT = 10000;
//
最后打开看门狗
WTCON |= (1<<5);
}
工程编译后正常在smart210运行,运行结果:每隔一定时间复位,打印出中断信息。
一、
实时时钟
RTC
1
、实时时钟
RTC
实时时钟在系统电源关闭后使用备份电源。实时时钟使用
32.768 kHz
的外部晶体振荡器工作,具备闹钟功能。
S5PV210的RTC的特性如下:
支持BCD编码
支持闰年生成器
支持闹钟功能,能从低功耗模式闹钟中断、唤醒
支持Tick计数器,
支持毫秒级tick time
RTC产生
ALARM_INT
和
ALARM_WK
信号,在正常模式下,
ALARM_INT
是激活的,在电源关闭模式下,
ALARM_INT
和
ALARM_WK
是激活的。
RTC的闹钟寄存器
RTCALM
决定了闹钟的打开
/关闭状态和闹钟的时间设置条件。
主要控制寄存器:
INTP
:中断挂起寄存器
RTCON:RTC控制寄存器
RTCALM:闹钟控制寄存器
ALM
XXX:闹钟时间设置寄存器
BCD
XXX:BCD时间设置寄存器
2、
实时时钟
RTC
的闹钟编程
默认情况下RTC的读写操作时禁止的,需要更改RTC时间时先打开RTC读写开关,操作完后关闭RTC开关。
工程项目以按键中断工程为模本,主要修改了中断源部分,看门狗中断属于内部中断,无需设置外设GPIO引脚、外部中断控制寄存器,只需设置中断向量控制寄存器。另外添加了时间的显示和BCD编码的相关功能。
工程源代码见附件,编译后可以正常在smart210烧录运行,打印初始信息后每分钟的第N秒产生闹钟中断,打印信息。
四、系统定时器
系统定时器可以提供毫秒级别的定时功能,并且可以在不停止系统时钟Tick的情况下可以改变中断间隔。
本文出自 “
生命不息,奋斗不止
” 博客,请务必保留此出处
http://9291927.blog.51cto.com/9281927/1787624
Ta的文章
更多
>>
嵌入式Linux裸机开发(九)——S5PV210定时器
0 个评论
[12]_谈谈为我为什么学习了嵌入式Linux还回来学习单片机
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮