pwm.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. /******************************************************************************
  2. 版权所有:
  3. 文件名称: pwm.c
  4. 文件版本: 01.00
  5. 创建作者:
  6. 创建日期: 2012-08-7
  7. 功能说明: pwm模块驱动程序,使用pwm2B
  8. 其它说明:
  9. 修改记录:
  10. */
  11. /*------------------------------- 头文件 --------------------------------------
  12. */
  13. #include "bspconfig.h"
  14. #include "pwm.h"
  15. /*------------------------------- 宏定义 --------------------------------------
  16. */
  17. #if CFG_BSP_DEBUG
  18. #define _DEBUG_PWM
  19. #endif
  20. #define PWM_PM_REG MCF_PMM_PPMCR1
  21. #define PWM_PM_INDEX 34
  22. /*------------------------------ 全局变量 -------------------------------------
  23. */
  24. /*------------------------------ 外部函数 -------------------------------------
  25. */
  26. /******************************************************************************
  27. 函数名称: init_pwm0
  28. 函数版本: 01.00
  29. 创建作者:
  30. 创建日期: 2012-08-1
  31. 函数说明: pwm模块初始化函数
  32. 参数说明: 无
  33. 返回值: 无
  34. 修改记录:
  35. */
  36. void init_pwm0(void)
  37. {
  38. #if 0
  39. PWM_PM_REG |= PWM_PM_INDEX; //打开PWM模块
  40. MCF_PAD_PAR_SDHCH = MCF_PAD_PAR_SDHCH_PAR_DATA0_PWM_B2; //配置PWMB2管脚
  41. MCF_PWM_SM2CR1 |= MCF_PWM_SM2CR1_PRSC(7) //128分频
  42. | MCF_PWM_SM2CR1_LDFQ(0); //Load frequency.
  43. MCF_PWM_SM2CR2 |= MCF_PWM_SM2CR2_CLK_SEL(0) //选择外部总线时钟
  44. | MCF_PWM_SM2CR2_FORCE //counter初始化值为init的
  45. | MCF_PWM_SM2CR2_FORCE_SEL(2) //从子模块本地重载信号
  46. | MCF_PWM_SM2CR2_INIT_SEL(0); //Local sync初始化
  47. MCF_PWM_SM2INIT = MCF_PWM_SM2INIT_INIT(0x0000); //最低点
  48. MCF_PWM_SM2VAL1 = MCF_PWM_SM2VAL1_VAL1(0x7A1); //最高点
  49. MCF_PWM_SM2VAL4 = MCF_PWM_SM2VAL4_VAL4(0x28B); //上升沿
  50. MCF_PWM_SM2VAL5 = MCF_PWM_SM2VAL5_VAL5(0x65B); //下降沿
  51. MCF_PWM_MCR |= MCF_PWM_MCR_IPOL(4) //选择45值寄存器
  52. | MCF_PWM_MCR_LDOK(4); //允许载入
  53. MCF_PWM_OUTEN |= MCF_PWM_OUTEN_PWMB_EN(4); //允许输出波形
  54. #endif
  55. }
  56. /******************************************************************************
  57. 函数名称: pwm0On
  58. 函数版本: 01.00
  59. 创建作者:
  60. 创建日期: 2012-08-1
  61. 函数说明: 打开pwm
  62. 参数说明:
  63. 返回值: 无
  64. 修改记录:
  65. */
  66. static void pwm0On(void)
  67. {
  68. // MCF_PAD_PAR_SDHCH = 0x2; //PWMB2用于PWM输出
  69. // MCF_PWM_MCR |= MCF_PWM_MCR_RUN(4); // 使能PWM2
  70. }
  71. /******************************************************************************
  72. 函数名称: pwm0Off
  73. 函数版本: 01.00
  74. 创建作者:
  75. 创建日期: 2012-08-1
  76. 函数说明: 关闭pwm
  77. 参数说明:
  78. 返回值: 无
  79. 修改记录:
  80. */
  81. static void pwm0Off(void)
  82. {
  83. // MCF_PWM_MCR |= MCF_PWM_MCR_RUN(0); // 屏蔽PWM2
  84. // MCF_PAD_PAR_SDHCH = 0; //PWMB2用于GPIO输出
  85. }
  86. /*------------------------------ 测试函数 -------------------------------------
  87. */
  88. #ifdef _DEBUG_PWM
  89. #include "ustimer.h"
  90. #include "rt.h"
  91. void pwm_test(void)
  92. {
  93. init_pwm0();
  94. while(1)
  95. {
  96. rt_printf("PWM test start!\n\r");
  97. rt_printf("\n\r");
  98. pwm0On();
  99. ustimer_delay(1*USTIMER_SEC);
  100. pwm0Off();
  101. rt_printf("\n\r");
  102. rt_printf("PWM test end!\n\r");
  103. rt_printf("\n\r");
  104. rt_printf("\n\r");
  105. ustimer_delay(2*USTIMER_SEC);
  106. }
  107. }
  108. #endif
  109. /*------------------------------ 文件结束 -------------------------------------
  110. */