s5pv210的定时器

  前阵子一直忙着乱七八糟的事情,开学放假七天,睡一天看电影一天,还有一些琐事,虽然把开发板带回去了,但是也只是增加旅途的羁绊,说好的会在放假期间把选课系统写完,最后只写了一半。这就导致了后边阵脚大乱的悲剧。

  迫不及待的回到乐嵌,感觉还是多学点东西心里才踏实。放假前的裸机都是小儿科,收假回来就变了天了。由于我的选课系统只有半成品,想着以后面试肯定有用,跪着也要写完!不过结果可想而知,导致裸机没能及时预习复习,一心扑在了选课系统上,加上学到LCD、NANDFLASH、IIC、定时器等硬件,日子真心不好过啊。还好,选课系统每天花三五个小时,连续四五天,总算完成了七七八八,基本功能都实现了,剩下一些BUG和少许功能没有完善,觉得目的已经达到了,就果断放下选课系统转投裸机开发。

  人的精力是有限的,同时做两件事容易顾此失彼。回到裸机之后,发现自己落下了不少,不过,还好自己本来就是一路追赶过来的哈哈。前天回学校拿衣服顺带把车骑过来了(其实是反过来的,,),又落后了半天。晚上本来打算回到教室赶赶进度,没想到没吃晚饭就骑车加上半路下雨,天黑不识路的,接近九点才回到寝室。洗去从二环上带回来的黑泥,出去买了点东西,回去就睡了(真是作死)。

  昨天早上开始做裸机的项目,由于落后了半天和一个晚上,他们都已经做好了坐标的读取,我还是零。简单构思了下,靠着自己的理解去做,鲁老师来了之后,给我指明了一下方向和注意事项,靠着直觉,终于在十二点多做好了坐标的读取。吃饭后大家都没有休息,我自然也不敢松懈。才发现最后坚持下来的只有五六个人,很庆幸自己是其中一个,虽然出发的有点迟哈哈。。外面还在下雨,估计是要入秋了吧,钢筋水泥中独自一人在他乡,中秋将近,不觉之中竟有一丝凄凉。昨晚和老童鞋通了一个小时的电话,自从自己来到湖南,好久没有和他们聊那么久了吧,觉得自己离群好久了,以后慢慢补偿你们了。

  季节变化,情感也时时变化,有好有坏,不必矫情,尽管向前看。

  不废话了,下面从s5pv210 的定时器开始总结。

  210有五个32位的定时器,其中0、1、2、3、4包含了脉冲宽度调制,有定时和计数的器 的功能。这里就不再赘述,相关资料随时都可以找到,这里直接上代码。

      1、、首先是定时器的初始化,主要设置定时器的输入时钟频率、定时器倒数计数初值和重载、占空比、使能定时器中断和开启等

int init_timer(void)
{
unsigned int temp0=0;
//禁止timer
TCON = 0x0;

//使能timer0中断
TINT_CSTAT = 0x01;
/*
设置时钟的工作频率为1M
prescaler value = 65 divider value = 1
input clock = 66M /(65+1) /1 = 1M

TCFG0 &= ~0xff;
TCFG0 = 65;
*/
//计算的预分频系数
TCFG0 &= 0xffffff00;
TCFG0 |=0x00000041;
//设置分频系数 ,1/16
TCFG1 = 0x04;

//设置TCNB0和TCMP0,启动timer0,TCNTB0逐渐减一,等于零是产生中断
// 定时1秒 1clk = 16us 1000000 /16 = 62500
TCNTB0 = 0xF424;
TCMPB0 = 0x7A12;  //设置比较数值,用于调节占空比

// 首先设置手动更新,装载TCNTB0
TCON |= (1<<1);
TCON &= ~(1<<1);

//自动重载和开启定时器0
TCON |= (1<<0) |(1<<3);

// 使能timer0中断
temp0 = TINT_CSTAT;
temp0 &=0xFFFFFFFE;
temp0 |=0x1;
TINT_CSTAT = temp0;

//设置GPD0 为输出 ,设置成T_OUT模式,产生PWM波形
GPD0CON &= 0xfff0;
GPD0CON |= 0x02;

printf("timer0 int enable ");
return 0;
}

 

      然后就是其他地方就和按键中断是一样的, 只要把21号中断源打开,把中断服务子程序地址注册到相应的中断地址即可

  

原文地址:https://www.cnblogs.com/ygy1784717631/p/4822887.html