Explorar o código

update:ioqueue相关demo调整,air780ep也能用

alienwalker hai 1 ano
pai
achega
3569348d5d
Modificáronse 3 ficheiros con 88 adicións e 51 borrados
  1. 73 48
      demo/io_queue/main.lua
  2. 1 1
      demo/旋转编码器/main.lua
  3. 14 2
      demo/旋转编码器/rotary.lua

+ 73 - 48
demo/io_queue/Air105/main.lua → demo/io_queue/main.lua

@@ -1,23 +1,38 @@
 
 -- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "test"
+PROJECT = "ioqueue"
 VERSION = "1.0.0"
-
+-- 仅支持ioqueue的平台能使用!!
 -- sys库是标配
-_G.sys = require("sys")
+_G.sys = require("sys")
+
+local rtos_bsp = rtos.bsp()
+function pinx() -- 根据不同开发板,给LED赋值不同的gpio引脚编号
+	if rtos_bsp == "AIR105" then
+		mcu.setXTAL(true)   --为了测试更准确,调整到外部时钟
+        return 1, pin.PD06, pin.PD07
+    elseif rtos_bsp == "EC718P" then -- Air780E开发板引脚
+		gpio.setup(12,nil,nil)
+		gpio.setup(13,nil,nil)
+        return 1, 12,13
+    else
+        log.info("main", "define led pin in main.lua")
+        return 255,255
+    end
+end
 
 sys.taskInit(function()
 
     local _,tick_us = mcu.tick64()
-    local hw_timer_id = 1
-    local capture_pin = pin.PD06
-    local out_pin = pin.PD07
+    local hw_timer_id, capture_pin,out_pin = pinx()
     local buff1 = zbuff.create(100)
     local buff2 = zbuff.create(100)
-    local cnt1,cnt2,i,lastTick,bit1Tick,nowTick,j,bit
-    mcu.setXTAL(true)   --为了测试更准确,调整到外部时钟
+    local cnt1,cnt2,i,lastTick,bit1Tick,nowTick,j,bit
+	mcu.hardfault(0)
+	sys.wait(2000)
     bit1Tick = 100 * tick_us
-    while 1 do
+    while 1 do
+		log.info('start dht11')
         --测试单总线DHT11
         ioqueue.stop(hw_timer_id)   --确保硬件定时器1是空闲的
         ioqueue.init(hw_timer_id,100,1) --io队列设置100个命令,重复1次,实际上用不到那么多命令
@@ -44,10 +59,11 @@ sys.taskInit(function()
         j = 0
         bit = 8
         buff1[0] = 0
-        for i = 2,41,1 do
+        for i = 2,41,1 do
+			
             --检查一下是不是对应pin的下降沿中断,不过也不太需要
             if buff2[i * 6 + 0] ~= capture_pin or buff2[i * 6 + 1] ~= 0 then
-                log.error("capture", buff2[i * 6 + 0], buff2[i * 6 + 1])
+                log.error("capture", i, buff2[i * 6 + 0], buff2[i * 6 + 1])
             end
             --通过计算tick差值来确定是bit1还是bit0
             nowTick = buff2:query(i * 6 + 2, 4, false)
@@ -70,44 +86,53 @@ sys.taskInit(function()
         end
         ::TEST_OUT::
         ioqueue.release(hw_timer_id)
+
+		log.info('output 1 start')
+		 --测试高精度固定间隔定时输出,1us间隔翻转电平
+        ioqueue.init(hw_timer_id, 100, 100)
+        ioqueue.setgpio(hw_timer_id, out_pin, false,0,1)   --设置成输出口,电平1
+        ioqueue.setdelay(hw_timer_id, 0, tick_us - 3, true)  --设置成连续延时,每次1个us,如果不准,对time_tick微调,延时开始
+        for i = 0,40,1 do
+            ioqueue.output(hw_timer_id, out_pin, 0)
+            ioqueue.delay(hw_timer_id)     --连续延时1次
+            ioqueue.output(hw_timer_id, out_pin, 1)
+            ioqueue.delay(hw_timer_id)     --连续延时1次
+        end
+        ioqueue.start(hw_timer_id)
+        sys.waitUntil("IO_QUEUE_DONE_"..hw_timer_id)
+        log.info('output 1 done')
+        ioqueue.stop(hw_timer_id)
+        ioqueue.release(hw_timer_id)
+        sys.wait(500)
+
+		log.info('output 2 start')
+        --测试高精度可变间隔定时输出
+        ioqueue.init(hw_timer_id, 100, 100)
+        ioqueue.setgpio(hw_timer_id, out_pin, false,0,1)   --设置成输出口,电平1
+        ioqueue.setdelay(hw_timer_id, 0, tick_us - 3)  --单次延迟1us,如果不准,对time_tick微调
+        ioqueue.output(hw_timer_id, out_pin, 0) --低电平
+        ioqueue.setdelay(hw_timer_id, 1, tick_us - 3)  --单次延迟2us
+        ioqueue.output(hw_timer_id, out_pin, 1) --高电平
+        ioqueue.setdelay(hw_timer_id, 2, tick_us - 3)  --单次延迟3us
+        ioqueue.output(hw_timer_id, out_pin, 0) --低电平
+        ioqueue.setdelay(hw_timer_id, 3, tick_us - 3)  --单次延迟4us
+        ioqueue.output(hw_timer_id, out_pin, 1) --高电平
+        ioqueue.setdelay(hw_timer_id, 4, tick_us - 3)  --单次延迟5us
+        ioqueue.output(hw_timer_id, out_pin, 0) --低电平
+        ioqueue.setdelay(hw_timer_id, 5, tick_us - 3)  --单次延迟6us
+        ioqueue.output(hw_timer_id, out_pin, 1) --高电平
+        ioqueue.start(hw_timer_id)
+        sys.waitUntil("IO_QUEUE_DONE_"..hw_timer_id)
+		log.info('output 2 done')
+        ioqueue.stop(hw_timer_id)
+        ioqueue.release(hw_timer_id)
+        sys.wait(500)
+		
+
+		
+
+		
 
-        --测试高精度固定间隔定时输出,1us间隔翻转电平
-        ioqueue.init(hw_timer_id, 100, 100)
-        ioqueue.setgpio(hw_timer_id, out_pin, false,0,1)   --设置成输出口,电平1
-        ioqueue.setdelay(hw_timer_id, 0, 45, true)  --设置成连续延时,每次1个us,如果不准,对time_tick微调,延时开始
-        for i = 0,40,1 do
-            ioqueue.output(hw_timer_id, out_pin, 0)
-            ioqueue.delay(hw_timer_id)     --连续延时1次
-            ioqueue.output(hw_timer_id, out_pin, 1)
-            ioqueue.delay(hw_timer_id)     --连续延时1次
-        end
-        ioqueue.start(hw_timer_id)
-        sys.waitUntil("IO_QUEUE_DONE_"..hw_timer_id)
-        log.info('output 1 done')
-        ioqueue.stop(hw_timer_id)
-        ioqueue.release(hw_timer_id)
-        sys.wait(500)
-        --测试高精度可变间隔定时输出
-        ioqueue.init(hw_timer_id, 100, 100)
-        ioqueue.setgpio(hw_timer_id, out_pin, false,0,1)   --设置成输出口,电平1
-        ioqueue.setdelay(hw_timer_id, 0, 45)  --单次延迟1us,如果不准,对time_tick微调
-        ioqueue.output(hw_timer_id, out_pin, 0) --低电平
-        ioqueue.setdelay(hw_timer_id, 1, 45)  --单次延迟2us
-        ioqueue.output(hw_timer_id, out_pin, 1) --高电平
-        ioqueue.setdelay(hw_timer_id, 2, 45)  --单次延迟3us
-        ioqueue.output(hw_timer_id, out_pin, 0) --低电平
-        ioqueue.setdelay(hw_timer_id, 3, 45)  --单次延迟4us
-        ioqueue.output(hw_timer_id, out_pin, 1) --高电平
-        ioqueue.setdelay(hw_timer_id, 4, 45)  --单次延迟5us
-        ioqueue.output(hw_timer_id, out_pin, 0) --低电平
-        ioqueue.setdelay(hw_timer_id, 5, 45)  --单次延迟6us
-        ioqueue.output(hw_timer_id, out_pin, 1) --高电平
-        ioqueue.start(hw_timer_id)
-        sys.waitUntil("IO_QUEUE_DONE_"..hw_timer_id)
-        log.info('output 2 done')
-        ioqueue.stop(hw_timer_id)
-        ioqueue.release(hw_timer_id)
-        sys.wait(500)
     end
 end)
 -- 用户代码已结束---------------------------------------------

+ 1 - 1
demo/旋转编码器/Air105/main.lua → demo/旋转编码器/main.lua

@@ -3,7 +3,7 @@
 PROJECT = "testrotary"
 VERSION = "1.0.0"
 
--- 仅air105支持!!
+-- 仅支持ioqueue的平台能使用!!
 
 -- sys库是标配
 _G.sys = require("sys")

+ 14 - 2
demo/旋转编码器/Air105/rotary.lua → demo/旋转编码器/rotary.lua

@@ -1,7 +1,19 @@
 -- 旋转编码器
 -- 正反方向根据实际情况决定
-local s1_pin = pin.PC09
-local s2_pin = pin.PA10
+
+local rtos_bsp = rtos.bsp()
+function pinx() -- 根据不同开发板,给LED赋值不同的gpio引脚编号
+	if rtos_bsp == "AIR105" then
+        return pin.PC09, pin.PA10
+    elseif rtos_bsp == "EC718P" then -- Air780E开发板引脚
+        return 12,13
+    else
+        log.info("main", "define led pin in main.lua")
+        return 255,255
+    end
+end
+
+local s1_pin, s2_pin = pinx()
 local pin_need = 1
 local s1_last = nil
 local s2_last = nil