感觉K60的PIT定时器就像是51,PIC中的timer(貌似K60有很多种定时器Systick、LPTMR、PDB)Systick是什么呢,它是Cortex内核的定时器,也就
感觉K60的PIT守时器就像是51,PIC中的timer(形似K60有许多种守时器Systick、LPTMR、PDB)
Systick是什么呢,它是Cortex内核的守时器,也便是说不管是M3\M4,不管是ST的单片机仍是飞思卡尔的单片机,这个守时器的结构和用法是相同的,它也能够发生周期中止,也能够作为精准延时函数。可是他的真实用武之地值操作系统的嘀嗒时钟,也便是为uC/OS等操作系统供给时钟节拍。一来他是内核等级的时钟,中止优先级比其他外设模块要高;二来他比较通用,能够不必改任何代码就移植到其他单片机上。
那么LPTMR、PDB呢?这两个是飞思卡尔Kinetis特有的外设模块,也能够用来做守时器,发生周期中止,可是他们也是各自有各自特别的用处的,LPTMR能够用来做脉冲累加器,用来丈量脉冲波的频率;PDB是可编程延时模块,他的主打功用是发生DAC、ADC模块的硬件触发信号,来使他们能够自主的、不需要用户软件来进行作业。
总结上面说的便是,Systick使用在操作系统里的(较高端的姿态),LPTMR用来计数脉冲,PDB用来触发其他外围设备。而PIT则是简简略单的周期守时,使用拉普兰德库库函数,能够轻松把握。
先说说和之前单片机不同之处;PIT能够守时Us,Ms,S守时单位许多,由于底层库函数现已帮你写好了。所以要守时多长一段时刻,个人感觉比51和PIC都简略。贴上初始化
voidpit_init(void)
{
//装备PIT0参数
pit0_init_struct.PIT_Pitx=PIT0;
pit0_init_struct.PIT_PeriodMs=100;//守时周期1秒
pit0_init_struct.PIT_Isr=pit0_isr;//设置中止函数
//初始化PIT0
LPLD_PIT_Init(pit0_init_struct);
//装备PIT1参数
pit1_init_struct.PIT_Pitx=PIT1;
pit1_init_struct.PIT_PeriodMs=500;//守时周期1000毫秒
pit1_init_struct.PIT_Isr=pit1_isr;//设置中止函数
//初始化PIT1
LPLD_PIT_Init(pit1_init_struct);
//使能PIT0和PIT1
LPLD_PIT_EnableIrq(pit0_init_struct);
LPLD_PIT_EnableIrq(pit1_init_struct);
}
然后便是中止函数
voidpit0_isr(void)
{
//LPLD_GPIO_Toggle_b(PTA,10);
sec++;
}
voidpit1_isr(void)
{
//sec++;
}
我想到达的作用是有4个LED,第一个LED亮3下后第二个LED翻转,第二个LED亮3下后第三个LED翻转,以此类推
voidmain(void)
{
//初始化PIT
pit_init();
init_gpio();
PTA10_O=1;
PTA11_O=1;
PTA28_O=1;
PTA29_O=1;
while(1)
{
if(sec==1)
{
LPLD_GPIO_Toggle_b(PTA,10);
sec1++;
sec=0;
}
if(sec1==6)
{
LPLD_GPIO_Toggle_b(PTA,11);
sec1=0;
sec2++;
}
if(sec2==6)
{
LPLD_GPIO_Toggle_b(PTA,28);
sec2=0;
sec3++;
}
if(sec3==6)
{
LPLD_GPIO_Toggle_b(PTA,29);
sec3=0;
}
}
}
仍是提示一下,不要忘了初始化,声明函数和结构体变量
还有有木有发现(学51的不必看),和PIC不同,它没有触及中止标志位,没有软件清零。由于对应寄存器PIT_CVALn(自减)减到0时,另一个寄存器PIT_LDVALn会把咱们之前存进去的初始值从头赋给PIT_CVALn。中止标志位主动清。留意它是减,不是加,所以一开始不必去算该给多少初值,直接给咱们想要守时的时刻就能够了。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/263079.html