Pārlūkot izejas kodu

调整gpio输出脉冲接口参数,适配luatos

hyj 4 gadi atpakaļ
vecāks
revīzija
eaba6c560f

+ 8 - 0
app/port/luat_gpio_air101.c

@@ -100,6 +100,14 @@ int luat_gpio_set(int pin, int level)
     return 0;
 }
 
+//hyj
+void luat_gpio_pulse(int pin,uint16_t delay_ns, uint8_t *level, uint16_t len)
+{
+    if (pin < 0 || pin > WM_IO_PB_31) return 0;
+    tls_gpio_pulse(pin,delay_ns,level,len);
+    return 0;
+}
+
 int luat_gpio_get(int pin)
 {
     if (pin < 0 || pin > WM_IO_PB_31) return 0;

+ 2 - 0
include/driver/wm_gpio.h

@@ -100,6 +100,8 @@ u8 tls_gpio_read(enum tls_io_name gpio_pin);
  */
 void tls_gpio_write(enum tls_io_name gpio_pin, u8 value);
 
+//hyj
+void tls_gpio_pulse(enum tls_io_name gpio_pin,u16 delay,u8* level,u16 len);
 
 /**
  * @brief          This function is used to config gpio interrupt

BIN
lib/libwmarch.a


+ 44 - 0
platform/drivers/gpio/wm_gpio.c

@@ -218,6 +218,50 @@ void tls_gpio_write(enum tls_io_name gpio_pin, u8 value)
 	tls_os_release_critical(cpu_sr);
 }
 
+//hyj
+void tls_gpio_pulse(enum tls_io_name gpio_pin,u16 delay,u8* level,u16 len)
+{
+        u32 cpu_sr = 0;
+        u32 reg;
+        u32     reg_en;
+    u8  pin;
+    u16 offset;
+        u16 i;
+        volatile u32 del=delay;
+    if (gpio_pin >= WM_IO_PB_00)
+    {
+        pin    = gpio_pin - WM_IO_PB_00;
+        offset = TLS_IO_AB_OFFSET;
+    }
+    else
+    {
+        pin    = gpio_pin;
+        offset = 0;
+    }
+
+
+        cpu_sr = tls_os_set_critical();
+
+        reg_en = tls_reg_read32(HR_GPIO_DATA_EN + offset);
+        tls_reg_write32(HR_GPIO_DATA_EN + offset, reg_en | (1 << pin));
+
+        reg = tls_reg_read32(HR_GPIO_DATA + offset);
+        for(i=0;i<len;i++)
+        {
+          if(level[i/8]&(0x80>>(i%8)))
+            tls_reg_write32(HR_GPIO_DATA + offset, reg |  (1 << pin));      /* write high */
+          else 
+            tls_reg_write32(HR_GPIO_DATA + offset, reg & (~(1 << pin)));/* write low */
+          del = delay;
+          while(del--);
+        }
+    tls_reg_write32(HR_GPIO_DATA_EN + offset, reg_en);
+
+        tls_os_release_critical(cpu_sr);
+}
+
+
+
 /**
  * @brief          This function is used to config gpio interrupt
  *

BIN
tools/xt804/AIR101_secboot.img


BIN
tools/xt804/wm_tool