感觉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都简单。贴上初始化
void pit_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);
}
然后就是中断函数
void pit0_isr(void)
{
// LPLD_GPIO_Toggle_b(PTA, 10);
sec++;
}
void pit1_isr(void)
{
// sec++;
}
我想达到的效果是有4个LED,第一个LED亮3下后第二个LED翻转,第二个LED亮3下后第三个LED翻转,以此类推
void main (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。中断标志位自动清。注意它是减,不是加,所以一开始不用去算该给多少初值,直接给我们想要定时的时间就可以了。
关键字:K60 PIT定时器
引用地址:K60 PIT定时器
Systick是什么呢,它是Cortex内核的定时器,也就是说不管是M3\M4,不管是ST的单片机还是飞思卡尔的单片机,这个定时器的结构和用法是一样的,它也可以产生周期中断,也可以作为精准延时函数。但是他的真正用武之地值操作系统的嘀嗒时钟,也就是为uC/OS等操作系统提供时钟节拍。一来他是内核级别的时钟,中断优先级比其他外设模块要高;二来他比较通用,可以不用改任何代码就移植到其他单片机上。
那么LPTMR、PDB呢?这两个是飞思卡尔Kinetis特有的外设模块,也可以用来做定时器,产生周期中断,但是他们也是各自有各自特殊的用途的,LPTMR可以用来做脉冲累加器,用来测量脉冲波的频率;PDB是可编程延时模块,他的主打功能是产生DAC、ADC模块的硬件触发信号,来使他们能够自主的、不需要用户软件来进行工作。
总结上面说的就是,Systick使用在操作系统里的(较高端的样子),LPTMR用来计数脉冲,PDB用来触发其他外围设备。而PIT则是简简单单的周期定时,利用拉普兰德库库函数,可以轻松掌握。
先说说和之前单片机不同之处;PIT可以定时Us,Ms,S定时单位很多,因为底层库函数已经帮你写好了。所以要定时多长一段时间,个人感觉比51和PIC都简单。贴上初始化
void
{
}
然后就是中断函数
void
{
}
void
{
}
我想达到的效果是有4个LED,第一个LED亮3下后第二个LED翻转,第二个LED亮3下后第三个LED翻转,以此类推
void
{
}
还是提醒一下,不要忘了初始化,声明函数和结构体变量
还有有木有发现(学51的不用看),和PIC不同,它没有涉及中断标志位,没有软件清零。因为对应寄存器PIT_CVALn(自减)减到0时,另一个寄存器PIT_LDVALn会把我们之前存进去的初始值重新赋给PIT_CVALn。中断标志位自动清。注意它是减,不是加,所以一开始不用去算该给多少初值,直接给我们想要定时的时间就可以了。
上一篇:ARM汇编,MCR和MRC
下一篇:K60 GPIO外部中断
小广播
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐
最新单片机文章
更多精选电路图
更多热门文章
更多每日新闻
更多往期活动
11月23日历史上的今天
厂商技术中心