|
|
@@ -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)
|
|
|
-- 用户代码已结束---------------------------------------------
|