chinesebear 发表于 2015-7-13 19:36:18

关于智龙开发板的PWM驱动For RT-Thread

本帖最后由 chinesebear 于 2015-9-14 20:56 编辑

教程for smart loong:http://pan.baidu.com/s/1bnyQa8B龙芯智龙开发板教程rtt for smart loong:链接
关于智龙开发板的PWM驱动For RT-ThreadPWM driver for RTT on Smart Loong BoardBy chinesebear(swubear@163.com)
由于没有示波器,智能通过万用测电压的方式来检测PWM驱动的正确性。Step1硬件连接。Loongson 1C一共有四个PWM,其中PWM0和PWM1可以直接使用,PWM2和PWM3需要复用其它脚。万用表的表笔用鳄鱼夹夹在PWM0的输出。 通过下图可以查到PWM0的位置:下一排插座的序号17处(看引脚说明)。


step2 驱动软件。为了适应RT-Thread的IO驱动管理的机制,龙芯的四个PWM的驱动都注册到了IO驱动管理层。为了调试方便,我在finsh中添加了pwm_control(pwm, HRC, LRC)命令。通过“FINSH_FUNCTION_EXPORT()”将“pwm_control()”添加到RTT的shell中。int pwm_control(rt_uint32_t pwm_num, rt_uint32_t HRC_value, rt_uint32_t LRC_value){
      char* pwm_str ={"pwm0","pwm1","pwm2","pwm3"};      rt_uint32_t pwm_buffer={HRC_value,LRC_value};      rt_uint32_t pwm_base = 0;      rt_uint32_t *base_ptr = RT_NULL;      //rt_kprintf("pwm device = %s \n",pwm_str);      rt_device_tpwm_dev=rt_device_find(pwm_str);      if (pwm_dev == RT_NULL)      {                rt_kprintf("Don't find pwm device:%s \n", pwm_str);                return RT_NULL;      }else{                rt_kprintf("Find pwm device:%s \n", pwm_str);      }      base_ptr = (rt_uint32_t *)(pwm_dev->user_data);      pwm_base = *base_ptr;      rt_kprintf("pwm device base addr = 0x%8X \n", pwm_base);      rt_device_open(pwm_dev,RT_DEVICE_FLAG_RDWR);      rt_kprintf("Open pwm device completed \n");
      rt_device_control(pwm_dev,PWM_SET_HRC, &pwm_buffer);      rt_device_control(pwm_dev,PWM_SET_LRC,&pwm_buffer);      rt_kprintf("Set HRC= %d, LRC= %d \n", HRC_value,LRC_value);      return RT_EOK;      }FINSH_FUNCTION_EXPORT(pwm_control, pwm control(PWM,HRC,LRC)); Step3 测试结果从下图可以看出,在脉冲占空比不断增加的同时,PWM输出电压也线性增大,这可以说明PWM的驱动是正确的。 Step4 总结智龙主板的驱动会逐步健全。由于智龙开发板是为工控、物联网等硬实时要求比较高场合而设计,所以我将会为RT-Thread移植更多的驱动和程序。下一个添加的驱动是GPIO。希望通过我所做的事情能够激发大家开发龙芯的热情。诸君共勉!:) 附件RTT的elf文件:

sn2015ol 发表于 2015-7-13 21:38:09

非常好啊,看来RT-Thread在龙芯上的应用会越来越多了。

shigeng 发表于 2015-7-16 01:28:56

硬件和软件会相互促进,过段时间有空了也研究研究RT-Thread。
页: [1]
查看完整版本: 关于智龙开发板的PWM驱动For RT-Thread