今天试了下ke02z的PIT_demo
是一个类似定时器中断的东西
先看例程,程序很简单,初始化PIT,配置,然后运行任务,
定义了这样一个量
PIT_Init(0, 0x1312D00);
关于初始化函数
void PIT_Init( unsigned char cChannel, unsigned int PitModulo )
{
SIM_SCGC |= SIM_SCGC_PIT_MASK;
if( cChannel == 0 )
{ enable_irq(22) }
else
{ enable_irq(23); }
PIT_MCR = 0x02;
PIT_LDVAL_REG(PIT_BASE_PTR,cChannel) = PitModulo;
PIT_TCTRL_REG(PIT_BASE_PTR,cChannel) =
PIT_TCTRL_TEN_MASK
|PIT_TCTRL_TIE_MASK
;
PIT_MCR = 0x00;
}
解读下,先禁止,再配置通道,再配置时间,再初始化,再启动,这样一个过程。
看了数据手册,表示还是有点疑惑
PIT_LDVAL_REG(PIT_BASE_PTR,cChannel) = PitModulo;这句是定义中断时间吧
PIT_TCTRL_REG(PIT_BASE_PTR,cChannel) = PIT_TCTRL_TEN_MASK|PIT_TCTRL_TIE_MASK这句是先使能定时器再开启定时器吧
但是0x1312D00这个量具体是怎么求的呢,应该是定时多久的意思吧,转换成10进制是20000000
时钟频率是20M的话,周期是50ns,这样的话定时就是1s,是这样计算的吧
数据手册上有这样个公式LDVAL trigger = (period / clock period) -1,用于计算定时的值。
总结下这个定时器还是很简单易用的,准确度也不错,自己写了个时钟玩玩,还是挺准的。
顺便分享下自己的学习习惯吧,我是实战派··让我光看视频,看书什么的不动手,
那会是一点效率也没有,还是喜欢对着例程,读者坑爹的英文数据手册,慢慢理解,觉得这样才是最高效率:lol
也只喜欢这样搞,当然大家多交流也是很棒的
最后吐槽下CW····下来个10.5版的···用不来啊用不来,好麻烦啊,本来想偷懒用下PE试试,算了还是用我的keil算了
|