找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4565|回复: 0
收起左侧

XS128使用PIT实现精确延时

[复制链接]
ID:85109 发表于 2015-7-8 23:04 | 显示全部楼层 |阅读模式
这是本人的第一篇,写起来估计会有点小小的激动哈!第一次嘛,感觉都很刺激!好了废话少说,下面言归正传。
这几天接触飞思卡尔XS128这款单片机,学了一会儿之后,就感觉比较像STM32F10x系列单片机。在STM32中,我们都用Systic定时器来产生精确延时,但是在XS128中,好像还没有人这样用,因为在网上百度XS128精确延时,都没有答案,今天鄙人破天荒活学活用一次,仿照STM32的精确延时,给XS128也弄一个精确延时,哈哈。
我是使用XS128的PIT定时器的通道3来实现精确延时的。其实也很简单,就是在给函数一个参数赋值给PIT的装载寄存器,通过修改参数的值就可以改变延时的时间。然后在delay函数中用循环一直检测time-out(溢出)标志,当溢出时,就break,然后关闭定时器。萝莉啰嗦的,还没说清楚,哈哈,下面贴出delay函数吧。

void delay_ms(uint temp)   //temp的取值范围0~327之间
{
    PITCFLMT_PITE=0; //关闭PIT定时器
    PITCE_PCE3=0;    //关闭定时器通道3  

    PITMTLD0=240-1;  //8位微定时器初值设定。240分频,在48MHzBusClock 下,为0.2MHz。
    PITLD3=200*temp-1;//16 位定时器初值设定。
    PITINTE_PINTE0=0; //不中断
    PITCE_PCE3=1; //使能定时器通道3
    PITCFLMT_PITE=1;  //PIT定时器使能
    for(;;)
    {
        if(PITTF_PTF3 == 1)
        break;
    }
    PITCFLMT_PITE= 0;   //关闭定时器   
    PITCE_PCE3=0;    //关闭定时器通道3
}

需要说明一点儿的是,这个延时函数最大只能延时327ms,也就是temp的值最大只能取327。如果想延时更长的时间,只能多写几个delay_ms了。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表