Bläddra i källkod

rtt 版 pwm 实现通过编译

Peter Zhang 5 år sedan
förälder
incheckning
bf92ddcf0f
3 ändrade filer med 50 tillägg och 3 borttagningar
  1. 2 0
      .gitignore
  2. 47 3
      luat/rtt/luat_pwm_rtt.c
  3. 1 0
      tools/java/.gitignore

+ 2 - 0
.gitignore

@@ -81,3 +81,5 @@ bsp/air302/air302_sdk/**
 /bsp/air724/sdk/prebuilts/win32
 /bsp/air724/sdk/prebuilts/win32
 
 
 *.cmake
 *.cmake
+
+debug.log

+ 47 - 3
luat/rtt/luat_pwm_rtt.c

@@ -14,6 +14,9 @@
 
 
 #ifdef RT_USING_PWM
 #ifdef RT_USING_PWM
 
 
+//------------------------------------------------------
+// 这里初始化一下 pwm 设备,一般的来说 pwm0 ... pwm6 就够了
+// 某些时候,还有设备直接叫 "pwm"
 #define DEVICE_ID_MAX 6
 #define DEVICE_ID_MAX 6
 static struct pwm_devs *pwm_devs[DEVICE_ID_MAX];
 static struct pwm_devs *pwm_devs[DEVICE_ID_MAX];
 
 
@@ -40,14 +43,55 @@ static int luat_pwm_rtt_init() {
 
 
 INIT_COMPONENT_EXPORT(luat_pwm_rtt_init);
 INIT_COMPONENT_EXPORT(luat_pwm_rtt_init);
 
 
+#ifdef SOC_FAMILY_STM32
+//------------------------------------------------------
+// 在 RTT, rt_device_pwm 实际上是 stm32_pwm 结构的第一个属性
+// 因此,暗戳戳的转成 (stm32_pwm *) 即可得到 channel
+
+
+
+#else
+//------------------------------------------------------
+// 在 RTT, 用两个数字来确定 pwm 的 channel
+// {I}{N}
+//  - I: 表示在 pwm_devs 中的下标
+//  - N: 表示在该设备的 channel
+// 这两个数字通过 @channel 参数得到
+//  - I: 十位
+//  - N: 个位
+// @return -1 打开失败。 0 打开成功
 int luat_pwm_open(int channel, size_t period, size_t pulse) {
 int luat_pwm_open(int channel, size_t period, size_t pulse) {
-    if (channel < 0 || channel >= DEVICE_ID_MAX )
+    int i = channel / 10;
+    int n = channel - (i * 10);
+    if (i < 0 || i >= DEVICE_ID_MAX )
         return -1;
         return -1;
-    return -1;
+
+    struct rt_device_pwm *dev = pwm_devs[i];
+    if(RT_NULL == dev)
+        return -1;
+    
+    rt_pwm_set(dev, n, period, pulse);
+    rt_pwm_enable(dev, n);
+
+    return 0;
 }
 }
 
 
+// @return -1 关闭失败。 0 关闭成功
 int luat_pwm_close(int channel) {
 int luat_pwm_close(int channel) {
-    return -1;
+    int i = channel / 10;
+    int n = channel - (i * 10);
+    if (i < 0 || i >= DEVICE_ID_MAX )
+        return -1;
+
+    struct rt_device_pwm *dev = pwm_devs[i];
+    if(RT_NULL == dev)
+        return -1;
+    
+    rt_pwm_disable(dev, n);
+
+    return 0;
 }
 }
 
 
 #endif
 #endif
+//------------------------------------------------------
+#endif

+ 1 - 0
tools/java/.gitignore

@@ -0,0 +1 @@
+/bin/