diff --git a/app/isr.c b/app/isr.c index cf9dd1c..ee7debe 100644 --- a/app/isr.c +++ b/app/isr.c @@ -284,6 +284,7 @@ void TIM1_UP_IRQHandler(void) { if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM1, TIM_IT_Update); + by_tiny_frame_parse_timer_handle(); } } diff --git a/app/jj_param.c b/app/jj_param.c index 1142af9..27befa7 100644 --- a/app/jj_param.c +++ b/app/jj_param.c @@ -5,6 +5,7 @@ PARAM_INFO Param_Data[DATA_NUM]; soft_iic_info_struct eeprom_param; TYPE_UNION iic_buffer[DATA_IN_FLASH_NUM]; +uint32_t *addre[2]; float data0 = 1.0f; float data1 = 1.05f; float data2 = 10.0f; @@ -12,6 +13,8 @@ float data3 = 100.0f; float data4 = 4.0f; float data5 = 66.0f; float data6 = 13.130f; +float data7 = 10.0f; +float data8 = 0.0f; /** * @brief 参数初始化注册 * @@ -25,7 +28,9 @@ void jj_param_eeprom_init(void) PARAM_REG(imgax_Kp, &data3, EFLOAT, 1, "im_P:"); // 注冊 PARAM_REG(imgax_Ki, &data4, EFLOAT, 1, "im_I:"); // 注冊 PARAM_REG(imgax_Kd, &data5, EFLOAT, 1, "im_D:"); - PARAM_REG(other, &data6, EFLOAT, 1, "add:"); + PARAM_REG(other , &data6, EFLOAT, 1, "add:"); + PARAM_REG(delta_x , &data7, EFLOAT, 2, "delta_x:"); + PARAM_REG(delta_y , &data8, EFLOAT, 0, "delta_y:"); jj_param_read(); // 注冊 } /** @@ -48,7 +53,7 @@ void jj_param_write(void) default: break; } - soft_iic_write_8bit_registers(&eeprom_param, 4 * i, (uint8 *)&iic_buffer[i], 4); + eep_soft_iic_write_8bit_registers(&eeprom_param, (4 * i) >> 8, (4 * i), (uint8 *)&iic_buffer[i], 4); system_delay_ms(10); } } @@ -60,7 +65,7 @@ void jj_param_read(void) { for (uint8 i = 0; i < DATA_IN_FLASH_NUM; i++) { - soft_iic_read_8bit_registers(&eeprom_param, 4 * i, (uint8 *)&iic_buffer[i], 4); + eep_soft_iic_read_8bit_registers(&eeprom_param, (4 * i) >> 8, (4 * i), (uint8 *)&iic_buffer[i], 4); switch (Param_Data[i].type) { case EFLOAT: *((float *)(Param_Data[i].p_data)) = @@ -77,6 +82,6 @@ void jj_param_read(void) default: break; } - system_delay_ms(10); + system_delay_ms(10); } } diff --git a/app/jj_param.h b/app/jj_param.h index 6faea53..2e78fdc 100644 --- a/app/jj_param.h +++ b/app/jj_param.h @@ -31,6 +31,9 @@ typedef enum { Page3_head, DATA_IN_FLASH_NUM, + + delta_x, + delta_y, DATA_NUM, } data_tag_t; @@ -50,14 +53,15 @@ typedef union { typedef struct { void *p_data; ENUM_TYPE type; - uint8_t cmd; + uint8_t cmd;//01:仅存储 00:仅显示 02:传输并显示 char *text; } PARAM_INFO; - +extern uint32_t * addre[2]; extern soft_iic_info_struct eeprom_param; extern PARAM_INFO Param_Data[DATA_NUM]; extern TYPE_UNION iic_buffer[DATA_IN_FLASH_NUM]; void jj_param_eeprom_init(void); void jj_param_write(void); void jj_param_read(void); +extern float data7; #endif \ No newline at end of file diff --git a/app/main.c b/app/main.c index 889d833..b0acd5a 100644 --- a/app/main.c +++ b/app/main.c @@ -52,65 +52,60 @@ int main(void) clock_init(SYSTEM_CLOCK_144M); system_delay_init(); debug_init(); - // mt9v03x_init(); + mt9v03x_init(); ips200_init(IPS200_TYPE_SPI); by_led_init(); - by_buzzer_init(); + // by_buzzer_init(); by_button_init(); jj_bt_init(); jj_param_eeprom_init(); - // jj_bt_init(); - // jj_param_eeprom_init(); Page_Init(); - - // pit_ms_init(TIM6_PIT, 2); - // pit_ms_init(TIM1_PIT, 2); + + pit_ms_init(TIM1_PIT, 1); by_tiny_frame_init(); printf("start running\r\n"); /** 测试完成后移除 **/ - // by_tiny_frame_parse_handle_register(test); by_tiny_frame_parse_start_listern(); by_tf_pack_frame_t frame_now; frame_now.cmd = 0x06; frame_now.data = 0x19260817; - frame_now.reg_addr = 0x4059; + frame_now.reg_addr = 0x00; frame_now.slave_id = 0x0D; /** 测试完成后移除 **/ while (1) { Page_Run(); - by_buzzer_run(); + // by_buzzer_run(); /** 测试完成后移除 **/ - by_tiny_frame_run(); - // by_tiny_frame_pack_send(&frame_now); + by_tiny_frame_pack_send(&frame_now); system_delay_ms(10); - by_tiny_frame_parse_timer_handle(); /** 测试完成后移除 **/ - // if (mt9v03x_finish_flag) { - // // 该操作消耗大概 1970 个 tick,折合约 110us - // memcpy(mt9v03x_image_copy[0], mt9v03x_image[0], (sizeof(mt9v03x_image_copy) / sizeof(uint8_t))); - // // adaptiveThreshold((uint8_t*)mt9v03x_image_copy, (uint8_t*)mt9v03x_image_copy, 188, 120, 7, 17); - // // ips200_show_gray_image(0, 0, mt9v03x_image_copy[0], MT9V03X_W, MT9V03X_H, MT9V03X_W, MT9V03X_H, 0); - // mt9v03x_finish_flag = 0; - // by_led_info_blink(); - // state_type = COMMON_STATE; - // img_processing(); - // get_corners(); - // aim_distance = COMMON_AIM; - // tracking(); - // ElementJudge(); - // ElementRun(); - // MidLineTrack(); - // } + if (mt9v03x_finish_flag) { + // 该操作消耗大概 1970 个 tick,折合约 110us + memcpy(mt9v03x_image_copy[0], mt9v03x_image[0], (sizeof(mt9v03x_image_copy) / sizeof(uint8_t))); + // adaptiveThreshold((uint8_t*)mt9v03x_image_copy, (uint8_t*)mt9v03x_image_copy, 188, 120, 7, 17); + // ips200_show_gray_image(0, 0, mt9v03x_image_copy[0], MT9V03X_W, MT9V03X_H, MT9V03X_W, MT9V03X_H, 0); + mt9v03x_finish_flag = 0; + by_led_info_blink(); + // state_type = COMMON_STATE; + // img_processing(); + // get_corners(); + // aim_distance = COMMON_AIM; + // tracking(); + // ElementJudge(); + // ElementRun(); + // MidLineTrack(); + + } } } diff --git a/app/page/page.c b/app/page/page.c index 01ef310..877b879 100644 --- a/app/page/page.c +++ b/app/page/page.c @@ -4,9 +4,13 @@ PAGE_LIST pagelist[page_max]; static uint8_t page_busy = 0; -int8_t new_page = page_menu; +static int8_t new_page = page_menu; static int8_t now_page = page_menu; +int8_t Get_new_page(void) +{ + return new_page; +} /** * @brief 注册一个基本页面,包含一个初始化函数,循环函数,退出函数,事件函数 * @param pageID: 页面编号 @@ -127,7 +131,7 @@ void Page_Init(void) PAGE_REG(page_rtcam, "rtcam"); PAGE_REG(page_param1, "Param1"); PAGE_REG(page_param2, "param2"); - PAGE_REG(page_dparam, "dparam"); + PAGE_REG(page_dparam, "dparam"); // PAGE_REG(page_argv); // PAGE_REG(page_sys); // PAGE_REG(page_run); diff --git a/app/page/page.h b/app/page/page.h index 39ef9eb..7e18f75 100644 --- a/app/page/page.h +++ b/app/page/page.h @@ -67,7 +67,7 @@ void Page_OpenCurrentPage(void); uint8_t Page_GetStatus(void); void Page_Run(void); void Page_Init(void); +int8_t Get_new_page(void); extern PAGE_LIST pagelist[page_max]; -extern int8_t new_page ; #endif diff --git a/app/page/page_dparam.c b/app/page/page_dparam.c index ebcb4be..3407df5 100644 --- a/app/page/page_dparam.c +++ b/app/page/page_dparam.c @@ -1,7 +1,7 @@ #include "zf_common_headfile.h" #include "page_ui_widget.h" #include "page.h" -float ddata0=0.0f; +#include "jj_param.h" // #define LINE_HEAD 1 // #define LINE_END 7 // static int8_t Curser = LINE_HEAD; // 定义光标位置 @@ -21,8 +21,10 @@ static void Setup() { ips200_clear(); // 显示参数名称 - ips200_show_string(0, 0, "Dparam"); - ips200_show_string(20, 18 + 2, "ddata0:"); + ips200_show_string(0, 0, "Dparam"); + + ips200_show_string(20, 18 + 2, (Param_Data[delta_x].text)); + ips200_show_string(20, 18 + 20, (Param_Data[delta_y].text)); } /** @@ -32,7 +34,6 @@ static void Setup() */ static void Exit() { - } /** @@ -43,8 +44,8 @@ static void Exit() static void Loop() { // 刷新参数数值 - ips200_show_float(80, 18 + 2, ddata0, 4, 5); - ddata0+=0.01f; + ips200_show_float(90, 18 + 2, *((float *)(Param_Data[delta_x].p_data)), 4, 5); + ips200_show_float(90, 18 + 20, *((float *)(Param_Data[delta_x].p_data)), 4, 5); } /** @@ -55,7 +56,7 @@ static void Loop() */ static void Event(page_event event) { - if (page_event_press_long == event) { + if (page_event_press_long == event) { Page_Shift(page_menu); } } diff --git a/app/page/page_menu.c b/app/page/page_menu.c index be60e04..687499b 100644 --- a/app/page/page_menu.c +++ b/app/page/page_menu.c @@ -25,7 +25,7 @@ static void Setup() { ips200_clear(); Print_Menu_p(); - Print_Curser(Curser, Curser_Last,RGB565_PURPLE); + Print_Curser(Curser, Curser_Last, RGB565_PURPLE); } /** @@ -72,7 +72,7 @@ static void Event(page_event event) Curser = LINE_HEAD; } - Print_Curser(Curser, Curser_Last,RGB565_PURPLE); + Print_Curser(Curser, Curser_Last, RGB565_PURPLE); } /** diff --git a/app/page/page_sparam.c b/app/page/page_sparam1.c similarity index 92% rename from app/page/page_sparam.c rename to app/page/page_sparam1.c index a062093..fe425ab 100644 --- a/app/page/page_sparam.c +++ b/app/page/page_sparam1.c @@ -1,6 +1,7 @@ #include "jj_param.h" #include "page_ui_widget.h" #include "page.h" +#include #define LINE_HEAD 1 @@ -25,11 +26,11 @@ static void Setup() { ips200_clear(); - if (new_page == page_param1) { + if (Get_new_page() == page_param1) { pafrist = 0; paend = Page2_head; ips200_show_string(0, 0, "Param1"); - } else if (new_page == page_param2) { + } else if (Get_new_page() == page_param2) { pafrist = Page2_head; paend = Page3_head; ips200_show_string(0, 0, "Param2"); @@ -104,7 +105,7 @@ static void Event(page_event event) if (page_event_forward == event) { switch (Param_Data[Curser + pafrist - 1].type) { case EFLOAT: - *((float *)(Param_Data[Curser + pafrist - 1].p_data)) += powf(10.0f, (float)index_power); + *((float *)(Param_Data[Curser + pafrist - 1].p_data)) += powf(10, index_power); break; case EINT32: *((int32 *)(Param_Data[Curser + pafrist - 1].p_data)) += 1; @@ -157,7 +158,3 @@ void PageRegister_page_param1(unsigned char pageID) { Page_Register(pageID, Setup, Loop, Exit, Event); } -void PageRegister_page_param2(unsigned char pageID) -{ - Page_Register(pageID, Setup, Loop, Exit, Event); -} \ No newline at end of file diff --git a/app/page/page_sparam2.c b/app/page/page_sparam2.c new file mode 100644 index 0000000..2335b13 --- /dev/null +++ b/app/page/page_sparam2.c @@ -0,0 +1,160 @@ +#include "jj_param.h" +#include "page_ui_widget.h" +#include "page.h" +#include + +#define LINE_HEAD 1 + +static int16 pafrist; +static int16 paend; +static int16 palong; +static int event_flag = 0; +static int32_t index_power = 0; +static int8_t Curser = LINE_HEAD; // 定义光标位置 +static int8_t Curser_Last = LINE_HEAD; // 定义光标位置 +/*************************************************************************************** + * + * 以下为页面模板函数 + * + ***************************************************************************************/ +/** + * @brief 页面初始化事件 + * @param 无 + * @retval 无 + */ +static void Setup() +{ + ips200_clear(); + + if (Get_new_page() == page_param1) { + pafrist = 0; + paend = Page2_head; + ips200_show_string(0, 0, "Param1"); + } else if (Get_new_page() == page_param2) { + pafrist = Page2_head; + paend = Page3_head; + ips200_show_string(0, 0, "Param2"); + } + + palong = paend - pafrist; + if (Curser < LINE_HEAD) { + Curser = palong; + } else if (Curser > palong) { + Curser = LINE_HEAD; + } + Print_Curser(Curser, Curser_Last, RGB565_PURPLE); + for (int16 i = 0; i < palong; i++) { + ips200_show_string(20, i * 18 + 20, Param_Data[i + pafrist].text); + if (Param_Data[i].type == EINT32) + ips200_show_int(60, i * 18 + 20, *((int32 *)(Param_Data[i + pafrist].p_data)), 5); + else if (Param_Data[i].type == EFLOAT) + ips200_show_float(60, i * 18 + 20, *((float *)(Param_Data[i + pafrist].p_data)), 4, 5); + } + ips200_show_int(50, palong * 18 + 20, index_power, 5); +} + +/** + * @brief 页面退出事件 + * @param 无 + * @retval 无 + */ +static void Exit() +{ +} + +/** + * @brief 页面循环执行的内容 + * @param 无 + * @retval 无 + */ +static void Loop() +{ +} +/** + * @brief 页面事件 + * @param btn:发出事件的按键 + * @param event:事件编号 + * @retval 无 + */ +static void Event(page_event event) +{ + + if (0 == event_flag) { + + Curser_Last = Curser; + if (page_event_forward == event) { + Curser++; // 光标上移 + } else if (page_event_backward == event) { + Curser--; // 光标下移 + } else if (page_event_press_short == event) { + event_flag = 1; // 选中参数 + Print_Curser(Curser, Curser_Last, RGB565_RED); + return; + } else if (page_event_press_long == event) { + jj_param_write(); + Page_Shift(page_menu); + return; + } + if (Curser < LINE_HEAD) { + Curser = palong; + } else if (Curser > palong) { + Curser = LINE_HEAD; + } + Print_Curser(Curser, Curser_Last, RGB565_PURPLE); + } else if (1 == event_flag) { + if (page_event_forward == event) { + switch (Param_Data[Curser + pafrist - 1].type) { + case EFLOAT: + *((float *)(Param_Data[Curser + pafrist - 1].p_data)) += powf(10, index_power); + break; + case EINT32: + *((int32 *)(Param_Data[Curser + pafrist - 1].p_data)) += 1; + break; + case EUINT32: + *((uint32 *)(Param_Data[Curser + pafrist - 1].p_data)) += 1; + break; + default: + break; + } + } else if (page_event_backward == event) { + switch (Param_Data[Curser + pafrist - 1].type) { + case EFLOAT: + *((float *)(Param_Data[Curser + pafrist - 1].p_data)) -= powf(10.0f, (float)index_power); + break; + case EINT32: + *((int32 *)(Param_Data[Curser + pafrist - 1].p_data)) -= 1; + break; + case EUINT32: + *((uint32 *)(Param_Data[Curser + pafrist - 1].p_data)) -= 1; + break; + default: + break; + } + } else if (page_event_press_short == event) { + index_power++; + if (index_power > 2) { + index_power = -2; + } + ips200_show_int(50, palong * 18 + 20, index_power, 5); + } else if (page_event_press_long == event) { + event_flag = 0; + Print_Curser(Curser, Curser_Last, RGB565_PURPLE); + } + if (EINT32 == Param_Data[Curser + pafrist - 1].type) + ips200_show_int(60, Curser * 18 + 2, *((int32 *)(Param_Data[Curser + pafrist - 1].p_data)), 5); + else if (EUINT32 == Param_Data[Curser + pafrist - 1].type) + ips200_show_uint(60, Curser * 18 + 2, *((int32 *)(Param_Data[Curser + pafrist - 1].p_data)), 5); + else if (EFLOAT == Param_Data[Curser + pafrist - 1].type) + ips200_show_float(60, Curser * 18 + 2, *((float *)(Param_Data[Curser + pafrist - 1].p_data)), 4, 5); + } +} + +/** + * @brief 页面注册函数 + * + * @param pageID + */ +void PageRegister_page_param2(unsigned char pageID) +{ + Page_Register(pageID, Setup, Loop, Exit, Event); +} \ No newline at end of file diff --git a/app/tiny_frame/by_tiny_frame_config.h b/app/tiny_frame/by_tiny_frame_config.h index ebc3549..0cb1a78 100644 --- a/app/tiny_frame/by_tiny_frame_config.h +++ b/app/tiny_frame/by_tiny_frame_config.h @@ -3,15 +3,15 @@ #define BY_TF_DEBUG (1) -#define BY_TF_UART_TX_PIN (UART3_MAP0_TX_B10) -#define BY_TF_UART_RX_PIN (UART3_MAP0_RX_B11) -#define BY_TF_UART_INDEX (UART_3) +#define BY_TF_UART_TX_PIN (UART2_MAP0_TX_A2) +#define BY_TF_UART_RX_PIN (UART2_MAP0_RX_A3) +#define BY_TF_UART_INDEX (UART_2) #define BY_TF_UART_BAUDRATE (115200) #define BY_TF_PARSE_BUFFER_SIZE (50) // 注释此项则为主机,否则为从机 -#define BY_TF_DEVICE_SLAVE +//#define BY_TF_DEVICE_SLAVE /********** 从机模式配置选项 **********/ #if defined(BY_TF_DEVICE_SLAVE) diff --git a/app/tiny_frame/by_tiny_frame_slave_read_write.c b/app/tiny_frame/by_tiny_frame_slave_read_write.c index 9883ce6..a49649f 100644 --- a/app/tiny_frame/by_tiny_frame_slave_read_write.c +++ b/app/tiny_frame/by_tiny_frame_slave_read_write.c @@ -3,6 +3,8 @@ #include "by_tiny_frame_parse.h" #include "by_tiny_frame_pack.h" +#include "jj_param.h" + void by_tiny_frame_read_write_run(void) { // empty @@ -10,35 +12,35 @@ void by_tiny_frame_read_write_run(void) void by_tiny_frame_read_write_handle(by_tf_parse_frame_t frame_s, uint8_t status) { - by_tf_pack_frame_t frame_pack_s; +// by_tf_pack_frame_t frame_pack_s; - frame_pack_s.slave_id = BY_TF_DEVICE_SLAVE_ADDRESS; - frame_pack_s.cmd = frame_s.cmd; - frame_pack_s.reg_addr = frame_s.reg_addr; +// frame_pack_s.slave_id = BY_TF_DEVICE_SLAVE_ADDRESS; +// frame_pack_s.cmd = frame_s.cmd; +// frame_pack_s.reg_addr = frame_s.reg_addr; - if (status) { - // 接收出错,一般为 CRC 校验错误 - return; - } +// if (status) { +// // 接收出错,一般为 CRC 校验错误 +// return; +// } - switch (frame_s.cmd) { - case 0x03: - // 添加查询接口,操作完成后应答 - frame_pack_s.data = 0XFFFFFFFF; // 示例 - by_tiny_frame_pack_send(&frame_pack_s); - break; - case 0x06: - // 添加写入接口,操作完成后应答 - frame_pack_s.data = frame_s.data; - by_tiny_frame_pack_send(&frame_pack_s); - break; - default: - break; - } +// switch (frame_s.cmd) { +// case 0x03: +// // 添加查询接口,操作完成后应答,主机接收,即读取 +// frame_pack_s.data =(uint32_t)(addre[frame_pack_s.reg_addr]); +// by_tiny_frame_pack_send(&frame_pack_s); +// break; +// case 0x06: +// // 添加写入接口,操作完成后应答,主机发送,即写入 +// *addre[frame_pack_s.reg_addr] = frame_pack_s.data; +// by_tiny_frame_pack_send(&frame_pack_s); +// break; +// default: +// break; +// } -#if (BY_TF_DEBUG) - printf("****** EXECUTE CMD SUCCESSFUL ******\r\n"); - printf("Device ID: 0x%0.2X\r\n", BY_TF_DEVICE_SLAVE_ADDRESS); - printf("--cmd: %0.2X\n--reg_addr: %0.4X\n--data: %0.8X\r\n", frame_s.cmd, frame_s.reg_addr, frame_s.data); -#endif +// #if (BY_TF_DEBUG) +// printf("****** EXECUTE CMD SUCCESSFUL ******\r\n"); +// printf("Device ID: 0x%0.2X\r\n", BY_TF_DEVICE_SLAVE_ADDRESS); +// printf("--cmd: %0.2X\n--reg_addr: %0.4X\n--data: %0.8X\r\n", frame_s.cmd, frame_s.reg_addr, frame_s.data); +// #endif } diff --git a/libraries/zf_device/zf_device_k24c02.h b/libraries/zf_device/zf_device_k24c02.h index b8f479c..f4ca366 100644 --- a/libraries/zf_device/zf_device_k24c02.h +++ b/libraries/zf_device/zf_device_k24c02.h @@ -55,7 +55,7 @@ //==================================================== IIC ==================================================== #define K24C02_SOFT_IIC_DELAY (500) // IIC ʱʱ ֵԽС IIC ͨԽ #define K24C02_SCL_PIN (D13) // IIC SCL K24C02 SCL -#define K24C02_SDA_PIN (D14) // IIC SDA K24C02 SDA +#define K24C02_SDA_PIN (D12) // IIC SDA K24C02 SDA //==================================================== IIC ==================================================== #else //====================================================Ӳ IIC ==================================================== diff --git a/libraries/zf_device/zf_device_mt9v03x_dvp.h b/libraries/zf_device/zf_device_mt9v03x_dvp.h index c1b8d56..14890a2 100644 --- a/libraries/zf_device/zf_device_mt9v03x_dvp.h +++ b/libraries/zf_device/zf_device_mt9v03x_dvp.h @@ -95,7 +95,7 @@ #define MT9V03X_IMAGE_SIZE ( MT9V03X_W * MT9V03X_H ) // ͼСܳ 65535 #define MT9V03X_COF_BUFFER_SIZE ( 64 ) // ôڻС 64 -#define MT9V03X_AUTO_EXP_DEF (0 ) // Զع ĬϲԶع Χ [0-63] 0 Ϊر +#define MT9V03X_AUTO_EXP_DEF (0 ) // Զع ĬϲԶع Χ [0-63] 0 Ϊر // Զع⿪ EXP_TIME Զعʱ // һDzҪԶع ߷dzȵԳԶع⣬ͼȶ #define MT9V03X_EXP_TIME_DEF (512) // عʱ ͷյԶعʱ䣬ùΪعֵ @@ -104,7 +104,7 @@ // ͷƫݺԶƫƣüƫ #define MT9V03X_UD_OFFSET_DEF (0 ) // ͼƫ ֵ ƫ ֵ ƫ Ϊ 120 240 480 ʱ޷ƫ // ͷƫݺԶƫƣüƫ -#define MT9V03X_GAIN_DEF (32 ) // ͼ Χ [16-64] عʱ̶¸ıͼ̶ +#define MT9V03X_GAIN_DEF (64 ) // ͼ Χ [16-64] عʱ̶¸ıͼ̶ #define MT9V03X_PCLK_MODE_DEF (1 ) // ʱģʽ Χ [0-1] Ĭϣ0 ѡΪ[0źţ1ź] // ͨΪ 0ʹ CH32V307 DVP ӿڻ STM32 DCMI ӿڲɼҪΪ 1 // MT9V034 V1.5 Լϰ汾ָ֧ diff --git a/libraries/zf_driver/zf_driver_soft_iic.c b/libraries/zf_driver/zf_driver_soft_iic.c index 61094df..7f322e2 100644 --- a/libraries/zf_driver/zf_driver_soft_iic.c +++ b/libraries/zf_driver/zf_driver_soft_iic.c @@ -709,3 +709,33 @@ void soft_iic_init (soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay gpio_init(scl_pin, GPO, GPIO_HIGH, GPO_PUSH_PULL); // ȡӦIO AFܱ gpio_init(sda_pin, GPO, GPIO_HIGH, GPO_OPEN_DTAIN); // ȡӦIO AFܱ } +void eep_soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, uint8 *data, uint32 len) +{ + zf_assert(soft_iic_obj != NULL); + zf_assert(data != NULL); + soft_iic_start(soft_iic_obj); + soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1); + soft_iic_send_data(soft_iic_obj, register_name_h); + soft_iic_send_data(soft_iic_obj, register_name_l); + soft_iic_start(soft_iic_obj); + soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01); + while(len --) + { + *data ++ = soft_iic_read_data(soft_iic_obj, len == 0); + } + soft_iic_stop(soft_iic_obj); +} +void eep_soft_iic_write_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h,const uint8 register_name_l, const uint8 *data, uint32 len) +{ + zf_assert(soft_iic_obj != NULL); + zf_assert(data != NULL); + soft_iic_start(soft_iic_obj); + soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1); + soft_iic_send_data(soft_iic_obj, register_name_h); + soft_iic_send_data(soft_iic_obj, register_name_l); + while(len --) + { + soft_iic_send_data(soft_iic_obj, *data ++); + } + soft_iic_stop(soft_iic_obj); +} \ No newline at end of file diff --git a/libraries/zf_driver/zf_driver_soft_iic.h b/libraries/zf_driver/zf_driver_soft_iic.h index 1323324..5a9be20 100644 --- a/libraries/zf_driver/zf_driver_soft_iic.h +++ b/libraries/zf_driver/zf_driver_soft_iic.h @@ -1,83 +1,83 @@ /********************************************************************************************************************* -* CH32V307VCT6 Opensourec Library CH32V307VCT6 Դ⣩һڹٷ SDK ӿڵĵԴ -* Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļCH32V307VCT6 Դһ -* -* CH32V307VCT6 Դ -* Ըᷢ GPLGNU General Public License GNUͨù֤ -* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* -* Դķϣܷãδκεı֤ -* ûԻʺض;ı֤ -* ϸμ GPL -* -* ӦյԴͬʱյһ GPL ĸ -* ûУ -* -* ע -* Դʹ GPL3.0 Դ֤Э Ϊİ汾 -* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ -* ֤ libraries ļ ļµ LICENSE ļ -* ӭλʹò ޸ʱ뱣ɿƼİȨ -* -* ļ zf_driver_soft_iic -* ˾ ɶɿƼ޹˾ -* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* MounRiver Studio V1.8.1 -* ƽ̨ CH32V307VCT6 -* https://seekfree.taobao.com/ -* -* ޸ļ¼ -* ע -* 2022-09-15 W first version -********************************************************************************************************************/ + * CH32V307VCT6 Opensourec Library CH32V307VCT6 Դ⣩һڹٷ SDK ӿڵĵԴ + * Copyright (c) 2022 SEEKFREE ɿƼ + * + * ļCH32V307VCT6 Դһ + * + * CH32V307VCT6 Դ + * Ըᷢ GPLGNU General Public License GNUͨù֤ + * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ + * + * Դķϣܷãδκεı֤ + * ûԻʺض;ı֤ + * ϸμ GPL + * + * ӦյԴͬʱյһ GPL ĸ + * ûУ + * + * ע + * Դʹ GPL3.0 Դ֤Э Ϊİ汾 + * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ + * ֤ libraries ļ ļµ LICENSE ļ + * ӭλʹò ޸ʱ뱣ɿƼİȨ + * + * ļ zf_driver_soft_iic + * ˾ ɶɿƼ޹˾ + * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ + * MounRiver Studio V1.8.1 + * ƽ̨ CH32V307VCT6 + * https://seekfree.taobao.com/ + * + * ޸ļ¼ + * ע + * 2022-09-15 W first version + ********************************************************************************************************************/ #ifndef _zf_driver_soft_iic_h_ #define _zf_driver_soft_iic_h_ - #include "zf_driver_gpio.h" typedef struct { - gpio_pin_enum scl_pin; // ڼ¼Ӧű - gpio_pin_enum sda_pin; // ڼ¼Ӧű - uint8 addr; // ַ λַģʽ - uint32 delay; // ģ IIC ʱʱ -}soft_iic_info_struct; + gpio_pin_enum scl_pin; // ڼ¼Ӧű + gpio_pin_enum sda_pin; // ڼ¼Ӧű + uint8 addr; // ַ λַģʽ + uint32 delay; // ģ IIC ʱʱ +} soft_iic_info_struct; -void soft_iic_write_8bit (soft_iic_info_struct *soft_iic_obj, const uint8 data); -void soft_iic_write_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len); +void soft_iic_write_8bit(soft_iic_info_struct *soft_iic_obj, const uint8 data); +void soft_iic_write_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len); -void soft_iic_write_16bit (soft_iic_info_struct *soft_iic_obj, const uint16 data); -void soft_iic_write_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len); +void soft_iic_write_16bit(soft_iic_info_struct *soft_iic_obj, const uint16 data); +void soft_iic_write_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len); -void soft_iic_write_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data); -void soft_iic_write_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len); +void soft_iic_write_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data); +void soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len); -void soft_iic_write_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data); -void soft_iic_write_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len); +void soft_iic_write_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data); +void soft_iic_write_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len); -uint8 soft_iic_read_8bit (soft_iic_info_struct *soft_iic_obj); -void soft_iic_read_8bit_array (soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len); +uint8 soft_iic_read_8bit(soft_iic_info_struct *soft_iic_obj); +void soft_iic_read_8bit_array(soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len); -uint16 soft_iic_read_16bit (soft_iic_info_struct *soft_iic_obj); -void soft_iic_read_16bit_array (soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len); +uint16 soft_iic_read_16bit(soft_iic_info_struct *soft_iic_obj); +void soft_iic_read_16bit_array(soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len); -uint8 soft_iic_read_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name); -void soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len); +uint8 soft_iic_read_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name); +void soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len); -uint16 soft_iic_read_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name); -void soft_iic_read_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len); +uint16 soft_iic_read_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name); +void soft_iic_read_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len); -void soft_iic_transfer_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len); -void soft_iic_transfer_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len); +void soft_iic_transfer_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len); +void soft_iic_transfer_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len); -void soft_iic_sccb_write_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data); -uint8 soft_iic_sccb_read_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name); +void soft_iic_sccb_write_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data); +uint8 soft_iic_sccb_read_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name); -void soft_iic_init (soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin); +void soft_iic_init(soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin); +void eep_soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, const uint8 *data, uint32 len); +void eep_soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, uint8 *data, uint32 len); #endif -