133 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			133 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | diff --git a/iotelic/kunlun/Mainline/startup/misc/main.c b/iotelic/kunlun/Mainline/startup/misc/main.c | |||
|  | index 8b90072..44f5f07 100644 | |||
|  | --- a/iotelic/kunlun/Mainline/startup/misc/main.c | |||
|  | +++ b/iotelic/kunlun/Mainline/startup/misc/main.c | |||
|  | @@ -57,13 +57,127 @@ static void startup_ftm_init() | |||
|  |      proto_ftm_init(); | |||
|  |  #endif | |||
|  |  } | |||
|  | +extern void iot_wdg_feed_dog(); | |||
|  | +uint32_t iot_rtc_init(void); | |||
|  | + | |||
|  | +#include "iot_i2c_slave_api.h" | |||
|  | +#include "iot_i2c_api.h" | |||
|  | + | |||
|  | + | |||
|  | +uint8_t v = 0; | |||
|  | +void int_test(int t) | |||
|  | +{ | |||
|  | +    //iot_printf("\r\n%d\r\n", __LINE__); | |||
|  | +    iot_gpio_value_set(44, v%2); | |||
|  | +    v++; | |||
|  | +    iot_gpio_interrupt_enable(t, 1); | |||
|  | +} | |||
|  | +#define IRAM_FUNC(x) __attribute__((section(".iram."#x))) x | |||
|  | + | |||
|  | +uint8_t IRAM_ATTR send_buf[100] = {0x10, 0x20, 0x30, 0x40,  0x50,0x60,0x70,0x80,0x90}; | |||
|  | +uint8_t IRAM_ATTR recv_buf[100] = {0xa0, 0xb0, 0xc0, 0xd0}; | |||
|  | + | |||
|  | + | |||
|  | +uint8_t IRAM_ATTR memory_buf[256] = {0}; | |||
|  | +uint8_t IRAM_ATTR memory_addr=0; | |||
|  | + | |||
|  | +int IRAM_ATTR times = 0; | |||
|  | +void IRAM_FUNC(iot_i2c_slave_callback)(bool_t t); | |||
|  | + | |||
|  | +void iot_i2c_slave_callback(bool_t t) | |||
|  | +{ | |||
|  | +    if(true == t) { // master 读数据,这里是slaver 所以需要发送数据 | |||
|  | +        iot_i2c_s_write_data(IOT_I2C_S_PORT_0, send_buf, 1); | |||
|  | +    } else { // master 写数据,这里是slaver 所以需要接收数据 | |||
|  | +        int num = iot_i2c_s_get_data_num(IOT_I2C_S_PORT_0); | |||
|  | +        uint8_t device_addr = iot_i2c_s_fifo_read_byte(IOT_I2C_S_PORT_0); //第一个字节为device地址 | |||
|  | +        device_addr = device_addr; | |||
|  | +        times = 0; | |||
|  | +        memory_addr = iot_i2c_s_fifo_read_byte(IOT_I2C_S_PORT_0); //第二个字节为要写入的存储器首地址 | |||
|  | + | |||
|  | +        //如果后面还有,则为data | |||
|  | +        for(int i = 0; i < num - 2; i++) { | |||
|  | +            memory_buf[memory_addr + i] = iot_i2c_s_fifo_read_byte(IOT_I2C_S_PORT_0); | |||
|  | +            //iot_printf("recv_buf[%d]=%02x\r\n", i, recv_buf[i] & 0xff ); | |||
|  | +        } | |||
|  | +        //iot_printf("\r\n\r\n"); | |||
|  | +    } | |||
|  | + | |||
|  | +} | |||
|  | + | |||
|  | + | |||
|  | + | |||
|  |   | |||
|  |  void iot_startup_init_task(void *arg) | |||
|  |  { | |||
|  |      uint8_t gpio_3v3; | |||
|  | +    //int gpio1 = 43; | |||
|  |      for (;;) { | |||
|  | + | |||
|  |          /* sub system init */ | |||
|  |          iot_sub_system_init(); | |||
|  | +        iot_gpio_open_as_output(40); | |||
|  | + | |||
|  | +        //iot_gpio_open_as_interrupt(gpio1); | |||
|  | +        //iot_gpio_interrupt_config(gpio1, GPIO_INT_EDGE_BOTH, int_test, gpio1, 0); | |||
|  | +        //iot_gpio_interrupt_enable(gpio1, 1); | |||
|  | + | |||
|  | + | |||
|  | + | |||
|  | +        iot_printf("task 22 entry....\n"); | |||
|  | + | |||
|  | + | |||
|  | +        iot_i2c_slave_cfg_t slave_cfg; | |||
|  | + | |||
|  | + | |||
|  | + | |||
|  | +        slave_cfg.port = IOT_I2C_S_PORT_0; | |||
|  | +        slave_cfg.addr = 0x0d; | |||
|  | +        slave_cfg.gpio.scl = 43; | |||
|  | +        slave_cfg.gpio.sda = 44; | |||
|  | +        slave_cfg.callback = iot_i2c_slave_callback; | |||
|  | +        iot_i2c_slave_init(&slave_cfg); | |||
|  | + | |||
|  | +// | |||
|  | +        // i2c master init | |||
|  | +        int gpio1 = 18; | |||
|  | +        int gpio2 = 19; | |||
|  | + | |||
|  | +        iot_i2c_module_cfg_t g_cfg = {0}; | |||
|  | +        g_cfg.port = IOT_I2C_PORT_0; | |||
|  | +        g_cfg.nack_wait_num = 10; | |||
|  | +        g_cfg.baud = 20; | |||
|  | +        g_cfg.gpio.scl = gpio1; | |||
|  | +        g_cfg.gpio.sda = gpio2; | |||
|  | +        iot_i2c_module_init(&g_cfg); | |||
|  | + | |||
|  | + | |||
|  | +        //iot_gpio_open_as_output(gpio1); | |||
|  | +        //iot_gpio_open_as_output(gpio2); | |||
|  | +        for(;;) { | |||
|  | + | |||
|  | +            //iot_gpio_value_set(gpio1, 0); | |||
|  | +            //iot_gpio_value_set(gpio1, 1); | |||
|  | + | |||
|  | +            //iot_gpio_value_set(gpio2, 0); | |||
|  | +            //iot_gpio_value_set(gpio2, 1); | |||
|  | + | |||
|  | +            iot_printf("task 1 entry....\n"); | |||
|  | +            if(0) { | |||
|  | +                if (0 != iot_i2c_write(g_cfg.port, 0x0d, (char *)recv_buf, 4)) { | |||
|  | +                    iot_printf("i2c_write err\r\n"); | |||
|  | +                } | |||
|  | +            } | |||
|  | + | |||
|  | +            if (0 != iot_i2c_read(g_cfg.port, 0x0d, (char *)recv_buf, 1)) { | |||
|  | + | |||
|  | +            } | |||
|  | + | |||
|  | +            os_delay(1000); | |||
|  | +            iot_wdg_feed_dog(); | |||
|  | + | |||
|  | +        } | |||
|  | +//---------------------------------------------------------------------------------- | |||
|  |   | |||
|  |          /* open the 3v3 power for bluetooth, wifi, rtc and em_ext module */ | |||
|  |          gpio_3v3 = iot_board_get_gpio(GPIO_P3V3_EN); |