Răsfoiți Sursa

add:添加i2c速度枚举
update:剥离软件i2c函数

Dozingfiretruck 1 an în urmă
părinte
comite
84330aa87a
2 a modificat fișierele cu 20 adăugiri și 7 ștergeri
  1. 9 0
      luat/include/luat_i2c.h
  2. 11 7
      luat/modules/luat_lib_i2c.c

+ 9 - 0
luat/include/luat_i2c.h

@@ -2,6 +2,14 @@
 #define LUAT_I2C_H
 
 #include "luat_base.h"
+
+enum{
+    I2C_SPEED_SLOW = 0,
+    I2C_SPEED_FAST,
+    I2C_SPEED_PLUS,
+    I2C_SPEED_HSMODE,
+};
+
 /**
  * @defgroup luatos_device_i2c I2C接口
  * @{
@@ -129,6 +137,7 @@ typedef struct luat_ei2c {
     int16_t udelay;
 } luat_ei2c_t;//软件i2c
 
+void i2c_soft_setup(luat_ei2c_t *ei2c);
 void i2c_soft_start(luat_ei2c_t *ei2c);
 char i2c_soft_recv(luat_ei2c_t *ei2c, unsigned char addr, char *buff, size_t len);
 char i2c_soft_send(luat_ei2c_t *ei2c, unsigned char addr, char *data, size_t len, uint8_t stop);

+ 11 - 7
luat/modules/luat_lib_i2c.c

@@ -216,6 +216,12 @@ static int l_i2c_setup(lua_State *L)
     return 1;
 }
 
+void i2c_soft_setup(luat_ei2c_t *ei2c){
+    luat_gpio_mode(ei2c->scl, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 1);
+    luat_gpio_mode(ei2c->sda, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 1);
+    i2c_soft_stop(ei2c);
+}
+
 /*
 新建一个软件i2c对象
 @api i2c.createSoft(scl,sda,delay)
@@ -245,9 +251,7 @@ static int l_i2c_soft(lua_State *L)
     else {
         ei2c->udelay = 5;
     }
-    luat_gpio_mode(ei2c->scl, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 1);
-    luat_gpio_mode(ei2c->sda, Luat_GPIO_OUTPUT, Luat_GPIO_PULLUP, 1);
-    i2c_soft_stop(ei2c);
+    i2c_soft_setup(ei2c);
     luaL_setmetatable(L, LUAT_EI2C_TYPE);
     return 1;
 }
@@ -905,12 +909,12 @@ static const rotable_Reg_t reg_i2c[] =
 
     
 	{ "scan",	    ROREG_FUNC(l_i2c_scan)},
-	{ "HSMODE",     ROREG_INT(3)},
-	{ "PLUS",       ROREG_INT(2)},
+	{ "HSMODE",     ROREG_INT(I2C_SPEED_HSMODE)},
+	{ "PLUS",       ROREG_INT(I2C_SPEED_PLUS)},
     //@const FAST number 高速
-    { "FAST",       ROREG_INT(1)},
+    { "FAST",       ROREG_INT(I2C_SPEED_FAST)},
     //@const SLOW number 低速
-    { "SLOW",       ROREG_INT(0)},
+    { "SLOW",       ROREG_INT(I2C_SPEED_SLOW)},
 	{ NULL,         ROREG_INT(0) }
 };