注册 登录
查看: 776|回复: 3

[其他] 【关于lptmr模块求助】

[复制链接]
发表于 2013-6-5 16:34:16 | 显示全部楼层 |阅读模式
请问lptmr的当作欧姆龙的脉冲计数功能和 山外库里面的time_delay_ms()函数可不可以同时使用
回复

使用道具 举报

发表于 2013-6-5 19:54:27 | 显示全部楼层
可以使用其他延时函数,例如 pit 延时函数

lptmr 只有一路,用作 脉冲计数的时候,就不能用作延时,两者冲突的!!

pit延时函数如下:
  1. //注意了,延时函数不需要初始化的,直接调用

  2. void        pit_delay(PITn pitn, u32 cnt);                                          //PIT延时(不需要初始化的)
  3. #define     pit_delay_ms(PITn,ms)          pit_delay(PITn,ms * bus_clk_khz);        //PIT延时 ms
  4. #define     pit_delay_ns(PITn,ns)          pit_delay(PITn,ns * bus_clk_khz/1000);   //PIT延时 ns



  5. /*************************************************************************
  6. *                             山外嵌入式开发工作室
  7. *
  8. *  函数名称:pit_delay
  9. *  功能说明:PITn延时
  10. *  参数说明:PITn        模块号(PIT0~PIT3)
  11.              cnt         延时时间(单位为bus时钟周期)
  12. *  函数返回:无
  13. *  修改时间:2012-1-24
  14. *  备    注:
  15. *************************************************************************/
  16. void pit_delay(PITn pitn, u32 cnt)
  17. {
  18.     //PIT 用的是 Bus Clock 总线频率
  19.     //溢出计数 = 总线频率 * 时间
  20.   
  21.     ASSERT( cnt > 0 );              //用断言检测 时间必须不能为 0
  22.    
  23.     /* 开启时钟*/
  24.     SIM_SCGC6       |= SIM_SCGC6_PIT_MASK;                            //使能PIT时钟

  25.     /* PIT模块控制 PIT Module Control Register (PIT_MCR) */
  26.     PIT_MCR         &= ~(PIT_MCR_MDIS_MASK | PIT_MCR_FRZ_MASK );      //使能PIT定时器时钟 ,调试模式下继续运行

  27.     /* 定时器加载值设置 Timer Load Value Register (PIT_LDVALn) */
  28.     PIT_LDVAL(pitn)  = cnt - 1;                                          //设置溢出中断时间

  29.     //定时时间到了后,TIF 置 1 。写1的时候就会清0
  30.     PIT_Flag_Clear(pitn);                                             //清中断标志位

  31.     /* 定时器控制寄存器 Timer Control Register (PIT_TCTRL0) */
  32.     PIT_TCTRL(pitn) |= ( PIT_TCTRL_TEN_MASK /*| PIT_TCTRL_TIE_MASK */);   //使能 PITn定时器

  33.     while( !(PIT_TFLG(pitn)& PIT_TFLG_TIF_MASK));
  34.    
  35.     //定时时间到了后,TIF 置 1 。写1的时候就会清0
  36.     PIT_Flag_Clear(pitn);                                             //清中断标志位
  37. }
回复 支持 反对

使用道具 举报

发表于 2013-6-5 19:55:49 | 显示全部楼层
例如我要延时 10ms,直接调用:
  1. pit_delay_ms(PIT3,10) ;  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-5 22:16:39 | 显示全部楼层
山外メ雲ジ 发表于 2013-6-5 19:54
可以使用其他延时函数,例如 pit 延时函数

lptmr 只有一路,用作 脉冲计数的时候,就不能用作延时,两者 ...

非常感谢
回复 支持 反对

使用道具 举报

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

本版积分规则

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