[LOOK] LOOK+红杏头文件 学习第八帖:PWM小练

[复制链接]
 楼主| Swallow_0322 发表于 2011-7-24 10:58 | 显示全部楼层 |阅读模式
本帖最后由 hotpower 于 2011-7-24 17:04 编辑

    好久没学习了,今天抽空补上个PWM的小程序,因为时间比较紧迫,所以没有使用Lee老师新的头文件,还是使用HOT大叔的红杏头文件,仅是实现功能,未进行优化及详细功能测试,望见谅!
    本工程主要包含两个任务:①普通类任务task_LOOK_PWM_t:等待标志Flag_SPI低四位任意位置位 然后完成来自于uart0的任务;
       ②中断类任务uart0_t:uart 同步输出功能及接收功能

初始化设置:  时钟配置为 XTL12M_EN: 外部 4~24MHz 晶振使能
              CPU时钟频率为12MHz
              UART时钟选择外部12MHZ,并使能UART0时钟
    PB.0选择多功能管脚选择RXD0 PB.1选择多功能管脚选择TXD0
    PA.12选择多功能管脚选择PWM0
            
主要完成功能: UART0 接收到字符‘U’或‘u’实现PWM占空比增加10%;
   UART0 接收到字符‘D’或‘d’实现PWM占空比减少10%.


部分源文件:
LOOK_PWM.cpp

  1. flag_t Flag_PWM(0);

  2. // 任务类 task_LOOK_PWM_t 的例程
  3. void task_LOOK_PWM_t::routine()
  4. {
  5. // TODO: 在此编写 task_LOOK_PWM_t 例程的内容
  6. uint8_t PWM0_Duty_Cycle = 50;   //PWM初始化占空比为50
  7. //Enable PWM engine clock and reset PWM
  8. SYSCLKs.APBCLK.Bits.PWM01_EN = 1;       //PWM01时钟使能
  9. SYSs.IPRSTC2.Bits.PWM03_RST = 1;     // PWM03复位
  10. SYSs.IPRSTC2.Bits.PWM03_RST = 0;  //PWM03开始工作
  11. SYSCLKs.CLKSEL1.Bits.TMR0_S = 0b000; //外部12M晶振
  12. PWM0s.PCR.Bits.CH0INV = 0;    //反向关闭
  13. PWM0s.PCR.Bits.CH0MOD = 1;    //自动重载
  14. PWM0s.PPR.Bits.CP01 = 1;    //预分频  1
  15. PWM0s.CSR.Bits.CSR0 = 0b100;   //分频系数 1
  16. uint16_t u16Duty = 12000000/((1+1)*1*400);//PWM 频率 400HZ
  17. PWM0s.CNR0.Regs = u16Duty-1;     //PWM 频率 = PWMxy_CLK/(prescale+1)*(clock divider)/(CNR+1);
  18. PWM0s.CMR0.Regs = u16Duty*PWM0_Duty_Cycle/100-1; //占空比 = (CMR+1)/(CNR+1).
  19. PWM0s.POE.Bits.PWM0 = 1;    //PWM0输出使能
  20. //PA.12作为PWM0   使用LOOK进行配置
  21. PWM0s.PCR.Bits.CH0EN = 1;    // 使能PWM功能
  22. while (true) {
  23.   // TODO: 在此编写 task_LOOK_PWM_t 例程的内容
  24.   uart0.puts("WM0当前设置占空比为:0x");
  25.   uart0.put_numeral(PWM0_Duty_Cycle);
  26.   uart0.puts("%\n");
  27.   int flag = Flag_PWM.wait(0b011, flag_t::ANY_CONSUME);
  28.      switch (flag)
  29.      {
  30.       case 0x01:
  31.     //占空比增加10%
  32.     if (PWM0_Duty_Cycle!=100)
  33.     {
  34.      PWM0_Duty_Cycle +=10;
  35.      PWM0s.CMR0.Regs = u16Duty*PWM0_Duty_Cycle/100-1;  //更新占空比
  36.     }
  37.     break;
  38.    case 0x02:
  39.     //占空比减少10%
  40.     if (PWM0_Duty_Cycle!=0)
  41.     {
  42.      PWM0_Duty_Cycle -=10;
  43.      if (PWM0_Duty_Cycle!=0)
  44.       PWM0s.CMR0.Regs = u16Duty*PWM0_Duty_Cycle/100-1;  //更新占空比
  45.      else PWM0s.CMR0.Regs = 0;
  46.     }
  47.     break;
  48.   }
  49. }
  50. }
  51. #ifdef LOOK_SCHEDULING_PRIORITY
  52. instantiate::task<task_LOOK_PWM_t, LOOK_STACK_SIZE> task_LOOK_PWM(0);
  53. #else
  54. instantiate::task<task_LOOK_PWM_t, LOOK_STACK_SIZE> task_LOOK_PWM;
  55. #endif
LOOK_PWM.h

  1. #ifndef __LOOK_PWM_H
  2. #define __LOOK_PWM_H

  3. #include "look_config.h"
  4. #include <look.h>
  5. #include <instantiate>

  6. // 任务类 task_LOOK_PWM_t 的定义
  7. class task_LOOK_PWM_t : public task_t {
  8. public:
  9. task_LOOK_PWM_t() __OPT_ATTR__; // 构造函数

  10. protected:
  11. void routine(); // 任务例程
  12. };

  13. // 任务类 LOOK_PWM 的构造函数
  14. __OPT_INLINE__ task_LOOK_PWM_t::task_LOOK_PWM_t()
  15. {
  16. // TODO: 在此初始化 task_LOOK_PWM_t 的类成员
  17. }

  18. extern flag_t Flag_PWM;

  19. extern instantiate::task<task_LOOK_PWM_t, LOOK_STACK_SIZE> task_LOOK_PWM;

  20. #endif // __LOOK_PWM_H


工程结构:


工程文件:

本帖子中包含更多资源

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

×
uniquehope 发表于 2011-7-24 11:02 | 显示全部楼层
沙发~~
hotpower 发表于 2011-7-25 14:49 | 显示全部楼层
三心:我把你的例程改为了老师的头文件,但是没示波器看波形。晚上俺上传,你再看看波形对否?
hotpower 发表于 2011-7-25 22:51 | 显示全部楼层
三心,俺上传老师修改的,你仔细看看你问题出在哪里。
我改为红杏和老师头文件两种都可以。

本帖子中包含更多资源

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

×
 楼主| Swallow_0322 发表于 2011-7-26 08:07 | 显示全部楼层
三心,俺上传老师修改的,我改为红杏和老师头文件两种都可以。

70721
hotpower 发表于 2011-7-25 22:51


你仔细看看你问题出在哪里。
现在存在什么问题啊?我白天抽空看看!

hotpower 发表于 2011-7-26 13:06 | 显示全部楼层
看了老师改的地方都是uart
 楼主| Swallow_0322 发表于 2011-7-26 16:10 | 显示全部楼层
6# hotpower

恩 好的 谢谢!
hotpower 发表于 2011-7-26 17:30 | 显示全部楼层
有些疑问,晚上找老师问问。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:播种一种行为,收获一种习惯;播种一种习惯,收获一种性格;播种一种性格,收获一种人生!

121

主题

1393

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:播种一种行为,收获一种习惯;播种一种习惯,收获一种性格;播种一种性格,收获一种人生!

121

主题

1393

帖子

4

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