pit.c
上传用户:dongxin
上传日期:2022-06-22
资源大小:370k
文件大小:1k
源码类别:

uCOS

开发平台:

Others

  1. #include "includes.h"
  2. //--------------------------------------------------------------------------*
  3. //函数名: PITinit                                                           *
  4. //功  能: 初始化PIT,20毫秒产生中断                                          *
  5. //参  数: 无                                                                *
  6. //返  回: 无                                                                *
  7. //说  明: 60000/32 = 1875KHz,37500/1875K=20毫秒                             *
  8. //--------------------------------------------------------------------------*
  9. void PITInit(void)
  10. {
  11.     //设置标志计数器为0
  12.     MCF_PIT0_PCSR |= MCF_PIT_PCSR_PIF;
  13.     //设置每秒计数次数为2的15次幂,即32768、将PMR值装入计数器、到0时将PMR值装入计数器
  14.     MCF_PIT0_PCSR = 0|MCF_PIT_PCSR_PRE(15)|MCF_PIT_PCSR_RLD|MCF_PIT_PCSR_OVW;
  15. //设置每秒计数次数
  16.     MCF_PIT0_PMR = MCF_PIT_PCNTR_PC(92);
  17.     //使能时钟中断
  18.     MCF_PIT0_PCSR |= MCF_PIT_PCSR_EN;
  19. }
  20. /*Error
  21. 计算错误;
  22. 正确的计算方法为:
  23. MCV_PIT_PCSR_PRE(15) 表示将预分频因子设为2的15次幂,即32768
  24. 因为总线频率为60MHz,所以在一秒钟计数次数为60Mhz/32768
  25. MCF_PIT_PMR_PM(92) 表示将时钟计数器设为92,即当计数到92时,产生一次中断
  26. 由上可知,系统每秒产生的中断次数为60MHz/32768/92为20次,即每50毫秒产生一次中断*/
  27. /*上述方法错误,因为总线频率在进入计算前已除以2,所以每秒计数次数为
  28. 30MHz/32768,进而系统每秒产生的中断次数为10次。*/