[LOOK] 根据三心LOOK_PWM改编

[复制链接]
 楼主| wang0225 发表于 2011-7-27 21:13 | 显示全部楼层 |阅读模式
PWM, se, UART, ST, RS
本帖最后由 hotpower 于 2011-7-27 21:41 编辑
  1. #include "main.h"
  2. /*
  3. 本工程主要包含两个个任务:①普通类任务task_LOOK_SPI_PDMA_t:等待标志Flag_SPI低四位任意位置位 然后完成来自于uart0的任务;
  4.        ②中断类任务uart0_t:uart 同步输出功能及接收功能
  5. 初始化设置:  时钟配置为 XTL12M_EN
  6.               CPU时钟频率为12MHz
  7.               UART时钟选择外部12MHZ,并使能UART0时钟
  8.      外设时钟配置为PWM01_S : 外部 4~24MHz 晶振使能
  9.      外设时钟配置为PWM01_EN : 选上
  10.     PB.0选择多功能管脚选择RXD0 PB.1选择多功能管脚选择TXD0
  11.     PA.12选择多功能管脚选择PWM0
  12.             
  13. 主要完成功能:产生400Hz的波形
  14. UART0 接收到字符‘U’或‘u’实现PWM占空比增加10%;
  15.    UART0 接收到字符‘D’或‘d’实现PWM占空比减少10%.
  16. */
  17. flag_t Flag_PWM(0);

  18. // 任务类 task_LOOK_PWM_t 的例程
  19. void task_LOOK_PWM_t::routine()
  20. {
  21. // TODO: 在此编写 task_LOOK_PWM_t 例程的内容
  22. uint8_t PWM0_Duty_Cycle = 50;   //PWM初始化占空比为50
  23. //Enable PWM engine clock and reset PWM
  24. #if LOOK_H == 0
  25. //SYSCLKs.APBCLK.Bits.PWM01_EN = 1;       //PWM01时钟使能,配置文件设置好此句话不用,下面一样
  26. //SYSs.IPRSTC2.Bits.PWM03_RST = 1;     // PWM03复位
  27. //SYSs.IPRSTC2.Bits.PWM03_RST = 0;  //PWM03开始工作
  28. SYSCLKs.CLKSEL1.Bits.TMR0_S = 0b000; //外部12M晶振
  29. PWM0s.PCR.Bits.CH0INV = 0;    //反向关闭
  30. PWM0s.PCR.Bits.CH0MOD = 1;    //自动重载
  31. PWM0s.PPR.Bits.CP01 = 1;    //预分频  1
  32. PWM0s.CSR.Bits.CSR0 = 0b100;   //分频系数 1
  33. uint16_t u16Duty = 12000000/((1+1)*1*400);//PWM 频率 400HZ
  34. PWM0s.CNR0.Regs = u16Duty-1;     //PWM 频率 = PWMxy_CLK/(prescale+1)*(clock divider)/(CNR+1);
  35. PWM0s.CMR0.Regs = u16Duty*PWM0_Duty_Cycle/100-1; //占空比 = (CMR+1)/(CNR+1).
  36. PWM0s.POE.Bits.PWM0 = 1;    //PWM0输出使能
  37. //PA.12作为PWM0   使用LOOK进行配置
  38. PWM0s.PCR.Bits.CH0EN = 1;    // 使能PWM功能
  39. #else
  40. // SYSCLK.APBCLK().PWM01_EN = 1;       //PWM01时钟使能
  41. // SYS.IPRSTC2().PWM03_RST = 1;     // PWM03复位
  42. // SYS.IPRSTC2().PWM03_RST = 0;  //PWM03开始工作
  43. SYSCLK.CLKSEL1().TMR0_S = tmrs_t::XTL12M; //外部12M晶振
  44. PWMA.PCR()
  45.        .CH0INV(0)    //反向关闭
  46.        .CH0MOD(1);    //自动重载
  47. PWMA.PPR().CP01 = 1;    //预分频  1
  48. PWMA.CSR().CSR0 = 0b100;   //分频系数 1
  49. uint16_t u16Duty = 12000000/((1+1)*1*400);//PWM 频率 400HZ
  50. PWMA.CNR0 = u16Duty-1;     //PWM 频率 = PWMxy_CLK/(prescale+1)*(clock divider)/(CNR+1);
  51. PWMA.CMR0 = u16Duty*PWM0_Duty_Cycle/100-1; //占空比 = (CMR+1)/(CNR+1).
  52. PWMA.POE().PWM0 = 1;    //PWM0输出使能
  53. //PA.12作为PWM0   使用LOOK进行配置
  54. PWMA.PCR().CH0EN = 1;    // 使能PWM功能
  55. #endif
  56. while (true) {
  57.   // TODO: 在此编写 task_LOOK_PWM_t 例程的内容
  58.   uart0.puts("WM0当前设置占空比为:");
  59.   uart0.put_numeral(PWM0_Duty_Cycle);
  60.   uart0.puts("%\n");
  61.   int flag = Flag_PWM.wait(0b011, flag_t::ANY_CONSUME);
  62.      switch (flag)
  63.      {
  64.       case 0x01:
  65.     //占空比增加10%
  66.     if (PWM0_Duty_Cycle!=100)
  67.     {
  68.      PWM0_Duty_Cycle +=10;
  69. #if LOOK_H == 0
  70.      PWM0s.CMR0.Regs = u16Duty*PWM0_Duty_Cycle/100-1;  //更新占空比
  71. #else
  72.      PWMA.CMR0 = u16Duty*PWM0_Duty_Cycle/100-1;  //更新占空比
  73. #endif
  74.     }
  75.     break;
  76.    case 0x02:
  77.     //占空比减少10%
  78.     if (PWM0_Duty_Cycle!=0)
  79.     {
  80.      PWM0_Duty_Cycle -=10;
  81. #if LOOK_H == 0
  82.      if (PWM0_Duty_Cycle!=0)
  83.       PWM0s.CMR0.Regs = u16Duty*PWM0_Duty_Cycle/100-1;  //更新占空比
  84.      else PWM0s.CMR0.Regs = 0;
  85. #else
  86.      if (PWM0_Duty_Cycle!=0)
  87.       PWMA.CMR0 = u16Duty*PWM0_Duty_Cycle/100-1;  //更新占空比
  88.      else PWMA.CMR0 = 0;
  89. #endif
  90.     }
  91.     break;
  92.   }
  93. }
  94. }
  95. #ifdef LOOK_SCHEDULING_PRIORITY
  96. instantiate::task<task_LOOK_PWM_t, LOOK_STACK_SIZE> task_LOOK_PWM(0);
  97. #else
  98. instantiate::task<task_LOOK_PWM_t, LOOK_STACK_SIZE> task_LOOK_PWM;
  99. #endif







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
电子write_cai 发表于 2011-7-27 21:14 | 显示全部楼层
沙发。
hotpower 发表于 2011-7-27 21:17 | 显示全部楼层
板凳~~~
Swallow_0322 发表于 2011-7-29 16:40 | 显示全部楼层
顶!
我当时没有详细测试,多谢提供那么多波形图,但建议给点注释。
建议增加改编的具体内容?
hotpower 发表于 2011-7-29 16:43 | 显示全部楼层
老师在群里也给出了波形。没管周期。
wangjia2000 发表于 2011-9-29 11:11 | 显示全部楼层
一直关注的程序
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

185

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部