mirror of
https://github.com/pvvx/RTL00_WEB.git
synced 2025-07-31 20:31:05 +00:00
update
This commit is contained in:
parent
eac35630e6
commit
25980c5c59
16 changed files with 204 additions and 129 deletions
|
@ -11,22 +11,22 @@
|
|||
#include "device.h"
|
||||
|
||||
typedef struct _I2C_HND_ {
|
||||
signed char status;
|
||||
unsigned char idx;
|
||||
unsigned char io_sel;
|
||||
unsigned char mode; // if(I2C_FIXED_SPEED_MODE != 0) user set -> i2c_mode_e
|
||||
signed char status; // _i2c_status_e
|
||||
unsigned char idx; // Номер контроллера I2C
|
||||
unsigned char io_sel; // Location Index(Pin Mux Selection): S0 -> PC_4, PC_5
|
||||
unsigned char mode; // _i2c_mode_e, if(I2C_FIXED_SPEED_MODE != 0) user set -> i2c_mode_e
|
||||
void * base_regs;
|
||||
} i2c_drv_t, *i2c_drv_p;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
DRV_I2C_OFF = 0, // IC I2C DeInit
|
||||
DRV_I2C_OFF = 0, // IC I2C DeInit
|
||||
DRV_I2C_OK = 0, // DRV ret Ok
|
||||
DRV_I2C_IC_OFF = 1, // IC I2C Off
|
||||
DRV_I2C_IC_ENABLE = 2, // IC I2C On
|
||||
DRV_I2C_ERR = -1, // DRV ret err
|
||||
DRV_I2C_ABORT = -1, // IC I2C Abort
|
||||
DRV_I2C_TIMEOUT = -3 // IC I2C / DRV ret Timeout
|
||||
DRV_I2C_IC_OFF = 1, // IC I2C Off
|
||||
DRV_I2C_IC_ENABLE = 2, // IC I2C On
|
||||
DRV_I2C_ERR = -1, // DRV ret err
|
||||
DRV_I2C_ABORT = -1, // IC I2C Abort
|
||||
DRV_I2C_TIMEOUT = -3 // IC I2C / DRV ret Timeout
|
||||
} _i2c_status_e;
|
||||
|
||||
|
||||
|
|
|
@ -112,6 +112,9 @@ static void copy_align4_to_align1(unsigned char * pd, void * ps, unsigned int le
|
|||
// return size;
|
||||
}
|
||||
*/
|
||||
/*
|
||||
* int print_hex_dump(uint8_t *buf, int len, unsigned char k)
|
||||
*/
|
||||
int print_hex_dump(uint8_t *buf, int len, unsigned char k) {
|
||||
uint32_t ss[2];
|
||||
ss[0] = 0x78323025; // "%02x"
|
||||
|
|
|
@ -88,7 +88,7 @@ LOCAL int i2c_ready(i2c_drv_t *pi2c, unsigned char flg)
|
|||
if(i2c_reg(REG_DW_I2C_IC_RAW_INTR_STAT) & BIT_IC_RAW_INTR_STAT_TX_ABRT) {
|
||||
error_printf("I2C%d Abort!\n", pi2c->idx);
|
||||
// Clear abort status.
|
||||
i2c_reg(REG_DW_I2C_IC_CLR_TX_ABRT);
|
||||
(volatile uint32)i2c_reg(REG_DW_I2C_IC_CLR_TX_ABRT);
|
||||
// Be sure that all interrupts flag are cleared.
|
||||
// i2c_reg(REG_DW_I2C_IC_CLR_INTR);
|
||||
pi2c->status = DRV_I2C_ABORT;
|
||||
|
@ -131,7 +131,7 @@ int _i2c_break(i2c_drv_t *pi2c)
|
|||
};
|
||||
pi2c->status = DRV_I2C_OFF;
|
||||
// All interrupts flag are cleared.
|
||||
i2c_reg(REG_DW_I2C_IC_CLR_INTR);
|
||||
(volatile uint32)i2c_reg(REG_DW_I2C_IC_CLR_INTR);
|
||||
return DRV_I2C_OK;
|
||||
}
|
||||
|
||||
|
@ -226,7 +226,7 @@ LOCAL int i2c_enable(i2c_drv_t *pi2c)
|
|||
};
|
||||
};
|
||||
// Be sure that all interrupts flag are cleared.
|
||||
i2c_reg(REG_DW_I2C_IC_CLR_INTR);
|
||||
(volatile uint32)i2c_reg(REG_DW_I2C_IC_CLR_INTR);
|
||||
pi2c->status = DRV_I2C_IC_ENABLE;
|
||||
return DRV_I2C_OK;
|
||||
}
|
||||
|
@ -433,7 +433,7 @@ int _i2c_read(i2c_drv_t *pi2c, uint32 address, const char *data, int length, int
|
|||
*d++ = i2c_reg(REG_DW_I2C_IC_DATA_CMD);
|
||||
length--;
|
||||
}
|
||||
else i2c_reg(REG_DW_I2C_IC_DATA_CMD);
|
||||
else (volatile uint32)i2c_reg(REG_DW_I2C_IC_DATA_CMD);
|
||||
};
|
||||
}
|
||||
while(length) {
|
||||
|
@ -450,4 +450,121 @@ int _i2c_read(i2c_drv_t *pi2c, uint32 address, const char *data, int length, int
|
|||
return DRV_I2C_OK;
|
||||
}
|
||||
|
||||
#if defined(USE_I2C_CONSOLE) && USE_I2C_CONSOLE
|
||||
//extern void dump_bytes(uint32 addr, int size);
|
||||
extern int print_hex_dump(uint8_t *buf, int len, unsigned char k);
|
||||
extern uint32 hextoul(uint8 *s);
|
||||
|
||||
i2c_drv_t ti2c;
|
||||
/* I2C Init:
|
||||
* ati2c i [sda_pin [scl_pin [mode [speed]]]]
|
||||
* I2C Deinit:
|
||||
* ati2c d
|
||||
* I2C Write:
|
||||
* iati2c W address data1 [data2 ... [data8]...]
|
||||
* I2C write + stop:
|
||||
* iati2c w address data1 [data2 ... [data8]...]
|
||||
* I2C Read:
|
||||
* ati2c R address count
|
||||
* I2C read + stop:
|
||||
* ati2c r address count
|
||||
*/
|
||||
LOCAL void fATI2C(int argc, char *argv[])
|
||||
{
|
||||
i2c_drv_t *pi2c = &ti2c;
|
||||
uint8 buf[32];
|
||||
if(argc > 1) {
|
||||
if(argv[1][0] == 'i') {
|
||||
//
|
||||
if(!pi2c->status) {
|
||||
uint8 sda = 0;
|
||||
uint8 scl = 0;
|
||||
uint8 mode = 0;
|
||||
uint32 speed = 0;
|
||||
if(argc > 2) sda = hextoul(argv[2]);
|
||||
else if(argc > 3) scl = hextoul(argv[3]);
|
||||
else if(argc > 4) mode = hextoul(argv[4]);
|
||||
else if(argc > 5) speed = hextoul(argv[5]);
|
||||
if(!sda) sda = PC_4;
|
||||
if(!scl) scl = PC_5;
|
||||
if(!mode) mode = DRV_I2C_FS_MODE;
|
||||
if(!speed) speed = 50000;
|
||||
if(_i2c_setup(pi2c, sda, scl, mode) == DRV_I2C_OK
|
||||
&& _i2c_init(pi2c) == DRV_I2C_OK
|
||||
&& _i2c_set_speed(pi2c, speed) == DRV_I2C_OK) {
|
||||
rtl_printf("I2C%d Init: %02x %02x %02x %08x\n", pi2c->idx, sda, scl, mode, speed);
|
||||
};
|
||||
} else {
|
||||
rtl_printf("Already init!\n");
|
||||
return;
|
||||
};
|
||||
} else if(argv[1][0] == '?') {
|
||||
rtl_printf("I2C Init:\n\tati2c i [sda_pin [scl_pin [mode [speed]]]]\n");
|
||||
rtl_printf("I2C Deinit:\n\tati2c d\n");
|
||||
rtl_printf("I2C Write:\n\tati2c W address data1 [data2 ... [data8]...]\n");
|
||||
rtl_printf("I2C write + stop:\n\tati2c w address data1 [data2 ... [data8]...]\n");
|
||||
rtl_printf("I2C Read:\n\tati2c R address count\n");
|
||||
rtl_printf("I2C read + stop:\n\tati2c r address count\n");
|
||||
rtl_printf("I2C get:\n\tati2c g address wrcount wrdata1 [..wrdata6] rdcount\n");
|
||||
} else {
|
||||
if(pi2c->status) {
|
||||
if(argv[1][0] == 'd') {
|
||||
_i2c_ic_off(pi2c);
|
||||
rtl_printf("I2C%d DeInit\n", pi2c->idx);
|
||||
return;
|
||||
};
|
||||
int i;
|
||||
for(i = 0; i + 2 < argc; i++) {
|
||||
buf[i] = hextoul(argv[i+2]);
|
||||
};
|
||||
if(i) {
|
||||
if(argv[1][0] == 'w' || argv[1][0] == 'W') {
|
||||
// >ati2c w 40 2
|
||||
// I2C1 write[1]: 40 02 00
|
||||
// I2C1 drvStatus = 1
|
||||
_i2c_write(pi2c, buf[0], &buf[1], i-1, argv[1][0] == 'w');
|
||||
rtl_printf("I2C%d write[%d]: ", pi2c->idx, i-1);
|
||||
print_hex_dump(buf, i, ' ');
|
||||
rtl_printf("\n");
|
||||
} else if(argv[1][0] == 'r' || argv[1][0] == 'R') {
|
||||
// >ati2c r 40 2
|
||||
// I2C1 read[2]: 40 07 d8
|
||||
// I2C1 drvStatus = 1
|
||||
i = buf[1];
|
||||
if(i > sizeof(buf) - 1) i = sizeof(buf) - 1;
|
||||
_i2c_read(pi2c, buf[0], &buf[1], i, argv[1][0] == 'r');
|
||||
rtl_printf("I2C%d read[%d]: ", pi2c->idx, i);
|
||||
print_hex_dump(buf, i+1, ' ');
|
||||
rtl_printf("\n");
|
||||
} else if(argv[1][0] == 'g') {
|
||||
// >ati2c g 5a 1 6 3
|
||||
// I2C1 get[3]: 5a 5e 3a 6c
|
||||
// I2C1 drvStatus = 1
|
||||
if (argc < 5 || buf[1] == 0 || buf[1] > sizeof(buf) - 2) {
|
||||
rtl_printf("Error command string!\n");
|
||||
return;
|
||||
}
|
||||
if(_i2c_write(pi2c, buf[0], &buf[2], buf[1], 0) >= 0) {
|
||||
i = buf[buf[1] + 2]; // кол-во байт чтения
|
||||
if(i == 0 || i > sizeof(buf) - 1) i = sizeof(buf) - 1;
|
||||
_i2c_read(pi2c, buf[0], &buf[1], i, 1);
|
||||
rtl_printf("I2C%d get[%d]: ", pi2c->idx, i);
|
||||
print_hex_dump(buf, i+1, ' ');
|
||||
}
|
||||
rtl_printf("\n");
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
rtl_printf("I2C%d Status = %d\n", pi2c->idx, pi2c->status);
|
||||
return;
|
||||
}
|
||||
|
||||
MON_RAM_TAB_SECTION COMMAND_TABLE console_commands_i2c[] = {
|
||||
{"ATI2C", 0, fATI2C, ": Test I2C, <i>nit, <d>einit, <w/W>rite, <r/R>ead"},
|
||||
};
|
||||
#endif // USE_I2C_CONSOLE
|
||||
|
||||
|
||||
#endif // CONFIG_I2C_EN
|
||||
|
|
|
@ -127,6 +127,7 @@ void ina219_init(void)
|
|||
p->count = 0;
|
||||
p->errs = 0;
|
||||
// (!) Установки драйвера I2C заданы в структуре ina219drv
|
||||
// rtl_printf("INA219 control reg = 0x%04x\n", p->config);
|
||||
// _i2c_setup(&p->i2c, INA219_I2C_PIN_SDA , INA219_I2C_PIN_SCL, DRV_I2C_FS_MODE); // == DRV_I2C_OK?
|
||||
_i2c_init(&p->i2c);
|
||||
// _i2c_set_speed(&p->i2c, INA219_I2C_BUS_CLK);
|
||||
|
@ -137,10 +138,10 @@ void ina219_init(void)
|
|||
// Initial a periodical timer
|
||||
gtimer_init(&p->timer, INA219_TIMER);
|
||||
// Tick every 0.000532 sec (N*532 μs)
|
||||
uint32 tus = (1 << ((p->config >> 3) & 7));
|
||||
uint32 tus = 1 << ((p->config >> 3) & 7);
|
||||
tus *= 532;
|
||||
gtimer_start_periodical(&p->timer, tus, (void*)ina_tick_handler, (uint32_t)&ina219drv);
|
||||
rtl_printf("INA219 Read Period = %u us\n", tus);
|
||||
gtimer_start_periodical(&p->timer, tus, (void*)ina_tick_handler, (uint32_t)&ina219drv);
|
||||
p->init = 1;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -103,7 +103,7 @@ void ina_tick_handler(void *par) {
|
|||
break;
|
||||
case 4:
|
||||
if (i2c_reg(REG_DW_I2C_IC_RAW_INTR_STAT) & BIT_IC_RAW_INTR_STAT_TX_ABRT) {
|
||||
i2c_reg(REG_DW_I2C_IC_CLR_INTR);
|
||||
(volatile uint32)i2c_reg(REG_DW_I2C_IC_CLR_INTR);
|
||||
p->errs++;
|
||||
p->status = 0;
|
||||
break;
|
||||
|
@ -123,10 +123,10 @@ void ina_tick_handler(void *par) {
|
|||
else p->buf_rx++;
|
||||
};
|
||||
} else {
|
||||
i2c_reg(REG_DW_I2C_IC_DATA_CMD);
|
||||
i2c_reg(REG_DW_I2C_IC_DATA_CMD);
|
||||
i2c_reg(REG_DW_I2C_IC_DATA_CMD);
|
||||
i2c_reg(REG_DW_I2C_IC_DATA_CMD);
|
||||
(volatile uint32)i2c_reg(REG_DW_I2C_IC_DATA_CMD);
|
||||
(volatile uint32)i2c_reg(REG_DW_I2C_IC_DATA_CMD);
|
||||
(volatile uint32)i2c_reg(REG_DW_I2C_IC_DATA_CMD);
|
||||
(volatile uint32)i2c_reg(REG_DW_I2C_IC_DATA_CMD);
|
||||
};
|
||||
}
|
||||
case 3:
|
||||
|
@ -279,8 +279,9 @@ void ina219_init(void)
|
|||
// Tick every 0.000532 sec (N*532 μs)
|
||||
// uint32 tus = (1 << ((p->config >> 3) & 7));
|
||||
// tus *= 532;
|
||||
gtimer_start_periodical(&p->timer, 532*2, (void*)ina_tick_handler, (uint32_t)&ina219drv);
|
||||
rtl_printf("INA219 Timer Period = %u us\n", p->timer.hal_gtimer_adp.TimerLoadValueUs);
|
||||
uint32 tus = 532*2;
|
||||
gtimer_start_periodical(&p->timer, tus, (void*)ina_tick_handler, (uint32_t)&ina219drv);
|
||||
rtl_printf("INA219 Timer Period = %u us\n", tus);
|
||||
p->init = 1;
|
||||
}
|
||||
}
|
||||
|
@ -340,94 +341,7 @@ LOCAL void fATINA(int argc, char *argv[])
|
|||
ShowIna();
|
||||
}
|
||||
|
||||
|
||||
extern void dump_bytes(uint32 addr, int size);
|
||||
extern uint32 hextoul(uint8 *s);
|
||||
|
||||
i2c_drv_t ti2c;
|
||||
/* Sample:
|
||||
* ati2c i
|
||||
* ati2c w 40 5
|
||||
* ati2c r 40 2
|
||||
*/
|
||||
LOCAL void fATI2C(int argc, char *argv[])
|
||||
{
|
||||
i2c_drv_t *pi2c = &ti2c;
|
||||
uint8 buf[32];
|
||||
if(argc > 1) {
|
||||
if(argv[1][0] == 'i') {
|
||||
if(!pi2c->status) {
|
||||
uint8 sda = 0;
|
||||
uint8 scl = 0;
|
||||
uint8 mode = 0;
|
||||
uint32 speed = 0;
|
||||
if(argc > 2) sda = hextoul(argv[2]);
|
||||
else if(argc > 3) scl = hextoul(argv[3]);
|
||||
else if(argc > 4) mode = hextoul(argv[4]);
|
||||
else if(argc > 5) speed = hextoul(argv[5]);
|
||||
if(!sda) sda = PC_4;
|
||||
if(!scl) scl = PC_5;
|
||||
if(!mode) mode = DRV_I2C_FS_MODE;
|
||||
if(!speed) speed = 400000;
|
||||
if(_i2c_setup(pi2c, sda, scl, mode) == DRV_I2C_OK
|
||||
&& _i2c_init(pi2c) == DRV_I2C_OK
|
||||
&& _i2c_set_speed(pi2c, speed) == DRV_I2C_OK) {
|
||||
rtl_printf("I2C%d Init\n", pi2c->idx);
|
||||
};
|
||||
} else {
|
||||
rtl_printf("Already init!\n");
|
||||
return;
|
||||
};
|
||||
} else {
|
||||
if(pi2c->status) {
|
||||
if(argv[1][0] == 'd') {
|
||||
_i2c_ic_off(pi2c);
|
||||
rtl_printf("I2C%d DeInit\n", pi2c->idx);
|
||||
return;
|
||||
};
|
||||
int i;
|
||||
for(i = 0; i + 2 < argc; i++) {
|
||||
buf[i] = hextoul(argv[i+2]);
|
||||
};
|
||||
if(i) {
|
||||
if(argv[1][0] == 'w') {
|
||||
_i2c_write(pi2c, buf[0], &buf[1], i-1, 1);
|
||||
rtl_printf("I2C%d write[%d]:\n", pi2c->idx, i-1);
|
||||
dump_bytes((uint32)&buf[0], i);
|
||||
}
|
||||
else if(argv[1][0] == 'r') {
|
||||
i = buf[1];
|
||||
if(i > sizeof(buf) - 1) i = sizeof(buf) - 1;
|
||||
_i2c_read(pi2c, buf[0], &buf[1], i, 1);
|
||||
rtl_printf("I2C%d read[%d]:\n", pi2c->idx, i);
|
||||
dump_bytes((uint32)&buf[0], i+1);
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
rtl_printf("I2C%d drvStatus = %d\n", pi2c->idx, pi2c->status);
|
||||
return;
|
||||
}
|
||||
|
||||
LOCAL void fATLED(int argc, char *argv[])
|
||||
{
|
||||
if(argc > 1) {
|
||||
EGTIM_FCTRL(1);
|
||||
EGTIM_RSIG_SEL(atoi(argv[1]));
|
||||
EGTIME_PIN_G0_OPT_SEL(atoi(argv[2]));
|
||||
EGTIME_PIN_G1_OPT_SEL(atoi(argv[3]));
|
||||
EGTIME_PIN_G1_OPT_SEL(atoi(argv[4]));
|
||||
}
|
||||
else {
|
||||
EGTIM_FCTRL(0);
|
||||
}
|
||||
}
|
||||
|
||||
MON_RAM_TAB_SECTION COMMAND_TABLE console_commands_ina219[] = {
|
||||
{"ATLED", 0, fATLED, ": Test LED"},
|
||||
{"ATI2C", 0, fATI2C, ": Test I2C, <i>nit, <d>einit, <w>rite, <r>ead"},
|
||||
{"ATINA", 0, fATINA, "=[0/1]: INA219 =1 start, =0 stop"}
|
||||
};
|
||||
|
||||
|
|
|
@ -19,8 +19,10 @@
|
|||
#include "esp_comp.h"
|
||||
|
||||
#ifdef CONFIG_DEBUG_LOG
|
||||
#undef DEBUGSOO
|
||||
#define DEBUGSOO 2 // уровень вывода отладочной инфы по умолчанию = 2, =1 только error
|
||||
#else
|
||||
#undef DEBUGSOO
|
||||
#define DEBUGSOO 0
|
||||
#endif
|
||||
// Lwip funcs - http://www.ecoscentric.com/ecospro/doc/html/ref/lwip.html
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue