diff --git a/Example/Coreboard_Demo/E00【必读】例程功能说明.xlsx.lnk b/Example/Coreboard_Demo/E00【必读】例程功能说明.xlsx.lnk deleted file mode 100644 index ef0f3e0..0000000 Binary files a/Example/Coreboard_Demo/E00【必读】例程功能说明.xlsx.lnk and /dev/null differ diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E01_gpio_demo/libraries/doc/version.txt index 1e222a3..8ce85ca 100644 --- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/doc/version.txt +++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/doc/version.txt @@ -1,3 +1,13 @@ +V3.4.4 + SCC8660ʽ + ָV2 + ޸ips200ʾscc8660ͷʽ + ޸ips114ʾscc8660ͷʽ +V3.4.3 + 660RC +V3.4.2 + ޸printfضеĺ궨 + WIFI_SPI V3.4.1 ޸Ĵڷ麯еķ ޸ips200proע diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h index 27b7965..e8d6021 100644 --- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h @@ -91,6 +91,7 @@ #include "zf_device_imu660ra.h" #include "zf_device_imu660rb.h" #include "zf_device_imu660rx.h" +#include "zf_device_imu660rc.h" #include "zf_device_imu963ra.h" #include "zf_device_ips114.h" #include "zf_device_ips200.h" diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/printf_redirect.c index c44d826..299da76 100644 --- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/printf_redirect.c +++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/printf_redirect.c @@ -45,7 +45,7 @@ //------------------------------------------------------------------------------------------------------------------- int fputc(int ch, FILE *stream) { - uart_write_byte(DEBUG_UART_INDEX, (char)ch); + uart_write_byte(PRINTF_USE_UART, (char)ch); return (ch); } @@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len) int fgetc(FILE *f) { #if PRINTF_OUTPUT_TYPE == 0 - return uart_read_byte(DEBUG_UART_INDEX); + return uart_read_byte(PRINTF_USE_UART); #else uint8 buf; wifi_spi_read_buffer(&buf, 1); diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant.c index 231b20d..3e9ec74 100644 --- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,423 +24,519 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_debug.h" #include "seekfree_assistant.h" +// ͨö +typedef enum +{ + SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 , + SEEKFREE_ASSISTANT_SEND_CAMERA_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD , -extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); -extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); + SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 , -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) + SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 , +}seekfree_assistant_cmd_type_enum; + +#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ +#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ + +// ݷͺָ +extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); +seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + +// ݽպָ +extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); +seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) #include "zf_common_fifo.h" -static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO -static fifo_struct seekfree_assistant_fifo = // FIFOṹ +static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE]; +static fifo_struct seekfree_assistant_debug_param_fifo = { - .buffer = seekfree_assistant_buffer, + .buffer = seekfree_assistant_debug_param_buffer, .execution = FIFO_IDLE, .type = FIFO_DATA_8BIT, .head = 0, .end = 0, - .size = SEEKFREE_ASSISTANT_BUFFER_SIZE, - .max = SEEKFREE_ASSISTANT_BUFFER_SIZE, -}; + .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, + .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, +}; #endif -static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ -static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ -static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ - -seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ -seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ - -seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ -vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ - //------------------------------------------------------------------------------------------------------------------- // ͺ -// ˵ *buffer ҪУݵַ -// ˵ length У鳤 -// ز uint8 ֵ +// ˵ *buffer ҪУݵַ +// ˵ length У鳤 +// ز uint8 ֵ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length) +static uint8 seekfree_assistant_sum (void *buffer, uint32 length) { uint8 temp_sum = 0; + uint8 *ptr = (uint8 *)buffer; while(length--) { - temp_sum += *buffer++; + temp_sum += *ptr ++; } return temp_sum; } //------------------------------------------------------------------------------------------------------------------- -// ͼͺ -// ˵ camera_type ͷ -// ˵ *image_addr ͼ׵ַ -// ˵ boundary_num ͼа߽ -// ˵ width ͼ -// ˵ height ͼ߶ +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ // ز void -// ʹʾ +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height) +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer) { - uint32 image_size = 0; + zf_assert(NULL != ccd_obj); + zf_assert(NULL != data_buffer); - seekfree_assistant_camera_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_data.function = SEEKFREE_ASSISTANT_CAMERA_FUNCTION; - seekfree_assistant_camera_data.camera_type = (camera_type << 5) | ((image_addr != NULL ? 0 : 1) << 4) | boundary_num; - // дϢЭ鲿 - seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct); - seekfree_assistant_camera_data.image_width = width; - seekfree_assistant_camera_data.image_height = height; + memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct)); + ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD; + ccd_obj->config.channel_index = channel_index; - // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct)); - - // ͷͼͼС - switch(camera_type) + uint16 data_max = 256; + uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT; + loop_count = (2 >= loop_count) ? (loop_count) : (2); + for(uint8 i = 0; loop_count > i; i ++) { - case SEEKFREE_ASSISTANT_OV7725_BIN: - { - image_size = width * height / 8; - }break; - - case SEEKFREE_ASSISTANT_MT9V03X: - { - image_size = width * height; - }break; - - case SEEKFREE_ASSISTANT_SCC8660: - { - image_size = width * height * 2; - }break; + data_max *= 4; } - // ͼ - if(NULL != image_addr) + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF); + #else + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + ccd_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + ccd_obj->config.data_type = data_type; + } + + // ¼ʵֽ uint16 Ҫݳ + ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1)); + // Ȼ¼Ӧݻ + ccd_obj->data_buffer = data_buffer; + + // У + ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.check_sum += seekfree_assistant_sum( + &(ccd_obj->config.cmd), + sizeof(ccd_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)ccd_obj, + sizeof(ccd_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(ccd_obj->data_buffer), + ccd_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer) +{ + zf_assert(NULL != camera_obj); + + memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct)); + camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD; + camera_obj->config.camera_type = camera_type; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF); + #else + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type + && NULL != data_buffer) { - seekfree_assistant_transfer_callback(image_addr, image_size); + camera_obj->config.data_type = 0x02; + } + else + { + camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01); + } + + // RGB565 ͼ ôֽ + camera_obj->buffer_byte_size = + image_width * image_height + * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1)); + camera_obj->buffer_byte_size = + (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type) + ? (camera_obj->buffer_byte_size / 8) + : (camera_obj->buffer_byte_size); + camera_obj->data_buffer = data_buffer; + + // У + camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.check_sum += seekfree_assistant_sum( + &(camera_obj->config.cmd), + sizeof(camera_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_obj, + sizeof(camera_obj->config)); + if(NULL != camera_obj->data_buffer) + { + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_obj->data_buffer), + camera_obj->buffer_byte_size); } } //------------------------------------------------------------------------------------------------------------------- -// ͼ߻ƺ -// ˵ boundary_id ID -// ˵ dot_num -// ˵ *dot_x ׵ַ -// ˵ *dot_y ׵ַ -// ˵ width ͼ -// ˵ height ͼ߶ +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 // ز void -// ʹʾ +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer) +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer) { - uint8 i; - uint16 dot_bytes = 0; // ֽ + zf_assert(NULL != camera_boundary_obj); + zf_assert(NULL != data_buffer); - dot_bytes = seekfree_assistant_camera_dot_data.dot_num; + memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct)); + camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD; - if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5)) - { - dot_bytes *= 2; + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + camera_boundary_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + camera_boundary_obj->config.data_type = data_type; } - // ȷ֡ͷܡ߽š곤ȡ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct)); + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif - for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++) - { - // жǷͺ - if(NULL != buffer->boundary_x[i]) - { - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes); - } + camera_boundary_obj->buffer_byte_size = + boundary_lenght * 2 + * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2)); + camera_boundary_obj->data_buffer = data_buffer; - // жǷ - if(NULL != buffer->boundary_y[i]) - { - // ûݣʾÿһֻһ߽ - // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣 - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes); - } - } + // У + camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.check_sum += seekfree_assistant_sum( + &(camera_boundary_obj->config.cmd), + sizeof(camera_boundary_obj->config) - 2); } //------------------------------------------------------------------------------------------------------------------- -// ʾͺ +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_boundary_obj, + sizeof(camera_boundary_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_boundary_obj->data_buffer), + camera_boundary_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color) +{ + seekfree_assistant_camera_rectangular_struct camera_rectangular_obj; + memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct)); + camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif + + // У + camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.check_sum += seekfree_assistant_sum( + &(camera_rectangular_obj.cmd), + sizeof(camera_rectangular_obj) - 2); + + seekfree_assistant_transfer_callback( + (const uint8 *)&camera_rectangular_obj, + sizeof(camera_rectangular_obj)); +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer) +{ + zf_assert(NULL != oscilloscope_obj); + zf_assert(NULL != data_buffer); + + memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct)); + oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD; + oscilloscope_obj->config.channel_max = + (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max) + ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX) + : ((0 == channel_max) ? (1) : (channel_max)); + oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00); + oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4; + oscilloscope_obj->data_buffer = data_buffer; +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ // ˵ *seekfree_assistant_oscilloscope ʾݽṹ // ز void // ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope) +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj) { - uint8 packet_size; - - // λ - seekfree_assistant_oscilloscope->channel_num &= 0x0f; - - zf_assert(SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT >= seekfree_assistant_oscilloscope->channel_num); - - // ֡ͷ - seekfree_assistant_oscilloscope->head = SEEKFREE_ASSISTANT_SEND_HEAD; - - // дϢ - packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4; - seekfree_assistant_oscilloscope->length = packet_size; - - // д빦ͨ - seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE; - // У - seekfree_assistant_oscilloscope->check_sum = 0; - seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size); + oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + &(oscilloscope_obj->config.cmd), + sizeof(oscilloscope_obj->config) - 2); + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + (oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); - // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[] - - seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size); + seekfree_assistant_transfer_callback( + (const uint8 *)oscilloscope_obj, + sizeof(oscilloscope_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); } +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) //------------------------------------------------------------------------------------------------------------------- -// ͼϢú -// ˵ camera_type ͼ -// ˵ image_addr ͼַ NULLʾֻͱϢλ -// ˵ width ͼ -// ˵ height ͼ߶ +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ // ز void -// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H); -// עϢ +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height) +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj) { - seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION; - // дϢ - seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct); + zf_assert(NULL != debug_param_obj); - seekfree_assistant_camera_buffer.camera_type = camera_type; - seekfree_assistant_camera_buffer.image_addr = image_addr; - seekfree_assistant_camera_buffer.width = width; - seekfree_assistant_camera_buffer.height = height; -} + seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ + uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ + uint8 temp_sum = 0xFF; // Уʱ + uint32 read_length = 0; // ȡʱ -//------------------------------------------------------------------------------------------------------------------- -// ͼ߷ú -// ˵ boundary_type ߽ -// ˵ dot_num һ߽жٸ -// ˵ dot_x1 ű1ĵַ NULLʾͱ1 -// ˵ dot_x2 ű2ĵַ NULLʾͱ2 -// ˵ dot_x3 ű3ĵַ NULLʾͱ3 -// ˵ dot_y1 ű1ĵַ NULLʾͱ1 -// ˵ dot_y2 ű2ĵַ NULLʾͱ2 -// ˵ dot_y3 ű3ĵַ NULLʾͱ3 -// ز void -// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк -// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ -// ʹʾ seekfree_assistant_camera_config(XY_BOUNDARY, 160, xy_x1_boundary, xy_x2_boundary, xy_x3_boundary, xy_y1_boundary, xy_y2_boundary, xy_y3_boundary); // ͼʱߣ߰ -// עϢ -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3) -{ - uint8 i = 0; - uint8 boundary_num = 0; - uint8 boundary_data_type = 0; - - // ͼͻǷ׼, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_dot_data.dot_num = dot_num; - seekfree_assistant_camera_dot_data.valid_flag = 0; - for(i = 0; i < 3; i++) - { - seekfree_assistant_camera_buffer.boundary_x[i] = NULL; - seekfree_assistant_camera_buffer.boundary_y[i] = NULL; - } - - switch(boundary_type) - { - case X_BOUNDARY: - { - if(NULL != dot_x1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x1; - } - if(NULL != dot_x2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x2; - } - if(NULL != dot_x3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x3; - } - - if(255 < seekfree_assistant_camera_buffer.height) - { - boundary_data_type = 1; - } - }break; - - case Y_BOUNDARY: - { - if(NULL != dot_y1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if(NULL != dot_y2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if(NULL != dot_y3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if(255 < seekfree_assistant_camera_buffer.width) - { - boundary_data_type = 1; - } - }break; - - case XY_BOUNDARY: - { - if((NULL != dot_x1) && (NULL != dot_y1)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if((NULL != dot_x2) && (NULL != dot_y2)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if((NULL != dot_x3) && (NULL != dot_y3)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x3; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if((255 < seekfree_assistant_camera_buffer.width) || (255 < seekfree_assistant_camera_buffer.height)) - { - boundary_data_type = 1; - } - }break; - - case NO_BOUNDARY:break; - } - - seekfree_assistant_camera_dot_data.dot_type = (boundary_type << 6) | (boundary_data_type << 5) | boundary_num; -} - -//------------------------------------------------------------------------------------------------------------------- -// ַͷͼ -// ˵ void -// ز void -// ʹʾ -// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_send (void) -{ - // ͼͻǷ׼ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_data_send(seekfree_assistant_camera_buffer.camera_type, seekfree_assistant_camera_buffer.image_addr, seekfree_assistant_camera_dot_data.dot_type & 0x0f, seekfree_assistant_camera_buffer.width, seekfree_assistant_camera_buffer.height); - - if(seekfree_assistant_camera_dot_data.dot_type & 0x0f) - { - seekfree_assistant_camera_dot_send(&seekfree_assistant_camera_buffer); - } -} - - -//------------------------------------------------------------------------------------------------------------------- -// ֽյ -// ˵ void -// ز void -// ʹʾ ֻҪŵеPITжϻѭ -//------------------------------------------------------------------------------------------------------------------- -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) -void seekfree_assistant_data_analysis (void) -{ - uint8 temp_sum; - uint32 read_length; - seekfree_assistant_parameter_struct *receive_packet; - - // ʹuint32ж壬ĿΪ˱ֽ֤ڶ - uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4]; - - // Զȡ, ԶĴ䷽ʽӽջصжȡ - read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE); + // Զȡһݰ + // ԶĴ䷽ʽӽջصжȡ + read_length = seekfree_assistant_receive_callback( + debug_param_cmd_pointer, + sizeof(seekfree_assistant_debug_param_cmd_struct)); if(read_length) - { - // ȡдFIFO - fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length); + { // ȡдFIFO + fifo_write_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + read_length); } - while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo)) - { - read_length = sizeof(seekfree_assistant_parameter_struct); - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_ONLY); + while( sizeof(seekfree_assistant_debug_param_cmd_struct) + <= fifo_used(&seekfree_assistant_debug_param_fifo)) + { // FIFO һݰ ôͽн + // ֱӶһݰ + read_length = sizeof(seekfree_assistant_debug_param_cmd_struct); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_ONLY); - if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0]) - { - // û֡ͷFIFOȥһ - read_length = 1; - } - else - { - // ҵ֡ͷ - receive_packet = (seekfree_assistant_parameter_struct *)temp_buffer; - temp_sum = receive_packet->check_sum; - receive_packet->check_sum = 0; - if(temp_sum == seekfree_assistant_sum((uint8 *)temp_buffer, sizeof(seekfree_assistant_parameter_struct))) - { - // Уɹ - seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data; - seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1; + if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0] + && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2]) + { // ֱƥ֡ͷ ҹҲƥ + temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ + debug_param_cmd_obj.check_sum = 0; // հУֵ У + if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct))) + { // Уɹ + debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float; + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0]; + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + #endif + debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1; + temp_sum = 0x00; } else - { - read_length = 1; + { // Уƥ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + } + else + { // ƥ䲻֡ͷ͹ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + + if(0xFF == temp_sum) + { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ + for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++) + { // Ϊȡһ һ + if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length]) + { // ҵ¸֡ͷ˳ + break; + } } } // ʹõ - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_AND_CLEAN); } } #endif - - - diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant.h index 5b7e1b5..937f784 100644 --- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,142 +24,292 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ - #include "zf_common_typedef.h" +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 , + SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 , +}seekfree_assistant_data_type_enum; -// 1ʹܲڵĹ 0رղڵĹ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 ) - - - -// FIFOС -#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) - -// ʾͨ -#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) - -// Եͨ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) - -// ͼ -#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) - -// Ƭλ͵֡ͷ -#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) - -// ͷ -#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) -#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) -#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) - -// λƬ͵֡ͷ -#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) - -// -#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) - +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ +}seekfree_assistant_ccd_resolution_enum; // ͷö typedef enum { - // ͷͺŶ - SEEKFREE_ASSISTANT_OV7725_BIN = 1, - SEEKFREE_ASSISTANT_MT9V03X, - SEEKFREE_ASSISTANT_SCC8660, - // ͼͶ - SEEKFREE_ASSISTANT_BINARY = 1, - SEEKFREE_ASSISTANT_GRAY, - SEEKFREE_ASSISTANT_RGB565, -}seekfree_assistant_image_type_enum; + SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY , + SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 , -// ͷö -typedef enum -{ - // ͷͺŶ - X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ - Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ - XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ - NO_BOUNDARY, // ͵ͼûбϢ -}seekfree_assistant_boundary_type_enum; + // ͷͺƥ䶨 + SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X , + SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 , +}seekfree_assistant_camera_type_enum; + +#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨 + +#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ +#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤ + +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС +#endif typedef struct { - uint8 head; // ֡ͷ - uint8 channel_num; // λΪ λΪͨ - uint8 check_sum; // У - uint8 length; // - float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + uint8 data_lenght_buffer[2] ; // CCD ݳ + uint8 channel_color_buffer[2] ; // ͨɫ + uint8 channel_data_max[2] ; // ֵͨ + uint8 data_type ; // ȷϴС + uint8 reserve ; // + }config; + uint16 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_ccd_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 camera_type ; // ͷ + uint8 image_width_buffer[2] ; // ͼ + uint8 image_height_buffer[2] ; // ͼ߶ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 data_type ; // ȷϴС + uint8 boundary_lenght_buffer[2] ; // ߳ + uint8 color_buffer[2] ; // ͨɫ + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_boundary_struct; + +typedef struct +{ + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 reserve ; // + uint8 x_axis_buffer[2] ; // X + uint8 y_axis_buffer[2] ; // Y + uint8 width_buffer[2] ; // ο + uint8 height_buffer[2] ; // θ߶ + uint8 color_buffer[2] ; // ɫ +}seekfree_assistant_camera_rectangular_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_max ; // ͨ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ }seekfree_assistant_oscilloscope_struct; +typedef union +{ + uint8 data_uint8[4] ; + float data_float ; +}seekfree_assistant_param_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ - uint8 length; // ȣЭ鲿֣ - uint16 image_width; // ͼ - uint16 image_height; // ͼ߶ -}seekfree_assistant_camera_struct; - - -typedef struct -{ - uint8 head; // ֡ͷ - uint8 function; // - uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽ - uint8 length; // ȣЭ鲿֣ - uint16 dot_num; // - uint8 valid_flag; // ͨʶ - uint8 reserve; // -}seekfree_assistant_camera_dot_struct; - -typedef struct -{ - void *image_addr; // ͷַ - uint16 width; // ͼ - uint16 height; // ͼ߶ - seekfree_assistant_image_type_enum camera_type; // ͷ - void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ - void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ -}seekfree_assistant_camera_buffer_struct; + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + seekfree_assistant_param_struct dat ; // һ + +}seekfree_assistant_debug_param_cmd_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 channel; // ͨ - uint8 check_sum; // У - float data; // -}seekfree_assistant_parameter_struct; + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint8_struct; + + +typedef struct +{ + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint16_struct; + +typedef struct +{ + float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; + uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; +}seekfree_assistant_debug_param_struct; typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length); typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length); -extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ -extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ - - -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope); -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height); -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3); -void seekfree_assistant_camera_send (void); -void seekfree_assistant_data_analysis (void); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ +// ز void +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, 16] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *seekfree_assistant_oscilloscope ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj); + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj); +#endif #endif diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c index d139201..23205d5 100644 --- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,23 +24,20 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_typedef.h" #include "zf_common_fifo.h" #include "zf_common_debug.h" -#include "zf_driver_uart.h" + #include "zf_device_wireless_uart.h" -#include "zf_device_ble6a20.h" -#include "zf_device_bluetooth_ch9141.h" -#include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" #include "seekfree_assistant.h" @@ -50,7 +47,6 @@ extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ - //------------------------------------------------------------------------------------------------------------------- // ַͺ // ˵ *buff Ҫ͵ݵַ @@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv // ز uint32 ʣδݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) +uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݷ͹ @@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) // ز uint32 յݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) +uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݽչ return 0; @@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) // ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ // ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) +void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) { switch(transfer_device) { case SEEKFREE_ASSISTANT_DEBUG_UART: { -#if DEBUG_UART_USE_INTERRUPT == 1 seekfree_assistant_transfer_callback = debug_send_buffer; seekfree_assistant_receive_callback = debug_read_ring_buffer; -#endif }break; - + case SEEKFREE_ASSISTANT_WIRELESS_UART: { seekfree_assistant_transfer_callback = wireless_uart_send_buffer; seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; - - case SEEKFREE_ASSISTANT_BLE6A20: - { - seekfree_assistant_transfer_callback = ble6a20_send_buffer; - seekfree_assistant_receive_callback = ble6a20_read_buffer; - }break; - case SEEKFREE_ASSISTANT_CH9141: - { - seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; - seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; - }break; - - case SEEKFREE_ASSISTANT_WIFI_UART: - { - seekfree_assistant_transfer_callback = wifi_uart_send_buffer; - seekfree_assistant_receive_callback = wifi_uart_read_buffer; - }break; - + // case SEEKFREE_ASSISTANT_CH9141: + // { + // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; + // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; + // }break; + + // case SEEKFREE_ASSISTANT_WIFI_UART: + // { + // seekfree_assistant_transfer_callback = wifi_uart_send_buffer; + // seekfree_assistant_receive_callback = wifi_uart_read_buffer; + // }break; + case SEEKFREE_ASSISTANT_WIFI_SPI: { seekfree_assistant_transfer_callback = wifi_spi_send_buffer; seekfree_assistant_receive_callback = wifi_spi_read_buffer; }break; - - case SEEKFREE_ASSISTANT_CUSTOM: - { + + default: + { // Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ - + seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + seekfree_assistant_receive_callback = seekfree_assistant_receive; }break; } } - - diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.h index 2ccfd8a..0e28f49 100644 --- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,13 +24,13 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,7 +43,6 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ SEEKFREE_ASSISTANT_WIRELESS_UART, // ת - SEEKFREE_ASSISTANT_BLE6A20, // ת SEEKFREE_ASSISTANT_CH9141, // CH9141 SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_absolute_encoder.h index 1166c84..dc091aa 100644 --- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_absolute_encoder.h +++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_absolute_encoder.h @@ -62,7 +62,7 @@ //==================================================== SPI ==================================================== #else //====================================================Ӳ SPI ==================================================== -#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI +#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI #define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI #define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK #define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI @@ -70,7 +70,7 @@ //====================================================Ӳ SPI ==================================================== #endif -#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ +#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ #define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN))) #define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ble6a20.h index 6f4544a..6af089f 100644 --- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ble6a20.h +++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ble6a20.h @@ -76,7 +76,7 @@ // 1Զ Զʵ޸ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ // Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000 -#define BLE6A20_AUTO_BAUD_RATE ( 0 ) +#define BLE6A20_AUTO_BAUD_RATE ( 1 ) #if (1 == BLE6A20_AUTO_BAUD_RATE) typedef enum diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rc.c new file mode 100644 index 0000000..68840e2 --- /dev/null +++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rc.c @@ -0,0 +1,563 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#include "math.h" +#include "zf_common_debug.h" +#include "zf_driver_delay.h" +#include "zf_driver_spi.h" +#include "zf_driver_gpio.h" +#include "zf_driver_soft_iic.h" +#include "zf_device_config.h" +#include "zf_driver_uart.h" +#include "zf_driver_exti.h" + +#include "zf_device_imu660rc.h" + +#ifndef M_PI +#define M_PI 3.1415926f +#endif + + +static uint8 imu660rc_quarternion_rate; + +float imu660rc_transition_factor[2]; +int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro () +int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ) +float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ +float imu660rc_quarternion[4]; // Ԫ + + + +#if IMU660RC_USE_SOFT_IIC +static soft_iic_info_struct imu660rc_iic_struct; + +#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data))) +#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len))) +#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg))) +#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len))) +#else +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC дĴ +// ˵ reg Ĵַ +// ˵ data +// ز void +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_write_register (uint8 reg, uint8 data) +{ + IMU660RC_CS(0); + spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data); + IMU660RC_CS(1); +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ĵ +// ˵ reg Ĵַ +// ز uint8 +// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_read_register (uint8 reg) +{ + uint8 data; + IMU660RC_CS(0); + data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R); + IMU660RC_CS(1); + return data; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC +// ˵ reg Ĵַ +// ˵ data ݻ +// ˵ len ݳ +// ز void +// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len) +{ + IMU660RC_CS(0); + spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len); + IMU660RC_CS(1); +} +#endif + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC fp16ת +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint32 fp16_to_float(uint16 h) +{ + uint16 h_exp = (h & 0x7c00u); + uint32 f_sgn = ((uint32)h & 0x8000u) << 16; + switch (h_exp) + { + case 0x0000u: // 0 or subnormal + { + uint16 h_sig = (h & 0x03ffu); + // Signed zero + if (h_sig == 0) + { + return f_sgn; + } + // Subnormal + h_sig <<= 1; + while ((h_sig & 0x0400u) == 0) + { + h_sig <<= 1; + h_exp++; + } + uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23; + uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13; + return f_sgn + f_exp + f_sig; + } + case 0x7c00u: // inf or NaN + { + // All-ones exponent and a copy of the significand + return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13); + } + default: // normalized + { + // Just need to adjust the exponent and shift + return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13); + } + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫһ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_normalize(float quat[4], uint16 *fp16) +{ + float n = 0; + float temp[4]; + + *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]); + *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]); + *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]); + *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]); + + n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3]; + n = sqrtf(n); + + if(n > 0.001f) // Խӽ0ֵ + { + n = temp[3] < 0.0f ? -n : n; + + quat[0] = temp[1] / n; + quat[1] = temp[2] / n; + quat[2] = temp[0] / n; + quat[3] = temp[3] / n; + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫתŷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw) +{ + float euler[3]; + + float sqx = quat[0] * quat[0]; + float sqy = quat[1] * quat[1]; + float sqz = quat[2] * quat[2]; + + euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx)); + euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2])); + euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz)); + + // תǶ + euler[0] = 180 * (euler[0]) / M_PI; + euler[1] = 180 * (euler[1]) / M_PI; + euler[2] = 180 * (euler[2]) / M_PI; + + // Ƕȵ + euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2]; + + *roll = euler[0]; + *pitch = euler[1]; + *yaw = euler[2]; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ÷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank) +{ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank); +} + + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Լ +// ˵ void +// ز uint8 1-Լʧ 0-Լɹ +// ʹʾ imu660rc_self_check(); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_self_check (void) +{ + uint8 dat = 0, return_state = 0; + uint16 timeout_count = 0; + do + { + if(IMU660RC_TIMEOUT_COUNT < timeout_count ++) + { + return_state = 1; + break; + } + dat = imu660rc_read_register(IMU660RC_CHIP_ID); + system_delay_ms(1); + }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû⵽豸 + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ٶȼ +// ˵ void +// ز void +// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_acc (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6); + imu660rc_acc_x = dat[0]; + imu660rc_acc_y = dat[1]; + imu660rc_acc_z = dat[2]; + } +} +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC +// ˵ void +// ز void +// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_gyro (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6); + imu660rc_gyro_x = dat[0]; + imu660rc_gyro_y = dat[1]; + imu660rc_gyro_z = dat[2]; + } +} + + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ԪݲתΪŷ +// ˵ void +// ز void +// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı +// עϢ ҪINT2Ŵжϵô˺ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_quarternion(void) +{ + uint8 i; + uint16 buff[4]; + uint8 *buff1_ptr; + int16 *buff2_ptr; + + if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate) + { + buff1_ptr = (uint8 *)buff; + + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x20); + imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31); + + for(i = 0; 8 > i; i++) + { + imu660rc_write_register(0x08, 0x4C + i); + buff1_ptr[i] = imu660rc_read_register(0x09); + } + + imu660rc_write_register(IMU660RC_PAGE_RW, 0x0); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // Ԫһ + quarternion_normalize(imu660rc_quarternion, buff); + // Ԫתŷ + quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw); + + // ȡٶٶϢ + #if(1 == IMU660RC_QUARTERNION_GET_ACC) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6); + imu660rc_acc_x = buff2_ptr[0]; + imu660rc_acc_y = buff2_ptr[1]; + imu660rc_acc_z = buff2_ptr[2]; + } + #endif + #if(1 == IMU660RC_QUARTERNION_GET_GYRO) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6); + imu660rc_gyro_x = buff2_ptr[0]; + imu660rc_gyro_y = buff2_ptr[1]; + imu660rc_gyro_z = buff2_ptr[2]; + } + #endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RCжϻصҪжڶȡԪ +// ˵ void +// ز void +// ʹʾ +// עϢ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_callback(void) +{ + imu660rc_get_quarternion(); + +} + +//------------------------------------------------------------------------------------------------------------------- +// ʼ IMU660RC +// ˵ quarternion_rate ѡԪ +// ز uint8 1-ʼʧ 0-ʼɹ +// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate) +{ + uint8 return_state = 0; + + imu660rc_quarternion_rate = quarternion_rate; + #if IMU660RC_USE_SOFT_IIC + soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿ + + #else + spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿ + gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿ + #endif + + system_delay_ms(10); + + do + { + if(imu660rc_self_check()) // IMU660RC Լ + { + // ˶Ϣ ʾλ + // ô IMU660RC Լʱ˳ + // һ½û ûܾǻ + zf_log(0, "imu660rc self check error."); + return_state = 1; + break; + } + + // λ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04); + system_delay_ms(30); + + // ÿ¹ַ + imu660rc_write_register(IMU660RC_CTRL3, 0x44); + + switch(IMU660RC_ACC_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_ACC_SAMPLE_SGN_2G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x00); + imu660rc_transition_factor[0] = 16393.44; + }break; + case IMU660RC_ACC_SAMPLE_SGN_4G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x01); + imu660rc_transition_factor[0] = 8196.72; + }break; + case IMU660RC_ACC_SAMPLE_SGN_8G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x02); + imu660rc_transition_factor[0] = 4098.36; + }break; + case IMU660RC_ACC_SAMPLE_SGN_16G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x03); + imu660rc_transition_factor[0] = 2049.18; + }break; + } + if(1 == return_state) + { + break; + } + + switch(IMU660RC_GYRO_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_125DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x00); + imu660rc_transition_factor[1] = 228.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_250DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x01); + imu660rc_transition_factor[1] = 114.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_500DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x02); + imu660rc_transition_factor[1] = 57.1428; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_1000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x03); + imu660rc_transition_factor[1] = 28.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_2000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x04); + imu660rc_transition_factor[1] = 14.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_4000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x0C); + imu660rc_transition_factor[1] = 7.14285; + }break; + } + if(1 == return_state) + { + break; + } + + // ôģʽΪ߾ģʽԼ + imu660rc_write_register(IMU660RC_CTRL1, 0x15); + imu660rc_write_register(IMU660RC_CTRL2, 0x18); + + // LPF1˲ + imu660rc_write_register(IMU660RC_CTRL7, 0x01); + + // LPF2˲ + imu660rc_write_register(IMU660RC_CTRL9, 0x08); + + // ԪӦ + if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate) + { + // жϴź + imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80); + imu660rc_write_register(IMU660RC_CTRL4, 0x08); + imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30); + + // üٶȡٶ + imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3)); + imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3)); + + // Ԫʲ + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3)); + imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x00); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // жϼ + exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING); + } + }while(0); + + return return_state; +} + + + + + + + + + + + + + diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rc.h new file mode 100644 index 0000000..dd5a9e3 --- /dev/null +++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rc.h @@ -0,0 +1,211 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#ifndef _zf_device_imu660rc_h_ +#define _zf_device_imu660rc_h_ + +#include "zf_common_typedef.h" + + +// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC +// IMU660RC_USE_SOFT_IICҪȱ벢س򣬵ƬģҪϵͨѶ +#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ + +#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ +//==================================================== IIC ==================================================== +#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ +#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL +#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA +//==================================================== IIC ==================================================== +#else + +//====================================================Ӳ SPI ==================================================== +#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI +#define IMU660RC_SPI (SPI_0) // Ӳ SPI +#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK +#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI +#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO +//====================================================Ӳ SPI ==================================================== +#endif +#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ +#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) ) +#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ + + +#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ +#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ + +typedef enum +{ + IMU660RC_MAIN_MEM_BANK = 0x00, + IMU660RC_HUB_MEM_BANK = 0x40, + IMU660RC_EMBED_MEM_BANK = 0x80, +}imu660rc_mem_bank_enum; + +typedef enum +{ + IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2) + IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G + IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G + IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G +}imu660rc_acc_sample_config; + +typedef enum +{ + IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S) + IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS + IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS + IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS + IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS + IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS +}imu660rc_gyro_sample_config; + +typedef enum +{ + IMU660RC_QUARTERNION_15HZ, // 15 Hz + IMU660RC_QUARTERNION_30HZ, // 30 Hz + IMU660RC_QUARTERNION_60HZ, // 60 Hz + IMU660RC_QUARTERNION_120HZ, // 120Hz + IMU660RC_QUARTERNION_240HZ, // 240Hz + IMU660RC_QUARTERNION_480HZ, // 480Hz + IMU660RC_QUARTERNION_DISABLE, // Ԫ +}imu660rc_quarternion_rate_config; + + +//================================================ IMU660RC ڲַ================================================ +#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ +#define IMU660RC_SPI_W ( 0x00 ) +#define IMU660RC_SPI_R ( 0x80 ) +#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ + + +//================================================ IMU660RC Ĵַ================================================ +#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 ) +#define IMU660RC_INT2_CTRL ( 0x0E ) +#define IMU660RC_CHIP_ID ( 0x0F ) +#define IMU660RC_CTRL1 ( 0x10 ) +#define IMU660RC_CTRL2 ( 0x11 ) +#define IMU660RC_CTRL3 ( 0x12 ) +#define IMU660RC_CTRL4 ( 0x13 ) +#define IMU660RC_CTRL5 ( 0x14 ) +#define IMU660RC_CTRL6 ( 0x15 ) +#define IMU660RC_CTRL7 ( 0x16 ) +#define IMU660RC_CTRL8 ( 0x17 ) +#define IMU660RC_CTRL9 ( 0x18 ) +#define IMU660RC_CTRL10 ( 0x19 ) +#define IMU660RC_CTRL_STATUS ( 0x1A ) +#define IMU660RC_STATUS_REG ( 0x1E ) +#define IMU660RC_OUT_TEMP_L ( 0x20 ) +#define IMU660RC_OUT_TEMP_H ( 0x21 ) +#define IMU660RC_OUTX_L_G ( 0x22 ) +#define IMU660RC_OUTX_H_G ( 0x23 ) +#define IMU660RC_OUTY_L_G ( 0x24 ) +#define IMU660RC_OUTY_H_G ( 0x25 ) +#define IMU660RC_OUTZ_L_G ( 0x26 ) +#define IMU660RC_OUTZ_H_G ( 0x27 ) +#define IMU660RC_OUTX_L_A ( 0x28 ) +#define IMU660RC_OUTX_H_A ( 0x29 ) +#define IMU660RC_OUTY_L_A ( 0x2A ) +#define IMU660RC_OUTY_H_A ( 0x2B ) +#define IMU660RC_OUTZ_L_A ( 0x2C ) +#define IMU660RC_OUTZ_H_A ( 0x2D ) + +#define IMU660RC_PAGE_SEL ( 0x02 ) +#define IMU660RC_EMB_FUNC_EN_A ( 0x04 ) +#define IMU660RC_PAGE_RW ( 0x17 ) +#define IMU660RC_SFLP_ODR ( 0x5E ) +#define IMU660RC_EMB_FUNC_CFG ( 0x63 ) + + + +extern float imu660rc_transition_factor[2]; +extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; // +extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ +extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ +extern float imu660rc_quarternion[4]; // Ԫ + + +void imu660rc_get_acc (void); +void imu660rc_get_gyro (void); +void imu660rc_get_quarternion (void); + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ٶȼתΪʵ +// ˵ acc_value ļٶȼ +// ز void +// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2) +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0]) + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC תΪʵ +// ˵ gyro_value +// ز void +// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1]) +void imu660rc_callback (void); +uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate); + + + +#endif diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rx.h index 45699d9..81b8b41 100644 --- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rx.h +++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_imu660rx.h @@ -97,7 +97,7 @@ //================================================ IMU660RX ȫֱ================================================ extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro () extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ) -extern float imu660ra_transition_factor[2]; +extern float imu660rx_transition_factor[2]; //================================================ IMU660RX ȫֱ================================================ diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips114.h index c56f310..9c4ac0d 100644 --- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips114.h +++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips114.h @@ -167,7 +167,7 @@ void ips114_init (void); // ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================= IPS114 չ================================================ #endif diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200.h index 850fb11..5bf4284 100644 --- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200.h +++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200.h @@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select); // ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================== IPS200 չ================================================ diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h index 98c5364..557e1d2 100644 --- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h @@ -86,7 +86,7 @@ // £SCC8660_PCLK_DIVԽͼԽ #define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1> #define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ -#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) +#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) #define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0 //================================================ SCC8660 ã֧ͫ֡ʰ汾=========================== diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.c index b51c600..b06e6a1 100644 --- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.c +++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.c @@ -24,7 +24,7 @@ * ļ zf_device_wifi_spi * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.9.20 +* ADS v1.10.2 * ƽ̨ TC264D * https://seekfree.taobao.com/ * @@ -63,6 +63,21 @@ #define SOCKET_CONNECT_TIME_OUT 50000 // λ #define OTHER_TIME_OUT 1000 // λ +#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088)) + #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088" +#endif + +#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE) + #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE" +#endif + + +#if (WIFI_SPI_TRANSFER_SIZE != 4088) + #error "WIFI_SPI_TRANSFER_SIZE must be == 4088" +#endif + + + char wifi_spi_version[12]; // ģ̼汾Ϣ char wifi_spi_mac_addr[20]; // ģMACַϢ char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ @@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void) { memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1; - return return_state; } @@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void) { memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1; - return return_state; } @@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void) { memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1; + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ȡϵͳʱ +// ˵ time_format ʱʽ +// ز *buffer ʱַַ СҪ30ֽ +// ز buffer_size С +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size) +{ + uint8 return_state = 1; + wifi_spi_packets_struct temp_packets; + uint8 send_cmd, receive_cmd; + + // ʱ30ֽ + // ģ̼V2汾 + if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2))) + { + send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0; + receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0; + + return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT); + if((0 == return_state) && (receive_cmd == temp_packets.head.command)) + { + return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2); + if(0 == return_state) + { + memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3); + buffer[temp_packets.head.length - 3] = 0; + } + } + } + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ɨȵ +// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз +// ˵ buffer_size ij +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +// עϢ ÿһаһwifi +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size) +{ + uint8 return_state; + + // ģV2汾Ĺִ̼֧˹ + if(!strncmp(wifi_spi_version, "V2", 2)) + { + return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT); + + if(0 == return_state) + { + #if (0 == WIFI_SPI_READ_TRANSFER) + wifi_spi_send_buffer(NULL, 0); + #endif + while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size)) + { + system_delay_ms(10); + } + } + } return return_state; } @@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) while(length) { - send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length; + send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length); if(wifi_spi_wait_idle(OTHER_TIME_OUT)) { @@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) return length; } +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ַͺͬ +// ˵ *string Ҫ͵ַ +// ز void +// ʹʾ wifi_spi_send_string("123"); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +void wifi_spi_send_string(const char *string) +{ + wifi_spi_send_buffer((uint8*)string, strlen(string)); +} + //------------------------------------------------------------------------------------------------------------------- // WIFI SPI ȡ // ˵ *buff ջ @@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) { zf_assert(NULL != buffer); - uint32 data_len = length; + uint32 fifo_read_length; + uint32 write_length = 0; + wifi_spi_packets_struct temp_packets; + + // жFIFOǷݣȴFIFOȡ + if(fifo_used(&wifi_spi_fifo)) + { + fifo_read_length = fifo_used(&wifi_spi_fifo); + fifo_read_length = length < fifo_read_length ? length : fifo_read_length; + fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN); + + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + } #if(1 == WIFI_SPI_READ_TRANSFER) - - wifi_spi_packets_struct temp_packets; - // WIFI SPI״̬жϻ߳ѾͨѶ򱾴βܷ if(WIFI_SPI_IDLE == wifi_spi_mutex) { - // ͨѶ״̬Ϊæ - wifi_spi_mutex = WIFI_SPI_BUSY; + wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ - // ͨѶ鿴ģǷδȡ do { - if(wifi_spi_wait_idle(OTHER_TIME_OUT)) + if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ + (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳ + ) { break; } + temp_packets.head.command = WIFI_SPI_DATA; temp_packets.head.length = 0; wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE); // յİǷ - if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) + if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) && + (temp_packets.head.length) + ) { - // յ - if(temp_packets.head.length) + if(length) + { + fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length; + memcpy(buffer, temp_packets.buffer, fifo_read_length); + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO + { + fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length); + } + } + else // ȫдFIFO { fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length); } @@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command); wifi_spi_mutex = WIFI_SPI_IDLE; } -#endif +#endif - fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN); - return data_len; + return write_length; } //------------------------------------------------------------------------------------------------------------------- @@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word) // MACַϢַʽwifi_spi_mac_addr wifi_spi_get_mac_addr(); - + if(NULL == wifi_ssid) + { + // ʼʱҪWIFI + break; + } return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word); if(return_state) { diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.h index eea8a78..e7cec39 100644 --- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.h +++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.h @@ -73,8 +73,8 @@ #if (WIFI_SPI_AUTO_CONNECT > 2) #error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]" #else -#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP -#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿ +#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP +#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666 #endif @@ -95,10 +95,15 @@ typedef enum WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ + WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI + WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾 WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ + WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1 + WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2 + WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3 // ӻش WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ @@ -110,6 +115,9 @@ typedef enum WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾 WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں + WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ + WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ + WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ WIFI_SPI_INVALID2 = 0xFF // Чݰ }wifi_spi_packets_command_enum; @@ -134,19 +142,27 @@ typedef struct uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // }wifi_spi_packets_struct; - +typedef enum +{ + WIFI_SPI_UTC_0 = 1, // ʱ + WIFI_SPI_GMT, // ʱ תΪGMTʽ׺GMT һڶԽƶ˴ģʹ + WIFI_SPI_UTC_8, // ʱ +}wifi_spi_time_enum; + extern char wifi_spi_version[12]; // ̼汾 ַ extern char wifi_spi_mac_addr[20]; // ģMACַ ַ extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ -uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); -uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); -uint8 wifi_spi_socket_disconnect (void); -uint8 wifi_spi_udp_send_now (void); -uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); -uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size); +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size); +uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); +uint8 wifi_spi_socket_disconnect (void); +uint8 wifi_spi_udp_send_now (void); +uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); +void wifi_spi_send_string (const char *string); +uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); -uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); #endif - diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.h index 0f392ff..24b88cc 100644 --- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.h +++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.h @@ -73,7 +73,7 @@ #if (WIFI_UART_AUTO_CONNECT > 3) #error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]" #else -#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP +#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP #define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_UART_LOCAL_PORT "8080" // ˿ #endif diff --git a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_driver/zf_driver_encoder.c index 8d514b7..ad4099e 100644 --- a/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_driver/zf_driver_encoder.c +++ b/Example/Coreboard_Demo/E01_gpio_demo/libraries/zf_driver/zf_driver_encoder.c @@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n) //------------------------------------------------------------------------------------------------------------------- void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin) { -// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init + zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init IfxGpt12_enableModule(&MODULE_GPT120); IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4); diff --git a/Example/Coreboard_Demo/E01_gpio_demo/user/isr.c b/Example/Coreboard_Demo/E01_gpio_demo/user/isr.c index e19382e..927ed43 100644 --- a/Example/Coreboard_Demo/E01_gpio_demo/user/isr.c +++ b/Example/Coreboard_Demo/E01_gpio_demo/user/isr.c @@ -40,14 +40,14 @@ // 򵥵˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ // **************************** PITжϺ **************************** -IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) -{ - interrupt_global_enable(0); // жǶ - pit_clear_flag(CCU60_CH0); - - - -} +//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) +//{ +// interrupt_global_enable(0); // жǶ +// pit_clear_flag(CCU60_CH0); +// +// +// +//} IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) @@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж { exti_flag_clear(ERU_CH0_REQ0_P15_4); - + + imu660rc_callback(); // 660RC ģ INT ж } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж @@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) { exti_flag_clear(ERU_CH5_REQ1_P15_8); - } } @@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) // exti_flag_clear(ERU_CH6_REQ9_P20_0); // } // } - IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO) { interrupt_global_enable(0); // жǶ @@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { interrupt_global_enable(0); // жǶ - gnss_uart_callback(); // GPSڻص + gnss_uart_callback(); // GNSSڻص diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E02_uart_demo/libraries/doc/version.txt index 1e222a3..8ce85ca 100644 --- a/Example/Coreboard_Demo/E02_uart_demo/libraries/doc/version.txt +++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/doc/version.txt @@ -1,3 +1,13 @@ +V3.4.4 + SCC8660ʽ + ָV2 + ޸ips200ʾscc8660ͷʽ + ޸ips114ʾscc8660ͷʽ +V3.4.3 + 660RC +V3.4.2 + ޸printfضеĺ궨 + WIFI_SPI V3.4.1 ޸Ĵڷ麯еķ ޸ips200proע diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_headfile.h index 27b7965..e8d6021 100644 --- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_headfile.h @@ -91,6 +91,7 @@ #include "zf_device_imu660ra.h" #include "zf_device_imu660rb.h" #include "zf_device_imu660rx.h" +#include "zf_device_imu660rc.h" #include "zf_device_imu963ra.h" #include "zf_device_ips114.h" #include "zf_device_ips200.h" diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/printf_redirect.c index c44d826..299da76 100644 --- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/printf_redirect.c +++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/printf_redirect.c @@ -45,7 +45,7 @@ //------------------------------------------------------------------------------------------------------------------- int fputc(int ch, FILE *stream) { - uart_write_byte(DEBUG_UART_INDEX, (char)ch); + uart_write_byte(PRINTF_USE_UART, (char)ch); return (ch); } @@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len) int fgetc(FILE *f) { #if PRINTF_OUTPUT_TYPE == 0 - return uart_read_byte(DEBUG_UART_INDEX); + return uart_read_byte(PRINTF_USE_UART); #else uint8 buf; wifi_spi_read_buffer(&buf, 1); diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant.c index 231b20d..3e9ec74 100644 --- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,423 +24,519 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_debug.h" #include "seekfree_assistant.h" +// ͨö +typedef enum +{ + SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 , + SEEKFREE_ASSISTANT_SEND_CAMERA_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD , -extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); -extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); + SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 , -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) + SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 , +}seekfree_assistant_cmd_type_enum; + +#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ +#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ + +// ݷͺָ +extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); +seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + +// ݽպָ +extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); +seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) #include "zf_common_fifo.h" -static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO -static fifo_struct seekfree_assistant_fifo = // FIFOṹ +static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE]; +static fifo_struct seekfree_assistant_debug_param_fifo = { - .buffer = seekfree_assistant_buffer, + .buffer = seekfree_assistant_debug_param_buffer, .execution = FIFO_IDLE, .type = FIFO_DATA_8BIT, .head = 0, .end = 0, - .size = SEEKFREE_ASSISTANT_BUFFER_SIZE, - .max = SEEKFREE_ASSISTANT_BUFFER_SIZE, -}; + .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, + .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, +}; #endif -static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ -static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ -static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ - -seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ -seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ - -seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ -vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ - //------------------------------------------------------------------------------------------------------------------- // ͺ -// ˵ *buffer ҪУݵַ -// ˵ length У鳤 -// ز uint8 ֵ +// ˵ *buffer ҪУݵַ +// ˵ length У鳤 +// ز uint8 ֵ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length) +static uint8 seekfree_assistant_sum (void *buffer, uint32 length) { uint8 temp_sum = 0; + uint8 *ptr = (uint8 *)buffer; while(length--) { - temp_sum += *buffer++; + temp_sum += *ptr ++; } return temp_sum; } //------------------------------------------------------------------------------------------------------------------- -// ͼͺ -// ˵ camera_type ͷ -// ˵ *image_addr ͼ׵ַ -// ˵ boundary_num ͼа߽ -// ˵ width ͼ -// ˵ height ͼ߶ +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ // ز void -// ʹʾ +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height) +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer) { - uint32 image_size = 0; + zf_assert(NULL != ccd_obj); + zf_assert(NULL != data_buffer); - seekfree_assistant_camera_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_data.function = SEEKFREE_ASSISTANT_CAMERA_FUNCTION; - seekfree_assistant_camera_data.camera_type = (camera_type << 5) | ((image_addr != NULL ? 0 : 1) << 4) | boundary_num; - // дϢЭ鲿 - seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct); - seekfree_assistant_camera_data.image_width = width; - seekfree_assistant_camera_data.image_height = height; + memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct)); + ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD; + ccd_obj->config.channel_index = channel_index; - // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct)); - - // ͷͼͼС - switch(camera_type) + uint16 data_max = 256; + uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT; + loop_count = (2 >= loop_count) ? (loop_count) : (2); + for(uint8 i = 0; loop_count > i; i ++) { - case SEEKFREE_ASSISTANT_OV7725_BIN: - { - image_size = width * height / 8; - }break; - - case SEEKFREE_ASSISTANT_MT9V03X: - { - image_size = width * height; - }break; - - case SEEKFREE_ASSISTANT_SCC8660: - { - image_size = width * height * 2; - }break; + data_max *= 4; } - // ͼ - if(NULL != image_addr) + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF); + #else + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + ccd_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + ccd_obj->config.data_type = data_type; + } + + // ¼ʵֽ uint16 Ҫݳ + ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1)); + // Ȼ¼Ӧݻ + ccd_obj->data_buffer = data_buffer; + + // У + ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.check_sum += seekfree_assistant_sum( + &(ccd_obj->config.cmd), + sizeof(ccd_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)ccd_obj, + sizeof(ccd_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(ccd_obj->data_buffer), + ccd_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer) +{ + zf_assert(NULL != camera_obj); + + memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct)); + camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD; + camera_obj->config.camera_type = camera_type; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF); + #else + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type + && NULL != data_buffer) { - seekfree_assistant_transfer_callback(image_addr, image_size); + camera_obj->config.data_type = 0x02; + } + else + { + camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01); + } + + // RGB565 ͼ ôֽ + camera_obj->buffer_byte_size = + image_width * image_height + * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1)); + camera_obj->buffer_byte_size = + (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type) + ? (camera_obj->buffer_byte_size / 8) + : (camera_obj->buffer_byte_size); + camera_obj->data_buffer = data_buffer; + + // У + camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.check_sum += seekfree_assistant_sum( + &(camera_obj->config.cmd), + sizeof(camera_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_obj, + sizeof(camera_obj->config)); + if(NULL != camera_obj->data_buffer) + { + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_obj->data_buffer), + camera_obj->buffer_byte_size); } } //------------------------------------------------------------------------------------------------------------------- -// ͼ߻ƺ -// ˵ boundary_id ID -// ˵ dot_num -// ˵ *dot_x ׵ַ -// ˵ *dot_y ׵ַ -// ˵ width ͼ -// ˵ height ͼ߶ +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 // ز void -// ʹʾ +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer) +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer) { - uint8 i; - uint16 dot_bytes = 0; // ֽ + zf_assert(NULL != camera_boundary_obj); + zf_assert(NULL != data_buffer); - dot_bytes = seekfree_assistant_camera_dot_data.dot_num; + memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct)); + camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD; - if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5)) - { - dot_bytes *= 2; + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + camera_boundary_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + camera_boundary_obj->config.data_type = data_type; } - // ȷ֡ͷܡ߽š곤ȡ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct)); + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif - for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++) - { - // жǷͺ - if(NULL != buffer->boundary_x[i]) - { - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes); - } + camera_boundary_obj->buffer_byte_size = + boundary_lenght * 2 + * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2)); + camera_boundary_obj->data_buffer = data_buffer; - // жǷ - if(NULL != buffer->boundary_y[i]) - { - // ûݣʾÿһֻһ߽ - // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣 - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes); - } - } + // У + camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.check_sum += seekfree_assistant_sum( + &(camera_boundary_obj->config.cmd), + sizeof(camera_boundary_obj->config) - 2); } //------------------------------------------------------------------------------------------------------------------- -// ʾͺ +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_boundary_obj, + sizeof(camera_boundary_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_boundary_obj->data_buffer), + camera_boundary_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color) +{ + seekfree_assistant_camera_rectangular_struct camera_rectangular_obj; + memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct)); + camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif + + // У + camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.check_sum += seekfree_assistant_sum( + &(camera_rectangular_obj.cmd), + sizeof(camera_rectangular_obj) - 2); + + seekfree_assistant_transfer_callback( + (const uint8 *)&camera_rectangular_obj, + sizeof(camera_rectangular_obj)); +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer) +{ + zf_assert(NULL != oscilloscope_obj); + zf_assert(NULL != data_buffer); + + memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct)); + oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD; + oscilloscope_obj->config.channel_max = + (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max) + ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX) + : ((0 == channel_max) ? (1) : (channel_max)); + oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00); + oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4; + oscilloscope_obj->data_buffer = data_buffer; +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ // ˵ *seekfree_assistant_oscilloscope ʾݽṹ // ز void // ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope) +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj) { - uint8 packet_size; - - // λ - seekfree_assistant_oscilloscope->channel_num &= 0x0f; - - zf_assert(SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT >= seekfree_assistant_oscilloscope->channel_num); - - // ֡ͷ - seekfree_assistant_oscilloscope->head = SEEKFREE_ASSISTANT_SEND_HEAD; - - // дϢ - packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4; - seekfree_assistant_oscilloscope->length = packet_size; - - // д빦ͨ - seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE; - // У - seekfree_assistant_oscilloscope->check_sum = 0; - seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size); + oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + &(oscilloscope_obj->config.cmd), + sizeof(oscilloscope_obj->config) - 2); + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + (oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); - // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[] - - seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size); + seekfree_assistant_transfer_callback( + (const uint8 *)oscilloscope_obj, + sizeof(oscilloscope_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); } +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) //------------------------------------------------------------------------------------------------------------------- -// ͼϢú -// ˵ camera_type ͼ -// ˵ image_addr ͼַ NULLʾֻͱϢλ -// ˵ width ͼ -// ˵ height ͼ߶ +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ // ز void -// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H); -// עϢ +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height) +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj) { - seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION; - // дϢ - seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct); + zf_assert(NULL != debug_param_obj); - seekfree_assistant_camera_buffer.camera_type = camera_type; - seekfree_assistant_camera_buffer.image_addr = image_addr; - seekfree_assistant_camera_buffer.width = width; - seekfree_assistant_camera_buffer.height = height; -} + seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ + uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ + uint8 temp_sum = 0xFF; // Уʱ + uint32 read_length = 0; // ȡʱ -//------------------------------------------------------------------------------------------------------------------- -// ͼ߷ú -// ˵ boundary_type ߽ -// ˵ dot_num һ߽жٸ -// ˵ dot_x1 ű1ĵַ NULLʾͱ1 -// ˵ dot_x2 ű2ĵַ NULLʾͱ2 -// ˵ dot_x3 ű3ĵַ NULLʾͱ3 -// ˵ dot_y1 ű1ĵַ NULLʾͱ1 -// ˵ dot_y2 ű2ĵַ NULLʾͱ2 -// ˵ dot_y3 ű3ĵַ NULLʾͱ3 -// ز void -// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк -// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ -// ʹʾ seekfree_assistant_camera_config(XY_BOUNDARY, 160, xy_x1_boundary, xy_x2_boundary, xy_x3_boundary, xy_y1_boundary, xy_y2_boundary, xy_y3_boundary); // ͼʱߣ߰ -// עϢ -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3) -{ - uint8 i = 0; - uint8 boundary_num = 0; - uint8 boundary_data_type = 0; - - // ͼͻǷ׼, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_dot_data.dot_num = dot_num; - seekfree_assistant_camera_dot_data.valid_flag = 0; - for(i = 0; i < 3; i++) - { - seekfree_assistant_camera_buffer.boundary_x[i] = NULL; - seekfree_assistant_camera_buffer.boundary_y[i] = NULL; - } - - switch(boundary_type) - { - case X_BOUNDARY: - { - if(NULL != dot_x1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x1; - } - if(NULL != dot_x2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x2; - } - if(NULL != dot_x3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x3; - } - - if(255 < seekfree_assistant_camera_buffer.height) - { - boundary_data_type = 1; - } - }break; - - case Y_BOUNDARY: - { - if(NULL != dot_y1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if(NULL != dot_y2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if(NULL != dot_y3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if(255 < seekfree_assistant_camera_buffer.width) - { - boundary_data_type = 1; - } - }break; - - case XY_BOUNDARY: - { - if((NULL != dot_x1) && (NULL != dot_y1)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if((NULL != dot_x2) && (NULL != dot_y2)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if((NULL != dot_x3) && (NULL != dot_y3)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x3; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if((255 < seekfree_assistant_camera_buffer.width) || (255 < seekfree_assistant_camera_buffer.height)) - { - boundary_data_type = 1; - } - }break; - - case NO_BOUNDARY:break; - } - - seekfree_assistant_camera_dot_data.dot_type = (boundary_type << 6) | (boundary_data_type << 5) | boundary_num; -} - -//------------------------------------------------------------------------------------------------------------------- -// ַͷͼ -// ˵ void -// ز void -// ʹʾ -// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_send (void) -{ - // ͼͻǷ׼ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_data_send(seekfree_assistant_camera_buffer.camera_type, seekfree_assistant_camera_buffer.image_addr, seekfree_assistant_camera_dot_data.dot_type & 0x0f, seekfree_assistant_camera_buffer.width, seekfree_assistant_camera_buffer.height); - - if(seekfree_assistant_camera_dot_data.dot_type & 0x0f) - { - seekfree_assistant_camera_dot_send(&seekfree_assistant_camera_buffer); - } -} - - -//------------------------------------------------------------------------------------------------------------------- -// ֽյ -// ˵ void -// ز void -// ʹʾ ֻҪŵеPITжϻѭ -//------------------------------------------------------------------------------------------------------------------- -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) -void seekfree_assistant_data_analysis (void) -{ - uint8 temp_sum; - uint32 read_length; - seekfree_assistant_parameter_struct *receive_packet; - - // ʹuint32ж壬ĿΪ˱ֽ֤ڶ - uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4]; - - // Զȡ, ԶĴ䷽ʽӽջصжȡ - read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE); + // Զȡһݰ + // ԶĴ䷽ʽӽջصжȡ + read_length = seekfree_assistant_receive_callback( + debug_param_cmd_pointer, + sizeof(seekfree_assistant_debug_param_cmd_struct)); if(read_length) - { - // ȡдFIFO - fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length); + { // ȡдFIFO + fifo_write_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + read_length); } - while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo)) - { - read_length = sizeof(seekfree_assistant_parameter_struct); - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_ONLY); + while( sizeof(seekfree_assistant_debug_param_cmd_struct) + <= fifo_used(&seekfree_assistant_debug_param_fifo)) + { // FIFO һݰ ôͽн + // ֱӶһݰ + read_length = sizeof(seekfree_assistant_debug_param_cmd_struct); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_ONLY); - if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0]) - { - // û֡ͷFIFOȥһ - read_length = 1; - } - else - { - // ҵ֡ͷ - receive_packet = (seekfree_assistant_parameter_struct *)temp_buffer; - temp_sum = receive_packet->check_sum; - receive_packet->check_sum = 0; - if(temp_sum == seekfree_assistant_sum((uint8 *)temp_buffer, sizeof(seekfree_assistant_parameter_struct))) - { - // Уɹ - seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data; - seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1; + if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0] + && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2]) + { // ֱƥ֡ͷ ҹҲƥ + temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ + debug_param_cmd_obj.check_sum = 0; // հУֵ У + if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct))) + { // Уɹ + debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float; + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0]; + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + #endif + debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1; + temp_sum = 0x00; } else - { - read_length = 1; + { // Уƥ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + } + else + { // ƥ䲻֡ͷ͹ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + + if(0xFF == temp_sum) + { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ + for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++) + { // Ϊȡһ һ + if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length]) + { // ҵ¸֡ͷ˳ + break; + } } } // ʹõ - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_AND_CLEAN); } } #endif - - - diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant.h index 5b7e1b5..937f784 100644 --- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,142 +24,292 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ - #include "zf_common_typedef.h" +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 , + SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 , +}seekfree_assistant_data_type_enum; -// 1ʹܲڵĹ 0رղڵĹ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 ) - - - -// FIFOС -#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) - -// ʾͨ -#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) - -// Եͨ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) - -// ͼ -#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) - -// Ƭλ͵֡ͷ -#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) - -// ͷ -#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) -#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) -#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) - -// λƬ͵֡ͷ -#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) - -// -#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) - +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ +}seekfree_assistant_ccd_resolution_enum; // ͷö typedef enum { - // ͷͺŶ - SEEKFREE_ASSISTANT_OV7725_BIN = 1, - SEEKFREE_ASSISTANT_MT9V03X, - SEEKFREE_ASSISTANT_SCC8660, - // ͼͶ - SEEKFREE_ASSISTANT_BINARY = 1, - SEEKFREE_ASSISTANT_GRAY, - SEEKFREE_ASSISTANT_RGB565, -}seekfree_assistant_image_type_enum; + SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY , + SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 , -// ͷö -typedef enum -{ - // ͷͺŶ - X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ - Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ - XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ - NO_BOUNDARY, // ͵ͼûбϢ -}seekfree_assistant_boundary_type_enum; + // ͷͺƥ䶨 + SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X , + SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 , +}seekfree_assistant_camera_type_enum; + +#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨 + +#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ +#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤ + +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС +#endif typedef struct { - uint8 head; // ֡ͷ - uint8 channel_num; // λΪ λΪͨ - uint8 check_sum; // У - uint8 length; // - float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + uint8 data_lenght_buffer[2] ; // CCD ݳ + uint8 channel_color_buffer[2] ; // ͨɫ + uint8 channel_data_max[2] ; // ֵͨ + uint8 data_type ; // ȷϴС + uint8 reserve ; // + }config; + uint16 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_ccd_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 camera_type ; // ͷ + uint8 image_width_buffer[2] ; // ͼ + uint8 image_height_buffer[2] ; // ͼ߶ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 data_type ; // ȷϴС + uint8 boundary_lenght_buffer[2] ; // ߳ + uint8 color_buffer[2] ; // ͨɫ + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_boundary_struct; + +typedef struct +{ + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 reserve ; // + uint8 x_axis_buffer[2] ; // X + uint8 y_axis_buffer[2] ; // Y + uint8 width_buffer[2] ; // ο + uint8 height_buffer[2] ; // θ߶ + uint8 color_buffer[2] ; // ɫ +}seekfree_assistant_camera_rectangular_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_max ; // ͨ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ }seekfree_assistant_oscilloscope_struct; +typedef union +{ + uint8 data_uint8[4] ; + float data_float ; +}seekfree_assistant_param_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ - uint8 length; // ȣЭ鲿֣ - uint16 image_width; // ͼ - uint16 image_height; // ͼ߶ -}seekfree_assistant_camera_struct; - - -typedef struct -{ - uint8 head; // ֡ͷ - uint8 function; // - uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽ - uint8 length; // ȣЭ鲿֣ - uint16 dot_num; // - uint8 valid_flag; // ͨʶ - uint8 reserve; // -}seekfree_assistant_camera_dot_struct; - -typedef struct -{ - void *image_addr; // ͷַ - uint16 width; // ͼ - uint16 height; // ͼ߶ - seekfree_assistant_image_type_enum camera_type; // ͷ - void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ - void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ -}seekfree_assistant_camera_buffer_struct; + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + seekfree_assistant_param_struct dat ; // һ + +}seekfree_assistant_debug_param_cmd_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 channel; // ͨ - uint8 check_sum; // У - float data; // -}seekfree_assistant_parameter_struct; + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint8_struct; + + +typedef struct +{ + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint16_struct; + +typedef struct +{ + float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; + uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; +}seekfree_assistant_debug_param_struct; typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length); typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length); -extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ -extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ - - -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope); -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height); -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3); -void seekfree_assistant_camera_send (void); -void seekfree_assistant_data_analysis (void); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ +// ز void +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, 16] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *seekfree_assistant_oscilloscope ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj); + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj); +#endif #endif diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c index d139201..23205d5 100644 --- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,23 +24,20 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_typedef.h" #include "zf_common_fifo.h" #include "zf_common_debug.h" -#include "zf_driver_uart.h" + #include "zf_device_wireless_uart.h" -#include "zf_device_ble6a20.h" -#include "zf_device_bluetooth_ch9141.h" -#include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" #include "seekfree_assistant.h" @@ -50,7 +47,6 @@ extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ - //------------------------------------------------------------------------------------------------------------------- // ַͺ // ˵ *buff Ҫ͵ݵַ @@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv // ز uint32 ʣδݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) +uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݷ͹ @@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) // ز uint32 յݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) +uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݽչ return 0; @@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) // ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ // ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) +void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) { switch(transfer_device) { case SEEKFREE_ASSISTANT_DEBUG_UART: { -#if DEBUG_UART_USE_INTERRUPT == 1 seekfree_assistant_transfer_callback = debug_send_buffer; seekfree_assistant_receive_callback = debug_read_ring_buffer; -#endif }break; - + case SEEKFREE_ASSISTANT_WIRELESS_UART: { seekfree_assistant_transfer_callback = wireless_uart_send_buffer; seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; - - case SEEKFREE_ASSISTANT_BLE6A20: - { - seekfree_assistant_transfer_callback = ble6a20_send_buffer; - seekfree_assistant_receive_callback = ble6a20_read_buffer; - }break; - case SEEKFREE_ASSISTANT_CH9141: - { - seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; - seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; - }break; - - case SEEKFREE_ASSISTANT_WIFI_UART: - { - seekfree_assistant_transfer_callback = wifi_uart_send_buffer; - seekfree_assistant_receive_callback = wifi_uart_read_buffer; - }break; - + // case SEEKFREE_ASSISTANT_CH9141: + // { + // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; + // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; + // }break; + + // case SEEKFREE_ASSISTANT_WIFI_UART: + // { + // seekfree_assistant_transfer_callback = wifi_uart_send_buffer; + // seekfree_assistant_receive_callback = wifi_uart_read_buffer; + // }break; + case SEEKFREE_ASSISTANT_WIFI_SPI: { seekfree_assistant_transfer_callback = wifi_spi_send_buffer; seekfree_assistant_receive_callback = wifi_spi_read_buffer; }break; - - case SEEKFREE_ASSISTANT_CUSTOM: - { + + default: + { // Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ - + seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + seekfree_assistant_receive_callback = seekfree_assistant_receive; }break; } } - - diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.h index 2ccfd8a..0e28f49 100644 --- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,13 +24,13 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,7 +43,6 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ SEEKFREE_ASSISTANT_WIRELESS_UART, // ת - SEEKFREE_ASSISTANT_BLE6A20, // ת SEEKFREE_ASSISTANT_CH9141, // CH9141 SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_absolute_encoder.h index 1166c84..dc091aa 100644 --- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_absolute_encoder.h +++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_absolute_encoder.h @@ -62,7 +62,7 @@ //==================================================== SPI ==================================================== #else //====================================================Ӳ SPI ==================================================== -#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI +#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI #define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI #define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK #define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI @@ -70,7 +70,7 @@ //====================================================Ӳ SPI ==================================================== #endif -#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ +#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ #define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN))) #define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ble6a20.h index 6f4544a..6af089f 100644 --- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ble6a20.h +++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ble6a20.h @@ -76,7 +76,7 @@ // 1Զ Զʵ޸ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ // Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000 -#define BLE6A20_AUTO_BAUD_RATE ( 0 ) +#define BLE6A20_AUTO_BAUD_RATE ( 1 ) #if (1 == BLE6A20_AUTO_BAUD_RATE) typedef enum diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rc.c new file mode 100644 index 0000000..68840e2 --- /dev/null +++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rc.c @@ -0,0 +1,563 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#include "math.h" +#include "zf_common_debug.h" +#include "zf_driver_delay.h" +#include "zf_driver_spi.h" +#include "zf_driver_gpio.h" +#include "zf_driver_soft_iic.h" +#include "zf_device_config.h" +#include "zf_driver_uart.h" +#include "zf_driver_exti.h" + +#include "zf_device_imu660rc.h" + +#ifndef M_PI +#define M_PI 3.1415926f +#endif + + +static uint8 imu660rc_quarternion_rate; + +float imu660rc_transition_factor[2]; +int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro () +int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ) +float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ +float imu660rc_quarternion[4]; // Ԫ + + + +#if IMU660RC_USE_SOFT_IIC +static soft_iic_info_struct imu660rc_iic_struct; + +#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data))) +#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len))) +#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg))) +#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len))) +#else +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC дĴ +// ˵ reg Ĵַ +// ˵ data +// ز void +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_write_register (uint8 reg, uint8 data) +{ + IMU660RC_CS(0); + spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data); + IMU660RC_CS(1); +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ĵ +// ˵ reg Ĵַ +// ز uint8 +// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_read_register (uint8 reg) +{ + uint8 data; + IMU660RC_CS(0); + data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R); + IMU660RC_CS(1); + return data; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC +// ˵ reg Ĵַ +// ˵ data ݻ +// ˵ len ݳ +// ز void +// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len) +{ + IMU660RC_CS(0); + spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len); + IMU660RC_CS(1); +} +#endif + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC fp16ת +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint32 fp16_to_float(uint16 h) +{ + uint16 h_exp = (h & 0x7c00u); + uint32 f_sgn = ((uint32)h & 0x8000u) << 16; + switch (h_exp) + { + case 0x0000u: // 0 or subnormal + { + uint16 h_sig = (h & 0x03ffu); + // Signed zero + if (h_sig == 0) + { + return f_sgn; + } + // Subnormal + h_sig <<= 1; + while ((h_sig & 0x0400u) == 0) + { + h_sig <<= 1; + h_exp++; + } + uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23; + uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13; + return f_sgn + f_exp + f_sig; + } + case 0x7c00u: // inf or NaN + { + // All-ones exponent and a copy of the significand + return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13); + } + default: // normalized + { + // Just need to adjust the exponent and shift + return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13); + } + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫһ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_normalize(float quat[4], uint16 *fp16) +{ + float n = 0; + float temp[4]; + + *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]); + *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]); + *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]); + *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]); + + n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3]; + n = sqrtf(n); + + if(n > 0.001f) // Խӽ0ֵ + { + n = temp[3] < 0.0f ? -n : n; + + quat[0] = temp[1] / n; + quat[1] = temp[2] / n; + quat[2] = temp[0] / n; + quat[3] = temp[3] / n; + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫתŷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw) +{ + float euler[3]; + + float sqx = quat[0] * quat[0]; + float sqy = quat[1] * quat[1]; + float sqz = quat[2] * quat[2]; + + euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx)); + euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2])); + euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz)); + + // תǶ + euler[0] = 180 * (euler[0]) / M_PI; + euler[1] = 180 * (euler[1]) / M_PI; + euler[2] = 180 * (euler[2]) / M_PI; + + // Ƕȵ + euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2]; + + *roll = euler[0]; + *pitch = euler[1]; + *yaw = euler[2]; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ÷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank) +{ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank); +} + + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Լ +// ˵ void +// ز uint8 1-Լʧ 0-Լɹ +// ʹʾ imu660rc_self_check(); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_self_check (void) +{ + uint8 dat = 0, return_state = 0; + uint16 timeout_count = 0; + do + { + if(IMU660RC_TIMEOUT_COUNT < timeout_count ++) + { + return_state = 1; + break; + } + dat = imu660rc_read_register(IMU660RC_CHIP_ID); + system_delay_ms(1); + }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû⵽豸 + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ٶȼ +// ˵ void +// ز void +// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_acc (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6); + imu660rc_acc_x = dat[0]; + imu660rc_acc_y = dat[1]; + imu660rc_acc_z = dat[2]; + } +} +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC +// ˵ void +// ز void +// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_gyro (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6); + imu660rc_gyro_x = dat[0]; + imu660rc_gyro_y = dat[1]; + imu660rc_gyro_z = dat[2]; + } +} + + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ԪݲתΪŷ +// ˵ void +// ز void +// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı +// עϢ ҪINT2Ŵжϵô˺ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_quarternion(void) +{ + uint8 i; + uint16 buff[4]; + uint8 *buff1_ptr; + int16 *buff2_ptr; + + if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate) + { + buff1_ptr = (uint8 *)buff; + + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x20); + imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31); + + for(i = 0; 8 > i; i++) + { + imu660rc_write_register(0x08, 0x4C + i); + buff1_ptr[i] = imu660rc_read_register(0x09); + } + + imu660rc_write_register(IMU660RC_PAGE_RW, 0x0); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // Ԫһ + quarternion_normalize(imu660rc_quarternion, buff); + // Ԫתŷ + quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw); + + // ȡٶٶϢ + #if(1 == IMU660RC_QUARTERNION_GET_ACC) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6); + imu660rc_acc_x = buff2_ptr[0]; + imu660rc_acc_y = buff2_ptr[1]; + imu660rc_acc_z = buff2_ptr[2]; + } + #endif + #if(1 == IMU660RC_QUARTERNION_GET_GYRO) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6); + imu660rc_gyro_x = buff2_ptr[0]; + imu660rc_gyro_y = buff2_ptr[1]; + imu660rc_gyro_z = buff2_ptr[2]; + } + #endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RCжϻصҪжڶȡԪ +// ˵ void +// ز void +// ʹʾ +// עϢ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_callback(void) +{ + imu660rc_get_quarternion(); + +} + +//------------------------------------------------------------------------------------------------------------------- +// ʼ IMU660RC +// ˵ quarternion_rate ѡԪ +// ز uint8 1-ʼʧ 0-ʼɹ +// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate) +{ + uint8 return_state = 0; + + imu660rc_quarternion_rate = quarternion_rate; + #if IMU660RC_USE_SOFT_IIC + soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿ + + #else + spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿ + gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿ + #endif + + system_delay_ms(10); + + do + { + if(imu660rc_self_check()) // IMU660RC Լ + { + // ˶Ϣ ʾλ + // ô IMU660RC Լʱ˳ + // һ½û ûܾǻ + zf_log(0, "imu660rc self check error."); + return_state = 1; + break; + } + + // λ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04); + system_delay_ms(30); + + // ÿ¹ַ + imu660rc_write_register(IMU660RC_CTRL3, 0x44); + + switch(IMU660RC_ACC_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_ACC_SAMPLE_SGN_2G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x00); + imu660rc_transition_factor[0] = 16393.44; + }break; + case IMU660RC_ACC_SAMPLE_SGN_4G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x01); + imu660rc_transition_factor[0] = 8196.72; + }break; + case IMU660RC_ACC_SAMPLE_SGN_8G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x02); + imu660rc_transition_factor[0] = 4098.36; + }break; + case IMU660RC_ACC_SAMPLE_SGN_16G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x03); + imu660rc_transition_factor[0] = 2049.18; + }break; + } + if(1 == return_state) + { + break; + } + + switch(IMU660RC_GYRO_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_125DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x00); + imu660rc_transition_factor[1] = 228.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_250DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x01); + imu660rc_transition_factor[1] = 114.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_500DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x02); + imu660rc_transition_factor[1] = 57.1428; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_1000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x03); + imu660rc_transition_factor[1] = 28.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_2000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x04); + imu660rc_transition_factor[1] = 14.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_4000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x0C); + imu660rc_transition_factor[1] = 7.14285; + }break; + } + if(1 == return_state) + { + break; + } + + // ôģʽΪ߾ģʽԼ + imu660rc_write_register(IMU660RC_CTRL1, 0x15); + imu660rc_write_register(IMU660RC_CTRL2, 0x18); + + // LPF1˲ + imu660rc_write_register(IMU660RC_CTRL7, 0x01); + + // LPF2˲ + imu660rc_write_register(IMU660RC_CTRL9, 0x08); + + // ԪӦ + if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate) + { + // жϴź + imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80); + imu660rc_write_register(IMU660RC_CTRL4, 0x08); + imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30); + + // üٶȡٶ + imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3)); + imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3)); + + // Ԫʲ + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3)); + imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x00); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // жϼ + exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING); + } + }while(0); + + return return_state; +} + + + + + + + + + + + + + diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rc.h new file mode 100644 index 0000000..dd5a9e3 --- /dev/null +++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rc.h @@ -0,0 +1,211 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#ifndef _zf_device_imu660rc_h_ +#define _zf_device_imu660rc_h_ + +#include "zf_common_typedef.h" + + +// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC +// IMU660RC_USE_SOFT_IICҪȱ벢س򣬵ƬģҪϵͨѶ +#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ + +#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ +//==================================================== IIC ==================================================== +#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ +#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL +#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA +//==================================================== IIC ==================================================== +#else + +//====================================================Ӳ SPI ==================================================== +#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI +#define IMU660RC_SPI (SPI_0) // Ӳ SPI +#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK +#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI +#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO +//====================================================Ӳ SPI ==================================================== +#endif +#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ +#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) ) +#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ + + +#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ +#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ + +typedef enum +{ + IMU660RC_MAIN_MEM_BANK = 0x00, + IMU660RC_HUB_MEM_BANK = 0x40, + IMU660RC_EMBED_MEM_BANK = 0x80, +}imu660rc_mem_bank_enum; + +typedef enum +{ + IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2) + IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G + IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G + IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G +}imu660rc_acc_sample_config; + +typedef enum +{ + IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S) + IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS + IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS + IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS + IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS + IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS +}imu660rc_gyro_sample_config; + +typedef enum +{ + IMU660RC_QUARTERNION_15HZ, // 15 Hz + IMU660RC_QUARTERNION_30HZ, // 30 Hz + IMU660RC_QUARTERNION_60HZ, // 60 Hz + IMU660RC_QUARTERNION_120HZ, // 120Hz + IMU660RC_QUARTERNION_240HZ, // 240Hz + IMU660RC_QUARTERNION_480HZ, // 480Hz + IMU660RC_QUARTERNION_DISABLE, // Ԫ +}imu660rc_quarternion_rate_config; + + +//================================================ IMU660RC ڲַ================================================ +#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ +#define IMU660RC_SPI_W ( 0x00 ) +#define IMU660RC_SPI_R ( 0x80 ) +#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ + + +//================================================ IMU660RC Ĵַ================================================ +#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 ) +#define IMU660RC_INT2_CTRL ( 0x0E ) +#define IMU660RC_CHIP_ID ( 0x0F ) +#define IMU660RC_CTRL1 ( 0x10 ) +#define IMU660RC_CTRL2 ( 0x11 ) +#define IMU660RC_CTRL3 ( 0x12 ) +#define IMU660RC_CTRL4 ( 0x13 ) +#define IMU660RC_CTRL5 ( 0x14 ) +#define IMU660RC_CTRL6 ( 0x15 ) +#define IMU660RC_CTRL7 ( 0x16 ) +#define IMU660RC_CTRL8 ( 0x17 ) +#define IMU660RC_CTRL9 ( 0x18 ) +#define IMU660RC_CTRL10 ( 0x19 ) +#define IMU660RC_CTRL_STATUS ( 0x1A ) +#define IMU660RC_STATUS_REG ( 0x1E ) +#define IMU660RC_OUT_TEMP_L ( 0x20 ) +#define IMU660RC_OUT_TEMP_H ( 0x21 ) +#define IMU660RC_OUTX_L_G ( 0x22 ) +#define IMU660RC_OUTX_H_G ( 0x23 ) +#define IMU660RC_OUTY_L_G ( 0x24 ) +#define IMU660RC_OUTY_H_G ( 0x25 ) +#define IMU660RC_OUTZ_L_G ( 0x26 ) +#define IMU660RC_OUTZ_H_G ( 0x27 ) +#define IMU660RC_OUTX_L_A ( 0x28 ) +#define IMU660RC_OUTX_H_A ( 0x29 ) +#define IMU660RC_OUTY_L_A ( 0x2A ) +#define IMU660RC_OUTY_H_A ( 0x2B ) +#define IMU660RC_OUTZ_L_A ( 0x2C ) +#define IMU660RC_OUTZ_H_A ( 0x2D ) + +#define IMU660RC_PAGE_SEL ( 0x02 ) +#define IMU660RC_EMB_FUNC_EN_A ( 0x04 ) +#define IMU660RC_PAGE_RW ( 0x17 ) +#define IMU660RC_SFLP_ODR ( 0x5E ) +#define IMU660RC_EMB_FUNC_CFG ( 0x63 ) + + + +extern float imu660rc_transition_factor[2]; +extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; // +extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ +extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ +extern float imu660rc_quarternion[4]; // Ԫ + + +void imu660rc_get_acc (void); +void imu660rc_get_gyro (void); +void imu660rc_get_quarternion (void); + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ٶȼתΪʵ +// ˵ acc_value ļٶȼ +// ز void +// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2) +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0]) + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC תΪʵ +// ˵ gyro_value +// ز void +// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1]) +void imu660rc_callback (void); +uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate); + + + +#endif diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rx.h index 45699d9..81b8b41 100644 --- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rx.h +++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_imu660rx.h @@ -97,7 +97,7 @@ //================================================ IMU660RX ȫֱ================================================ extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro () extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ) -extern float imu660ra_transition_factor[2]; +extern float imu660rx_transition_factor[2]; //================================================ IMU660RX ȫֱ================================================ diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips114.h index c56f310..9c4ac0d 100644 --- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips114.h +++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips114.h @@ -167,7 +167,7 @@ void ips114_init (void); // ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================= IPS114 չ================================================ #endif diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200.h index 850fb11..5bf4284 100644 --- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200.h +++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200.h @@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select); // ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================== IPS200 չ================================================ diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h index 98c5364..557e1d2 100644 --- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h @@ -86,7 +86,7 @@ // £SCC8660_PCLK_DIVԽͼԽ #define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1> #define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ -#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) +#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) #define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0 //================================================ SCC8660 ã֧ͫ֡ʰ汾=========================== diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.c index b51c600..b06e6a1 100644 --- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.c +++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.c @@ -24,7 +24,7 @@ * ļ zf_device_wifi_spi * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.9.20 +* ADS v1.10.2 * ƽ̨ TC264D * https://seekfree.taobao.com/ * @@ -63,6 +63,21 @@ #define SOCKET_CONNECT_TIME_OUT 50000 // λ #define OTHER_TIME_OUT 1000 // λ +#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088)) + #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088" +#endif + +#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE) + #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE" +#endif + + +#if (WIFI_SPI_TRANSFER_SIZE != 4088) + #error "WIFI_SPI_TRANSFER_SIZE must be == 4088" +#endif + + + char wifi_spi_version[12]; // ģ̼汾Ϣ char wifi_spi_mac_addr[20]; // ģMACַϢ char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ @@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void) { memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1; - return return_state; } @@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void) { memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1; - return return_state; } @@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void) { memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1; + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ȡϵͳʱ +// ˵ time_format ʱʽ +// ز *buffer ʱַַ СҪ30ֽ +// ز buffer_size С +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size) +{ + uint8 return_state = 1; + wifi_spi_packets_struct temp_packets; + uint8 send_cmd, receive_cmd; + + // ʱ30ֽ + // ģ̼V2汾 + if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2))) + { + send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0; + receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0; + + return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT); + if((0 == return_state) && (receive_cmd == temp_packets.head.command)) + { + return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2); + if(0 == return_state) + { + memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3); + buffer[temp_packets.head.length - 3] = 0; + } + } + } + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ɨȵ +// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз +// ˵ buffer_size ij +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +// עϢ ÿһаһwifi +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size) +{ + uint8 return_state; + + // ģV2汾Ĺִ̼֧˹ + if(!strncmp(wifi_spi_version, "V2", 2)) + { + return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT); + + if(0 == return_state) + { + #if (0 == WIFI_SPI_READ_TRANSFER) + wifi_spi_send_buffer(NULL, 0); + #endif + while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size)) + { + system_delay_ms(10); + } + } + } return return_state; } @@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) while(length) { - send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length; + send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length); if(wifi_spi_wait_idle(OTHER_TIME_OUT)) { @@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) return length; } +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ַͺͬ +// ˵ *string Ҫ͵ַ +// ز void +// ʹʾ wifi_spi_send_string("123"); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +void wifi_spi_send_string(const char *string) +{ + wifi_spi_send_buffer((uint8*)string, strlen(string)); +} + //------------------------------------------------------------------------------------------------------------------- // WIFI SPI ȡ // ˵ *buff ջ @@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) { zf_assert(NULL != buffer); - uint32 data_len = length; + uint32 fifo_read_length; + uint32 write_length = 0; + wifi_spi_packets_struct temp_packets; + + // жFIFOǷݣȴFIFOȡ + if(fifo_used(&wifi_spi_fifo)) + { + fifo_read_length = fifo_used(&wifi_spi_fifo); + fifo_read_length = length < fifo_read_length ? length : fifo_read_length; + fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN); + + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + } #if(1 == WIFI_SPI_READ_TRANSFER) - - wifi_spi_packets_struct temp_packets; - // WIFI SPI״̬жϻ߳ѾͨѶ򱾴βܷ if(WIFI_SPI_IDLE == wifi_spi_mutex) { - // ͨѶ״̬Ϊæ - wifi_spi_mutex = WIFI_SPI_BUSY; + wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ - // ͨѶ鿴ģǷδȡ do { - if(wifi_spi_wait_idle(OTHER_TIME_OUT)) + if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ + (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳ + ) { break; } + temp_packets.head.command = WIFI_SPI_DATA; temp_packets.head.length = 0; wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE); // յİǷ - if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) + if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) && + (temp_packets.head.length) + ) { - // յ - if(temp_packets.head.length) + if(length) + { + fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length; + memcpy(buffer, temp_packets.buffer, fifo_read_length); + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO + { + fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length); + } + } + else // ȫдFIFO { fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length); } @@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command); wifi_spi_mutex = WIFI_SPI_IDLE; } -#endif +#endif - fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN); - return data_len; + return write_length; } //------------------------------------------------------------------------------------------------------------------- @@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word) // MACַϢַʽwifi_spi_mac_addr wifi_spi_get_mac_addr(); - + if(NULL == wifi_ssid) + { + // ʼʱҪWIFI + break; + } return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word); if(return_state) { diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.h index eea8a78..e7cec39 100644 --- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.h +++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.h @@ -73,8 +73,8 @@ #if (WIFI_SPI_AUTO_CONNECT > 2) #error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]" #else -#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP -#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿ +#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP +#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666 #endif @@ -95,10 +95,15 @@ typedef enum WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ + WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI + WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾 WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ + WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1 + WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2 + WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3 // ӻش WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ @@ -110,6 +115,9 @@ typedef enum WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾 WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں + WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ + WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ + WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ WIFI_SPI_INVALID2 = 0xFF // Чݰ }wifi_spi_packets_command_enum; @@ -134,19 +142,27 @@ typedef struct uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // }wifi_spi_packets_struct; - +typedef enum +{ + WIFI_SPI_UTC_0 = 1, // ʱ + WIFI_SPI_GMT, // ʱ תΪGMTʽ׺GMT һڶԽƶ˴ģʹ + WIFI_SPI_UTC_8, // ʱ +}wifi_spi_time_enum; + extern char wifi_spi_version[12]; // ̼汾 ַ extern char wifi_spi_mac_addr[20]; // ģMACַ ַ extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ -uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); -uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); -uint8 wifi_spi_socket_disconnect (void); -uint8 wifi_spi_udp_send_now (void); -uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); -uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size); +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size); +uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); +uint8 wifi_spi_socket_disconnect (void); +uint8 wifi_spi_udp_send_now (void); +uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); +void wifi_spi_send_string (const char *string); +uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); -uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); #endif - diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.h index 0f392ff..24b88cc 100644 --- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.h +++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.h @@ -73,7 +73,7 @@ #if (WIFI_UART_AUTO_CONNECT > 3) #error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]" #else -#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP +#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP #define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_UART_LOCAL_PORT "8080" // ˿ #endif diff --git a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_driver/zf_driver_encoder.c index 8d514b7..ad4099e 100644 --- a/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_driver/zf_driver_encoder.c +++ b/Example/Coreboard_Demo/E02_uart_demo/libraries/zf_driver/zf_driver_encoder.c @@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n) //------------------------------------------------------------------------------------------------------------------- void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin) { -// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init + zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init IfxGpt12_enableModule(&MODULE_GPT120); IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4); diff --git a/Example/Coreboard_Demo/E02_uart_demo/user/isr.c b/Example/Coreboard_Demo/E02_uart_demo/user/isr.c index 7dc0dd2..927ed43 100644 --- a/Example/Coreboard_Demo/E02_uart_demo/user/isr.c +++ b/Example/Coreboard_Demo/E02_uart_demo/user/isr.c @@ -40,14 +40,14 @@ // 򵥵˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ // **************************** PITжϺ **************************** -IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) -{ - interrupt_global_enable(0); // жǶ - pit_clear_flag(CCU60_CH0); - - - -} +//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) +//{ +// interrupt_global_enable(0); // жǶ +// pit_clear_flag(CCU60_CH0); +// +// +// +//} IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) @@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж { exti_flag_clear(ERU_CH0_REQ0_P15_4); - + + imu660rc_callback(); // 660RC ģ INT ж } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж @@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) { exti_flag_clear(ERU_CH5_REQ1_P15_8); - } } @@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) // exti_flag_clear(ERU_CH6_REQ9_P20_0); // } // } - IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO) { interrupt_global_enable(0); // жǶ @@ -175,14 +174,14 @@ IFX_INTERRUPT(uart0_tx_isr, 0, UART0_TX_INT_PRIO) } -//IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO) -//{ -// interrupt_global_enable(0); // жǶ -// -//#if DEBUG_UART_USE_INTERRUPT // debug ж -// debug_interrupr_handler(); // debug ڽմ ݻᱻ debug λȡ -//#endif // ޸ DEBUG_UART_INDEX δҪŵӦĴжȥ -//} +IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO) +{ + interrupt_global_enable(0); // жǶ + +#if DEBUG_UART_USE_INTERRUPT // debug ж + debug_interrupr_handler(); // debug ڽմ ݻᱻ debug λȡ +#endif // ޸ DEBUG_UART_INDEX δҪŵӦĴжȥ +} // 1Ĭӵͷô @@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { interrupt_global_enable(0); // жǶ - gnss_uart_callback(); // GPSڻص + gnss_uart_callback(); // GNSSڻص diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E03_adc_demo/libraries/doc/version.txt index 1e222a3..8ce85ca 100644 --- a/Example/Coreboard_Demo/E03_adc_demo/libraries/doc/version.txt +++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/doc/version.txt @@ -1,3 +1,13 @@ +V3.4.4 + SCC8660ʽ + ָV2 + ޸ips200ʾscc8660ͷʽ + ޸ips114ʾscc8660ͷʽ +V3.4.3 + 660RC +V3.4.2 + ޸printfضеĺ궨 + WIFI_SPI V3.4.1 ޸Ĵڷ麯еķ ޸ips200proע diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_common/zf_common_headfile.h index 27b7965..e8d6021 100644 --- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_common/zf_common_headfile.h @@ -91,6 +91,7 @@ #include "zf_device_imu660ra.h" #include "zf_device_imu660rb.h" #include "zf_device_imu660rx.h" +#include "zf_device_imu660rc.h" #include "zf_device_imu963ra.h" #include "zf_device_ips114.h" #include "zf_device_ips200.h" diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/printf_redirect.c index c44d826..299da76 100644 --- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/printf_redirect.c +++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/printf_redirect.c @@ -45,7 +45,7 @@ //------------------------------------------------------------------------------------------------------------------- int fputc(int ch, FILE *stream) { - uart_write_byte(DEBUG_UART_INDEX, (char)ch); + uart_write_byte(PRINTF_USE_UART, (char)ch); return (ch); } @@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len) int fgetc(FILE *f) { #if PRINTF_OUTPUT_TYPE == 0 - return uart_read_byte(DEBUG_UART_INDEX); + return uart_read_byte(PRINTF_USE_UART); #else uint8 buf; wifi_spi_read_buffer(&buf, 1); diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant.c index 231b20d..3e9ec74 100644 --- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,423 +24,519 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_debug.h" #include "seekfree_assistant.h" +// ͨö +typedef enum +{ + SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 , + SEEKFREE_ASSISTANT_SEND_CAMERA_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD , -extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); -extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); + SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 , -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) + SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 , +}seekfree_assistant_cmd_type_enum; + +#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ +#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ + +// ݷͺָ +extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); +seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + +// ݽպָ +extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); +seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) #include "zf_common_fifo.h" -static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO -static fifo_struct seekfree_assistant_fifo = // FIFOṹ +static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE]; +static fifo_struct seekfree_assistant_debug_param_fifo = { - .buffer = seekfree_assistant_buffer, + .buffer = seekfree_assistant_debug_param_buffer, .execution = FIFO_IDLE, .type = FIFO_DATA_8BIT, .head = 0, .end = 0, - .size = SEEKFREE_ASSISTANT_BUFFER_SIZE, - .max = SEEKFREE_ASSISTANT_BUFFER_SIZE, -}; + .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, + .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, +}; #endif -static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ -static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ -static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ - -seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ -seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ - -seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ -vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ - //------------------------------------------------------------------------------------------------------------------- // ͺ -// ˵ *buffer ҪУݵַ -// ˵ length У鳤 -// ز uint8 ֵ +// ˵ *buffer ҪУݵַ +// ˵ length У鳤 +// ز uint8 ֵ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length) +static uint8 seekfree_assistant_sum (void *buffer, uint32 length) { uint8 temp_sum = 0; + uint8 *ptr = (uint8 *)buffer; while(length--) { - temp_sum += *buffer++; + temp_sum += *ptr ++; } return temp_sum; } //------------------------------------------------------------------------------------------------------------------- -// ͼͺ -// ˵ camera_type ͷ -// ˵ *image_addr ͼ׵ַ -// ˵ boundary_num ͼа߽ -// ˵ width ͼ -// ˵ height ͼ߶ +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ // ز void -// ʹʾ +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height) +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer) { - uint32 image_size = 0; + zf_assert(NULL != ccd_obj); + zf_assert(NULL != data_buffer); - seekfree_assistant_camera_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_data.function = SEEKFREE_ASSISTANT_CAMERA_FUNCTION; - seekfree_assistant_camera_data.camera_type = (camera_type << 5) | ((image_addr != NULL ? 0 : 1) << 4) | boundary_num; - // дϢЭ鲿 - seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct); - seekfree_assistant_camera_data.image_width = width; - seekfree_assistant_camera_data.image_height = height; + memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct)); + ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD; + ccd_obj->config.channel_index = channel_index; - // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct)); - - // ͷͼͼС - switch(camera_type) + uint16 data_max = 256; + uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT; + loop_count = (2 >= loop_count) ? (loop_count) : (2); + for(uint8 i = 0; loop_count > i; i ++) { - case SEEKFREE_ASSISTANT_OV7725_BIN: - { - image_size = width * height / 8; - }break; - - case SEEKFREE_ASSISTANT_MT9V03X: - { - image_size = width * height; - }break; - - case SEEKFREE_ASSISTANT_SCC8660: - { - image_size = width * height * 2; - }break; + data_max *= 4; } - // ͼ - if(NULL != image_addr) + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF); + #else + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + ccd_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + ccd_obj->config.data_type = data_type; + } + + // ¼ʵֽ uint16 Ҫݳ + ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1)); + // Ȼ¼Ӧݻ + ccd_obj->data_buffer = data_buffer; + + // У + ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.check_sum += seekfree_assistant_sum( + &(ccd_obj->config.cmd), + sizeof(ccd_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)ccd_obj, + sizeof(ccd_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(ccd_obj->data_buffer), + ccd_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer) +{ + zf_assert(NULL != camera_obj); + + memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct)); + camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD; + camera_obj->config.camera_type = camera_type; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF); + #else + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type + && NULL != data_buffer) { - seekfree_assistant_transfer_callback(image_addr, image_size); + camera_obj->config.data_type = 0x02; + } + else + { + camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01); + } + + // RGB565 ͼ ôֽ + camera_obj->buffer_byte_size = + image_width * image_height + * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1)); + camera_obj->buffer_byte_size = + (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type) + ? (camera_obj->buffer_byte_size / 8) + : (camera_obj->buffer_byte_size); + camera_obj->data_buffer = data_buffer; + + // У + camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.check_sum += seekfree_assistant_sum( + &(camera_obj->config.cmd), + sizeof(camera_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_obj, + sizeof(camera_obj->config)); + if(NULL != camera_obj->data_buffer) + { + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_obj->data_buffer), + camera_obj->buffer_byte_size); } } //------------------------------------------------------------------------------------------------------------------- -// ͼ߻ƺ -// ˵ boundary_id ID -// ˵ dot_num -// ˵ *dot_x ׵ַ -// ˵ *dot_y ׵ַ -// ˵ width ͼ -// ˵ height ͼ߶ +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 // ز void -// ʹʾ +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer) +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer) { - uint8 i; - uint16 dot_bytes = 0; // ֽ + zf_assert(NULL != camera_boundary_obj); + zf_assert(NULL != data_buffer); - dot_bytes = seekfree_assistant_camera_dot_data.dot_num; + memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct)); + camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD; - if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5)) - { - dot_bytes *= 2; + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + camera_boundary_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + camera_boundary_obj->config.data_type = data_type; } - // ȷ֡ͷܡ߽š곤ȡ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct)); + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif - for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++) - { - // жǷͺ - if(NULL != buffer->boundary_x[i]) - { - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes); - } + camera_boundary_obj->buffer_byte_size = + boundary_lenght * 2 + * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2)); + camera_boundary_obj->data_buffer = data_buffer; - // жǷ - if(NULL != buffer->boundary_y[i]) - { - // ûݣʾÿһֻһ߽ - // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣 - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes); - } - } + // У + camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.check_sum += seekfree_assistant_sum( + &(camera_boundary_obj->config.cmd), + sizeof(camera_boundary_obj->config) - 2); } //------------------------------------------------------------------------------------------------------------------- -// ʾͺ +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_boundary_obj, + sizeof(camera_boundary_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_boundary_obj->data_buffer), + camera_boundary_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color) +{ + seekfree_assistant_camera_rectangular_struct camera_rectangular_obj; + memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct)); + camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif + + // У + camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.check_sum += seekfree_assistant_sum( + &(camera_rectangular_obj.cmd), + sizeof(camera_rectangular_obj) - 2); + + seekfree_assistant_transfer_callback( + (const uint8 *)&camera_rectangular_obj, + sizeof(camera_rectangular_obj)); +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer) +{ + zf_assert(NULL != oscilloscope_obj); + zf_assert(NULL != data_buffer); + + memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct)); + oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD; + oscilloscope_obj->config.channel_max = + (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max) + ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX) + : ((0 == channel_max) ? (1) : (channel_max)); + oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00); + oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4; + oscilloscope_obj->data_buffer = data_buffer; +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ // ˵ *seekfree_assistant_oscilloscope ʾݽṹ // ز void // ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope) +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj) { - uint8 packet_size; - - // λ - seekfree_assistant_oscilloscope->channel_num &= 0x0f; - - zf_assert(SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT >= seekfree_assistant_oscilloscope->channel_num); - - // ֡ͷ - seekfree_assistant_oscilloscope->head = SEEKFREE_ASSISTANT_SEND_HEAD; - - // дϢ - packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4; - seekfree_assistant_oscilloscope->length = packet_size; - - // д빦ͨ - seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE; - // У - seekfree_assistant_oscilloscope->check_sum = 0; - seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size); + oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + &(oscilloscope_obj->config.cmd), + sizeof(oscilloscope_obj->config) - 2); + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + (oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); - // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[] - - seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size); + seekfree_assistant_transfer_callback( + (const uint8 *)oscilloscope_obj, + sizeof(oscilloscope_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); } +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) //------------------------------------------------------------------------------------------------------------------- -// ͼϢú -// ˵ camera_type ͼ -// ˵ image_addr ͼַ NULLʾֻͱϢλ -// ˵ width ͼ -// ˵ height ͼ߶ +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ // ز void -// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H); -// עϢ +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height) +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj) { - seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION; - // дϢ - seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct); + zf_assert(NULL != debug_param_obj); - seekfree_assistant_camera_buffer.camera_type = camera_type; - seekfree_assistant_camera_buffer.image_addr = image_addr; - seekfree_assistant_camera_buffer.width = width; - seekfree_assistant_camera_buffer.height = height; -} + seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ + uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ + uint8 temp_sum = 0xFF; // Уʱ + uint32 read_length = 0; // ȡʱ -//------------------------------------------------------------------------------------------------------------------- -// ͼ߷ú -// ˵ boundary_type ߽ -// ˵ dot_num һ߽жٸ -// ˵ dot_x1 ű1ĵַ NULLʾͱ1 -// ˵ dot_x2 ű2ĵַ NULLʾͱ2 -// ˵ dot_x3 ű3ĵַ NULLʾͱ3 -// ˵ dot_y1 ű1ĵַ NULLʾͱ1 -// ˵ dot_y2 ű2ĵַ NULLʾͱ2 -// ˵ dot_y3 ű3ĵַ NULLʾͱ3 -// ز void -// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк -// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ -// ʹʾ seekfree_assistant_camera_config(XY_BOUNDARY, 160, xy_x1_boundary, xy_x2_boundary, xy_x3_boundary, xy_y1_boundary, xy_y2_boundary, xy_y3_boundary); // ͼʱߣ߰ -// עϢ -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3) -{ - uint8 i = 0; - uint8 boundary_num = 0; - uint8 boundary_data_type = 0; - - // ͼͻǷ׼, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_dot_data.dot_num = dot_num; - seekfree_assistant_camera_dot_data.valid_flag = 0; - for(i = 0; i < 3; i++) - { - seekfree_assistant_camera_buffer.boundary_x[i] = NULL; - seekfree_assistant_camera_buffer.boundary_y[i] = NULL; - } - - switch(boundary_type) - { - case X_BOUNDARY: - { - if(NULL != dot_x1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x1; - } - if(NULL != dot_x2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x2; - } - if(NULL != dot_x3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x3; - } - - if(255 < seekfree_assistant_camera_buffer.height) - { - boundary_data_type = 1; - } - }break; - - case Y_BOUNDARY: - { - if(NULL != dot_y1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if(NULL != dot_y2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if(NULL != dot_y3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if(255 < seekfree_assistant_camera_buffer.width) - { - boundary_data_type = 1; - } - }break; - - case XY_BOUNDARY: - { - if((NULL != dot_x1) && (NULL != dot_y1)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if((NULL != dot_x2) && (NULL != dot_y2)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if((NULL != dot_x3) && (NULL != dot_y3)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x3; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if((255 < seekfree_assistant_camera_buffer.width) || (255 < seekfree_assistant_camera_buffer.height)) - { - boundary_data_type = 1; - } - }break; - - case NO_BOUNDARY:break; - } - - seekfree_assistant_camera_dot_data.dot_type = (boundary_type << 6) | (boundary_data_type << 5) | boundary_num; -} - -//------------------------------------------------------------------------------------------------------------------- -// ַͷͼ -// ˵ void -// ز void -// ʹʾ -// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_send (void) -{ - // ͼͻǷ׼ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_data_send(seekfree_assistant_camera_buffer.camera_type, seekfree_assistant_camera_buffer.image_addr, seekfree_assistant_camera_dot_data.dot_type & 0x0f, seekfree_assistant_camera_buffer.width, seekfree_assistant_camera_buffer.height); - - if(seekfree_assistant_camera_dot_data.dot_type & 0x0f) - { - seekfree_assistant_camera_dot_send(&seekfree_assistant_camera_buffer); - } -} - - -//------------------------------------------------------------------------------------------------------------------- -// ֽյ -// ˵ void -// ز void -// ʹʾ ֻҪŵеPITжϻѭ -//------------------------------------------------------------------------------------------------------------------- -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) -void seekfree_assistant_data_analysis (void) -{ - uint8 temp_sum; - uint32 read_length; - seekfree_assistant_parameter_struct *receive_packet; - - // ʹuint32ж壬ĿΪ˱ֽ֤ڶ - uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4]; - - // Զȡ, ԶĴ䷽ʽӽջصжȡ - read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE); + // Զȡһݰ + // ԶĴ䷽ʽӽջصжȡ + read_length = seekfree_assistant_receive_callback( + debug_param_cmd_pointer, + sizeof(seekfree_assistant_debug_param_cmd_struct)); if(read_length) - { - // ȡдFIFO - fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length); + { // ȡдFIFO + fifo_write_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + read_length); } - while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo)) - { - read_length = sizeof(seekfree_assistant_parameter_struct); - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_ONLY); + while( sizeof(seekfree_assistant_debug_param_cmd_struct) + <= fifo_used(&seekfree_assistant_debug_param_fifo)) + { // FIFO һݰ ôͽн + // ֱӶһݰ + read_length = sizeof(seekfree_assistant_debug_param_cmd_struct); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_ONLY); - if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0]) - { - // û֡ͷFIFOȥһ - read_length = 1; - } - else - { - // ҵ֡ͷ - receive_packet = (seekfree_assistant_parameter_struct *)temp_buffer; - temp_sum = receive_packet->check_sum; - receive_packet->check_sum = 0; - if(temp_sum == seekfree_assistant_sum((uint8 *)temp_buffer, sizeof(seekfree_assistant_parameter_struct))) - { - // Уɹ - seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data; - seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1; + if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0] + && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2]) + { // ֱƥ֡ͷ ҹҲƥ + temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ + debug_param_cmd_obj.check_sum = 0; // հУֵ У + if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct))) + { // Уɹ + debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float; + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0]; + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + #endif + debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1; + temp_sum = 0x00; } else - { - read_length = 1; + { // Уƥ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + } + else + { // ƥ䲻֡ͷ͹ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + + if(0xFF == temp_sum) + { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ + for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++) + { // Ϊȡһ һ + if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length]) + { // ҵ¸֡ͷ˳ + break; + } } } // ʹõ - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_AND_CLEAN); } } #endif - - - diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant.h index 5b7e1b5..937f784 100644 --- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,142 +24,292 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ - #include "zf_common_typedef.h" +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 , + SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 , +}seekfree_assistant_data_type_enum; -// 1ʹܲڵĹ 0رղڵĹ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 ) - - - -// FIFOС -#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) - -// ʾͨ -#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) - -// Եͨ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) - -// ͼ -#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) - -// Ƭλ͵֡ͷ -#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) - -// ͷ -#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) -#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) -#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) - -// λƬ͵֡ͷ -#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) - -// -#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) - +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ +}seekfree_assistant_ccd_resolution_enum; // ͷö typedef enum { - // ͷͺŶ - SEEKFREE_ASSISTANT_OV7725_BIN = 1, - SEEKFREE_ASSISTANT_MT9V03X, - SEEKFREE_ASSISTANT_SCC8660, - // ͼͶ - SEEKFREE_ASSISTANT_BINARY = 1, - SEEKFREE_ASSISTANT_GRAY, - SEEKFREE_ASSISTANT_RGB565, -}seekfree_assistant_image_type_enum; + SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY , + SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 , -// ͷö -typedef enum -{ - // ͷͺŶ - X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ - Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ - XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ - NO_BOUNDARY, // ͵ͼûбϢ -}seekfree_assistant_boundary_type_enum; + // ͷͺƥ䶨 + SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X , + SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 , +}seekfree_assistant_camera_type_enum; + +#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨 + +#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ +#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤ + +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС +#endif typedef struct { - uint8 head; // ֡ͷ - uint8 channel_num; // λΪ λΪͨ - uint8 check_sum; // У - uint8 length; // - float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + uint8 data_lenght_buffer[2] ; // CCD ݳ + uint8 channel_color_buffer[2] ; // ͨɫ + uint8 channel_data_max[2] ; // ֵͨ + uint8 data_type ; // ȷϴС + uint8 reserve ; // + }config; + uint16 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_ccd_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 camera_type ; // ͷ + uint8 image_width_buffer[2] ; // ͼ + uint8 image_height_buffer[2] ; // ͼ߶ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 data_type ; // ȷϴС + uint8 boundary_lenght_buffer[2] ; // ߳ + uint8 color_buffer[2] ; // ͨɫ + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_boundary_struct; + +typedef struct +{ + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 reserve ; // + uint8 x_axis_buffer[2] ; // X + uint8 y_axis_buffer[2] ; // Y + uint8 width_buffer[2] ; // ο + uint8 height_buffer[2] ; // θ߶ + uint8 color_buffer[2] ; // ɫ +}seekfree_assistant_camera_rectangular_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_max ; // ͨ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ }seekfree_assistant_oscilloscope_struct; +typedef union +{ + uint8 data_uint8[4] ; + float data_float ; +}seekfree_assistant_param_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ - uint8 length; // ȣЭ鲿֣ - uint16 image_width; // ͼ - uint16 image_height; // ͼ߶ -}seekfree_assistant_camera_struct; - - -typedef struct -{ - uint8 head; // ֡ͷ - uint8 function; // - uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽ - uint8 length; // ȣЭ鲿֣ - uint16 dot_num; // - uint8 valid_flag; // ͨʶ - uint8 reserve; // -}seekfree_assistant_camera_dot_struct; - -typedef struct -{ - void *image_addr; // ͷַ - uint16 width; // ͼ - uint16 height; // ͼ߶ - seekfree_assistant_image_type_enum camera_type; // ͷ - void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ - void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ -}seekfree_assistant_camera_buffer_struct; + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + seekfree_assistant_param_struct dat ; // һ + +}seekfree_assistant_debug_param_cmd_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 channel; // ͨ - uint8 check_sum; // У - float data; // -}seekfree_assistant_parameter_struct; + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint8_struct; + + +typedef struct +{ + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint16_struct; + +typedef struct +{ + float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; + uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; +}seekfree_assistant_debug_param_struct; typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length); typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length); -extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ -extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ - - -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope); -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height); -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3); -void seekfree_assistant_camera_send (void); -void seekfree_assistant_data_analysis (void); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ +// ز void +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, 16] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *seekfree_assistant_oscilloscope ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj); + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj); +#endif #endif diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c index d139201..23205d5 100644 --- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,23 +24,20 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_typedef.h" #include "zf_common_fifo.h" #include "zf_common_debug.h" -#include "zf_driver_uart.h" + #include "zf_device_wireless_uart.h" -#include "zf_device_ble6a20.h" -#include "zf_device_bluetooth_ch9141.h" -#include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" #include "seekfree_assistant.h" @@ -50,7 +47,6 @@ extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ - //------------------------------------------------------------------------------------------------------------------- // ַͺ // ˵ *buff Ҫ͵ݵַ @@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv // ز uint32 ʣδݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) +uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݷ͹ @@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) // ز uint32 յݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) +uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݽչ return 0; @@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) // ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ // ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) +void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) { switch(transfer_device) { case SEEKFREE_ASSISTANT_DEBUG_UART: { -#if DEBUG_UART_USE_INTERRUPT == 1 seekfree_assistant_transfer_callback = debug_send_buffer; seekfree_assistant_receive_callback = debug_read_ring_buffer; -#endif }break; - + case SEEKFREE_ASSISTANT_WIRELESS_UART: { seekfree_assistant_transfer_callback = wireless_uart_send_buffer; seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; - - case SEEKFREE_ASSISTANT_BLE6A20: - { - seekfree_assistant_transfer_callback = ble6a20_send_buffer; - seekfree_assistant_receive_callback = ble6a20_read_buffer; - }break; - case SEEKFREE_ASSISTANT_CH9141: - { - seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; - seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; - }break; - - case SEEKFREE_ASSISTANT_WIFI_UART: - { - seekfree_assistant_transfer_callback = wifi_uart_send_buffer; - seekfree_assistant_receive_callback = wifi_uart_read_buffer; - }break; - + // case SEEKFREE_ASSISTANT_CH9141: + // { + // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; + // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; + // }break; + + // case SEEKFREE_ASSISTANT_WIFI_UART: + // { + // seekfree_assistant_transfer_callback = wifi_uart_send_buffer; + // seekfree_assistant_receive_callback = wifi_uart_read_buffer; + // }break; + case SEEKFREE_ASSISTANT_WIFI_SPI: { seekfree_assistant_transfer_callback = wifi_spi_send_buffer; seekfree_assistant_receive_callback = wifi_spi_read_buffer; }break; - - case SEEKFREE_ASSISTANT_CUSTOM: - { + + default: + { // Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ - + seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + seekfree_assistant_receive_callback = seekfree_assistant_receive; }break; } } - - diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.h index 2ccfd8a..0e28f49 100644 --- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,13 +24,13 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,7 +43,6 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ SEEKFREE_ASSISTANT_WIRELESS_UART, // ת - SEEKFREE_ASSISTANT_BLE6A20, // ת SEEKFREE_ASSISTANT_CH9141, // CH9141 SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_absolute_encoder.h index 1166c84..dc091aa 100644 --- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_absolute_encoder.h +++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_absolute_encoder.h @@ -62,7 +62,7 @@ //==================================================== SPI ==================================================== #else //====================================================Ӳ SPI ==================================================== -#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI +#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI #define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI #define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK #define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI @@ -70,7 +70,7 @@ //====================================================Ӳ SPI ==================================================== #endif -#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ +#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ #define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN))) #define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ble6a20.h index 6f4544a..6af089f 100644 --- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ble6a20.h +++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ble6a20.h @@ -76,7 +76,7 @@ // 1Զ Զʵ޸ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ // Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000 -#define BLE6A20_AUTO_BAUD_RATE ( 0 ) +#define BLE6A20_AUTO_BAUD_RATE ( 1 ) #if (1 == BLE6A20_AUTO_BAUD_RATE) typedef enum diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rc.c new file mode 100644 index 0000000..68840e2 --- /dev/null +++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rc.c @@ -0,0 +1,563 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#include "math.h" +#include "zf_common_debug.h" +#include "zf_driver_delay.h" +#include "zf_driver_spi.h" +#include "zf_driver_gpio.h" +#include "zf_driver_soft_iic.h" +#include "zf_device_config.h" +#include "zf_driver_uart.h" +#include "zf_driver_exti.h" + +#include "zf_device_imu660rc.h" + +#ifndef M_PI +#define M_PI 3.1415926f +#endif + + +static uint8 imu660rc_quarternion_rate; + +float imu660rc_transition_factor[2]; +int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro () +int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ) +float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ +float imu660rc_quarternion[4]; // Ԫ + + + +#if IMU660RC_USE_SOFT_IIC +static soft_iic_info_struct imu660rc_iic_struct; + +#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data))) +#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len))) +#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg))) +#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len))) +#else +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC дĴ +// ˵ reg Ĵַ +// ˵ data +// ز void +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_write_register (uint8 reg, uint8 data) +{ + IMU660RC_CS(0); + spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data); + IMU660RC_CS(1); +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ĵ +// ˵ reg Ĵַ +// ز uint8 +// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_read_register (uint8 reg) +{ + uint8 data; + IMU660RC_CS(0); + data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R); + IMU660RC_CS(1); + return data; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC +// ˵ reg Ĵַ +// ˵ data ݻ +// ˵ len ݳ +// ز void +// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len) +{ + IMU660RC_CS(0); + spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len); + IMU660RC_CS(1); +} +#endif + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC fp16ת +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint32 fp16_to_float(uint16 h) +{ + uint16 h_exp = (h & 0x7c00u); + uint32 f_sgn = ((uint32)h & 0x8000u) << 16; + switch (h_exp) + { + case 0x0000u: // 0 or subnormal + { + uint16 h_sig = (h & 0x03ffu); + // Signed zero + if (h_sig == 0) + { + return f_sgn; + } + // Subnormal + h_sig <<= 1; + while ((h_sig & 0x0400u) == 0) + { + h_sig <<= 1; + h_exp++; + } + uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23; + uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13; + return f_sgn + f_exp + f_sig; + } + case 0x7c00u: // inf or NaN + { + // All-ones exponent and a copy of the significand + return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13); + } + default: // normalized + { + // Just need to adjust the exponent and shift + return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13); + } + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫһ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_normalize(float quat[4], uint16 *fp16) +{ + float n = 0; + float temp[4]; + + *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]); + *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]); + *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]); + *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]); + + n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3]; + n = sqrtf(n); + + if(n > 0.001f) // Խӽ0ֵ + { + n = temp[3] < 0.0f ? -n : n; + + quat[0] = temp[1] / n; + quat[1] = temp[2] / n; + quat[2] = temp[0] / n; + quat[3] = temp[3] / n; + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫתŷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw) +{ + float euler[3]; + + float sqx = quat[0] * quat[0]; + float sqy = quat[1] * quat[1]; + float sqz = quat[2] * quat[2]; + + euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx)); + euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2])); + euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz)); + + // תǶ + euler[0] = 180 * (euler[0]) / M_PI; + euler[1] = 180 * (euler[1]) / M_PI; + euler[2] = 180 * (euler[2]) / M_PI; + + // Ƕȵ + euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2]; + + *roll = euler[0]; + *pitch = euler[1]; + *yaw = euler[2]; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ÷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank) +{ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank); +} + + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Լ +// ˵ void +// ز uint8 1-Լʧ 0-Լɹ +// ʹʾ imu660rc_self_check(); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_self_check (void) +{ + uint8 dat = 0, return_state = 0; + uint16 timeout_count = 0; + do + { + if(IMU660RC_TIMEOUT_COUNT < timeout_count ++) + { + return_state = 1; + break; + } + dat = imu660rc_read_register(IMU660RC_CHIP_ID); + system_delay_ms(1); + }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû⵽豸 + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ٶȼ +// ˵ void +// ز void +// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_acc (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6); + imu660rc_acc_x = dat[0]; + imu660rc_acc_y = dat[1]; + imu660rc_acc_z = dat[2]; + } +} +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC +// ˵ void +// ز void +// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_gyro (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6); + imu660rc_gyro_x = dat[0]; + imu660rc_gyro_y = dat[1]; + imu660rc_gyro_z = dat[2]; + } +} + + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ԪݲתΪŷ +// ˵ void +// ز void +// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı +// עϢ ҪINT2Ŵжϵô˺ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_quarternion(void) +{ + uint8 i; + uint16 buff[4]; + uint8 *buff1_ptr; + int16 *buff2_ptr; + + if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate) + { + buff1_ptr = (uint8 *)buff; + + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x20); + imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31); + + for(i = 0; 8 > i; i++) + { + imu660rc_write_register(0x08, 0x4C + i); + buff1_ptr[i] = imu660rc_read_register(0x09); + } + + imu660rc_write_register(IMU660RC_PAGE_RW, 0x0); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // Ԫһ + quarternion_normalize(imu660rc_quarternion, buff); + // Ԫתŷ + quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw); + + // ȡٶٶϢ + #if(1 == IMU660RC_QUARTERNION_GET_ACC) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6); + imu660rc_acc_x = buff2_ptr[0]; + imu660rc_acc_y = buff2_ptr[1]; + imu660rc_acc_z = buff2_ptr[2]; + } + #endif + #if(1 == IMU660RC_QUARTERNION_GET_GYRO) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6); + imu660rc_gyro_x = buff2_ptr[0]; + imu660rc_gyro_y = buff2_ptr[1]; + imu660rc_gyro_z = buff2_ptr[2]; + } + #endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RCжϻصҪжڶȡԪ +// ˵ void +// ز void +// ʹʾ +// עϢ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_callback(void) +{ + imu660rc_get_quarternion(); + +} + +//------------------------------------------------------------------------------------------------------------------- +// ʼ IMU660RC +// ˵ quarternion_rate ѡԪ +// ز uint8 1-ʼʧ 0-ʼɹ +// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate) +{ + uint8 return_state = 0; + + imu660rc_quarternion_rate = quarternion_rate; + #if IMU660RC_USE_SOFT_IIC + soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿ + + #else + spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿ + gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿ + #endif + + system_delay_ms(10); + + do + { + if(imu660rc_self_check()) // IMU660RC Լ + { + // ˶Ϣ ʾλ + // ô IMU660RC Լʱ˳ + // һ½û ûܾǻ + zf_log(0, "imu660rc self check error."); + return_state = 1; + break; + } + + // λ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04); + system_delay_ms(30); + + // ÿ¹ַ + imu660rc_write_register(IMU660RC_CTRL3, 0x44); + + switch(IMU660RC_ACC_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_ACC_SAMPLE_SGN_2G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x00); + imu660rc_transition_factor[0] = 16393.44; + }break; + case IMU660RC_ACC_SAMPLE_SGN_4G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x01); + imu660rc_transition_factor[0] = 8196.72; + }break; + case IMU660RC_ACC_SAMPLE_SGN_8G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x02); + imu660rc_transition_factor[0] = 4098.36; + }break; + case IMU660RC_ACC_SAMPLE_SGN_16G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x03); + imu660rc_transition_factor[0] = 2049.18; + }break; + } + if(1 == return_state) + { + break; + } + + switch(IMU660RC_GYRO_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_125DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x00); + imu660rc_transition_factor[1] = 228.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_250DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x01); + imu660rc_transition_factor[1] = 114.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_500DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x02); + imu660rc_transition_factor[1] = 57.1428; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_1000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x03); + imu660rc_transition_factor[1] = 28.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_2000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x04); + imu660rc_transition_factor[1] = 14.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_4000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x0C); + imu660rc_transition_factor[1] = 7.14285; + }break; + } + if(1 == return_state) + { + break; + } + + // ôģʽΪ߾ģʽԼ + imu660rc_write_register(IMU660RC_CTRL1, 0x15); + imu660rc_write_register(IMU660RC_CTRL2, 0x18); + + // LPF1˲ + imu660rc_write_register(IMU660RC_CTRL7, 0x01); + + // LPF2˲ + imu660rc_write_register(IMU660RC_CTRL9, 0x08); + + // ԪӦ + if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate) + { + // жϴź + imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80); + imu660rc_write_register(IMU660RC_CTRL4, 0x08); + imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30); + + // üٶȡٶ + imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3)); + imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3)); + + // Ԫʲ + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3)); + imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x00); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // жϼ + exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING); + } + }while(0); + + return return_state; +} + + + + + + + + + + + + + diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rc.h new file mode 100644 index 0000000..dd5a9e3 --- /dev/null +++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rc.h @@ -0,0 +1,211 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#ifndef _zf_device_imu660rc_h_ +#define _zf_device_imu660rc_h_ + +#include "zf_common_typedef.h" + + +// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC +// IMU660RC_USE_SOFT_IICҪȱ벢س򣬵ƬģҪϵͨѶ +#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ + +#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ +//==================================================== IIC ==================================================== +#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ +#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL +#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA +//==================================================== IIC ==================================================== +#else + +//====================================================Ӳ SPI ==================================================== +#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI +#define IMU660RC_SPI (SPI_0) // Ӳ SPI +#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK +#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI +#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO +//====================================================Ӳ SPI ==================================================== +#endif +#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ +#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) ) +#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ + + +#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ +#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ + +typedef enum +{ + IMU660RC_MAIN_MEM_BANK = 0x00, + IMU660RC_HUB_MEM_BANK = 0x40, + IMU660RC_EMBED_MEM_BANK = 0x80, +}imu660rc_mem_bank_enum; + +typedef enum +{ + IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2) + IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G + IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G + IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G +}imu660rc_acc_sample_config; + +typedef enum +{ + IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S) + IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS + IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS + IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS + IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS + IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS +}imu660rc_gyro_sample_config; + +typedef enum +{ + IMU660RC_QUARTERNION_15HZ, // 15 Hz + IMU660RC_QUARTERNION_30HZ, // 30 Hz + IMU660RC_QUARTERNION_60HZ, // 60 Hz + IMU660RC_QUARTERNION_120HZ, // 120Hz + IMU660RC_QUARTERNION_240HZ, // 240Hz + IMU660RC_QUARTERNION_480HZ, // 480Hz + IMU660RC_QUARTERNION_DISABLE, // Ԫ +}imu660rc_quarternion_rate_config; + + +//================================================ IMU660RC ڲַ================================================ +#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ +#define IMU660RC_SPI_W ( 0x00 ) +#define IMU660RC_SPI_R ( 0x80 ) +#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ + + +//================================================ IMU660RC Ĵַ================================================ +#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 ) +#define IMU660RC_INT2_CTRL ( 0x0E ) +#define IMU660RC_CHIP_ID ( 0x0F ) +#define IMU660RC_CTRL1 ( 0x10 ) +#define IMU660RC_CTRL2 ( 0x11 ) +#define IMU660RC_CTRL3 ( 0x12 ) +#define IMU660RC_CTRL4 ( 0x13 ) +#define IMU660RC_CTRL5 ( 0x14 ) +#define IMU660RC_CTRL6 ( 0x15 ) +#define IMU660RC_CTRL7 ( 0x16 ) +#define IMU660RC_CTRL8 ( 0x17 ) +#define IMU660RC_CTRL9 ( 0x18 ) +#define IMU660RC_CTRL10 ( 0x19 ) +#define IMU660RC_CTRL_STATUS ( 0x1A ) +#define IMU660RC_STATUS_REG ( 0x1E ) +#define IMU660RC_OUT_TEMP_L ( 0x20 ) +#define IMU660RC_OUT_TEMP_H ( 0x21 ) +#define IMU660RC_OUTX_L_G ( 0x22 ) +#define IMU660RC_OUTX_H_G ( 0x23 ) +#define IMU660RC_OUTY_L_G ( 0x24 ) +#define IMU660RC_OUTY_H_G ( 0x25 ) +#define IMU660RC_OUTZ_L_G ( 0x26 ) +#define IMU660RC_OUTZ_H_G ( 0x27 ) +#define IMU660RC_OUTX_L_A ( 0x28 ) +#define IMU660RC_OUTX_H_A ( 0x29 ) +#define IMU660RC_OUTY_L_A ( 0x2A ) +#define IMU660RC_OUTY_H_A ( 0x2B ) +#define IMU660RC_OUTZ_L_A ( 0x2C ) +#define IMU660RC_OUTZ_H_A ( 0x2D ) + +#define IMU660RC_PAGE_SEL ( 0x02 ) +#define IMU660RC_EMB_FUNC_EN_A ( 0x04 ) +#define IMU660RC_PAGE_RW ( 0x17 ) +#define IMU660RC_SFLP_ODR ( 0x5E ) +#define IMU660RC_EMB_FUNC_CFG ( 0x63 ) + + + +extern float imu660rc_transition_factor[2]; +extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; // +extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ +extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ +extern float imu660rc_quarternion[4]; // Ԫ + + +void imu660rc_get_acc (void); +void imu660rc_get_gyro (void); +void imu660rc_get_quarternion (void); + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ٶȼתΪʵ +// ˵ acc_value ļٶȼ +// ز void +// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2) +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0]) + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC תΪʵ +// ˵ gyro_value +// ز void +// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1]) +void imu660rc_callback (void); +uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate); + + + +#endif diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rx.h index 45699d9..81b8b41 100644 --- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rx.h +++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_imu660rx.h @@ -97,7 +97,7 @@ //================================================ IMU660RX ȫֱ================================================ extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro () extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ) -extern float imu660ra_transition_factor[2]; +extern float imu660rx_transition_factor[2]; //================================================ IMU660RX ȫֱ================================================ diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips114.h index c56f310..9c4ac0d 100644 --- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips114.h +++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips114.h @@ -167,7 +167,7 @@ void ips114_init (void); // ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================= IPS114 չ================================================ #endif diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200.h index 850fb11..5bf4284 100644 --- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200.h +++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200.h @@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select); // ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================== IPS200 չ================================================ diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h index 98c5364..557e1d2 100644 --- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h @@ -86,7 +86,7 @@ // £SCC8660_PCLK_DIVԽͼԽ #define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1> #define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ -#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) +#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) #define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0 //================================================ SCC8660 ã֧ͫ֡ʰ汾=========================== diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.c index b51c600..b06e6a1 100644 --- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.c +++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.c @@ -24,7 +24,7 @@ * ļ zf_device_wifi_spi * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.9.20 +* ADS v1.10.2 * ƽ̨ TC264D * https://seekfree.taobao.com/ * @@ -63,6 +63,21 @@ #define SOCKET_CONNECT_TIME_OUT 50000 // λ #define OTHER_TIME_OUT 1000 // λ +#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088)) + #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088" +#endif + +#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE) + #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE" +#endif + + +#if (WIFI_SPI_TRANSFER_SIZE != 4088) + #error "WIFI_SPI_TRANSFER_SIZE must be == 4088" +#endif + + + char wifi_spi_version[12]; // ģ̼汾Ϣ char wifi_spi_mac_addr[20]; // ģMACַϢ char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ @@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void) { memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1; - return return_state; } @@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void) { memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1; - return return_state; } @@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void) { memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1; + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ȡϵͳʱ +// ˵ time_format ʱʽ +// ز *buffer ʱַַ СҪ30ֽ +// ز buffer_size С +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size) +{ + uint8 return_state = 1; + wifi_spi_packets_struct temp_packets; + uint8 send_cmd, receive_cmd; + + // ʱ30ֽ + // ģ̼V2汾 + if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2))) + { + send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0; + receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0; + + return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT); + if((0 == return_state) && (receive_cmd == temp_packets.head.command)) + { + return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2); + if(0 == return_state) + { + memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3); + buffer[temp_packets.head.length - 3] = 0; + } + } + } + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ɨȵ +// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз +// ˵ buffer_size ij +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +// עϢ ÿһаһwifi +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size) +{ + uint8 return_state; + + // ģV2汾Ĺִ̼֧˹ + if(!strncmp(wifi_spi_version, "V2", 2)) + { + return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT); + + if(0 == return_state) + { + #if (0 == WIFI_SPI_READ_TRANSFER) + wifi_spi_send_buffer(NULL, 0); + #endif + while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size)) + { + system_delay_ms(10); + } + } + } return return_state; } @@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) while(length) { - send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length; + send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length); if(wifi_spi_wait_idle(OTHER_TIME_OUT)) { @@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) return length; } +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ַͺͬ +// ˵ *string Ҫ͵ַ +// ز void +// ʹʾ wifi_spi_send_string("123"); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +void wifi_spi_send_string(const char *string) +{ + wifi_spi_send_buffer((uint8*)string, strlen(string)); +} + //------------------------------------------------------------------------------------------------------------------- // WIFI SPI ȡ // ˵ *buff ջ @@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) { zf_assert(NULL != buffer); - uint32 data_len = length; + uint32 fifo_read_length; + uint32 write_length = 0; + wifi_spi_packets_struct temp_packets; + + // жFIFOǷݣȴFIFOȡ + if(fifo_used(&wifi_spi_fifo)) + { + fifo_read_length = fifo_used(&wifi_spi_fifo); + fifo_read_length = length < fifo_read_length ? length : fifo_read_length; + fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN); + + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + } #if(1 == WIFI_SPI_READ_TRANSFER) - - wifi_spi_packets_struct temp_packets; - // WIFI SPI״̬жϻ߳ѾͨѶ򱾴βܷ if(WIFI_SPI_IDLE == wifi_spi_mutex) { - // ͨѶ״̬Ϊæ - wifi_spi_mutex = WIFI_SPI_BUSY; + wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ - // ͨѶ鿴ģǷδȡ do { - if(wifi_spi_wait_idle(OTHER_TIME_OUT)) + if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ + (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳ + ) { break; } + temp_packets.head.command = WIFI_SPI_DATA; temp_packets.head.length = 0; wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE); // յİǷ - if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) + if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) && + (temp_packets.head.length) + ) { - // յ - if(temp_packets.head.length) + if(length) + { + fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length; + memcpy(buffer, temp_packets.buffer, fifo_read_length); + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO + { + fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length); + } + } + else // ȫдFIFO { fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length); } @@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command); wifi_spi_mutex = WIFI_SPI_IDLE; } -#endif +#endif - fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN); - return data_len; + return write_length; } //------------------------------------------------------------------------------------------------------------------- @@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word) // MACַϢַʽwifi_spi_mac_addr wifi_spi_get_mac_addr(); - + if(NULL == wifi_ssid) + { + // ʼʱҪWIFI + break; + } return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word); if(return_state) { diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.h index eea8a78..e7cec39 100644 --- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.h +++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.h @@ -73,8 +73,8 @@ #if (WIFI_SPI_AUTO_CONNECT > 2) #error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]" #else -#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP -#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿ +#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP +#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666 #endif @@ -95,10 +95,15 @@ typedef enum WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ + WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI + WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾 WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ + WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1 + WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2 + WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3 // ӻش WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ @@ -110,6 +115,9 @@ typedef enum WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾 WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں + WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ + WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ + WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ WIFI_SPI_INVALID2 = 0xFF // Чݰ }wifi_spi_packets_command_enum; @@ -134,19 +142,27 @@ typedef struct uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // }wifi_spi_packets_struct; - +typedef enum +{ + WIFI_SPI_UTC_0 = 1, // ʱ + WIFI_SPI_GMT, // ʱ תΪGMTʽ׺GMT һڶԽƶ˴ģʹ + WIFI_SPI_UTC_8, // ʱ +}wifi_spi_time_enum; + extern char wifi_spi_version[12]; // ̼汾 ַ extern char wifi_spi_mac_addr[20]; // ģMACַ ַ extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ -uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); -uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); -uint8 wifi_spi_socket_disconnect (void); -uint8 wifi_spi_udp_send_now (void); -uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); -uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size); +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size); +uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); +uint8 wifi_spi_socket_disconnect (void); +uint8 wifi_spi_udp_send_now (void); +uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); +void wifi_spi_send_string (const char *string); +uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); -uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); #endif - diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.h index 0f392ff..24b88cc 100644 --- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.h +++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.h @@ -73,7 +73,7 @@ #if (WIFI_UART_AUTO_CONNECT > 3) #error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]" #else -#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP +#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP #define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_UART_LOCAL_PORT "8080" // ˿ #endif diff --git a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_driver/zf_driver_encoder.c index 8d514b7..ad4099e 100644 --- a/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_driver/zf_driver_encoder.c +++ b/Example/Coreboard_Demo/E03_adc_demo/libraries/zf_driver/zf_driver_encoder.c @@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n) //------------------------------------------------------------------------------------------------------------------- void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin) { -// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init + zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init IfxGpt12_enableModule(&MODULE_GPT120); IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4); diff --git a/Example/Coreboard_Demo/E03_adc_demo/user/isr.c b/Example/Coreboard_Demo/E03_adc_demo/user/isr.c index e19382e..927ed43 100644 --- a/Example/Coreboard_Demo/E03_adc_demo/user/isr.c +++ b/Example/Coreboard_Demo/E03_adc_demo/user/isr.c @@ -40,14 +40,14 @@ // 򵥵˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ // **************************** PITжϺ **************************** -IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) -{ - interrupt_global_enable(0); // жǶ - pit_clear_flag(CCU60_CH0); - - - -} +//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) +//{ +// interrupt_global_enable(0); // жǶ +// pit_clear_flag(CCU60_CH0); +// +// +// +//} IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) @@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж { exti_flag_clear(ERU_CH0_REQ0_P15_4); - + + imu660rc_callback(); // 660RC ģ INT ж } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж @@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) { exti_flag_clear(ERU_CH5_REQ1_P15_8); - } } @@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) // exti_flag_clear(ERU_CH6_REQ9_P20_0); // } // } - IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO) { interrupt_global_enable(0); // жǶ @@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { interrupt_global_enable(0); // жǶ - gnss_uart_callback(); // GPSڻص + gnss_uart_callback(); // GNSSڻص diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E04_pwm_demo/libraries/doc/version.txt index 1e222a3..8ce85ca 100644 --- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/doc/version.txt +++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/doc/version.txt @@ -1,3 +1,13 @@ +V3.4.4 + SCC8660ʽ + ָV2 + ޸ips200ʾscc8660ͷʽ + ޸ips114ʾscc8660ͷʽ +V3.4.3 + 660RC +V3.4.2 + ޸printfضеĺ궨 + WIFI_SPI V3.4.1 ޸Ĵڷ麯еķ ޸ips200proע diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h index 27b7965..e8d6021 100644 --- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h @@ -91,6 +91,7 @@ #include "zf_device_imu660ra.h" #include "zf_device_imu660rb.h" #include "zf_device_imu660rx.h" +#include "zf_device_imu660rc.h" #include "zf_device_imu963ra.h" #include "zf_device_ips114.h" #include "zf_device_ips200.h" diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/printf_redirect.c index c44d826..299da76 100644 --- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/printf_redirect.c +++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/printf_redirect.c @@ -45,7 +45,7 @@ //------------------------------------------------------------------------------------------------------------------- int fputc(int ch, FILE *stream) { - uart_write_byte(DEBUG_UART_INDEX, (char)ch); + uart_write_byte(PRINTF_USE_UART, (char)ch); return (ch); } @@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len) int fgetc(FILE *f) { #if PRINTF_OUTPUT_TYPE == 0 - return uart_read_byte(DEBUG_UART_INDEX); + return uart_read_byte(PRINTF_USE_UART); #else uint8 buf; wifi_spi_read_buffer(&buf, 1); diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant.c index 231b20d..3e9ec74 100644 --- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,423 +24,519 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_debug.h" #include "seekfree_assistant.h" +// ͨö +typedef enum +{ + SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 , + SEEKFREE_ASSISTANT_SEND_CAMERA_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD , -extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); -extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); + SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 , -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) + SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 , +}seekfree_assistant_cmd_type_enum; + +#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ +#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ + +// ݷͺָ +extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); +seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + +// ݽպָ +extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); +seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) #include "zf_common_fifo.h" -static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO -static fifo_struct seekfree_assistant_fifo = // FIFOṹ +static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE]; +static fifo_struct seekfree_assistant_debug_param_fifo = { - .buffer = seekfree_assistant_buffer, + .buffer = seekfree_assistant_debug_param_buffer, .execution = FIFO_IDLE, .type = FIFO_DATA_8BIT, .head = 0, .end = 0, - .size = SEEKFREE_ASSISTANT_BUFFER_SIZE, - .max = SEEKFREE_ASSISTANT_BUFFER_SIZE, -}; + .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, + .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, +}; #endif -static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ -static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ -static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ - -seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ -seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ - -seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ -vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ - //------------------------------------------------------------------------------------------------------------------- // ͺ -// ˵ *buffer ҪУݵַ -// ˵ length У鳤 -// ز uint8 ֵ +// ˵ *buffer ҪУݵַ +// ˵ length У鳤 +// ز uint8 ֵ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length) +static uint8 seekfree_assistant_sum (void *buffer, uint32 length) { uint8 temp_sum = 0; + uint8 *ptr = (uint8 *)buffer; while(length--) { - temp_sum += *buffer++; + temp_sum += *ptr ++; } return temp_sum; } //------------------------------------------------------------------------------------------------------------------- -// ͼͺ -// ˵ camera_type ͷ -// ˵ *image_addr ͼ׵ַ -// ˵ boundary_num ͼа߽ -// ˵ width ͼ -// ˵ height ͼ߶ +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ // ز void -// ʹʾ +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height) +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer) { - uint32 image_size = 0; + zf_assert(NULL != ccd_obj); + zf_assert(NULL != data_buffer); - seekfree_assistant_camera_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_data.function = SEEKFREE_ASSISTANT_CAMERA_FUNCTION; - seekfree_assistant_camera_data.camera_type = (camera_type << 5) | ((image_addr != NULL ? 0 : 1) << 4) | boundary_num; - // дϢЭ鲿 - seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct); - seekfree_assistant_camera_data.image_width = width; - seekfree_assistant_camera_data.image_height = height; + memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct)); + ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD; + ccd_obj->config.channel_index = channel_index; - // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct)); - - // ͷͼͼС - switch(camera_type) + uint16 data_max = 256; + uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT; + loop_count = (2 >= loop_count) ? (loop_count) : (2); + for(uint8 i = 0; loop_count > i; i ++) { - case SEEKFREE_ASSISTANT_OV7725_BIN: - { - image_size = width * height / 8; - }break; - - case SEEKFREE_ASSISTANT_MT9V03X: - { - image_size = width * height; - }break; - - case SEEKFREE_ASSISTANT_SCC8660: - { - image_size = width * height * 2; - }break; + data_max *= 4; } - // ͼ - if(NULL != image_addr) + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF); + #else + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + ccd_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + ccd_obj->config.data_type = data_type; + } + + // ¼ʵֽ uint16 Ҫݳ + ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1)); + // Ȼ¼Ӧݻ + ccd_obj->data_buffer = data_buffer; + + // У + ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.check_sum += seekfree_assistant_sum( + &(ccd_obj->config.cmd), + sizeof(ccd_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)ccd_obj, + sizeof(ccd_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(ccd_obj->data_buffer), + ccd_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer) +{ + zf_assert(NULL != camera_obj); + + memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct)); + camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD; + camera_obj->config.camera_type = camera_type; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF); + #else + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type + && NULL != data_buffer) { - seekfree_assistant_transfer_callback(image_addr, image_size); + camera_obj->config.data_type = 0x02; + } + else + { + camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01); + } + + // RGB565 ͼ ôֽ + camera_obj->buffer_byte_size = + image_width * image_height + * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1)); + camera_obj->buffer_byte_size = + (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type) + ? (camera_obj->buffer_byte_size / 8) + : (camera_obj->buffer_byte_size); + camera_obj->data_buffer = data_buffer; + + // У + camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.check_sum += seekfree_assistant_sum( + &(camera_obj->config.cmd), + sizeof(camera_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_obj, + sizeof(camera_obj->config)); + if(NULL != camera_obj->data_buffer) + { + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_obj->data_buffer), + camera_obj->buffer_byte_size); } } //------------------------------------------------------------------------------------------------------------------- -// ͼ߻ƺ -// ˵ boundary_id ID -// ˵ dot_num -// ˵ *dot_x ׵ַ -// ˵ *dot_y ׵ַ -// ˵ width ͼ -// ˵ height ͼ߶ +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 // ز void -// ʹʾ +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer) +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer) { - uint8 i; - uint16 dot_bytes = 0; // ֽ + zf_assert(NULL != camera_boundary_obj); + zf_assert(NULL != data_buffer); - dot_bytes = seekfree_assistant_camera_dot_data.dot_num; + memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct)); + camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD; - if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5)) - { - dot_bytes *= 2; + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + camera_boundary_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + camera_boundary_obj->config.data_type = data_type; } - // ȷ֡ͷܡ߽š곤ȡ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct)); + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif - for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++) - { - // жǷͺ - if(NULL != buffer->boundary_x[i]) - { - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes); - } + camera_boundary_obj->buffer_byte_size = + boundary_lenght * 2 + * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2)); + camera_boundary_obj->data_buffer = data_buffer; - // жǷ - if(NULL != buffer->boundary_y[i]) - { - // ûݣʾÿһֻһ߽ - // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣 - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes); - } - } + // У + camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.check_sum += seekfree_assistant_sum( + &(camera_boundary_obj->config.cmd), + sizeof(camera_boundary_obj->config) - 2); } //------------------------------------------------------------------------------------------------------------------- -// ʾͺ +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_boundary_obj, + sizeof(camera_boundary_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_boundary_obj->data_buffer), + camera_boundary_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color) +{ + seekfree_assistant_camera_rectangular_struct camera_rectangular_obj; + memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct)); + camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif + + // У + camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.check_sum += seekfree_assistant_sum( + &(camera_rectangular_obj.cmd), + sizeof(camera_rectangular_obj) - 2); + + seekfree_assistant_transfer_callback( + (const uint8 *)&camera_rectangular_obj, + sizeof(camera_rectangular_obj)); +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer) +{ + zf_assert(NULL != oscilloscope_obj); + zf_assert(NULL != data_buffer); + + memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct)); + oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD; + oscilloscope_obj->config.channel_max = + (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max) + ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX) + : ((0 == channel_max) ? (1) : (channel_max)); + oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00); + oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4; + oscilloscope_obj->data_buffer = data_buffer; +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ // ˵ *seekfree_assistant_oscilloscope ʾݽṹ // ز void // ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope) +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj) { - uint8 packet_size; - - // λ - seekfree_assistant_oscilloscope->channel_num &= 0x0f; - - zf_assert(SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT >= seekfree_assistant_oscilloscope->channel_num); - - // ֡ͷ - seekfree_assistant_oscilloscope->head = SEEKFREE_ASSISTANT_SEND_HEAD; - - // дϢ - packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4; - seekfree_assistant_oscilloscope->length = packet_size; - - // д빦ͨ - seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE; - // У - seekfree_assistant_oscilloscope->check_sum = 0; - seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size); + oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + &(oscilloscope_obj->config.cmd), + sizeof(oscilloscope_obj->config) - 2); + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + (oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); - // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[] - - seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size); + seekfree_assistant_transfer_callback( + (const uint8 *)oscilloscope_obj, + sizeof(oscilloscope_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); } +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) //------------------------------------------------------------------------------------------------------------------- -// ͼϢú -// ˵ camera_type ͼ -// ˵ image_addr ͼַ NULLʾֻͱϢλ -// ˵ width ͼ -// ˵ height ͼ߶ +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ // ز void -// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H); -// עϢ +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height) +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj) { - seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION; - // дϢ - seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct); + zf_assert(NULL != debug_param_obj); - seekfree_assistant_camera_buffer.camera_type = camera_type; - seekfree_assistant_camera_buffer.image_addr = image_addr; - seekfree_assistant_camera_buffer.width = width; - seekfree_assistant_camera_buffer.height = height; -} + seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ + uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ + uint8 temp_sum = 0xFF; // Уʱ + uint32 read_length = 0; // ȡʱ -//------------------------------------------------------------------------------------------------------------------- -// ͼ߷ú -// ˵ boundary_type ߽ -// ˵ dot_num һ߽жٸ -// ˵ dot_x1 ű1ĵַ NULLʾͱ1 -// ˵ dot_x2 ű2ĵַ NULLʾͱ2 -// ˵ dot_x3 ű3ĵַ NULLʾͱ3 -// ˵ dot_y1 ű1ĵַ NULLʾͱ1 -// ˵ dot_y2 ű2ĵַ NULLʾͱ2 -// ˵ dot_y3 ű3ĵַ NULLʾͱ3 -// ز void -// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк -// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ -// ʹʾ seekfree_assistant_camera_config(XY_BOUNDARY, 160, xy_x1_boundary, xy_x2_boundary, xy_x3_boundary, xy_y1_boundary, xy_y2_boundary, xy_y3_boundary); // ͼʱߣ߰ -// עϢ -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3) -{ - uint8 i = 0; - uint8 boundary_num = 0; - uint8 boundary_data_type = 0; - - // ͼͻǷ׼, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_dot_data.dot_num = dot_num; - seekfree_assistant_camera_dot_data.valid_flag = 0; - for(i = 0; i < 3; i++) - { - seekfree_assistant_camera_buffer.boundary_x[i] = NULL; - seekfree_assistant_camera_buffer.boundary_y[i] = NULL; - } - - switch(boundary_type) - { - case X_BOUNDARY: - { - if(NULL != dot_x1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x1; - } - if(NULL != dot_x2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x2; - } - if(NULL != dot_x3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x3; - } - - if(255 < seekfree_assistant_camera_buffer.height) - { - boundary_data_type = 1; - } - }break; - - case Y_BOUNDARY: - { - if(NULL != dot_y1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if(NULL != dot_y2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if(NULL != dot_y3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if(255 < seekfree_assistant_camera_buffer.width) - { - boundary_data_type = 1; - } - }break; - - case XY_BOUNDARY: - { - if((NULL != dot_x1) && (NULL != dot_y1)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if((NULL != dot_x2) && (NULL != dot_y2)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if((NULL != dot_x3) && (NULL != dot_y3)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x3; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if((255 < seekfree_assistant_camera_buffer.width) || (255 < seekfree_assistant_camera_buffer.height)) - { - boundary_data_type = 1; - } - }break; - - case NO_BOUNDARY:break; - } - - seekfree_assistant_camera_dot_data.dot_type = (boundary_type << 6) | (boundary_data_type << 5) | boundary_num; -} - -//------------------------------------------------------------------------------------------------------------------- -// ַͷͼ -// ˵ void -// ز void -// ʹʾ -// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_send (void) -{ - // ͼͻǷ׼ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_data_send(seekfree_assistant_camera_buffer.camera_type, seekfree_assistant_camera_buffer.image_addr, seekfree_assistant_camera_dot_data.dot_type & 0x0f, seekfree_assistant_camera_buffer.width, seekfree_assistant_camera_buffer.height); - - if(seekfree_assistant_camera_dot_data.dot_type & 0x0f) - { - seekfree_assistant_camera_dot_send(&seekfree_assistant_camera_buffer); - } -} - - -//------------------------------------------------------------------------------------------------------------------- -// ֽյ -// ˵ void -// ز void -// ʹʾ ֻҪŵеPITжϻѭ -//------------------------------------------------------------------------------------------------------------------- -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) -void seekfree_assistant_data_analysis (void) -{ - uint8 temp_sum; - uint32 read_length; - seekfree_assistant_parameter_struct *receive_packet; - - // ʹuint32ж壬ĿΪ˱ֽ֤ڶ - uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4]; - - // Զȡ, ԶĴ䷽ʽӽջصжȡ - read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE); + // Զȡһݰ + // ԶĴ䷽ʽӽջصжȡ + read_length = seekfree_assistant_receive_callback( + debug_param_cmd_pointer, + sizeof(seekfree_assistant_debug_param_cmd_struct)); if(read_length) - { - // ȡдFIFO - fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length); + { // ȡдFIFO + fifo_write_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + read_length); } - while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo)) - { - read_length = sizeof(seekfree_assistant_parameter_struct); - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_ONLY); + while( sizeof(seekfree_assistant_debug_param_cmd_struct) + <= fifo_used(&seekfree_assistant_debug_param_fifo)) + { // FIFO һݰ ôͽн + // ֱӶһݰ + read_length = sizeof(seekfree_assistant_debug_param_cmd_struct); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_ONLY); - if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0]) - { - // û֡ͷFIFOȥһ - read_length = 1; - } - else - { - // ҵ֡ͷ - receive_packet = (seekfree_assistant_parameter_struct *)temp_buffer; - temp_sum = receive_packet->check_sum; - receive_packet->check_sum = 0; - if(temp_sum == seekfree_assistant_sum((uint8 *)temp_buffer, sizeof(seekfree_assistant_parameter_struct))) - { - // Уɹ - seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data; - seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1; + if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0] + && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2]) + { // ֱƥ֡ͷ ҹҲƥ + temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ + debug_param_cmd_obj.check_sum = 0; // հУֵ У + if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct))) + { // Уɹ + debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float; + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0]; + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + #endif + debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1; + temp_sum = 0x00; } else - { - read_length = 1; + { // Уƥ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + } + else + { // ƥ䲻֡ͷ͹ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + + if(0xFF == temp_sum) + { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ + for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++) + { // Ϊȡһ һ + if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length]) + { // ҵ¸֡ͷ˳ + break; + } } } // ʹõ - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_AND_CLEAN); } } #endif - - - diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant.h index 5b7e1b5..937f784 100644 --- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,142 +24,292 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ - #include "zf_common_typedef.h" +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 , + SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 , +}seekfree_assistant_data_type_enum; -// 1ʹܲڵĹ 0رղڵĹ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 ) - - - -// FIFOС -#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) - -// ʾͨ -#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) - -// Եͨ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) - -// ͼ -#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) - -// Ƭλ͵֡ͷ -#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) - -// ͷ -#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) -#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) -#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) - -// λƬ͵֡ͷ -#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) - -// -#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) - +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ +}seekfree_assistant_ccd_resolution_enum; // ͷö typedef enum { - // ͷͺŶ - SEEKFREE_ASSISTANT_OV7725_BIN = 1, - SEEKFREE_ASSISTANT_MT9V03X, - SEEKFREE_ASSISTANT_SCC8660, - // ͼͶ - SEEKFREE_ASSISTANT_BINARY = 1, - SEEKFREE_ASSISTANT_GRAY, - SEEKFREE_ASSISTANT_RGB565, -}seekfree_assistant_image_type_enum; + SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY , + SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 , -// ͷö -typedef enum -{ - // ͷͺŶ - X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ - Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ - XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ - NO_BOUNDARY, // ͵ͼûбϢ -}seekfree_assistant_boundary_type_enum; + // ͷͺƥ䶨 + SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X , + SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 , +}seekfree_assistant_camera_type_enum; + +#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨 + +#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ +#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤ + +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС +#endif typedef struct { - uint8 head; // ֡ͷ - uint8 channel_num; // λΪ λΪͨ - uint8 check_sum; // У - uint8 length; // - float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + uint8 data_lenght_buffer[2] ; // CCD ݳ + uint8 channel_color_buffer[2] ; // ͨɫ + uint8 channel_data_max[2] ; // ֵͨ + uint8 data_type ; // ȷϴС + uint8 reserve ; // + }config; + uint16 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_ccd_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 camera_type ; // ͷ + uint8 image_width_buffer[2] ; // ͼ + uint8 image_height_buffer[2] ; // ͼ߶ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 data_type ; // ȷϴС + uint8 boundary_lenght_buffer[2] ; // ߳ + uint8 color_buffer[2] ; // ͨɫ + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_boundary_struct; + +typedef struct +{ + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 reserve ; // + uint8 x_axis_buffer[2] ; // X + uint8 y_axis_buffer[2] ; // Y + uint8 width_buffer[2] ; // ο + uint8 height_buffer[2] ; // θ߶ + uint8 color_buffer[2] ; // ɫ +}seekfree_assistant_camera_rectangular_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_max ; // ͨ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ }seekfree_assistant_oscilloscope_struct; +typedef union +{ + uint8 data_uint8[4] ; + float data_float ; +}seekfree_assistant_param_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ - uint8 length; // ȣЭ鲿֣ - uint16 image_width; // ͼ - uint16 image_height; // ͼ߶ -}seekfree_assistant_camera_struct; - - -typedef struct -{ - uint8 head; // ֡ͷ - uint8 function; // - uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽ - uint8 length; // ȣЭ鲿֣ - uint16 dot_num; // - uint8 valid_flag; // ͨʶ - uint8 reserve; // -}seekfree_assistant_camera_dot_struct; - -typedef struct -{ - void *image_addr; // ͷַ - uint16 width; // ͼ - uint16 height; // ͼ߶ - seekfree_assistant_image_type_enum camera_type; // ͷ - void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ - void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ -}seekfree_assistant_camera_buffer_struct; + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + seekfree_assistant_param_struct dat ; // һ + +}seekfree_assistant_debug_param_cmd_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 channel; // ͨ - uint8 check_sum; // У - float data; // -}seekfree_assistant_parameter_struct; + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint8_struct; + + +typedef struct +{ + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint16_struct; + +typedef struct +{ + float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; + uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; +}seekfree_assistant_debug_param_struct; typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length); typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length); -extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ -extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ - - -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope); -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height); -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3); -void seekfree_assistant_camera_send (void); -void seekfree_assistant_data_analysis (void); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ +// ز void +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, 16] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *seekfree_assistant_oscilloscope ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj); + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj); +#endif #endif diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c index d139201..23205d5 100644 --- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,23 +24,20 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_typedef.h" #include "zf_common_fifo.h" #include "zf_common_debug.h" -#include "zf_driver_uart.h" + #include "zf_device_wireless_uart.h" -#include "zf_device_ble6a20.h" -#include "zf_device_bluetooth_ch9141.h" -#include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" #include "seekfree_assistant.h" @@ -50,7 +47,6 @@ extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ - //------------------------------------------------------------------------------------------------------------------- // ַͺ // ˵ *buff Ҫ͵ݵַ @@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv // ز uint32 ʣδݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) +uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݷ͹ @@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) // ز uint32 յݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) +uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݽչ return 0; @@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) // ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ // ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) +void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) { switch(transfer_device) { case SEEKFREE_ASSISTANT_DEBUG_UART: { -#if DEBUG_UART_USE_INTERRUPT == 1 seekfree_assistant_transfer_callback = debug_send_buffer; seekfree_assistant_receive_callback = debug_read_ring_buffer; -#endif }break; - + case SEEKFREE_ASSISTANT_WIRELESS_UART: { seekfree_assistant_transfer_callback = wireless_uart_send_buffer; seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; - - case SEEKFREE_ASSISTANT_BLE6A20: - { - seekfree_assistant_transfer_callback = ble6a20_send_buffer; - seekfree_assistant_receive_callback = ble6a20_read_buffer; - }break; - case SEEKFREE_ASSISTANT_CH9141: - { - seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; - seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; - }break; - - case SEEKFREE_ASSISTANT_WIFI_UART: - { - seekfree_assistant_transfer_callback = wifi_uart_send_buffer; - seekfree_assistant_receive_callback = wifi_uart_read_buffer; - }break; - + // case SEEKFREE_ASSISTANT_CH9141: + // { + // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; + // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; + // }break; + + // case SEEKFREE_ASSISTANT_WIFI_UART: + // { + // seekfree_assistant_transfer_callback = wifi_uart_send_buffer; + // seekfree_assistant_receive_callback = wifi_uart_read_buffer; + // }break; + case SEEKFREE_ASSISTANT_WIFI_SPI: { seekfree_assistant_transfer_callback = wifi_spi_send_buffer; seekfree_assistant_receive_callback = wifi_spi_read_buffer; }break; - - case SEEKFREE_ASSISTANT_CUSTOM: - { + + default: + { // Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ - + seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + seekfree_assistant_receive_callback = seekfree_assistant_receive; }break; } } - - diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.h index 2ccfd8a..0e28f49 100644 --- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,13 +24,13 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,7 +43,6 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ SEEKFREE_ASSISTANT_WIRELESS_UART, // ת - SEEKFREE_ASSISTANT_BLE6A20, // ת SEEKFREE_ASSISTANT_CH9141, // CH9141 SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_absolute_encoder.h index 1166c84..dc091aa 100644 --- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_absolute_encoder.h +++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_absolute_encoder.h @@ -62,7 +62,7 @@ //==================================================== SPI ==================================================== #else //====================================================Ӳ SPI ==================================================== -#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI +#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI #define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI #define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK #define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI @@ -70,7 +70,7 @@ //====================================================Ӳ SPI ==================================================== #endif -#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ +#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ #define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN))) #define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ble6a20.h index 6f4544a..6af089f 100644 --- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ble6a20.h +++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ble6a20.h @@ -76,7 +76,7 @@ // 1Զ Զʵ޸ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ // Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000 -#define BLE6A20_AUTO_BAUD_RATE ( 0 ) +#define BLE6A20_AUTO_BAUD_RATE ( 1 ) #if (1 == BLE6A20_AUTO_BAUD_RATE) typedef enum diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rc.c new file mode 100644 index 0000000..68840e2 --- /dev/null +++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rc.c @@ -0,0 +1,563 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#include "math.h" +#include "zf_common_debug.h" +#include "zf_driver_delay.h" +#include "zf_driver_spi.h" +#include "zf_driver_gpio.h" +#include "zf_driver_soft_iic.h" +#include "zf_device_config.h" +#include "zf_driver_uart.h" +#include "zf_driver_exti.h" + +#include "zf_device_imu660rc.h" + +#ifndef M_PI +#define M_PI 3.1415926f +#endif + + +static uint8 imu660rc_quarternion_rate; + +float imu660rc_transition_factor[2]; +int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro () +int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ) +float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ +float imu660rc_quarternion[4]; // Ԫ + + + +#if IMU660RC_USE_SOFT_IIC +static soft_iic_info_struct imu660rc_iic_struct; + +#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data))) +#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len))) +#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg))) +#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len))) +#else +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC дĴ +// ˵ reg Ĵַ +// ˵ data +// ز void +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_write_register (uint8 reg, uint8 data) +{ + IMU660RC_CS(0); + spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data); + IMU660RC_CS(1); +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ĵ +// ˵ reg Ĵַ +// ز uint8 +// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_read_register (uint8 reg) +{ + uint8 data; + IMU660RC_CS(0); + data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R); + IMU660RC_CS(1); + return data; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC +// ˵ reg Ĵַ +// ˵ data ݻ +// ˵ len ݳ +// ز void +// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len) +{ + IMU660RC_CS(0); + spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len); + IMU660RC_CS(1); +} +#endif + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC fp16ת +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint32 fp16_to_float(uint16 h) +{ + uint16 h_exp = (h & 0x7c00u); + uint32 f_sgn = ((uint32)h & 0x8000u) << 16; + switch (h_exp) + { + case 0x0000u: // 0 or subnormal + { + uint16 h_sig = (h & 0x03ffu); + // Signed zero + if (h_sig == 0) + { + return f_sgn; + } + // Subnormal + h_sig <<= 1; + while ((h_sig & 0x0400u) == 0) + { + h_sig <<= 1; + h_exp++; + } + uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23; + uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13; + return f_sgn + f_exp + f_sig; + } + case 0x7c00u: // inf or NaN + { + // All-ones exponent and a copy of the significand + return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13); + } + default: // normalized + { + // Just need to adjust the exponent and shift + return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13); + } + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫһ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_normalize(float quat[4], uint16 *fp16) +{ + float n = 0; + float temp[4]; + + *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]); + *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]); + *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]); + *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]); + + n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3]; + n = sqrtf(n); + + if(n > 0.001f) // Խӽ0ֵ + { + n = temp[3] < 0.0f ? -n : n; + + quat[0] = temp[1] / n; + quat[1] = temp[2] / n; + quat[2] = temp[0] / n; + quat[3] = temp[3] / n; + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫתŷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw) +{ + float euler[3]; + + float sqx = quat[0] * quat[0]; + float sqy = quat[1] * quat[1]; + float sqz = quat[2] * quat[2]; + + euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx)); + euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2])); + euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz)); + + // תǶ + euler[0] = 180 * (euler[0]) / M_PI; + euler[1] = 180 * (euler[1]) / M_PI; + euler[2] = 180 * (euler[2]) / M_PI; + + // Ƕȵ + euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2]; + + *roll = euler[0]; + *pitch = euler[1]; + *yaw = euler[2]; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ÷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank) +{ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank); +} + + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Լ +// ˵ void +// ز uint8 1-Լʧ 0-Լɹ +// ʹʾ imu660rc_self_check(); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_self_check (void) +{ + uint8 dat = 0, return_state = 0; + uint16 timeout_count = 0; + do + { + if(IMU660RC_TIMEOUT_COUNT < timeout_count ++) + { + return_state = 1; + break; + } + dat = imu660rc_read_register(IMU660RC_CHIP_ID); + system_delay_ms(1); + }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû⵽豸 + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ٶȼ +// ˵ void +// ز void +// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_acc (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6); + imu660rc_acc_x = dat[0]; + imu660rc_acc_y = dat[1]; + imu660rc_acc_z = dat[2]; + } +} +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC +// ˵ void +// ز void +// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_gyro (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6); + imu660rc_gyro_x = dat[0]; + imu660rc_gyro_y = dat[1]; + imu660rc_gyro_z = dat[2]; + } +} + + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ԪݲתΪŷ +// ˵ void +// ز void +// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı +// עϢ ҪINT2Ŵжϵô˺ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_quarternion(void) +{ + uint8 i; + uint16 buff[4]; + uint8 *buff1_ptr; + int16 *buff2_ptr; + + if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate) + { + buff1_ptr = (uint8 *)buff; + + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x20); + imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31); + + for(i = 0; 8 > i; i++) + { + imu660rc_write_register(0x08, 0x4C + i); + buff1_ptr[i] = imu660rc_read_register(0x09); + } + + imu660rc_write_register(IMU660RC_PAGE_RW, 0x0); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // Ԫһ + quarternion_normalize(imu660rc_quarternion, buff); + // Ԫתŷ + quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw); + + // ȡٶٶϢ + #if(1 == IMU660RC_QUARTERNION_GET_ACC) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6); + imu660rc_acc_x = buff2_ptr[0]; + imu660rc_acc_y = buff2_ptr[1]; + imu660rc_acc_z = buff2_ptr[2]; + } + #endif + #if(1 == IMU660RC_QUARTERNION_GET_GYRO) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6); + imu660rc_gyro_x = buff2_ptr[0]; + imu660rc_gyro_y = buff2_ptr[1]; + imu660rc_gyro_z = buff2_ptr[2]; + } + #endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RCжϻصҪжڶȡԪ +// ˵ void +// ز void +// ʹʾ +// עϢ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_callback(void) +{ + imu660rc_get_quarternion(); + +} + +//------------------------------------------------------------------------------------------------------------------- +// ʼ IMU660RC +// ˵ quarternion_rate ѡԪ +// ز uint8 1-ʼʧ 0-ʼɹ +// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate) +{ + uint8 return_state = 0; + + imu660rc_quarternion_rate = quarternion_rate; + #if IMU660RC_USE_SOFT_IIC + soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿ + + #else + spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿ + gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿ + #endif + + system_delay_ms(10); + + do + { + if(imu660rc_self_check()) // IMU660RC Լ + { + // ˶Ϣ ʾλ + // ô IMU660RC Լʱ˳ + // һ½û ûܾǻ + zf_log(0, "imu660rc self check error."); + return_state = 1; + break; + } + + // λ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04); + system_delay_ms(30); + + // ÿ¹ַ + imu660rc_write_register(IMU660RC_CTRL3, 0x44); + + switch(IMU660RC_ACC_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_ACC_SAMPLE_SGN_2G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x00); + imu660rc_transition_factor[0] = 16393.44; + }break; + case IMU660RC_ACC_SAMPLE_SGN_4G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x01); + imu660rc_transition_factor[0] = 8196.72; + }break; + case IMU660RC_ACC_SAMPLE_SGN_8G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x02); + imu660rc_transition_factor[0] = 4098.36; + }break; + case IMU660RC_ACC_SAMPLE_SGN_16G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x03); + imu660rc_transition_factor[0] = 2049.18; + }break; + } + if(1 == return_state) + { + break; + } + + switch(IMU660RC_GYRO_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_125DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x00); + imu660rc_transition_factor[1] = 228.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_250DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x01); + imu660rc_transition_factor[1] = 114.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_500DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x02); + imu660rc_transition_factor[1] = 57.1428; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_1000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x03); + imu660rc_transition_factor[1] = 28.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_2000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x04); + imu660rc_transition_factor[1] = 14.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_4000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x0C); + imu660rc_transition_factor[1] = 7.14285; + }break; + } + if(1 == return_state) + { + break; + } + + // ôģʽΪ߾ģʽԼ + imu660rc_write_register(IMU660RC_CTRL1, 0x15); + imu660rc_write_register(IMU660RC_CTRL2, 0x18); + + // LPF1˲ + imu660rc_write_register(IMU660RC_CTRL7, 0x01); + + // LPF2˲ + imu660rc_write_register(IMU660RC_CTRL9, 0x08); + + // ԪӦ + if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate) + { + // жϴź + imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80); + imu660rc_write_register(IMU660RC_CTRL4, 0x08); + imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30); + + // üٶȡٶ + imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3)); + imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3)); + + // Ԫʲ + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3)); + imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x00); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // жϼ + exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING); + } + }while(0); + + return return_state; +} + + + + + + + + + + + + + diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rc.h new file mode 100644 index 0000000..dd5a9e3 --- /dev/null +++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rc.h @@ -0,0 +1,211 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#ifndef _zf_device_imu660rc_h_ +#define _zf_device_imu660rc_h_ + +#include "zf_common_typedef.h" + + +// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC +// IMU660RC_USE_SOFT_IICҪȱ벢س򣬵ƬģҪϵͨѶ +#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ + +#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ +//==================================================== IIC ==================================================== +#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ +#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL +#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA +//==================================================== IIC ==================================================== +#else + +//====================================================Ӳ SPI ==================================================== +#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI +#define IMU660RC_SPI (SPI_0) // Ӳ SPI +#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK +#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI +#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO +//====================================================Ӳ SPI ==================================================== +#endif +#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ +#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) ) +#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ + + +#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ +#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ + +typedef enum +{ + IMU660RC_MAIN_MEM_BANK = 0x00, + IMU660RC_HUB_MEM_BANK = 0x40, + IMU660RC_EMBED_MEM_BANK = 0x80, +}imu660rc_mem_bank_enum; + +typedef enum +{ + IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2) + IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G + IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G + IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G +}imu660rc_acc_sample_config; + +typedef enum +{ + IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S) + IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS + IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS + IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS + IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS + IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS +}imu660rc_gyro_sample_config; + +typedef enum +{ + IMU660RC_QUARTERNION_15HZ, // 15 Hz + IMU660RC_QUARTERNION_30HZ, // 30 Hz + IMU660RC_QUARTERNION_60HZ, // 60 Hz + IMU660RC_QUARTERNION_120HZ, // 120Hz + IMU660RC_QUARTERNION_240HZ, // 240Hz + IMU660RC_QUARTERNION_480HZ, // 480Hz + IMU660RC_QUARTERNION_DISABLE, // Ԫ +}imu660rc_quarternion_rate_config; + + +//================================================ IMU660RC ڲַ================================================ +#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ +#define IMU660RC_SPI_W ( 0x00 ) +#define IMU660RC_SPI_R ( 0x80 ) +#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ + + +//================================================ IMU660RC Ĵַ================================================ +#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 ) +#define IMU660RC_INT2_CTRL ( 0x0E ) +#define IMU660RC_CHIP_ID ( 0x0F ) +#define IMU660RC_CTRL1 ( 0x10 ) +#define IMU660RC_CTRL2 ( 0x11 ) +#define IMU660RC_CTRL3 ( 0x12 ) +#define IMU660RC_CTRL4 ( 0x13 ) +#define IMU660RC_CTRL5 ( 0x14 ) +#define IMU660RC_CTRL6 ( 0x15 ) +#define IMU660RC_CTRL7 ( 0x16 ) +#define IMU660RC_CTRL8 ( 0x17 ) +#define IMU660RC_CTRL9 ( 0x18 ) +#define IMU660RC_CTRL10 ( 0x19 ) +#define IMU660RC_CTRL_STATUS ( 0x1A ) +#define IMU660RC_STATUS_REG ( 0x1E ) +#define IMU660RC_OUT_TEMP_L ( 0x20 ) +#define IMU660RC_OUT_TEMP_H ( 0x21 ) +#define IMU660RC_OUTX_L_G ( 0x22 ) +#define IMU660RC_OUTX_H_G ( 0x23 ) +#define IMU660RC_OUTY_L_G ( 0x24 ) +#define IMU660RC_OUTY_H_G ( 0x25 ) +#define IMU660RC_OUTZ_L_G ( 0x26 ) +#define IMU660RC_OUTZ_H_G ( 0x27 ) +#define IMU660RC_OUTX_L_A ( 0x28 ) +#define IMU660RC_OUTX_H_A ( 0x29 ) +#define IMU660RC_OUTY_L_A ( 0x2A ) +#define IMU660RC_OUTY_H_A ( 0x2B ) +#define IMU660RC_OUTZ_L_A ( 0x2C ) +#define IMU660RC_OUTZ_H_A ( 0x2D ) + +#define IMU660RC_PAGE_SEL ( 0x02 ) +#define IMU660RC_EMB_FUNC_EN_A ( 0x04 ) +#define IMU660RC_PAGE_RW ( 0x17 ) +#define IMU660RC_SFLP_ODR ( 0x5E ) +#define IMU660RC_EMB_FUNC_CFG ( 0x63 ) + + + +extern float imu660rc_transition_factor[2]; +extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; // +extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ +extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ +extern float imu660rc_quarternion[4]; // Ԫ + + +void imu660rc_get_acc (void); +void imu660rc_get_gyro (void); +void imu660rc_get_quarternion (void); + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ٶȼתΪʵ +// ˵ acc_value ļٶȼ +// ز void +// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2) +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0]) + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC תΪʵ +// ˵ gyro_value +// ز void +// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1]) +void imu660rc_callback (void); +uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate); + + + +#endif diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rx.h index 45699d9..81b8b41 100644 --- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rx.h +++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_imu660rx.h @@ -97,7 +97,7 @@ //================================================ IMU660RX ȫֱ================================================ extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro () extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ) -extern float imu660ra_transition_factor[2]; +extern float imu660rx_transition_factor[2]; //================================================ IMU660RX ȫֱ================================================ diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips114.h index c56f310..9c4ac0d 100644 --- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips114.h +++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips114.h @@ -167,7 +167,7 @@ void ips114_init (void); // ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================= IPS114 չ================================================ #endif diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200.h index 850fb11..5bf4284 100644 --- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200.h +++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200.h @@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select); // ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================== IPS200 չ================================================ diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h index 98c5364..557e1d2 100644 --- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h @@ -86,7 +86,7 @@ // £SCC8660_PCLK_DIVԽͼԽ #define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1> #define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ -#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) +#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) #define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0 //================================================ SCC8660 ã֧ͫ֡ʰ汾=========================== diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.c index b51c600..b06e6a1 100644 --- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.c +++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.c @@ -24,7 +24,7 @@ * ļ zf_device_wifi_spi * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.9.20 +* ADS v1.10.2 * ƽ̨ TC264D * https://seekfree.taobao.com/ * @@ -63,6 +63,21 @@ #define SOCKET_CONNECT_TIME_OUT 50000 // λ #define OTHER_TIME_OUT 1000 // λ +#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088)) + #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088" +#endif + +#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE) + #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE" +#endif + + +#if (WIFI_SPI_TRANSFER_SIZE != 4088) + #error "WIFI_SPI_TRANSFER_SIZE must be == 4088" +#endif + + + char wifi_spi_version[12]; // ģ̼汾Ϣ char wifi_spi_mac_addr[20]; // ģMACַϢ char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ @@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void) { memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1; - return return_state; } @@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void) { memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1; - return return_state; } @@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void) { memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1; + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ȡϵͳʱ +// ˵ time_format ʱʽ +// ز *buffer ʱַַ СҪ30ֽ +// ز buffer_size С +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size) +{ + uint8 return_state = 1; + wifi_spi_packets_struct temp_packets; + uint8 send_cmd, receive_cmd; + + // ʱ30ֽ + // ģ̼V2汾 + if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2))) + { + send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0; + receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0; + + return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT); + if((0 == return_state) && (receive_cmd == temp_packets.head.command)) + { + return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2); + if(0 == return_state) + { + memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3); + buffer[temp_packets.head.length - 3] = 0; + } + } + } + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ɨȵ +// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз +// ˵ buffer_size ij +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +// עϢ ÿһаһwifi +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size) +{ + uint8 return_state; + + // ģV2汾Ĺִ̼֧˹ + if(!strncmp(wifi_spi_version, "V2", 2)) + { + return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT); + + if(0 == return_state) + { + #if (0 == WIFI_SPI_READ_TRANSFER) + wifi_spi_send_buffer(NULL, 0); + #endif + while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size)) + { + system_delay_ms(10); + } + } + } return return_state; } @@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) while(length) { - send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length; + send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length); if(wifi_spi_wait_idle(OTHER_TIME_OUT)) { @@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) return length; } +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ַͺͬ +// ˵ *string Ҫ͵ַ +// ز void +// ʹʾ wifi_spi_send_string("123"); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +void wifi_spi_send_string(const char *string) +{ + wifi_spi_send_buffer((uint8*)string, strlen(string)); +} + //------------------------------------------------------------------------------------------------------------------- // WIFI SPI ȡ // ˵ *buff ջ @@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) { zf_assert(NULL != buffer); - uint32 data_len = length; + uint32 fifo_read_length; + uint32 write_length = 0; + wifi_spi_packets_struct temp_packets; + + // жFIFOǷݣȴFIFOȡ + if(fifo_used(&wifi_spi_fifo)) + { + fifo_read_length = fifo_used(&wifi_spi_fifo); + fifo_read_length = length < fifo_read_length ? length : fifo_read_length; + fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN); + + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + } #if(1 == WIFI_SPI_READ_TRANSFER) - - wifi_spi_packets_struct temp_packets; - // WIFI SPI״̬жϻ߳ѾͨѶ򱾴βܷ if(WIFI_SPI_IDLE == wifi_spi_mutex) { - // ͨѶ״̬Ϊæ - wifi_spi_mutex = WIFI_SPI_BUSY; + wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ - // ͨѶ鿴ģǷδȡ do { - if(wifi_spi_wait_idle(OTHER_TIME_OUT)) + if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ + (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳ + ) { break; } + temp_packets.head.command = WIFI_SPI_DATA; temp_packets.head.length = 0; wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE); // յİǷ - if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) + if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) && + (temp_packets.head.length) + ) { - // յ - if(temp_packets.head.length) + if(length) + { + fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length; + memcpy(buffer, temp_packets.buffer, fifo_read_length); + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO + { + fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length); + } + } + else // ȫдFIFO { fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length); } @@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command); wifi_spi_mutex = WIFI_SPI_IDLE; } -#endif +#endif - fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN); - return data_len; + return write_length; } //------------------------------------------------------------------------------------------------------------------- @@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word) // MACַϢַʽwifi_spi_mac_addr wifi_spi_get_mac_addr(); - + if(NULL == wifi_ssid) + { + // ʼʱҪWIFI + break; + } return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word); if(return_state) { diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.h index eea8a78..e7cec39 100644 --- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.h +++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.h @@ -73,8 +73,8 @@ #if (WIFI_SPI_AUTO_CONNECT > 2) #error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]" #else -#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP -#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿ +#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP +#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666 #endif @@ -95,10 +95,15 @@ typedef enum WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ + WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI + WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾 WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ + WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1 + WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2 + WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3 // ӻش WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ @@ -110,6 +115,9 @@ typedef enum WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾 WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں + WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ + WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ + WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ WIFI_SPI_INVALID2 = 0xFF // Чݰ }wifi_spi_packets_command_enum; @@ -134,19 +142,27 @@ typedef struct uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // }wifi_spi_packets_struct; - +typedef enum +{ + WIFI_SPI_UTC_0 = 1, // ʱ + WIFI_SPI_GMT, // ʱ תΪGMTʽ׺GMT һڶԽƶ˴ģʹ + WIFI_SPI_UTC_8, // ʱ +}wifi_spi_time_enum; + extern char wifi_spi_version[12]; // ̼汾 ַ extern char wifi_spi_mac_addr[20]; // ģMACַ ַ extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ -uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); -uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); -uint8 wifi_spi_socket_disconnect (void); -uint8 wifi_spi_udp_send_now (void); -uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); -uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size); +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size); +uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); +uint8 wifi_spi_socket_disconnect (void); +uint8 wifi_spi_udp_send_now (void); +uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); +void wifi_spi_send_string (const char *string); +uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); -uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); #endif - diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.h index 0f392ff..24b88cc 100644 --- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.h +++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.h @@ -73,7 +73,7 @@ #if (WIFI_UART_AUTO_CONNECT > 3) #error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]" #else -#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP +#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP #define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_UART_LOCAL_PORT "8080" // ˿ #endif diff --git a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_driver/zf_driver_encoder.c index 8d514b7..ad4099e 100644 --- a/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_driver/zf_driver_encoder.c +++ b/Example/Coreboard_Demo/E04_pwm_demo/libraries/zf_driver/zf_driver_encoder.c @@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n) //------------------------------------------------------------------------------------------------------------------- void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin) { -// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init + zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init IfxGpt12_enableModule(&MODULE_GPT120); IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4); diff --git a/Example/Coreboard_Demo/E04_pwm_demo/user/isr.c b/Example/Coreboard_Demo/E04_pwm_demo/user/isr.c index e19382e..927ed43 100644 --- a/Example/Coreboard_Demo/E04_pwm_demo/user/isr.c +++ b/Example/Coreboard_Demo/E04_pwm_demo/user/isr.c @@ -40,14 +40,14 @@ // 򵥵˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ // **************************** PITжϺ **************************** -IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) -{ - interrupt_global_enable(0); // жǶ - pit_clear_flag(CCU60_CH0); - - - -} +//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) +//{ +// interrupt_global_enable(0); // жǶ +// pit_clear_flag(CCU60_CH0); +// +// +// +//} IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) @@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж { exti_flag_clear(ERU_CH0_REQ0_P15_4); - + + imu660rc_callback(); // 660RC ģ INT ж } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж @@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) { exti_flag_clear(ERU_CH5_REQ1_P15_8); - } } @@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) // exti_flag_clear(ERU_CH6_REQ9_P20_0); // } // } - IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO) { interrupt_global_enable(0); // жǶ @@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { interrupt_global_enable(0); // жǶ - gnss_uart_callback(); // GPSڻص + gnss_uart_callback(); // GNSSڻص diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E05_pit_demo/libraries/doc/version.txt index 1e222a3..8ce85ca 100644 --- a/Example/Coreboard_Demo/E05_pit_demo/libraries/doc/version.txt +++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/doc/version.txt @@ -1,3 +1,13 @@ +V3.4.4 + SCC8660ʽ + ָV2 + ޸ips200ʾscc8660ͷʽ + ޸ips114ʾscc8660ͷʽ +V3.4.3 + 660RC +V3.4.2 + ޸printfضеĺ궨 + WIFI_SPI V3.4.1 ޸Ĵڷ麯еķ ޸ips200proע diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_common/zf_common_headfile.h index 27b7965..e8d6021 100644 --- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_common/zf_common_headfile.h @@ -91,6 +91,7 @@ #include "zf_device_imu660ra.h" #include "zf_device_imu660rb.h" #include "zf_device_imu660rx.h" +#include "zf_device_imu660rc.h" #include "zf_device_imu963ra.h" #include "zf_device_ips114.h" #include "zf_device_ips200.h" diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/printf_redirect.c index c44d826..299da76 100644 --- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/printf_redirect.c +++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/printf_redirect.c @@ -45,7 +45,7 @@ //------------------------------------------------------------------------------------------------------------------- int fputc(int ch, FILE *stream) { - uart_write_byte(DEBUG_UART_INDEX, (char)ch); + uart_write_byte(PRINTF_USE_UART, (char)ch); return (ch); } @@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len) int fgetc(FILE *f) { #if PRINTF_OUTPUT_TYPE == 0 - return uart_read_byte(DEBUG_UART_INDEX); + return uart_read_byte(PRINTF_USE_UART); #else uint8 buf; wifi_spi_read_buffer(&buf, 1); diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant.c index 231b20d..3e9ec74 100644 --- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,423 +24,519 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_debug.h" #include "seekfree_assistant.h" +// ͨö +typedef enum +{ + SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 , + SEEKFREE_ASSISTANT_SEND_CAMERA_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD , -extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); -extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); + SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 , -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) + SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 , +}seekfree_assistant_cmd_type_enum; + +#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ +#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ + +// ݷͺָ +extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); +seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + +// ݽպָ +extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); +seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) #include "zf_common_fifo.h" -static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO -static fifo_struct seekfree_assistant_fifo = // FIFOṹ +static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE]; +static fifo_struct seekfree_assistant_debug_param_fifo = { - .buffer = seekfree_assistant_buffer, + .buffer = seekfree_assistant_debug_param_buffer, .execution = FIFO_IDLE, .type = FIFO_DATA_8BIT, .head = 0, .end = 0, - .size = SEEKFREE_ASSISTANT_BUFFER_SIZE, - .max = SEEKFREE_ASSISTANT_BUFFER_SIZE, -}; + .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, + .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, +}; #endif -static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ -static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ -static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ - -seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ -seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ - -seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ -vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ - //------------------------------------------------------------------------------------------------------------------- // ͺ -// ˵ *buffer ҪУݵַ -// ˵ length У鳤 -// ز uint8 ֵ +// ˵ *buffer ҪУݵַ +// ˵ length У鳤 +// ز uint8 ֵ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length) +static uint8 seekfree_assistant_sum (void *buffer, uint32 length) { uint8 temp_sum = 0; + uint8 *ptr = (uint8 *)buffer; while(length--) { - temp_sum += *buffer++; + temp_sum += *ptr ++; } return temp_sum; } //------------------------------------------------------------------------------------------------------------------- -// ͼͺ -// ˵ camera_type ͷ -// ˵ *image_addr ͼ׵ַ -// ˵ boundary_num ͼа߽ -// ˵ width ͼ -// ˵ height ͼ߶ +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ // ز void -// ʹʾ +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height) +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer) { - uint32 image_size = 0; + zf_assert(NULL != ccd_obj); + zf_assert(NULL != data_buffer); - seekfree_assistant_camera_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_data.function = SEEKFREE_ASSISTANT_CAMERA_FUNCTION; - seekfree_assistant_camera_data.camera_type = (camera_type << 5) | ((image_addr != NULL ? 0 : 1) << 4) | boundary_num; - // дϢЭ鲿 - seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct); - seekfree_assistant_camera_data.image_width = width; - seekfree_assistant_camera_data.image_height = height; + memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct)); + ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD; + ccd_obj->config.channel_index = channel_index; - // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct)); - - // ͷͼͼС - switch(camera_type) + uint16 data_max = 256; + uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT; + loop_count = (2 >= loop_count) ? (loop_count) : (2); + for(uint8 i = 0; loop_count > i; i ++) { - case SEEKFREE_ASSISTANT_OV7725_BIN: - { - image_size = width * height / 8; - }break; - - case SEEKFREE_ASSISTANT_MT9V03X: - { - image_size = width * height; - }break; - - case SEEKFREE_ASSISTANT_SCC8660: - { - image_size = width * height * 2; - }break; + data_max *= 4; } - // ͼ - if(NULL != image_addr) + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF); + #else + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + ccd_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + ccd_obj->config.data_type = data_type; + } + + // ¼ʵֽ uint16 Ҫݳ + ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1)); + // Ȼ¼Ӧݻ + ccd_obj->data_buffer = data_buffer; + + // У + ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.check_sum += seekfree_assistant_sum( + &(ccd_obj->config.cmd), + sizeof(ccd_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)ccd_obj, + sizeof(ccd_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(ccd_obj->data_buffer), + ccd_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer) +{ + zf_assert(NULL != camera_obj); + + memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct)); + camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD; + camera_obj->config.camera_type = camera_type; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF); + #else + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type + && NULL != data_buffer) { - seekfree_assistant_transfer_callback(image_addr, image_size); + camera_obj->config.data_type = 0x02; + } + else + { + camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01); + } + + // RGB565 ͼ ôֽ + camera_obj->buffer_byte_size = + image_width * image_height + * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1)); + camera_obj->buffer_byte_size = + (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type) + ? (camera_obj->buffer_byte_size / 8) + : (camera_obj->buffer_byte_size); + camera_obj->data_buffer = data_buffer; + + // У + camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.check_sum += seekfree_assistant_sum( + &(camera_obj->config.cmd), + sizeof(camera_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_obj, + sizeof(camera_obj->config)); + if(NULL != camera_obj->data_buffer) + { + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_obj->data_buffer), + camera_obj->buffer_byte_size); } } //------------------------------------------------------------------------------------------------------------------- -// ͼ߻ƺ -// ˵ boundary_id ID -// ˵ dot_num -// ˵ *dot_x ׵ַ -// ˵ *dot_y ׵ַ -// ˵ width ͼ -// ˵ height ͼ߶ +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 // ز void -// ʹʾ +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer) +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer) { - uint8 i; - uint16 dot_bytes = 0; // ֽ + zf_assert(NULL != camera_boundary_obj); + zf_assert(NULL != data_buffer); - dot_bytes = seekfree_assistant_camera_dot_data.dot_num; + memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct)); + camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD; - if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5)) - { - dot_bytes *= 2; + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + camera_boundary_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + camera_boundary_obj->config.data_type = data_type; } - // ȷ֡ͷܡ߽š곤ȡ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct)); + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif - for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++) - { - // жǷͺ - if(NULL != buffer->boundary_x[i]) - { - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes); - } + camera_boundary_obj->buffer_byte_size = + boundary_lenght * 2 + * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2)); + camera_boundary_obj->data_buffer = data_buffer; - // жǷ - if(NULL != buffer->boundary_y[i]) - { - // ûݣʾÿһֻһ߽ - // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣 - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes); - } - } + // У + camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.check_sum += seekfree_assistant_sum( + &(camera_boundary_obj->config.cmd), + sizeof(camera_boundary_obj->config) - 2); } //------------------------------------------------------------------------------------------------------------------- -// ʾͺ +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_boundary_obj, + sizeof(camera_boundary_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_boundary_obj->data_buffer), + camera_boundary_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color) +{ + seekfree_assistant_camera_rectangular_struct camera_rectangular_obj; + memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct)); + camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif + + // У + camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.check_sum += seekfree_assistant_sum( + &(camera_rectangular_obj.cmd), + sizeof(camera_rectangular_obj) - 2); + + seekfree_assistant_transfer_callback( + (const uint8 *)&camera_rectangular_obj, + sizeof(camera_rectangular_obj)); +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer) +{ + zf_assert(NULL != oscilloscope_obj); + zf_assert(NULL != data_buffer); + + memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct)); + oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD; + oscilloscope_obj->config.channel_max = + (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max) + ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX) + : ((0 == channel_max) ? (1) : (channel_max)); + oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00); + oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4; + oscilloscope_obj->data_buffer = data_buffer; +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ // ˵ *seekfree_assistant_oscilloscope ʾݽṹ // ز void // ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope) +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj) { - uint8 packet_size; - - // λ - seekfree_assistant_oscilloscope->channel_num &= 0x0f; - - zf_assert(SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT >= seekfree_assistant_oscilloscope->channel_num); - - // ֡ͷ - seekfree_assistant_oscilloscope->head = SEEKFREE_ASSISTANT_SEND_HEAD; - - // дϢ - packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4; - seekfree_assistant_oscilloscope->length = packet_size; - - // д빦ͨ - seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE; - // У - seekfree_assistant_oscilloscope->check_sum = 0; - seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size); + oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + &(oscilloscope_obj->config.cmd), + sizeof(oscilloscope_obj->config) - 2); + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + (oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); - // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[] - - seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size); + seekfree_assistant_transfer_callback( + (const uint8 *)oscilloscope_obj, + sizeof(oscilloscope_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); } +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) //------------------------------------------------------------------------------------------------------------------- -// ͼϢú -// ˵ camera_type ͼ -// ˵ image_addr ͼַ NULLʾֻͱϢλ -// ˵ width ͼ -// ˵ height ͼ߶ +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ // ز void -// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H); -// עϢ +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height) +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj) { - seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION; - // дϢ - seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct); + zf_assert(NULL != debug_param_obj); - seekfree_assistant_camera_buffer.camera_type = camera_type; - seekfree_assistant_camera_buffer.image_addr = image_addr; - seekfree_assistant_camera_buffer.width = width; - seekfree_assistant_camera_buffer.height = height; -} + seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ + uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ + uint8 temp_sum = 0xFF; // Уʱ + uint32 read_length = 0; // ȡʱ -//------------------------------------------------------------------------------------------------------------------- -// ͼ߷ú -// ˵ boundary_type ߽ -// ˵ dot_num һ߽жٸ -// ˵ dot_x1 ű1ĵַ NULLʾͱ1 -// ˵ dot_x2 ű2ĵַ NULLʾͱ2 -// ˵ dot_x3 ű3ĵַ NULLʾͱ3 -// ˵ dot_y1 ű1ĵַ NULLʾͱ1 -// ˵ dot_y2 ű2ĵַ NULLʾͱ2 -// ˵ dot_y3 ű3ĵַ NULLʾͱ3 -// ز void -// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк -// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ -// ʹʾ seekfree_assistant_camera_config(XY_BOUNDARY, 160, xy_x1_boundary, xy_x2_boundary, xy_x3_boundary, xy_y1_boundary, xy_y2_boundary, xy_y3_boundary); // ͼʱߣ߰ -// עϢ -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3) -{ - uint8 i = 0; - uint8 boundary_num = 0; - uint8 boundary_data_type = 0; - - // ͼͻǷ׼, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_dot_data.dot_num = dot_num; - seekfree_assistant_camera_dot_data.valid_flag = 0; - for(i = 0; i < 3; i++) - { - seekfree_assistant_camera_buffer.boundary_x[i] = NULL; - seekfree_assistant_camera_buffer.boundary_y[i] = NULL; - } - - switch(boundary_type) - { - case X_BOUNDARY: - { - if(NULL != dot_x1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x1; - } - if(NULL != dot_x2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x2; - } - if(NULL != dot_x3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x3; - } - - if(255 < seekfree_assistant_camera_buffer.height) - { - boundary_data_type = 1; - } - }break; - - case Y_BOUNDARY: - { - if(NULL != dot_y1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if(NULL != dot_y2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if(NULL != dot_y3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if(255 < seekfree_assistant_camera_buffer.width) - { - boundary_data_type = 1; - } - }break; - - case XY_BOUNDARY: - { - if((NULL != dot_x1) && (NULL != dot_y1)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if((NULL != dot_x2) && (NULL != dot_y2)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if((NULL != dot_x3) && (NULL != dot_y3)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x3; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if((255 < seekfree_assistant_camera_buffer.width) || (255 < seekfree_assistant_camera_buffer.height)) - { - boundary_data_type = 1; - } - }break; - - case NO_BOUNDARY:break; - } - - seekfree_assistant_camera_dot_data.dot_type = (boundary_type << 6) | (boundary_data_type << 5) | boundary_num; -} - -//------------------------------------------------------------------------------------------------------------------- -// ַͷͼ -// ˵ void -// ز void -// ʹʾ -// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_send (void) -{ - // ͼͻǷ׼ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_data_send(seekfree_assistant_camera_buffer.camera_type, seekfree_assistant_camera_buffer.image_addr, seekfree_assistant_camera_dot_data.dot_type & 0x0f, seekfree_assistant_camera_buffer.width, seekfree_assistant_camera_buffer.height); - - if(seekfree_assistant_camera_dot_data.dot_type & 0x0f) - { - seekfree_assistant_camera_dot_send(&seekfree_assistant_camera_buffer); - } -} - - -//------------------------------------------------------------------------------------------------------------------- -// ֽյ -// ˵ void -// ز void -// ʹʾ ֻҪŵеPITжϻѭ -//------------------------------------------------------------------------------------------------------------------- -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) -void seekfree_assistant_data_analysis (void) -{ - uint8 temp_sum; - uint32 read_length; - seekfree_assistant_parameter_struct *receive_packet; - - // ʹuint32ж壬ĿΪ˱ֽ֤ڶ - uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4]; - - // Զȡ, ԶĴ䷽ʽӽջصжȡ - read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE); + // Զȡһݰ + // ԶĴ䷽ʽӽջصжȡ + read_length = seekfree_assistant_receive_callback( + debug_param_cmd_pointer, + sizeof(seekfree_assistant_debug_param_cmd_struct)); if(read_length) - { - // ȡдFIFO - fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length); + { // ȡдFIFO + fifo_write_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + read_length); } - while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo)) - { - read_length = sizeof(seekfree_assistant_parameter_struct); - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_ONLY); + while( sizeof(seekfree_assistant_debug_param_cmd_struct) + <= fifo_used(&seekfree_assistant_debug_param_fifo)) + { // FIFO һݰ ôͽн + // ֱӶһݰ + read_length = sizeof(seekfree_assistant_debug_param_cmd_struct); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_ONLY); - if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0]) - { - // û֡ͷFIFOȥһ - read_length = 1; - } - else - { - // ҵ֡ͷ - receive_packet = (seekfree_assistant_parameter_struct *)temp_buffer; - temp_sum = receive_packet->check_sum; - receive_packet->check_sum = 0; - if(temp_sum == seekfree_assistant_sum((uint8 *)temp_buffer, sizeof(seekfree_assistant_parameter_struct))) - { - // Уɹ - seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data; - seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1; + if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0] + && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2]) + { // ֱƥ֡ͷ ҹҲƥ + temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ + debug_param_cmd_obj.check_sum = 0; // հУֵ У + if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct))) + { // Уɹ + debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float; + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0]; + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + #endif + debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1; + temp_sum = 0x00; } else - { - read_length = 1; + { // Уƥ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + } + else + { // ƥ䲻֡ͷ͹ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + + if(0xFF == temp_sum) + { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ + for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++) + { // Ϊȡһ һ + if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length]) + { // ҵ¸֡ͷ˳ + break; + } } } // ʹõ - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_AND_CLEAN); } } #endif - - - diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant.h index 5b7e1b5..937f784 100644 --- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,142 +24,292 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ - #include "zf_common_typedef.h" +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 , + SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 , +}seekfree_assistant_data_type_enum; -// 1ʹܲڵĹ 0رղڵĹ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 ) - - - -// FIFOС -#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) - -// ʾͨ -#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) - -// Եͨ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) - -// ͼ -#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) - -// Ƭλ͵֡ͷ -#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) - -// ͷ -#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) -#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) -#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) - -// λƬ͵֡ͷ -#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) - -// -#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) - +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ +}seekfree_assistant_ccd_resolution_enum; // ͷö typedef enum { - // ͷͺŶ - SEEKFREE_ASSISTANT_OV7725_BIN = 1, - SEEKFREE_ASSISTANT_MT9V03X, - SEEKFREE_ASSISTANT_SCC8660, - // ͼͶ - SEEKFREE_ASSISTANT_BINARY = 1, - SEEKFREE_ASSISTANT_GRAY, - SEEKFREE_ASSISTANT_RGB565, -}seekfree_assistant_image_type_enum; + SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY , + SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 , -// ͷö -typedef enum -{ - // ͷͺŶ - X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ - Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ - XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ - NO_BOUNDARY, // ͵ͼûбϢ -}seekfree_assistant_boundary_type_enum; + // ͷͺƥ䶨 + SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X , + SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 , +}seekfree_assistant_camera_type_enum; + +#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨 + +#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ +#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤ + +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС +#endif typedef struct { - uint8 head; // ֡ͷ - uint8 channel_num; // λΪ λΪͨ - uint8 check_sum; // У - uint8 length; // - float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + uint8 data_lenght_buffer[2] ; // CCD ݳ + uint8 channel_color_buffer[2] ; // ͨɫ + uint8 channel_data_max[2] ; // ֵͨ + uint8 data_type ; // ȷϴС + uint8 reserve ; // + }config; + uint16 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_ccd_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 camera_type ; // ͷ + uint8 image_width_buffer[2] ; // ͼ + uint8 image_height_buffer[2] ; // ͼ߶ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 data_type ; // ȷϴС + uint8 boundary_lenght_buffer[2] ; // ߳ + uint8 color_buffer[2] ; // ͨɫ + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_boundary_struct; + +typedef struct +{ + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 reserve ; // + uint8 x_axis_buffer[2] ; // X + uint8 y_axis_buffer[2] ; // Y + uint8 width_buffer[2] ; // ο + uint8 height_buffer[2] ; // θ߶ + uint8 color_buffer[2] ; // ɫ +}seekfree_assistant_camera_rectangular_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_max ; // ͨ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ }seekfree_assistant_oscilloscope_struct; +typedef union +{ + uint8 data_uint8[4] ; + float data_float ; +}seekfree_assistant_param_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ - uint8 length; // ȣЭ鲿֣ - uint16 image_width; // ͼ - uint16 image_height; // ͼ߶ -}seekfree_assistant_camera_struct; - - -typedef struct -{ - uint8 head; // ֡ͷ - uint8 function; // - uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽ - uint8 length; // ȣЭ鲿֣ - uint16 dot_num; // - uint8 valid_flag; // ͨʶ - uint8 reserve; // -}seekfree_assistant_camera_dot_struct; - -typedef struct -{ - void *image_addr; // ͷַ - uint16 width; // ͼ - uint16 height; // ͼ߶ - seekfree_assistant_image_type_enum camera_type; // ͷ - void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ - void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ -}seekfree_assistant_camera_buffer_struct; + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + seekfree_assistant_param_struct dat ; // һ + +}seekfree_assistant_debug_param_cmd_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 channel; // ͨ - uint8 check_sum; // У - float data; // -}seekfree_assistant_parameter_struct; + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint8_struct; + + +typedef struct +{ + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint16_struct; + +typedef struct +{ + float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; + uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; +}seekfree_assistant_debug_param_struct; typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length); typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length); -extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ -extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ - - -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope); -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height); -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3); -void seekfree_assistant_camera_send (void); -void seekfree_assistant_data_analysis (void); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ +// ز void +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, 16] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *seekfree_assistant_oscilloscope ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj); + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj); +#endif #endif diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c index d139201..23205d5 100644 --- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,23 +24,20 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_typedef.h" #include "zf_common_fifo.h" #include "zf_common_debug.h" -#include "zf_driver_uart.h" + #include "zf_device_wireless_uart.h" -#include "zf_device_ble6a20.h" -#include "zf_device_bluetooth_ch9141.h" -#include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" #include "seekfree_assistant.h" @@ -50,7 +47,6 @@ extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ - //------------------------------------------------------------------------------------------------------------------- // ַͺ // ˵ *buff Ҫ͵ݵַ @@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv // ز uint32 ʣδݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) +uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݷ͹ @@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) // ز uint32 յݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) +uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݽչ return 0; @@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) // ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ // ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) +void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) { switch(transfer_device) { case SEEKFREE_ASSISTANT_DEBUG_UART: { -#if DEBUG_UART_USE_INTERRUPT == 1 seekfree_assistant_transfer_callback = debug_send_buffer; seekfree_assistant_receive_callback = debug_read_ring_buffer; -#endif }break; - + case SEEKFREE_ASSISTANT_WIRELESS_UART: { seekfree_assistant_transfer_callback = wireless_uart_send_buffer; seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; - - case SEEKFREE_ASSISTANT_BLE6A20: - { - seekfree_assistant_transfer_callback = ble6a20_send_buffer; - seekfree_assistant_receive_callback = ble6a20_read_buffer; - }break; - case SEEKFREE_ASSISTANT_CH9141: - { - seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; - seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; - }break; - - case SEEKFREE_ASSISTANT_WIFI_UART: - { - seekfree_assistant_transfer_callback = wifi_uart_send_buffer; - seekfree_assistant_receive_callback = wifi_uart_read_buffer; - }break; - + // case SEEKFREE_ASSISTANT_CH9141: + // { + // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; + // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; + // }break; + + // case SEEKFREE_ASSISTANT_WIFI_UART: + // { + // seekfree_assistant_transfer_callback = wifi_uart_send_buffer; + // seekfree_assistant_receive_callback = wifi_uart_read_buffer; + // }break; + case SEEKFREE_ASSISTANT_WIFI_SPI: { seekfree_assistant_transfer_callback = wifi_spi_send_buffer; seekfree_assistant_receive_callback = wifi_spi_read_buffer; }break; - - case SEEKFREE_ASSISTANT_CUSTOM: - { + + default: + { // Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ - + seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + seekfree_assistant_receive_callback = seekfree_assistant_receive; }break; } } - - diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.h index 2ccfd8a..0e28f49 100644 --- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,13 +24,13 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,7 +43,6 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ SEEKFREE_ASSISTANT_WIRELESS_UART, // ת - SEEKFREE_ASSISTANT_BLE6A20, // ת SEEKFREE_ASSISTANT_CH9141, // CH9141 SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_absolute_encoder.h index 1166c84..dc091aa 100644 --- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_absolute_encoder.h +++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_absolute_encoder.h @@ -62,7 +62,7 @@ //==================================================== SPI ==================================================== #else //====================================================Ӳ SPI ==================================================== -#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI +#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI #define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI #define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK #define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI @@ -70,7 +70,7 @@ //====================================================Ӳ SPI ==================================================== #endif -#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ +#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ #define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN))) #define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ble6a20.h index 6f4544a..6af089f 100644 --- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ble6a20.h +++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ble6a20.h @@ -76,7 +76,7 @@ // 1Զ Զʵ޸ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ // Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000 -#define BLE6A20_AUTO_BAUD_RATE ( 0 ) +#define BLE6A20_AUTO_BAUD_RATE ( 1 ) #if (1 == BLE6A20_AUTO_BAUD_RATE) typedef enum diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rc.c new file mode 100644 index 0000000..68840e2 --- /dev/null +++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rc.c @@ -0,0 +1,563 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#include "math.h" +#include "zf_common_debug.h" +#include "zf_driver_delay.h" +#include "zf_driver_spi.h" +#include "zf_driver_gpio.h" +#include "zf_driver_soft_iic.h" +#include "zf_device_config.h" +#include "zf_driver_uart.h" +#include "zf_driver_exti.h" + +#include "zf_device_imu660rc.h" + +#ifndef M_PI +#define M_PI 3.1415926f +#endif + + +static uint8 imu660rc_quarternion_rate; + +float imu660rc_transition_factor[2]; +int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro () +int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ) +float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ +float imu660rc_quarternion[4]; // Ԫ + + + +#if IMU660RC_USE_SOFT_IIC +static soft_iic_info_struct imu660rc_iic_struct; + +#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data))) +#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len))) +#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg))) +#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len))) +#else +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC дĴ +// ˵ reg Ĵַ +// ˵ data +// ز void +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_write_register (uint8 reg, uint8 data) +{ + IMU660RC_CS(0); + spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data); + IMU660RC_CS(1); +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ĵ +// ˵ reg Ĵַ +// ز uint8 +// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_read_register (uint8 reg) +{ + uint8 data; + IMU660RC_CS(0); + data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R); + IMU660RC_CS(1); + return data; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC +// ˵ reg Ĵַ +// ˵ data ݻ +// ˵ len ݳ +// ز void +// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len) +{ + IMU660RC_CS(0); + spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len); + IMU660RC_CS(1); +} +#endif + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC fp16ת +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint32 fp16_to_float(uint16 h) +{ + uint16 h_exp = (h & 0x7c00u); + uint32 f_sgn = ((uint32)h & 0x8000u) << 16; + switch (h_exp) + { + case 0x0000u: // 0 or subnormal + { + uint16 h_sig = (h & 0x03ffu); + // Signed zero + if (h_sig == 0) + { + return f_sgn; + } + // Subnormal + h_sig <<= 1; + while ((h_sig & 0x0400u) == 0) + { + h_sig <<= 1; + h_exp++; + } + uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23; + uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13; + return f_sgn + f_exp + f_sig; + } + case 0x7c00u: // inf or NaN + { + // All-ones exponent and a copy of the significand + return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13); + } + default: // normalized + { + // Just need to adjust the exponent and shift + return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13); + } + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫһ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_normalize(float quat[4], uint16 *fp16) +{ + float n = 0; + float temp[4]; + + *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]); + *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]); + *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]); + *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]); + + n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3]; + n = sqrtf(n); + + if(n > 0.001f) // Խӽ0ֵ + { + n = temp[3] < 0.0f ? -n : n; + + quat[0] = temp[1] / n; + quat[1] = temp[2] / n; + quat[2] = temp[0] / n; + quat[3] = temp[3] / n; + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫתŷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw) +{ + float euler[3]; + + float sqx = quat[0] * quat[0]; + float sqy = quat[1] * quat[1]; + float sqz = quat[2] * quat[2]; + + euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx)); + euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2])); + euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz)); + + // תǶ + euler[0] = 180 * (euler[0]) / M_PI; + euler[1] = 180 * (euler[1]) / M_PI; + euler[2] = 180 * (euler[2]) / M_PI; + + // Ƕȵ + euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2]; + + *roll = euler[0]; + *pitch = euler[1]; + *yaw = euler[2]; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ÷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank) +{ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank); +} + + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Լ +// ˵ void +// ز uint8 1-Լʧ 0-Լɹ +// ʹʾ imu660rc_self_check(); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_self_check (void) +{ + uint8 dat = 0, return_state = 0; + uint16 timeout_count = 0; + do + { + if(IMU660RC_TIMEOUT_COUNT < timeout_count ++) + { + return_state = 1; + break; + } + dat = imu660rc_read_register(IMU660RC_CHIP_ID); + system_delay_ms(1); + }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû⵽豸 + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ٶȼ +// ˵ void +// ز void +// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_acc (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6); + imu660rc_acc_x = dat[0]; + imu660rc_acc_y = dat[1]; + imu660rc_acc_z = dat[2]; + } +} +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC +// ˵ void +// ز void +// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_gyro (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6); + imu660rc_gyro_x = dat[0]; + imu660rc_gyro_y = dat[1]; + imu660rc_gyro_z = dat[2]; + } +} + + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ԪݲתΪŷ +// ˵ void +// ز void +// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı +// עϢ ҪINT2Ŵжϵô˺ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_quarternion(void) +{ + uint8 i; + uint16 buff[4]; + uint8 *buff1_ptr; + int16 *buff2_ptr; + + if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate) + { + buff1_ptr = (uint8 *)buff; + + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x20); + imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31); + + for(i = 0; 8 > i; i++) + { + imu660rc_write_register(0x08, 0x4C + i); + buff1_ptr[i] = imu660rc_read_register(0x09); + } + + imu660rc_write_register(IMU660RC_PAGE_RW, 0x0); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // Ԫһ + quarternion_normalize(imu660rc_quarternion, buff); + // Ԫתŷ + quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw); + + // ȡٶٶϢ + #if(1 == IMU660RC_QUARTERNION_GET_ACC) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6); + imu660rc_acc_x = buff2_ptr[0]; + imu660rc_acc_y = buff2_ptr[1]; + imu660rc_acc_z = buff2_ptr[2]; + } + #endif + #if(1 == IMU660RC_QUARTERNION_GET_GYRO) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6); + imu660rc_gyro_x = buff2_ptr[0]; + imu660rc_gyro_y = buff2_ptr[1]; + imu660rc_gyro_z = buff2_ptr[2]; + } + #endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RCжϻصҪжڶȡԪ +// ˵ void +// ز void +// ʹʾ +// עϢ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_callback(void) +{ + imu660rc_get_quarternion(); + +} + +//------------------------------------------------------------------------------------------------------------------- +// ʼ IMU660RC +// ˵ quarternion_rate ѡԪ +// ز uint8 1-ʼʧ 0-ʼɹ +// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate) +{ + uint8 return_state = 0; + + imu660rc_quarternion_rate = quarternion_rate; + #if IMU660RC_USE_SOFT_IIC + soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿ + + #else + spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿ + gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿ + #endif + + system_delay_ms(10); + + do + { + if(imu660rc_self_check()) // IMU660RC Լ + { + // ˶Ϣ ʾλ + // ô IMU660RC Լʱ˳ + // һ½û ûܾǻ + zf_log(0, "imu660rc self check error."); + return_state = 1; + break; + } + + // λ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04); + system_delay_ms(30); + + // ÿ¹ַ + imu660rc_write_register(IMU660RC_CTRL3, 0x44); + + switch(IMU660RC_ACC_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_ACC_SAMPLE_SGN_2G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x00); + imu660rc_transition_factor[0] = 16393.44; + }break; + case IMU660RC_ACC_SAMPLE_SGN_4G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x01); + imu660rc_transition_factor[0] = 8196.72; + }break; + case IMU660RC_ACC_SAMPLE_SGN_8G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x02); + imu660rc_transition_factor[0] = 4098.36; + }break; + case IMU660RC_ACC_SAMPLE_SGN_16G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x03); + imu660rc_transition_factor[0] = 2049.18; + }break; + } + if(1 == return_state) + { + break; + } + + switch(IMU660RC_GYRO_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_125DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x00); + imu660rc_transition_factor[1] = 228.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_250DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x01); + imu660rc_transition_factor[1] = 114.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_500DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x02); + imu660rc_transition_factor[1] = 57.1428; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_1000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x03); + imu660rc_transition_factor[1] = 28.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_2000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x04); + imu660rc_transition_factor[1] = 14.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_4000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x0C); + imu660rc_transition_factor[1] = 7.14285; + }break; + } + if(1 == return_state) + { + break; + } + + // ôģʽΪ߾ģʽԼ + imu660rc_write_register(IMU660RC_CTRL1, 0x15); + imu660rc_write_register(IMU660RC_CTRL2, 0x18); + + // LPF1˲ + imu660rc_write_register(IMU660RC_CTRL7, 0x01); + + // LPF2˲ + imu660rc_write_register(IMU660RC_CTRL9, 0x08); + + // ԪӦ + if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate) + { + // жϴź + imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80); + imu660rc_write_register(IMU660RC_CTRL4, 0x08); + imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30); + + // üٶȡٶ + imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3)); + imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3)); + + // Ԫʲ + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3)); + imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x00); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // жϼ + exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING); + } + }while(0); + + return return_state; +} + + + + + + + + + + + + + diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rc.h new file mode 100644 index 0000000..dd5a9e3 --- /dev/null +++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rc.h @@ -0,0 +1,211 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#ifndef _zf_device_imu660rc_h_ +#define _zf_device_imu660rc_h_ + +#include "zf_common_typedef.h" + + +// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC +// IMU660RC_USE_SOFT_IICҪȱ벢س򣬵ƬģҪϵͨѶ +#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ + +#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ +//==================================================== IIC ==================================================== +#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ +#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL +#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA +//==================================================== IIC ==================================================== +#else + +//====================================================Ӳ SPI ==================================================== +#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI +#define IMU660RC_SPI (SPI_0) // Ӳ SPI +#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK +#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI +#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO +//====================================================Ӳ SPI ==================================================== +#endif +#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ +#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) ) +#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ + + +#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ +#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ + +typedef enum +{ + IMU660RC_MAIN_MEM_BANK = 0x00, + IMU660RC_HUB_MEM_BANK = 0x40, + IMU660RC_EMBED_MEM_BANK = 0x80, +}imu660rc_mem_bank_enum; + +typedef enum +{ + IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2) + IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G + IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G + IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G +}imu660rc_acc_sample_config; + +typedef enum +{ + IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S) + IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS + IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS + IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS + IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS + IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS +}imu660rc_gyro_sample_config; + +typedef enum +{ + IMU660RC_QUARTERNION_15HZ, // 15 Hz + IMU660RC_QUARTERNION_30HZ, // 30 Hz + IMU660RC_QUARTERNION_60HZ, // 60 Hz + IMU660RC_QUARTERNION_120HZ, // 120Hz + IMU660RC_QUARTERNION_240HZ, // 240Hz + IMU660RC_QUARTERNION_480HZ, // 480Hz + IMU660RC_QUARTERNION_DISABLE, // Ԫ +}imu660rc_quarternion_rate_config; + + +//================================================ IMU660RC ڲַ================================================ +#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ +#define IMU660RC_SPI_W ( 0x00 ) +#define IMU660RC_SPI_R ( 0x80 ) +#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ + + +//================================================ IMU660RC Ĵַ================================================ +#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 ) +#define IMU660RC_INT2_CTRL ( 0x0E ) +#define IMU660RC_CHIP_ID ( 0x0F ) +#define IMU660RC_CTRL1 ( 0x10 ) +#define IMU660RC_CTRL2 ( 0x11 ) +#define IMU660RC_CTRL3 ( 0x12 ) +#define IMU660RC_CTRL4 ( 0x13 ) +#define IMU660RC_CTRL5 ( 0x14 ) +#define IMU660RC_CTRL6 ( 0x15 ) +#define IMU660RC_CTRL7 ( 0x16 ) +#define IMU660RC_CTRL8 ( 0x17 ) +#define IMU660RC_CTRL9 ( 0x18 ) +#define IMU660RC_CTRL10 ( 0x19 ) +#define IMU660RC_CTRL_STATUS ( 0x1A ) +#define IMU660RC_STATUS_REG ( 0x1E ) +#define IMU660RC_OUT_TEMP_L ( 0x20 ) +#define IMU660RC_OUT_TEMP_H ( 0x21 ) +#define IMU660RC_OUTX_L_G ( 0x22 ) +#define IMU660RC_OUTX_H_G ( 0x23 ) +#define IMU660RC_OUTY_L_G ( 0x24 ) +#define IMU660RC_OUTY_H_G ( 0x25 ) +#define IMU660RC_OUTZ_L_G ( 0x26 ) +#define IMU660RC_OUTZ_H_G ( 0x27 ) +#define IMU660RC_OUTX_L_A ( 0x28 ) +#define IMU660RC_OUTX_H_A ( 0x29 ) +#define IMU660RC_OUTY_L_A ( 0x2A ) +#define IMU660RC_OUTY_H_A ( 0x2B ) +#define IMU660RC_OUTZ_L_A ( 0x2C ) +#define IMU660RC_OUTZ_H_A ( 0x2D ) + +#define IMU660RC_PAGE_SEL ( 0x02 ) +#define IMU660RC_EMB_FUNC_EN_A ( 0x04 ) +#define IMU660RC_PAGE_RW ( 0x17 ) +#define IMU660RC_SFLP_ODR ( 0x5E ) +#define IMU660RC_EMB_FUNC_CFG ( 0x63 ) + + + +extern float imu660rc_transition_factor[2]; +extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; // +extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ +extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ +extern float imu660rc_quarternion[4]; // Ԫ + + +void imu660rc_get_acc (void); +void imu660rc_get_gyro (void); +void imu660rc_get_quarternion (void); + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ٶȼתΪʵ +// ˵ acc_value ļٶȼ +// ز void +// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2) +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0]) + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC תΪʵ +// ˵ gyro_value +// ز void +// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1]) +void imu660rc_callback (void); +uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate); + + + +#endif diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rx.h index 45699d9..81b8b41 100644 --- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rx.h +++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_imu660rx.h @@ -97,7 +97,7 @@ //================================================ IMU660RX ȫֱ================================================ extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro () extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ) -extern float imu660ra_transition_factor[2]; +extern float imu660rx_transition_factor[2]; //================================================ IMU660RX ȫֱ================================================ diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips114.h index c56f310..9c4ac0d 100644 --- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips114.h +++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips114.h @@ -167,7 +167,7 @@ void ips114_init (void); // ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================= IPS114 չ================================================ #endif diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200.h index 850fb11..5bf4284 100644 --- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200.h +++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200.h @@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select); // ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================== IPS200 չ================================================ diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h index 98c5364..557e1d2 100644 --- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h @@ -86,7 +86,7 @@ // £SCC8660_PCLK_DIVԽͼԽ #define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1> #define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ -#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) +#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) #define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0 //================================================ SCC8660 ã֧ͫ֡ʰ汾=========================== diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.c index b51c600..b06e6a1 100644 --- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.c +++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.c @@ -24,7 +24,7 @@ * ļ zf_device_wifi_spi * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.9.20 +* ADS v1.10.2 * ƽ̨ TC264D * https://seekfree.taobao.com/ * @@ -63,6 +63,21 @@ #define SOCKET_CONNECT_TIME_OUT 50000 // λ #define OTHER_TIME_OUT 1000 // λ +#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088)) + #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088" +#endif + +#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE) + #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE" +#endif + + +#if (WIFI_SPI_TRANSFER_SIZE != 4088) + #error "WIFI_SPI_TRANSFER_SIZE must be == 4088" +#endif + + + char wifi_spi_version[12]; // ģ̼汾Ϣ char wifi_spi_mac_addr[20]; // ģMACַϢ char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ @@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void) { memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1; - return return_state; } @@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void) { memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1; - return return_state; } @@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void) { memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1; + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ȡϵͳʱ +// ˵ time_format ʱʽ +// ز *buffer ʱַַ СҪ30ֽ +// ز buffer_size С +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size) +{ + uint8 return_state = 1; + wifi_spi_packets_struct temp_packets; + uint8 send_cmd, receive_cmd; + + // ʱ30ֽ + // ģ̼V2汾 + if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2))) + { + send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0; + receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0; + + return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT); + if((0 == return_state) && (receive_cmd == temp_packets.head.command)) + { + return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2); + if(0 == return_state) + { + memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3); + buffer[temp_packets.head.length - 3] = 0; + } + } + } + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ɨȵ +// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз +// ˵ buffer_size ij +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +// עϢ ÿһаһwifi +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size) +{ + uint8 return_state; + + // ģV2汾Ĺִ̼֧˹ + if(!strncmp(wifi_spi_version, "V2", 2)) + { + return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT); + + if(0 == return_state) + { + #if (0 == WIFI_SPI_READ_TRANSFER) + wifi_spi_send_buffer(NULL, 0); + #endif + while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size)) + { + system_delay_ms(10); + } + } + } return return_state; } @@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) while(length) { - send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length; + send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length); if(wifi_spi_wait_idle(OTHER_TIME_OUT)) { @@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) return length; } +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ַͺͬ +// ˵ *string Ҫ͵ַ +// ز void +// ʹʾ wifi_spi_send_string("123"); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +void wifi_spi_send_string(const char *string) +{ + wifi_spi_send_buffer((uint8*)string, strlen(string)); +} + //------------------------------------------------------------------------------------------------------------------- // WIFI SPI ȡ // ˵ *buff ջ @@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) { zf_assert(NULL != buffer); - uint32 data_len = length; + uint32 fifo_read_length; + uint32 write_length = 0; + wifi_spi_packets_struct temp_packets; + + // жFIFOǷݣȴFIFOȡ + if(fifo_used(&wifi_spi_fifo)) + { + fifo_read_length = fifo_used(&wifi_spi_fifo); + fifo_read_length = length < fifo_read_length ? length : fifo_read_length; + fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN); + + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + } #if(1 == WIFI_SPI_READ_TRANSFER) - - wifi_spi_packets_struct temp_packets; - // WIFI SPI״̬жϻ߳ѾͨѶ򱾴βܷ if(WIFI_SPI_IDLE == wifi_spi_mutex) { - // ͨѶ״̬Ϊæ - wifi_spi_mutex = WIFI_SPI_BUSY; + wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ - // ͨѶ鿴ģǷδȡ do { - if(wifi_spi_wait_idle(OTHER_TIME_OUT)) + if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ + (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳ + ) { break; } + temp_packets.head.command = WIFI_SPI_DATA; temp_packets.head.length = 0; wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE); // յİǷ - if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) + if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) && + (temp_packets.head.length) + ) { - // յ - if(temp_packets.head.length) + if(length) + { + fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length; + memcpy(buffer, temp_packets.buffer, fifo_read_length); + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO + { + fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length); + } + } + else // ȫдFIFO { fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length); } @@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command); wifi_spi_mutex = WIFI_SPI_IDLE; } -#endif +#endif - fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN); - return data_len; + return write_length; } //------------------------------------------------------------------------------------------------------------------- @@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word) // MACַϢַʽwifi_spi_mac_addr wifi_spi_get_mac_addr(); - + if(NULL == wifi_ssid) + { + // ʼʱҪWIFI + break; + } return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word); if(return_state) { diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.h index eea8a78..e7cec39 100644 --- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.h +++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.h @@ -73,8 +73,8 @@ #if (WIFI_SPI_AUTO_CONNECT > 2) #error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]" #else -#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP -#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿ +#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP +#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666 #endif @@ -95,10 +95,15 @@ typedef enum WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ + WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI + WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾 WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ + WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1 + WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2 + WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3 // ӻش WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ @@ -110,6 +115,9 @@ typedef enum WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾 WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں + WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ + WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ + WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ WIFI_SPI_INVALID2 = 0xFF // Чݰ }wifi_spi_packets_command_enum; @@ -134,19 +142,27 @@ typedef struct uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // }wifi_spi_packets_struct; - +typedef enum +{ + WIFI_SPI_UTC_0 = 1, // ʱ + WIFI_SPI_GMT, // ʱ תΪGMTʽ׺GMT һڶԽƶ˴ģʹ + WIFI_SPI_UTC_8, // ʱ +}wifi_spi_time_enum; + extern char wifi_spi_version[12]; // ̼汾 ַ extern char wifi_spi_mac_addr[20]; // ģMACַ ַ extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ -uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); -uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); -uint8 wifi_spi_socket_disconnect (void); -uint8 wifi_spi_udp_send_now (void); -uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); -uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size); +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size); +uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); +uint8 wifi_spi_socket_disconnect (void); +uint8 wifi_spi_udp_send_now (void); +uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); +void wifi_spi_send_string (const char *string); +uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); -uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); #endif - diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.h index 0f392ff..24b88cc 100644 --- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.h +++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.h @@ -73,7 +73,7 @@ #if (WIFI_UART_AUTO_CONNECT > 3) #error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]" #else -#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP +#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP #define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_UART_LOCAL_PORT "8080" // ˿ #endif diff --git a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_driver/zf_driver_encoder.c index 8d514b7..ad4099e 100644 --- a/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_driver/zf_driver_encoder.c +++ b/Example/Coreboard_Demo/E05_pit_demo/libraries/zf_driver/zf_driver_encoder.c @@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n) //------------------------------------------------------------------------------------------------------------------- void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin) { -// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init + zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init IfxGpt12_enableModule(&MODULE_GPT120); IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4); diff --git a/Example/Coreboard_Demo/E05_pit_demo/user/isr.c b/Example/Coreboard_Demo/E05_pit_demo/user/isr.c index daa57f0..927ed43 100644 --- a/Example/Coreboard_Demo/E05_pit_demo/user/isr.c +++ b/Example/Coreboard_Demo/E05_pit_demo/user/isr.c @@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж { exti_flag_clear(ERU_CH0_REQ0_P15_4); - + + imu660rc_callback(); // 660RC ģ INT ж } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж @@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) { exti_flag_clear(ERU_CH5_REQ1_P15_8); - } } @@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) // exti_flag_clear(ERU_CH6_REQ9_P20_0); // } // } - IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO) { interrupt_global_enable(0); // жǶ @@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { interrupt_global_enable(0); // жǶ - gnss_uart_callback(); // GPSڻص + gnss_uart_callback(); // GNSSڻص diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E06_exit_demo/libraries/doc/version.txt index 1e222a3..8ce85ca 100644 --- a/Example/Coreboard_Demo/E06_exit_demo/libraries/doc/version.txt +++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/doc/version.txt @@ -1,3 +1,13 @@ +V3.4.4 + SCC8660ʽ + ָV2 + ޸ips200ʾscc8660ͷʽ + ޸ips114ʾscc8660ͷʽ +V3.4.3 + 660RC +V3.4.2 + ޸printfضеĺ궨 + WIFI_SPI V3.4.1 ޸Ĵڷ麯еķ ޸ips200proע diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_common/zf_common_headfile.h index 27b7965..e8d6021 100644 --- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_common/zf_common_headfile.h @@ -91,6 +91,7 @@ #include "zf_device_imu660ra.h" #include "zf_device_imu660rb.h" #include "zf_device_imu660rx.h" +#include "zf_device_imu660rc.h" #include "zf_device_imu963ra.h" #include "zf_device_ips114.h" #include "zf_device_ips200.h" diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/printf_redirect.c index c44d826..299da76 100644 --- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/printf_redirect.c +++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/printf_redirect.c @@ -45,7 +45,7 @@ //------------------------------------------------------------------------------------------------------------------- int fputc(int ch, FILE *stream) { - uart_write_byte(DEBUG_UART_INDEX, (char)ch); + uart_write_byte(PRINTF_USE_UART, (char)ch); return (ch); } @@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len) int fgetc(FILE *f) { #if PRINTF_OUTPUT_TYPE == 0 - return uart_read_byte(DEBUG_UART_INDEX); + return uart_read_byte(PRINTF_USE_UART); #else uint8 buf; wifi_spi_read_buffer(&buf, 1); diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant.c index 231b20d..3e9ec74 100644 --- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,423 +24,519 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_debug.h" #include "seekfree_assistant.h" +// ͨö +typedef enum +{ + SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 , + SEEKFREE_ASSISTANT_SEND_CAMERA_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD , -extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); -extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); + SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 , -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) + SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 , +}seekfree_assistant_cmd_type_enum; + +#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ +#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ + +// ݷͺָ +extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); +seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + +// ݽպָ +extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); +seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) #include "zf_common_fifo.h" -static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO -static fifo_struct seekfree_assistant_fifo = // FIFOṹ +static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE]; +static fifo_struct seekfree_assistant_debug_param_fifo = { - .buffer = seekfree_assistant_buffer, + .buffer = seekfree_assistant_debug_param_buffer, .execution = FIFO_IDLE, .type = FIFO_DATA_8BIT, .head = 0, .end = 0, - .size = SEEKFREE_ASSISTANT_BUFFER_SIZE, - .max = SEEKFREE_ASSISTANT_BUFFER_SIZE, -}; + .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, + .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, +}; #endif -static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ -static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ -static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ - -seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ -seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ - -seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ -vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ - //------------------------------------------------------------------------------------------------------------------- // ͺ -// ˵ *buffer ҪУݵַ -// ˵ length У鳤 -// ز uint8 ֵ +// ˵ *buffer ҪУݵַ +// ˵ length У鳤 +// ز uint8 ֵ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length) +static uint8 seekfree_assistant_sum (void *buffer, uint32 length) { uint8 temp_sum = 0; + uint8 *ptr = (uint8 *)buffer; while(length--) { - temp_sum += *buffer++; + temp_sum += *ptr ++; } return temp_sum; } //------------------------------------------------------------------------------------------------------------------- -// ͼͺ -// ˵ camera_type ͷ -// ˵ *image_addr ͼ׵ַ -// ˵ boundary_num ͼа߽ -// ˵ width ͼ -// ˵ height ͼ߶ +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ // ز void -// ʹʾ +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height) +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer) { - uint32 image_size = 0; + zf_assert(NULL != ccd_obj); + zf_assert(NULL != data_buffer); - seekfree_assistant_camera_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_data.function = SEEKFREE_ASSISTANT_CAMERA_FUNCTION; - seekfree_assistant_camera_data.camera_type = (camera_type << 5) | ((image_addr != NULL ? 0 : 1) << 4) | boundary_num; - // дϢЭ鲿 - seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct); - seekfree_assistant_camera_data.image_width = width; - seekfree_assistant_camera_data.image_height = height; + memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct)); + ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD; + ccd_obj->config.channel_index = channel_index; - // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct)); - - // ͷͼͼС - switch(camera_type) + uint16 data_max = 256; + uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT; + loop_count = (2 >= loop_count) ? (loop_count) : (2); + for(uint8 i = 0; loop_count > i; i ++) { - case SEEKFREE_ASSISTANT_OV7725_BIN: - { - image_size = width * height / 8; - }break; - - case SEEKFREE_ASSISTANT_MT9V03X: - { - image_size = width * height; - }break; - - case SEEKFREE_ASSISTANT_SCC8660: - { - image_size = width * height * 2; - }break; + data_max *= 4; } - // ͼ - if(NULL != image_addr) + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF); + #else + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + ccd_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + ccd_obj->config.data_type = data_type; + } + + // ¼ʵֽ uint16 Ҫݳ + ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1)); + // Ȼ¼Ӧݻ + ccd_obj->data_buffer = data_buffer; + + // У + ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.check_sum += seekfree_assistant_sum( + &(ccd_obj->config.cmd), + sizeof(ccd_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)ccd_obj, + sizeof(ccd_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(ccd_obj->data_buffer), + ccd_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer) +{ + zf_assert(NULL != camera_obj); + + memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct)); + camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD; + camera_obj->config.camera_type = camera_type; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF); + #else + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type + && NULL != data_buffer) { - seekfree_assistant_transfer_callback(image_addr, image_size); + camera_obj->config.data_type = 0x02; + } + else + { + camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01); + } + + // RGB565 ͼ ôֽ + camera_obj->buffer_byte_size = + image_width * image_height + * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1)); + camera_obj->buffer_byte_size = + (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type) + ? (camera_obj->buffer_byte_size / 8) + : (camera_obj->buffer_byte_size); + camera_obj->data_buffer = data_buffer; + + // У + camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.check_sum += seekfree_assistant_sum( + &(camera_obj->config.cmd), + sizeof(camera_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_obj, + sizeof(camera_obj->config)); + if(NULL != camera_obj->data_buffer) + { + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_obj->data_buffer), + camera_obj->buffer_byte_size); } } //------------------------------------------------------------------------------------------------------------------- -// ͼ߻ƺ -// ˵ boundary_id ID -// ˵ dot_num -// ˵ *dot_x ׵ַ -// ˵ *dot_y ׵ַ -// ˵ width ͼ -// ˵ height ͼ߶ +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 // ز void -// ʹʾ +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer) +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer) { - uint8 i; - uint16 dot_bytes = 0; // ֽ + zf_assert(NULL != camera_boundary_obj); + zf_assert(NULL != data_buffer); - dot_bytes = seekfree_assistant_camera_dot_data.dot_num; + memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct)); + camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD; - if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5)) - { - dot_bytes *= 2; + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + camera_boundary_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + camera_boundary_obj->config.data_type = data_type; } - // ȷ֡ͷܡ߽š곤ȡ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct)); + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif - for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++) - { - // жǷͺ - if(NULL != buffer->boundary_x[i]) - { - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes); - } + camera_boundary_obj->buffer_byte_size = + boundary_lenght * 2 + * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2)); + camera_boundary_obj->data_buffer = data_buffer; - // жǷ - if(NULL != buffer->boundary_y[i]) - { - // ûݣʾÿһֻһ߽ - // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣 - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes); - } - } + // У + camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.check_sum += seekfree_assistant_sum( + &(camera_boundary_obj->config.cmd), + sizeof(camera_boundary_obj->config) - 2); } //------------------------------------------------------------------------------------------------------------------- -// ʾͺ +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_boundary_obj, + sizeof(camera_boundary_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_boundary_obj->data_buffer), + camera_boundary_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color) +{ + seekfree_assistant_camera_rectangular_struct camera_rectangular_obj; + memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct)); + camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif + + // У + camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.check_sum += seekfree_assistant_sum( + &(camera_rectangular_obj.cmd), + sizeof(camera_rectangular_obj) - 2); + + seekfree_assistant_transfer_callback( + (const uint8 *)&camera_rectangular_obj, + sizeof(camera_rectangular_obj)); +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer) +{ + zf_assert(NULL != oscilloscope_obj); + zf_assert(NULL != data_buffer); + + memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct)); + oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD; + oscilloscope_obj->config.channel_max = + (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max) + ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX) + : ((0 == channel_max) ? (1) : (channel_max)); + oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00); + oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4; + oscilloscope_obj->data_buffer = data_buffer; +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ // ˵ *seekfree_assistant_oscilloscope ʾݽṹ // ز void // ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope) +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj) { - uint8 packet_size; - - // λ - seekfree_assistant_oscilloscope->channel_num &= 0x0f; - - zf_assert(SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT >= seekfree_assistant_oscilloscope->channel_num); - - // ֡ͷ - seekfree_assistant_oscilloscope->head = SEEKFREE_ASSISTANT_SEND_HEAD; - - // дϢ - packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4; - seekfree_assistant_oscilloscope->length = packet_size; - - // д빦ͨ - seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE; - // У - seekfree_assistant_oscilloscope->check_sum = 0; - seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size); + oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + &(oscilloscope_obj->config.cmd), + sizeof(oscilloscope_obj->config) - 2); + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + (oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); - // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[] - - seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size); + seekfree_assistant_transfer_callback( + (const uint8 *)oscilloscope_obj, + sizeof(oscilloscope_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); } +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) //------------------------------------------------------------------------------------------------------------------- -// ͼϢú -// ˵ camera_type ͼ -// ˵ image_addr ͼַ NULLʾֻͱϢλ -// ˵ width ͼ -// ˵ height ͼ߶ +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ // ز void -// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H); -// עϢ +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height) +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj) { - seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION; - // дϢ - seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct); + zf_assert(NULL != debug_param_obj); - seekfree_assistant_camera_buffer.camera_type = camera_type; - seekfree_assistant_camera_buffer.image_addr = image_addr; - seekfree_assistant_camera_buffer.width = width; - seekfree_assistant_camera_buffer.height = height; -} + seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ + uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ + uint8 temp_sum = 0xFF; // Уʱ + uint32 read_length = 0; // ȡʱ -//------------------------------------------------------------------------------------------------------------------- -// ͼ߷ú -// ˵ boundary_type ߽ -// ˵ dot_num һ߽жٸ -// ˵ dot_x1 ű1ĵַ NULLʾͱ1 -// ˵ dot_x2 ű2ĵַ NULLʾͱ2 -// ˵ dot_x3 ű3ĵַ NULLʾͱ3 -// ˵ dot_y1 ű1ĵַ NULLʾͱ1 -// ˵ dot_y2 ű2ĵַ NULLʾͱ2 -// ˵ dot_y3 ű3ĵַ NULLʾͱ3 -// ز void -// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк -// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ -// ʹʾ seekfree_assistant_camera_config(XY_BOUNDARY, 160, xy_x1_boundary, xy_x2_boundary, xy_x3_boundary, xy_y1_boundary, xy_y2_boundary, xy_y3_boundary); // ͼʱߣ߰ -// עϢ -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3) -{ - uint8 i = 0; - uint8 boundary_num = 0; - uint8 boundary_data_type = 0; - - // ͼͻǷ׼, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_dot_data.dot_num = dot_num; - seekfree_assistant_camera_dot_data.valid_flag = 0; - for(i = 0; i < 3; i++) - { - seekfree_assistant_camera_buffer.boundary_x[i] = NULL; - seekfree_assistant_camera_buffer.boundary_y[i] = NULL; - } - - switch(boundary_type) - { - case X_BOUNDARY: - { - if(NULL != dot_x1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x1; - } - if(NULL != dot_x2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x2; - } - if(NULL != dot_x3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x3; - } - - if(255 < seekfree_assistant_camera_buffer.height) - { - boundary_data_type = 1; - } - }break; - - case Y_BOUNDARY: - { - if(NULL != dot_y1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if(NULL != dot_y2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if(NULL != dot_y3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if(255 < seekfree_assistant_camera_buffer.width) - { - boundary_data_type = 1; - } - }break; - - case XY_BOUNDARY: - { - if((NULL != dot_x1) && (NULL != dot_y1)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if((NULL != dot_x2) && (NULL != dot_y2)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if((NULL != dot_x3) && (NULL != dot_y3)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x3; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if((255 < seekfree_assistant_camera_buffer.width) || (255 < seekfree_assistant_camera_buffer.height)) - { - boundary_data_type = 1; - } - }break; - - case NO_BOUNDARY:break; - } - - seekfree_assistant_camera_dot_data.dot_type = (boundary_type << 6) | (boundary_data_type << 5) | boundary_num; -} - -//------------------------------------------------------------------------------------------------------------------- -// ַͷͼ -// ˵ void -// ز void -// ʹʾ -// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_send (void) -{ - // ͼͻǷ׼ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_data_send(seekfree_assistant_camera_buffer.camera_type, seekfree_assistant_camera_buffer.image_addr, seekfree_assistant_camera_dot_data.dot_type & 0x0f, seekfree_assistant_camera_buffer.width, seekfree_assistant_camera_buffer.height); - - if(seekfree_assistant_camera_dot_data.dot_type & 0x0f) - { - seekfree_assistant_camera_dot_send(&seekfree_assistant_camera_buffer); - } -} - - -//------------------------------------------------------------------------------------------------------------------- -// ֽյ -// ˵ void -// ز void -// ʹʾ ֻҪŵеPITжϻѭ -//------------------------------------------------------------------------------------------------------------------- -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) -void seekfree_assistant_data_analysis (void) -{ - uint8 temp_sum; - uint32 read_length; - seekfree_assistant_parameter_struct *receive_packet; - - // ʹuint32ж壬ĿΪ˱ֽ֤ڶ - uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4]; - - // Զȡ, ԶĴ䷽ʽӽջصжȡ - read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE); + // Զȡһݰ + // ԶĴ䷽ʽӽջصжȡ + read_length = seekfree_assistant_receive_callback( + debug_param_cmd_pointer, + sizeof(seekfree_assistant_debug_param_cmd_struct)); if(read_length) - { - // ȡдFIFO - fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length); + { // ȡдFIFO + fifo_write_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + read_length); } - while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo)) - { - read_length = sizeof(seekfree_assistant_parameter_struct); - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_ONLY); + while( sizeof(seekfree_assistant_debug_param_cmd_struct) + <= fifo_used(&seekfree_assistant_debug_param_fifo)) + { // FIFO һݰ ôͽн + // ֱӶһݰ + read_length = sizeof(seekfree_assistant_debug_param_cmd_struct); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_ONLY); - if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0]) - { - // û֡ͷFIFOȥһ - read_length = 1; - } - else - { - // ҵ֡ͷ - receive_packet = (seekfree_assistant_parameter_struct *)temp_buffer; - temp_sum = receive_packet->check_sum; - receive_packet->check_sum = 0; - if(temp_sum == seekfree_assistant_sum((uint8 *)temp_buffer, sizeof(seekfree_assistant_parameter_struct))) - { - // Уɹ - seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data; - seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1; + if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0] + && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2]) + { // ֱƥ֡ͷ ҹҲƥ + temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ + debug_param_cmd_obj.check_sum = 0; // հУֵ У + if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct))) + { // Уɹ + debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float; + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0]; + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + #endif + debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1; + temp_sum = 0x00; } else - { - read_length = 1; + { // Уƥ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + } + else + { // ƥ䲻֡ͷ͹ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + + if(0xFF == temp_sum) + { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ + for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++) + { // Ϊȡһ һ + if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length]) + { // ҵ¸֡ͷ˳ + break; + } } } // ʹõ - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_AND_CLEAN); } } #endif - - - diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant.h index 5b7e1b5..937f784 100644 --- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,142 +24,292 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ - #include "zf_common_typedef.h" +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 , + SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 , +}seekfree_assistant_data_type_enum; -// 1ʹܲڵĹ 0رղڵĹ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 ) - - - -// FIFOС -#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) - -// ʾͨ -#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) - -// Եͨ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) - -// ͼ -#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) - -// Ƭλ͵֡ͷ -#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) - -// ͷ -#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) -#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) -#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) - -// λƬ͵֡ͷ -#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) - -// -#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) - +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ +}seekfree_assistant_ccd_resolution_enum; // ͷö typedef enum { - // ͷͺŶ - SEEKFREE_ASSISTANT_OV7725_BIN = 1, - SEEKFREE_ASSISTANT_MT9V03X, - SEEKFREE_ASSISTANT_SCC8660, - // ͼͶ - SEEKFREE_ASSISTANT_BINARY = 1, - SEEKFREE_ASSISTANT_GRAY, - SEEKFREE_ASSISTANT_RGB565, -}seekfree_assistant_image_type_enum; + SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY , + SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 , -// ͷö -typedef enum -{ - // ͷͺŶ - X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ - Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ - XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ - NO_BOUNDARY, // ͵ͼûбϢ -}seekfree_assistant_boundary_type_enum; + // ͷͺƥ䶨 + SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X , + SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 , +}seekfree_assistant_camera_type_enum; + +#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨 + +#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ +#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤ + +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС +#endif typedef struct { - uint8 head; // ֡ͷ - uint8 channel_num; // λΪ λΪͨ - uint8 check_sum; // У - uint8 length; // - float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + uint8 data_lenght_buffer[2] ; // CCD ݳ + uint8 channel_color_buffer[2] ; // ͨɫ + uint8 channel_data_max[2] ; // ֵͨ + uint8 data_type ; // ȷϴС + uint8 reserve ; // + }config; + uint16 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_ccd_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 camera_type ; // ͷ + uint8 image_width_buffer[2] ; // ͼ + uint8 image_height_buffer[2] ; // ͼ߶ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 data_type ; // ȷϴС + uint8 boundary_lenght_buffer[2] ; // ߳ + uint8 color_buffer[2] ; // ͨɫ + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_boundary_struct; + +typedef struct +{ + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 reserve ; // + uint8 x_axis_buffer[2] ; // X + uint8 y_axis_buffer[2] ; // Y + uint8 width_buffer[2] ; // ο + uint8 height_buffer[2] ; // θ߶ + uint8 color_buffer[2] ; // ɫ +}seekfree_assistant_camera_rectangular_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_max ; // ͨ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ }seekfree_assistant_oscilloscope_struct; +typedef union +{ + uint8 data_uint8[4] ; + float data_float ; +}seekfree_assistant_param_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ - uint8 length; // ȣЭ鲿֣ - uint16 image_width; // ͼ - uint16 image_height; // ͼ߶ -}seekfree_assistant_camera_struct; - - -typedef struct -{ - uint8 head; // ֡ͷ - uint8 function; // - uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽ - uint8 length; // ȣЭ鲿֣ - uint16 dot_num; // - uint8 valid_flag; // ͨʶ - uint8 reserve; // -}seekfree_assistant_camera_dot_struct; - -typedef struct -{ - void *image_addr; // ͷַ - uint16 width; // ͼ - uint16 height; // ͼ߶ - seekfree_assistant_image_type_enum camera_type; // ͷ - void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ - void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ -}seekfree_assistant_camera_buffer_struct; + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + seekfree_assistant_param_struct dat ; // һ + +}seekfree_assistant_debug_param_cmd_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 channel; // ͨ - uint8 check_sum; // У - float data; // -}seekfree_assistant_parameter_struct; + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint8_struct; + + +typedef struct +{ + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint16_struct; + +typedef struct +{ + float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; + uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; +}seekfree_assistant_debug_param_struct; typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length); typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length); -extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ -extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ - - -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope); -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height); -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3); -void seekfree_assistant_camera_send (void); -void seekfree_assistant_data_analysis (void); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ +// ز void +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, 16] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *seekfree_assistant_oscilloscope ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj); + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj); +#endif #endif diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c index d139201..23205d5 100644 --- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,23 +24,20 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_typedef.h" #include "zf_common_fifo.h" #include "zf_common_debug.h" -#include "zf_driver_uart.h" + #include "zf_device_wireless_uart.h" -#include "zf_device_ble6a20.h" -#include "zf_device_bluetooth_ch9141.h" -#include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" #include "seekfree_assistant.h" @@ -50,7 +47,6 @@ extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ - //------------------------------------------------------------------------------------------------------------------- // ַͺ // ˵ *buff Ҫ͵ݵַ @@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv // ز uint32 ʣδݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) +uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݷ͹ @@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) // ز uint32 յݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) +uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݽչ return 0; @@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) // ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ // ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) +void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) { switch(transfer_device) { case SEEKFREE_ASSISTANT_DEBUG_UART: { -#if DEBUG_UART_USE_INTERRUPT == 1 seekfree_assistant_transfer_callback = debug_send_buffer; seekfree_assistant_receive_callback = debug_read_ring_buffer; -#endif }break; - + case SEEKFREE_ASSISTANT_WIRELESS_UART: { seekfree_assistant_transfer_callback = wireless_uart_send_buffer; seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; - - case SEEKFREE_ASSISTANT_BLE6A20: - { - seekfree_assistant_transfer_callback = ble6a20_send_buffer; - seekfree_assistant_receive_callback = ble6a20_read_buffer; - }break; - case SEEKFREE_ASSISTANT_CH9141: - { - seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; - seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; - }break; - - case SEEKFREE_ASSISTANT_WIFI_UART: - { - seekfree_assistant_transfer_callback = wifi_uart_send_buffer; - seekfree_assistant_receive_callback = wifi_uart_read_buffer; - }break; - + // case SEEKFREE_ASSISTANT_CH9141: + // { + // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; + // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; + // }break; + + // case SEEKFREE_ASSISTANT_WIFI_UART: + // { + // seekfree_assistant_transfer_callback = wifi_uart_send_buffer; + // seekfree_assistant_receive_callback = wifi_uart_read_buffer; + // }break; + case SEEKFREE_ASSISTANT_WIFI_SPI: { seekfree_assistant_transfer_callback = wifi_spi_send_buffer; seekfree_assistant_receive_callback = wifi_spi_read_buffer; }break; - - case SEEKFREE_ASSISTANT_CUSTOM: - { + + default: + { // Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ - + seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + seekfree_assistant_receive_callback = seekfree_assistant_receive; }break; } } - - diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.h index 2ccfd8a..0e28f49 100644 --- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,13 +24,13 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,7 +43,6 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ SEEKFREE_ASSISTANT_WIRELESS_UART, // ת - SEEKFREE_ASSISTANT_BLE6A20, // ת SEEKFREE_ASSISTANT_CH9141, // CH9141 SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_absolute_encoder.h index 1166c84..dc091aa 100644 --- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_absolute_encoder.h +++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_absolute_encoder.h @@ -62,7 +62,7 @@ //==================================================== SPI ==================================================== #else //====================================================Ӳ SPI ==================================================== -#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI +#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI #define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI #define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK #define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI @@ -70,7 +70,7 @@ //====================================================Ӳ SPI ==================================================== #endif -#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ +#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ #define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN))) #define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ble6a20.h index 6f4544a..6af089f 100644 --- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ble6a20.h +++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ble6a20.h @@ -76,7 +76,7 @@ // 1Զ Զʵ޸ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ // Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000 -#define BLE6A20_AUTO_BAUD_RATE ( 0 ) +#define BLE6A20_AUTO_BAUD_RATE ( 1 ) #if (1 == BLE6A20_AUTO_BAUD_RATE) typedef enum diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rc.c new file mode 100644 index 0000000..68840e2 --- /dev/null +++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rc.c @@ -0,0 +1,563 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#include "math.h" +#include "zf_common_debug.h" +#include "zf_driver_delay.h" +#include "zf_driver_spi.h" +#include "zf_driver_gpio.h" +#include "zf_driver_soft_iic.h" +#include "zf_device_config.h" +#include "zf_driver_uart.h" +#include "zf_driver_exti.h" + +#include "zf_device_imu660rc.h" + +#ifndef M_PI +#define M_PI 3.1415926f +#endif + + +static uint8 imu660rc_quarternion_rate; + +float imu660rc_transition_factor[2]; +int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro () +int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ) +float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ +float imu660rc_quarternion[4]; // Ԫ + + + +#if IMU660RC_USE_SOFT_IIC +static soft_iic_info_struct imu660rc_iic_struct; + +#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data))) +#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len))) +#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg))) +#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len))) +#else +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC дĴ +// ˵ reg Ĵַ +// ˵ data +// ز void +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_write_register (uint8 reg, uint8 data) +{ + IMU660RC_CS(0); + spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data); + IMU660RC_CS(1); +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ĵ +// ˵ reg Ĵַ +// ز uint8 +// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_read_register (uint8 reg) +{ + uint8 data; + IMU660RC_CS(0); + data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R); + IMU660RC_CS(1); + return data; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC +// ˵ reg Ĵַ +// ˵ data ݻ +// ˵ len ݳ +// ز void +// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len) +{ + IMU660RC_CS(0); + spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len); + IMU660RC_CS(1); +} +#endif + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC fp16ת +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint32 fp16_to_float(uint16 h) +{ + uint16 h_exp = (h & 0x7c00u); + uint32 f_sgn = ((uint32)h & 0x8000u) << 16; + switch (h_exp) + { + case 0x0000u: // 0 or subnormal + { + uint16 h_sig = (h & 0x03ffu); + // Signed zero + if (h_sig == 0) + { + return f_sgn; + } + // Subnormal + h_sig <<= 1; + while ((h_sig & 0x0400u) == 0) + { + h_sig <<= 1; + h_exp++; + } + uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23; + uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13; + return f_sgn + f_exp + f_sig; + } + case 0x7c00u: // inf or NaN + { + // All-ones exponent and a copy of the significand + return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13); + } + default: // normalized + { + // Just need to adjust the exponent and shift + return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13); + } + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫһ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_normalize(float quat[4], uint16 *fp16) +{ + float n = 0; + float temp[4]; + + *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]); + *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]); + *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]); + *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]); + + n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3]; + n = sqrtf(n); + + if(n > 0.001f) // Խӽ0ֵ + { + n = temp[3] < 0.0f ? -n : n; + + quat[0] = temp[1] / n; + quat[1] = temp[2] / n; + quat[2] = temp[0] / n; + quat[3] = temp[3] / n; + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫתŷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw) +{ + float euler[3]; + + float sqx = quat[0] * quat[0]; + float sqy = quat[1] * quat[1]; + float sqz = quat[2] * quat[2]; + + euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx)); + euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2])); + euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz)); + + // תǶ + euler[0] = 180 * (euler[0]) / M_PI; + euler[1] = 180 * (euler[1]) / M_PI; + euler[2] = 180 * (euler[2]) / M_PI; + + // Ƕȵ + euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2]; + + *roll = euler[0]; + *pitch = euler[1]; + *yaw = euler[2]; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ÷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank) +{ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank); +} + + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Լ +// ˵ void +// ز uint8 1-Լʧ 0-Լɹ +// ʹʾ imu660rc_self_check(); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_self_check (void) +{ + uint8 dat = 0, return_state = 0; + uint16 timeout_count = 0; + do + { + if(IMU660RC_TIMEOUT_COUNT < timeout_count ++) + { + return_state = 1; + break; + } + dat = imu660rc_read_register(IMU660RC_CHIP_ID); + system_delay_ms(1); + }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû⵽豸 + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ٶȼ +// ˵ void +// ز void +// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_acc (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6); + imu660rc_acc_x = dat[0]; + imu660rc_acc_y = dat[1]; + imu660rc_acc_z = dat[2]; + } +} +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC +// ˵ void +// ز void +// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_gyro (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6); + imu660rc_gyro_x = dat[0]; + imu660rc_gyro_y = dat[1]; + imu660rc_gyro_z = dat[2]; + } +} + + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ԪݲתΪŷ +// ˵ void +// ز void +// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı +// עϢ ҪINT2Ŵжϵô˺ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_quarternion(void) +{ + uint8 i; + uint16 buff[4]; + uint8 *buff1_ptr; + int16 *buff2_ptr; + + if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate) + { + buff1_ptr = (uint8 *)buff; + + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x20); + imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31); + + for(i = 0; 8 > i; i++) + { + imu660rc_write_register(0x08, 0x4C + i); + buff1_ptr[i] = imu660rc_read_register(0x09); + } + + imu660rc_write_register(IMU660RC_PAGE_RW, 0x0); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // Ԫһ + quarternion_normalize(imu660rc_quarternion, buff); + // Ԫתŷ + quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw); + + // ȡٶٶϢ + #if(1 == IMU660RC_QUARTERNION_GET_ACC) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6); + imu660rc_acc_x = buff2_ptr[0]; + imu660rc_acc_y = buff2_ptr[1]; + imu660rc_acc_z = buff2_ptr[2]; + } + #endif + #if(1 == IMU660RC_QUARTERNION_GET_GYRO) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6); + imu660rc_gyro_x = buff2_ptr[0]; + imu660rc_gyro_y = buff2_ptr[1]; + imu660rc_gyro_z = buff2_ptr[2]; + } + #endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RCжϻصҪжڶȡԪ +// ˵ void +// ز void +// ʹʾ +// עϢ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_callback(void) +{ + imu660rc_get_quarternion(); + +} + +//------------------------------------------------------------------------------------------------------------------- +// ʼ IMU660RC +// ˵ quarternion_rate ѡԪ +// ز uint8 1-ʼʧ 0-ʼɹ +// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate) +{ + uint8 return_state = 0; + + imu660rc_quarternion_rate = quarternion_rate; + #if IMU660RC_USE_SOFT_IIC + soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿ + + #else + spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿ + gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿ + #endif + + system_delay_ms(10); + + do + { + if(imu660rc_self_check()) // IMU660RC Լ + { + // ˶Ϣ ʾλ + // ô IMU660RC Լʱ˳ + // һ½û ûܾǻ + zf_log(0, "imu660rc self check error."); + return_state = 1; + break; + } + + // λ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04); + system_delay_ms(30); + + // ÿ¹ַ + imu660rc_write_register(IMU660RC_CTRL3, 0x44); + + switch(IMU660RC_ACC_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_ACC_SAMPLE_SGN_2G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x00); + imu660rc_transition_factor[0] = 16393.44; + }break; + case IMU660RC_ACC_SAMPLE_SGN_4G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x01); + imu660rc_transition_factor[0] = 8196.72; + }break; + case IMU660RC_ACC_SAMPLE_SGN_8G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x02); + imu660rc_transition_factor[0] = 4098.36; + }break; + case IMU660RC_ACC_SAMPLE_SGN_16G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x03); + imu660rc_transition_factor[0] = 2049.18; + }break; + } + if(1 == return_state) + { + break; + } + + switch(IMU660RC_GYRO_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_125DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x00); + imu660rc_transition_factor[1] = 228.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_250DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x01); + imu660rc_transition_factor[1] = 114.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_500DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x02); + imu660rc_transition_factor[1] = 57.1428; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_1000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x03); + imu660rc_transition_factor[1] = 28.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_2000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x04); + imu660rc_transition_factor[1] = 14.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_4000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x0C); + imu660rc_transition_factor[1] = 7.14285; + }break; + } + if(1 == return_state) + { + break; + } + + // ôģʽΪ߾ģʽԼ + imu660rc_write_register(IMU660RC_CTRL1, 0x15); + imu660rc_write_register(IMU660RC_CTRL2, 0x18); + + // LPF1˲ + imu660rc_write_register(IMU660RC_CTRL7, 0x01); + + // LPF2˲ + imu660rc_write_register(IMU660RC_CTRL9, 0x08); + + // ԪӦ + if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate) + { + // жϴź + imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80); + imu660rc_write_register(IMU660RC_CTRL4, 0x08); + imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30); + + // üٶȡٶ + imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3)); + imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3)); + + // Ԫʲ + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3)); + imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x00); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // жϼ + exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING); + } + }while(0); + + return return_state; +} + + + + + + + + + + + + + diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rc.h new file mode 100644 index 0000000..dd5a9e3 --- /dev/null +++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rc.h @@ -0,0 +1,211 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#ifndef _zf_device_imu660rc_h_ +#define _zf_device_imu660rc_h_ + +#include "zf_common_typedef.h" + + +// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC +// IMU660RC_USE_SOFT_IICҪȱ벢س򣬵ƬģҪϵͨѶ +#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ + +#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ +//==================================================== IIC ==================================================== +#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ +#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL +#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA +//==================================================== IIC ==================================================== +#else + +//====================================================Ӳ SPI ==================================================== +#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI +#define IMU660RC_SPI (SPI_0) // Ӳ SPI +#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK +#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI +#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO +//====================================================Ӳ SPI ==================================================== +#endif +#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ +#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) ) +#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ + + +#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ +#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ + +typedef enum +{ + IMU660RC_MAIN_MEM_BANK = 0x00, + IMU660RC_HUB_MEM_BANK = 0x40, + IMU660RC_EMBED_MEM_BANK = 0x80, +}imu660rc_mem_bank_enum; + +typedef enum +{ + IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2) + IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G + IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G + IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G +}imu660rc_acc_sample_config; + +typedef enum +{ + IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S) + IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS + IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS + IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS + IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS + IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS +}imu660rc_gyro_sample_config; + +typedef enum +{ + IMU660RC_QUARTERNION_15HZ, // 15 Hz + IMU660RC_QUARTERNION_30HZ, // 30 Hz + IMU660RC_QUARTERNION_60HZ, // 60 Hz + IMU660RC_QUARTERNION_120HZ, // 120Hz + IMU660RC_QUARTERNION_240HZ, // 240Hz + IMU660RC_QUARTERNION_480HZ, // 480Hz + IMU660RC_QUARTERNION_DISABLE, // Ԫ +}imu660rc_quarternion_rate_config; + + +//================================================ IMU660RC ڲַ================================================ +#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ +#define IMU660RC_SPI_W ( 0x00 ) +#define IMU660RC_SPI_R ( 0x80 ) +#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ + + +//================================================ IMU660RC Ĵַ================================================ +#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 ) +#define IMU660RC_INT2_CTRL ( 0x0E ) +#define IMU660RC_CHIP_ID ( 0x0F ) +#define IMU660RC_CTRL1 ( 0x10 ) +#define IMU660RC_CTRL2 ( 0x11 ) +#define IMU660RC_CTRL3 ( 0x12 ) +#define IMU660RC_CTRL4 ( 0x13 ) +#define IMU660RC_CTRL5 ( 0x14 ) +#define IMU660RC_CTRL6 ( 0x15 ) +#define IMU660RC_CTRL7 ( 0x16 ) +#define IMU660RC_CTRL8 ( 0x17 ) +#define IMU660RC_CTRL9 ( 0x18 ) +#define IMU660RC_CTRL10 ( 0x19 ) +#define IMU660RC_CTRL_STATUS ( 0x1A ) +#define IMU660RC_STATUS_REG ( 0x1E ) +#define IMU660RC_OUT_TEMP_L ( 0x20 ) +#define IMU660RC_OUT_TEMP_H ( 0x21 ) +#define IMU660RC_OUTX_L_G ( 0x22 ) +#define IMU660RC_OUTX_H_G ( 0x23 ) +#define IMU660RC_OUTY_L_G ( 0x24 ) +#define IMU660RC_OUTY_H_G ( 0x25 ) +#define IMU660RC_OUTZ_L_G ( 0x26 ) +#define IMU660RC_OUTZ_H_G ( 0x27 ) +#define IMU660RC_OUTX_L_A ( 0x28 ) +#define IMU660RC_OUTX_H_A ( 0x29 ) +#define IMU660RC_OUTY_L_A ( 0x2A ) +#define IMU660RC_OUTY_H_A ( 0x2B ) +#define IMU660RC_OUTZ_L_A ( 0x2C ) +#define IMU660RC_OUTZ_H_A ( 0x2D ) + +#define IMU660RC_PAGE_SEL ( 0x02 ) +#define IMU660RC_EMB_FUNC_EN_A ( 0x04 ) +#define IMU660RC_PAGE_RW ( 0x17 ) +#define IMU660RC_SFLP_ODR ( 0x5E ) +#define IMU660RC_EMB_FUNC_CFG ( 0x63 ) + + + +extern float imu660rc_transition_factor[2]; +extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; // +extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ +extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ +extern float imu660rc_quarternion[4]; // Ԫ + + +void imu660rc_get_acc (void); +void imu660rc_get_gyro (void); +void imu660rc_get_quarternion (void); + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ٶȼתΪʵ +// ˵ acc_value ļٶȼ +// ز void +// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2) +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0]) + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC תΪʵ +// ˵ gyro_value +// ز void +// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1]) +void imu660rc_callback (void); +uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate); + + + +#endif diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rx.h index 45699d9..81b8b41 100644 --- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rx.h +++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_imu660rx.h @@ -97,7 +97,7 @@ //================================================ IMU660RX ȫֱ================================================ extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro () extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ) -extern float imu660ra_transition_factor[2]; +extern float imu660rx_transition_factor[2]; //================================================ IMU660RX ȫֱ================================================ diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips114.h index c56f310..9c4ac0d 100644 --- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips114.h +++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips114.h @@ -167,7 +167,7 @@ void ips114_init (void); // ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================= IPS114 չ================================================ #endif diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200.h index 850fb11..5bf4284 100644 --- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200.h +++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200.h @@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select); // ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================== IPS200 չ================================================ diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h index 98c5364..557e1d2 100644 --- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h @@ -86,7 +86,7 @@ // £SCC8660_PCLK_DIVԽͼԽ #define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1> #define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ -#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) +#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) #define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0 //================================================ SCC8660 ã֧ͫ֡ʰ汾=========================== diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.c index b51c600..b06e6a1 100644 --- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.c +++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.c @@ -24,7 +24,7 @@ * ļ zf_device_wifi_spi * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.9.20 +* ADS v1.10.2 * ƽ̨ TC264D * https://seekfree.taobao.com/ * @@ -63,6 +63,21 @@ #define SOCKET_CONNECT_TIME_OUT 50000 // λ #define OTHER_TIME_OUT 1000 // λ +#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088)) + #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088" +#endif + +#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE) + #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE" +#endif + + +#if (WIFI_SPI_TRANSFER_SIZE != 4088) + #error "WIFI_SPI_TRANSFER_SIZE must be == 4088" +#endif + + + char wifi_spi_version[12]; // ģ̼汾Ϣ char wifi_spi_mac_addr[20]; // ģMACַϢ char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ @@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void) { memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1; - return return_state; } @@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void) { memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1; - return return_state; } @@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void) { memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1; + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ȡϵͳʱ +// ˵ time_format ʱʽ +// ز *buffer ʱַַ СҪ30ֽ +// ز buffer_size С +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size) +{ + uint8 return_state = 1; + wifi_spi_packets_struct temp_packets; + uint8 send_cmd, receive_cmd; + + // ʱ30ֽ + // ģ̼V2汾 + if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2))) + { + send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0; + receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0; + + return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT); + if((0 == return_state) && (receive_cmd == temp_packets.head.command)) + { + return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2); + if(0 == return_state) + { + memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3); + buffer[temp_packets.head.length - 3] = 0; + } + } + } + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ɨȵ +// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз +// ˵ buffer_size ij +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +// עϢ ÿһаһwifi +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size) +{ + uint8 return_state; + + // ģV2汾Ĺִ̼֧˹ + if(!strncmp(wifi_spi_version, "V2", 2)) + { + return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT); + + if(0 == return_state) + { + #if (0 == WIFI_SPI_READ_TRANSFER) + wifi_spi_send_buffer(NULL, 0); + #endif + while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size)) + { + system_delay_ms(10); + } + } + } return return_state; } @@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) while(length) { - send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length; + send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length); if(wifi_spi_wait_idle(OTHER_TIME_OUT)) { @@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) return length; } +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ַͺͬ +// ˵ *string Ҫ͵ַ +// ز void +// ʹʾ wifi_spi_send_string("123"); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +void wifi_spi_send_string(const char *string) +{ + wifi_spi_send_buffer((uint8*)string, strlen(string)); +} + //------------------------------------------------------------------------------------------------------------------- // WIFI SPI ȡ // ˵ *buff ջ @@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) { zf_assert(NULL != buffer); - uint32 data_len = length; + uint32 fifo_read_length; + uint32 write_length = 0; + wifi_spi_packets_struct temp_packets; + + // жFIFOǷݣȴFIFOȡ + if(fifo_used(&wifi_spi_fifo)) + { + fifo_read_length = fifo_used(&wifi_spi_fifo); + fifo_read_length = length < fifo_read_length ? length : fifo_read_length; + fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN); + + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + } #if(1 == WIFI_SPI_READ_TRANSFER) - - wifi_spi_packets_struct temp_packets; - // WIFI SPI״̬жϻ߳ѾͨѶ򱾴βܷ if(WIFI_SPI_IDLE == wifi_spi_mutex) { - // ͨѶ״̬Ϊæ - wifi_spi_mutex = WIFI_SPI_BUSY; + wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ - // ͨѶ鿴ģǷδȡ do { - if(wifi_spi_wait_idle(OTHER_TIME_OUT)) + if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ + (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳ + ) { break; } + temp_packets.head.command = WIFI_SPI_DATA; temp_packets.head.length = 0; wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE); // յİǷ - if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) + if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) && + (temp_packets.head.length) + ) { - // յ - if(temp_packets.head.length) + if(length) + { + fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length; + memcpy(buffer, temp_packets.buffer, fifo_read_length); + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO + { + fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length); + } + } + else // ȫдFIFO { fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length); } @@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command); wifi_spi_mutex = WIFI_SPI_IDLE; } -#endif +#endif - fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN); - return data_len; + return write_length; } //------------------------------------------------------------------------------------------------------------------- @@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word) // MACַϢַʽwifi_spi_mac_addr wifi_spi_get_mac_addr(); - + if(NULL == wifi_ssid) + { + // ʼʱҪWIFI + break; + } return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word); if(return_state) { diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.h index eea8a78..e7cec39 100644 --- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.h +++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.h @@ -73,8 +73,8 @@ #if (WIFI_SPI_AUTO_CONNECT > 2) #error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]" #else -#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP -#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿ +#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP +#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666 #endif @@ -95,10 +95,15 @@ typedef enum WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ + WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI + WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾 WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ + WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1 + WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2 + WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3 // ӻش WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ @@ -110,6 +115,9 @@ typedef enum WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾 WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں + WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ + WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ + WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ WIFI_SPI_INVALID2 = 0xFF // Чݰ }wifi_spi_packets_command_enum; @@ -134,19 +142,27 @@ typedef struct uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // }wifi_spi_packets_struct; - +typedef enum +{ + WIFI_SPI_UTC_0 = 1, // ʱ + WIFI_SPI_GMT, // ʱ תΪGMTʽ׺GMT һڶԽƶ˴ģʹ + WIFI_SPI_UTC_8, // ʱ +}wifi_spi_time_enum; + extern char wifi_spi_version[12]; // ̼汾 ַ extern char wifi_spi_mac_addr[20]; // ģMACַ ַ extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ -uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); -uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); -uint8 wifi_spi_socket_disconnect (void); -uint8 wifi_spi_udp_send_now (void); -uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); -uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size); +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size); +uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); +uint8 wifi_spi_socket_disconnect (void); +uint8 wifi_spi_udp_send_now (void); +uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); +void wifi_spi_send_string (const char *string); +uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); -uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); #endif - diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.h index 0f392ff..24b88cc 100644 --- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.h +++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.h @@ -73,7 +73,7 @@ #if (WIFI_UART_AUTO_CONNECT > 3) #error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]" #else -#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP +#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP #define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_UART_LOCAL_PORT "8080" // ˿ #endif diff --git a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_driver/zf_driver_encoder.c index 8d514b7..ad4099e 100644 --- a/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_driver/zf_driver_encoder.c +++ b/Example/Coreboard_Demo/E06_exit_demo/libraries/zf_driver/zf_driver_encoder.c @@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n) //------------------------------------------------------------------------------------------------------------------- void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin) { -// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init + zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init IfxGpt12_enableModule(&MODULE_GPT120); IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4); diff --git a/Example/Coreboard_Demo/E06_exit_demo/user/isr.c b/Example/Coreboard_Demo/E06_exit_demo/user/isr.c index b0ca6eb..927ed43 100644 --- a/Example/Coreboard_Demo/E06_exit_demo/user/isr.c +++ b/Example/Coreboard_Demo/E06_exit_demo/user/isr.c @@ -40,14 +40,14 @@ // 򵥵˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ // **************************** PITжϺ **************************** -IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) -{ - interrupt_global_enable(0); // жǶ - pit_clear_flag(CCU60_CH0); - - - -} +//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) +//{ +// interrupt_global_enable(0); // жǶ +// pit_clear_flag(CCU60_CH0); +// +// +// +//} IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) @@ -83,45 +83,45 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) // **************************** ⲿжϺ **************************** -//IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) -//{ -// interrupt_global_enable(0); // жǶ -// if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж -// { -// exti_flag_clear(ERU_CH0_REQ0_P15_4); -// -// } -// -// if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж -// { -// exti_flag_clear(ERU_CH4_REQ13_P15_5); -// -// -// -// -// } -//} -// -//IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) -//{ -// interrupt_global_enable(0); // жǶ -// -// if(exti_flag_get(ERU_CH1_REQ10_P14_3)) // ͨ1ж -// { -// exti_flag_clear(ERU_CH1_REQ10_P14_3); -// -// tof_module_exti_handler(); // ToF ģ INT ж -// -// } -// -// if(exti_flag_get(ERU_CH5_REQ1_P15_8)) // ͨ5ж -// { -// exti_flag_clear(ERU_CH5_REQ1_P15_8); -// -// -// -// } -//} +IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) +{ + interrupt_global_enable(0); // жǶ + if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж + { + exti_flag_clear(ERU_CH0_REQ0_P15_4); + + imu660rc_callback(); // 660RC ģ INT ж + } + + if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж + { + exti_flag_clear(ERU_CH4_REQ13_P15_5); + + + + + } +} + +IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) +{ + interrupt_global_enable(0); // жǶ + + if(exti_flag_get(ERU_CH1_REQ10_P14_3)) // ͨ1ж + { + exti_flag_clear(ERU_CH1_REQ10_P14_3); + + tof_module_exti_handler(); // ToF ģ INT ж + + } + + if(exti_flag_get(ERU_CH5_REQ1_P15_8)) // ͨ5ж + { + exti_flag_clear(ERU_CH5_REQ1_P15_8); + + + } +} // ͷpclkĬռ 2ͨڴDMAﲻٶжϺ // IFX_INTERRUPT(exti_ch2_ch6_isr, 0, EXTI_CH2_CH6_INT_PRIO) @@ -136,7 +136,6 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) // exti_flag_clear(ERU_CH6_REQ9_P20_0); // } // } - IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO) { interrupt_global_enable(0); // жǶ @@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { interrupt_global_enable(0); // жǶ - gnss_uart_callback(); // GPSڻص + gnss_uart_callback(); // GNSSڻص diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E07_encoder_demo/libraries/doc/version.txt index 1e222a3..8ce85ca 100644 --- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/doc/version.txt +++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/doc/version.txt @@ -1,3 +1,13 @@ +V3.4.4 + SCC8660ʽ + ָV2 + ޸ips200ʾscc8660ͷʽ + ޸ips114ʾscc8660ͷʽ +V3.4.3 + 660RC +V3.4.2 + ޸printfضеĺ궨 + WIFI_SPI V3.4.1 ޸Ĵڷ麯еķ ޸ips200proע diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h index 27b7965..e8d6021 100644 --- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h @@ -91,6 +91,7 @@ #include "zf_device_imu660ra.h" #include "zf_device_imu660rb.h" #include "zf_device_imu660rx.h" +#include "zf_device_imu660rc.h" #include "zf_device_imu963ra.h" #include "zf_device_ips114.h" #include "zf_device_ips200.h" diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/printf_redirect.c index c44d826..299da76 100644 --- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/printf_redirect.c +++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/printf_redirect.c @@ -45,7 +45,7 @@ //------------------------------------------------------------------------------------------------------------------- int fputc(int ch, FILE *stream) { - uart_write_byte(DEBUG_UART_INDEX, (char)ch); + uart_write_byte(PRINTF_USE_UART, (char)ch); return (ch); } @@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len) int fgetc(FILE *f) { #if PRINTF_OUTPUT_TYPE == 0 - return uart_read_byte(DEBUG_UART_INDEX); + return uart_read_byte(PRINTF_USE_UART); #else uint8 buf; wifi_spi_read_buffer(&buf, 1); diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant.c index 231b20d..3e9ec74 100644 --- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,423 +24,519 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_debug.h" #include "seekfree_assistant.h" +// ͨö +typedef enum +{ + SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 , + SEEKFREE_ASSISTANT_SEND_CAMERA_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD , -extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); -extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); + SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 , -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) + SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 , +}seekfree_assistant_cmd_type_enum; + +#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ +#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ + +// ݷͺָ +extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); +seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + +// ݽպָ +extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); +seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) #include "zf_common_fifo.h" -static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO -static fifo_struct seekfree_assistant_fifo = // FIFOṹ +static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE]; +static fifo_struct seekfree_assistant_debug_param_fifo = { - .buffer = seekfree_assistant_buffer, + .buffer = seekfree_assistant_debug_param_buffer, .execution = FIFO_IDLE, .type = FIFO_DATA_8BIT, .head = 0, .end = 0, - .size = SEEKFREE_ASSISTANT_BUFFER_SIZE, - .max = SEEKFREE_ASSISTANT_BUFFER_SIZE, -}; + .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, + .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, +}; #endif -static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ -static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ -static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ - -seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ -seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ - -seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ -vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ - //------------------------------------------------------------------------------------------------------------------- // ͺ -// ˵ *buffer ҪУݵַ -// ˵ length У鳤 -// ز uint8 ֵ +// ˵ *buffer ҪУݵַ +// ˵ length У鳤 +// ز uint8 ֵ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length) +static uint8 seekfree_assistant_sum (void *buffer, uint32 length) { uint8 temp_sum = 0; + uint8 *ptr = (uint8 *)buffer; while(length--) { - temp_sum += *buffer++; + temp_sum += *ptr ++; } return temp_sum; } //------------------------------------------------------------------------------------------------------------------- -// ͼͺ -// ˵ camera_type ͷ -// ˵ *image_addr ͼ׵ַ -// ˵ boundary_num ͼа߽ -// ˵ width ͼ -// ˵ height ͼ߶ +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ // ز void -// ʹʾ +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height) +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer) { - uint32 image_size = 0; + zf_assert(NULL != ccd_obj); + zf_assert(NULL != data_buffer); - seekfree_assistant_camera_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_data.function = SEEKFREE_ASSISTANT_CAMERA_FUNCTION; - seekfree_assistant_camera_data.camera_type = (camera_type << 5) | ((image_addr != NULL ? 0 : 1) << 4) | boundary_num; - // дϢЭ鲿 - seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct); - seekfree_assistant_camera_data.image_width = width; - seekfree_assistant_camera_data.image_height = height; + memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct)); + ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD; + ccd_obj->config.channel_index = channel_index; - // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct)); - - // ͷͼͼС - switch(camera_type) + uint16 data_max = 256; + uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT; + loop_count = (2 >= loop_count) ? (loop_count) : (2); + for(uint8 i = 0; loop_count > i; i ++) { - case SEEKFREE_ASSISTANT_OV7725_BIN: - { - image_size = width * height / 8; - }break; - - case SEEKFREE_ASSISTANT_MT9V03X: - { - image_size = width * height; - }break; - - case SEEKFREE_ASSISTANT_SCC8660: - { - image_size = width * height * 2; - }break; + data_max *= 4; } - // ͼ - if(NULL != image_addr) + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF); + #else + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + ccd_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + ccd_obj->config.data_type = data_type; + } + + // ¼ʵֽ uint16 Ҫݳ + ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1)); + // Ȼ¼Ӧݻ + ccd_obj->data_buffer = data_buffer; + + // У + ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.check_sum += seekfree_assistant_sum( + &(ccd_obj->config.cmd), + sizeof(ccd_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)ccd_obj, + sizeof(ccd_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(ccd_obj->data_buffer), + ccd_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer) +{ + zf_assert(NULL != camera_obj); + + memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct)); + camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD; + camera_obj->config.camera_type = camera_type; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF); + #else + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type + && NULL != data_buffer) { - seekfree_assistant_transfer_callback(image_addr, image_size); + camera_obj->config.data_type = 0x02; + } + else + { + camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01); + } + + // RGB565 ͼ ôֽ + camera_obj->buffer_byte_size = + image_width * image_height + * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1)); + camera_obj->buffer_byte_size = + (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type) + ? (camera_obj->buffer_byte_size / 8) + : (camera_obj->buffer_byte_size); + camera_obj->data_buffer = data_buffer; + + // У + camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.check_sum += seekfree_assistant_sum( + &(camera_obj->config.cmd), + sizeof(camera_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_obj, + sizeof(camera_obj->config)); + if(NULL != camera_obj->data_buffer) + { + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_obj->data_buffer), + camera_obj->buffer_byte_size); } } //------------------------------------------------------------------------------------------------------------------- -// ͼ߻ƺ -// ˵ boundary_id ID -// ˵ dot_num -// ˵ *dot_x ׵ַ -// ˵ *dot_y ׵ַ -// ˵ width ͼ -// ˵ height ͼ߶ +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 // ز void -// ʹʾ +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer) +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer) { - uint8 i; - uint16 dot_bytes = 0; // ֽ + zf_assert(NULL != camera_boundary_obj); + zf_assert(NULL != data_buffer); - dot_bytes = seekfree_assistant_camera_dot_data.dot_num; + memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct)); + camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD; - if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5)) - { - dot_bytes *= 2; + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + camera_boundary_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + camera_boundary_obj->config.data_type = data_type; } - // ȷ֡ͷܡ߽š곤ȡ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct)); + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif - for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++) - { - // жǷͺ - if(NULL != buffer->boundary_x[i]) - { - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes); - } + camera_boundary_obj->buffer_byte_size = + boundary_lenght * 2 + * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2)); + camera_boundary_obj->data_buffer = data_buffer; - // жǷ - if(NULL != buffer->boundary_y[i]) - { - // ûݣʾÿһֻһ߽ - // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣 - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes); - } - } + // У + camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.check_sum += seekfree_assistant_sum( + &(camera_boundary_obj->config.cmd), + sizeof(camera_boundary_obj->config) - 2); } //------------------------------------------------------------------------------------------------------------------- -// ʾͺ +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_boundary_obj, + sizeof(camera_boundary_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_boundary_obj->data_buffer), + camera_boundary_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color) +{ + seekfree_assistant_camera_rectangular_struct camera_rectangular_obj; + memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct)); + camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif + + // У + camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.check_sum += seekfree_assistant_sum( + &(camera_rectangular_obj.cmd), + sizeof(camera_rectangular_obj) - 2); + + seekfree_assistant_transfer_callback( + (const uint8 *)&camera_rectangular_obj, + sizeof(camera_rectangular_obj)); +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer) +{ + zf_assert(NULL != oscilloscope_obj); + zf_assert(NULL != data_buffer); + + memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct)); + oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD; + oscilloscope_obj->config.channel_max = + (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max) + ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX) + : ((0 == channel_max) ? (1) : (channel_max)); + oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00); + oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4; + oscilloscope_obj->data_buffer = data_buffer; +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ // ˵ *seekfree_assistant_oscilloscope ʾݽṹ // ز void // ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope) +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj) { - uint8 packet_size; - - // λ - seekfree_assistant_oscilloscope->channel_num &= 0x0f; - - zf_assert(SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT >= seekfree_assistant_oscilloscope->channel_num); - - // ֡ͷ - seekfree_assistant_oscilloscope->head = SEEKFREE_ASSISTANT_SEND_HEAD; - - // дϢ - packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4; - seekfree_assistant_oscilloscope->length = packet_size; - - // д빦ͨ - seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE; - // У - seekfree_assistant_oscilloscope->check_sum = 0; - seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size); + oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + &(oscilloscope_obj->config.cmd), + sizeof(oscilloscope_obj->config) - 2); + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + (oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); - // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[] - - seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size); + seekfree_assistant_transfer_callback( + (const uint8 *)oscilloscope_obj, + sizeof(oscilloscope_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); } +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) //------------------------------------------------------------------------------------------------------------------- -// ͼϢú -// ˵ camera_type ͼ -// ˵ image_addr ͼַ NULLʾֻͱϢλ -// ˵ width ͼ -// ˵ height ͼ߶ +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ // ز void -// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H); -// עϢ +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height) +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj) { - seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION; - // дϢ - seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct); + zf_assert(NULL != debug_param_obj); - seekfree_assistant_camera_buffer.camera_type = camera_type; - seekfree_assistant_camera_buffer.image_addr = image_addr; - seekfree_assistant_camera_buffer.width = width; - seekfree_assistant_camera_buffer.height = height; -} + seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ + uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ + uint8 temp_sum = 0xFF; // Уʱ + uint32 read_length = 0; // ȡʱ -//------------------------------------------------------------------------------------------------------------------- -// ͼ߷ú -// ˵ boundary_type ߽ -// ˵ dot_num һ߽жٸ -// ˵ dot_x1 ű1ĵַ NULLʾͱ1 -// ˵ dot_x2 ű2ĵַ NULLʾͱ2 -// ˵ dot_x3 ű3ĵַ NULLʾͱ3 -// ˵ dot_y1 ű1ĵַ NULLʾͱ1 -// ˵ dot_y2 ű2ĵַ NULLʾͱ2 -// ˵ dot_y3 ű3ĵַ NULLʾͱ3 -// ز void -// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк -// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ -// ʹʾ seekfree_assistant_camera_config(XY_BOUNDARY, 160, xy_x1_boundary, xy_x2_boundary, xy_x3_boundary, xy_y1_boundary, xy_y2_boundary, xy_y3_boundary); // ͼʱߣ߰ -// עϢ -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3) -{ - uint8 i = 0; - uint8 boundary_num = 0; - uint8 boundary_data_type = 0; - - // ͼͻǷ׼, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_dot_data.dot_num = dot_num; - seekfree_assistant_camera_dot_data.valid_flag = 0; - for(i = 0; i < 3; i++) - { - seekfree_assistant_camera_buffer.boundary_x[i] = NULL; - seekfree_assistant_camera_buffer.boundary_y[i] = NULL; - } - - switch(boundary_type) - { - case X_BOUNDARY: - { - if(NULL != dot_x1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x1; - } - if(NULL != dot_x2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x2; - } - if(NULL != dot_x3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x3; - } - - if(255 < seekfree_assistant_camera_buffer.height) - { - boundary_data_type = 1; - } - }break; - - case Y_BOUNDARY: - { - if(NULL != dot_y1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if(NULL != dot_y2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if(NULL != dot_y3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if(255 < seekfree_assistant_camera_buffer.width) - { - boundary_data_type = 1; - } - }break; - - case XY_BOUNDARY: - { - if((NULL != dot_x1) && (NULL != dot_y1)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if((NULL != dot_x2) && (NULL != dot_y2)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if((NULL != dot_x3) && (NULL != dot_y3)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x3; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if((255 < seekfree_assistant_camera_buffer.width) || (255 < seekfree_assistant_camera_buffer.height)) - { - boundary_data_type = 1; - } - }break; - - case NO_BOUNDARY:break; - } - - seekfree_assistant_camera_dot_data.dot_type = (boundary_type << 6) | (boundary_data_type << 5) | boundary_num; -} - -//------------------------------------------------------------------------------------------------------------------- -// ַͷͼ -// ˵ void -// ز void -// ʹʾ -// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_send (void) -{ - // ͼͻǷ׼ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_data_send(seekfree_assistant_camera_buffer.camera_type, seekfree_assistant_camera_buffer.image_addr, seekfree_assistant_camera_dot_data.dot_type & 0x0f, seekfree_assistant_camera_buffer.width, seekfree_assistant_camera_buffer.height); - - if(seekfree_assistant_camera_dot_data.dot_type & 0x0f) - { - seekfree_assistant_camera_dot_send(&seekfree_assistant_camera_buffer); - } -} - - -//------------------------------------------------------------------------------------------------------------------- -// ֽյ -// ˵ void -// ز void -// ʹʾ ֻҪŵеPITжϻѭ -//------------------------------------------------------------------------------------------------------------------- -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) -void seekfree_assistant_data_analysis (void) -{ - uint8 temp_sum; - uint32 read_length; - seekfree_assistant_parameter_struct *receive_packet; - - // ʹuint32ж壬ĿΪ˱ֽ֤ڶ - uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4]; - - // Զȡ, ԶĴ䷽ʽӽջصжȡ - read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE); + // Զȡһݰ + // ԶĴ䷽ʽӽջصжȡ + read_length = seekfree_assistant_receive_callback( + debug_param_cmd_pointer, + sizeof(seekfree_assistant_debug_param_cmd_struct)); if(read_length) - { - // ȡдFIFO - fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length); + { // ȡдFIFO + fifo_write_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + read_length); } - while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo)) - { - read_length = sizeof(seekfree_assistant_parameter_struct); - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_ONLY); + while( sizeof(seekfree_assistant_debug_param_cmd_struct) + <= fifo_used(&seekfree_assistant_debug_param_fifo)) + { // FIFO һݰ ôͽн + // ֱӶһݰ + read_length = sizeof(seekfree_assistant_debug_param_cmd_struct); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_ONLY); - if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0]) - { - // û֡ͷFIFOȥһ - read_length = 1; - } - else - { - // ҵ֡ͷ - receive_packet = (seekfree_assistant_parameter_struct *)temp_buffer; - temp_sum = receive_packet->check_sum; - receive_packet->check_sum = 0; - if(temp_sum == seekfree_assistant_sum((uint8 *)temp_buffer, sizeof(seekfree_assistant_parameter_struct))) - { - // Уɹ - seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data; - seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1; + if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0] + && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2]) + { // ֱƥ֡ͷ ҹҲƥ + temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ + debug_param_cmd_obj.check_sum = 0; // հУֵ У + if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct))) + { // Уɹ + debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float; + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0]; + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + #endif + debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1; + temp_sum = 0x00; } else - { - read_length = 1; + { // Уƥ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + } + else + { // ƥ䲻֡ͷ͹ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + + if(0xFF == temp_sum) + { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ + for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++) + { // Ϊȡһ һ + if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length]) + { // ҵ¸֡ͷ˳ + break; + } } } // ʹõ - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_AND_CLEAN); } } #endif - - - diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant.h index 5b7e1b5..937f784 100644 --- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,142 +24,292 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ - #include "zf_common_typedef.h" +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 , + SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 , +}seekfree_assistant_data_type_enum; -// 1ʹܲڵĹ 0رղڵĹ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 ) - - - -// FIFOС -#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) - -// ʾͨ -#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) - -// Եͨ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) - -// ͼ -#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) - -// Ƭλ͵֡ͷ -#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) - -// ͷ -#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) -#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) -#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) - -// λƬ͵֡ͷ -#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) - -// -#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) - +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ +}seekfree_assistant_ccd_resolution_enum; // ͷö typedef enum { - // ͷͺŶ - SEEKFREE_ASSISTANT_OV7725_BIN = 1, - SEEKFREE_ASSISTANT_MT9V03X, - SEEKFREE_ASSISTANT_SCC8660, - // ͼͶ - SEEKFREE_ASSISTANT_BINARY = 1, - SEEKFREE_ASSISTANT_GRAY, - SEEKFREE_ASSISTANT_RGB565, -}seekfree_assistant_image_type_enum; + SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY , + SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 , -// ͷö -typedef enum -{ - // ͷͺŶ - X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ - Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ - XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ - NO_BOUNDARY, // ͵ͼûбϢ -}seekfree_assistant_boundary_type_enum; + // ͷͺƥ䶨 + SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X , + SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 , +}seekfree_assistant_camera_type_enum; + +#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨 + +#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ +#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤ + +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС +#endif typedef struct { - uint8 head; // ֡ͷ - uint8 channel_num; // λΪ λΪͨ - uint8 check_sum; // У - uint8 length; // - float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + uint8 data_lenght_buffer[2] ; // CCD ݳ + uint8 channel_color_buffer[2] ; // ͨɫ + uint8 channel_data_max[2] ; // ֵͨ + uint8 data_type ; // ȷϴС + uint8 reserve ; // + }config; + uint16 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_ccd_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 camera_type ; // ͷ + uint8 image_width_buffer[2] ; // ͼ + uint8 image_height_buffer[2] ; // ͼ߶ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 data_type ; // ȷϴС + uint8 boundary_lenght_buffer[2] ; // ߳ + uint8 color_buffer[2] ; // ͨɫ + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_boundary_struct; + +typedef struct +{ + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 reserve ; // + uint8 x_axis_buffer[2] ; // X + uint8 y_axis_buffer[2] ; // Y + uint8 width_buffer[2] ; // ο + uint8 height_buffer[2] ; // θ߶ + uint8 color_buffer[2] ; // ɫ +}seekfree_assistant_camera_rectangular_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_max ; // ͨ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ }seekfree_assistant_oscilloscope_struct; +typedef union +{ + uint8 data_uint8[4] ; + float data_float ; +}seekfree_assistant_param_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ - uint8 length; // ȣЭ鲿֣ - uint16 image_width; // ͼ - uint16 image_height; // ͼ߶ -}seekfree_assistant_camera_struct; - - -typedef struct -{ - uint8 head; // ֡ͷ - uint8 function; // - uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽ - uint8 length; // ȣЭ鲿֣ - uint16 dot_num; // - uint8 valid_flag; // ͨʶ - uint8 reserve; // -}seekfree_assistant_camera_dot_struct; - -typedef struct -{ - void *image_addr; // ͷַ - uint16 width; // ͼ - uint16 height; // ͼ߶ - seekfree_assistant_image_type_enum camera_type; // ͷ - void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ - void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ -}seekfree_assistant_camera_buffer_struct; + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + seekfree_assistant_param_struct dat ; // һ + +}seekfree_assistant_debug_param_cmd_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 channel; // ͨ - uint8 check_sum; // У - float data; // -}seekfree_assistant_parameter_struct; + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint8_struct; + + +typedef struct +{ + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint16_struct; + +typedef struct +{ + float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; + uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; +}seekfree_assistant_debug_param_struct; typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length); typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length); -extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ -extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ - - -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope); -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height); -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3); -void seekfree_assistant_camera_send (void); -void seekfree_assistant_data_analysis (void); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ +// ز void +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, 16] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *seekfree_assistant_oscilloscope ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj); + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj); +#endif #endif diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c index d139201..23205d5 100644 --- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,23 +24,20 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_typedef.h" #include "zf_common_fifo.h" #include "zf_common_debug.h" -#include "zf_driver_uart.h" + #include "zf_device_wireless_uart.h" -#include "zf_device_ble6a20.h" -#include "zf_device_bluetooth_ch9141.h" -#include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" #include "seekfree_assistant.h" @@ -50,7 +47,6 @@ extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ - //------------------------------------------------------------------------------------------------------------------- // ַͺ // ˵ *buff Ҫ͵ݵַ @@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv // ز uint32 ʣδݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) +uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݷ͹ @@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) // ز uint32 յݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) +uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݽչ return 0; @@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) // ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ // ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) +void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) { switch(transfer_device) { case SEEKFREE_ASSISTANT_DEBUG_UART: { -#if DEBUG_UART_USE_INTERRUPT == 1 seekfree_assistant_transfer_callback = debug_send_buffer; seekfree_assistant_receive_callback = debug_read_ring_buffer; -#endif }break; - + case SEEKFREE_ASSISTANT_WIRELESS_UART: { seekfree_assistant_transfer_callback = wireless_uart_send_buffer; seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; - - case SEEKFREE_ASSISTANT_BLE6A20: - { - seekfree_assistant_transfer_callback = ble6a20_send_buffer; - seekfree_assistant_receive_callback = ble6a20_read_buffer; - }break; - case SEEKFREE_ASSISTANT_CH9141: - { - seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; - seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; - }break; - - case SEEKFREE_ASSISTANT_WIFI_UART: - { - seekfree_assistant_transfer_callback = wifi_uart_send_buffer; - seekfree_assistant_receive_callback = wifi_uart_read_buffer; - }break; - + // case SEEKFREE_ASSISTANT_CH9141: + // { + // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; + // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; + // }break; + + // case SEEKFREE_ASSISTANT_WIFI_UART: + // { + // seekfree_assistant_transfer_callback = wifi_uart_send_buffer; + // seekfree_assistant_receive_callback = wifi_uart_read_buffer; + // }break; + case SEEKFREE_ASSISTANT_WIFI_SPI: { seekfree_assistant_transfer_callback = wifi_spi_send_buffer; seekfree_assistant_receive_callback = wifi_spi_read_buffer; }break; - - case SEEKFREE_ASSISTANT_CUSTOM: - { + + default: + { // Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ - + seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + seekfree_assistant_receive_callback = seekfree_assistant_receive; }break; } } - - diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.h index 2ccfd8a..0e28f49 100644 --- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,13 +24,13 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,7 +43,6 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ SEEKFREE_ASSISTANT_WIRELESS_UART, // ת - SEEKFREE_ASSISTANT_BLE6A20, // ת SEEKFREE_ASSISTANT_CH9141, // CH9141 SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_absolute_encoder.h index 1166c84..dc091aa 100644 --- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_absolute_encoder.h +++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_absolute_encoder.h @@ -62,7 +62,7 @@ //==================================================== SPI ==================================================== #else //====================================================Ӳ SPI ==================================================== -#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI +#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI #define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI #define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK #define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI @@ -70,7 +70,7 @@ //====================================================Ӳ SPI ==================================================== #endif -#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ +#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ #define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN))) #define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ble6a20.h index 6f4544a..6af089f 100644 --- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ble6a20.h +++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ble6a20.h @@ -76,7 +76,7 @@ // 1Զ Զʵ޸ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ // Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000 -#define BLE6A20_AUTO_BAUD_RATE ( 0 ) +#define BLE6A20_AUTO_BAUD_RATE ( 1 ) #if (1 == BLE6A20_AUTO_BAUD_RATE) typedef enum diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rc.c new file mode 100644 index 0000000..68840e2 --- /dev/null +++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rc.c @@ -0,0 +1,563 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#include "math.h" +#include "zf_common_debug.h" +#include "zf_driver_delay.h" +#include "zf_driver_spi.h" +#include "zf_driver_gpio.h" +#include "zf_driver_soft_iic.h" +#include "zf_device_config.h" +#include "zf_driver_uart.h" +#include "zf_driver_exti.h" + +#include "zf_device_imu660rc.h" + +#ifndef M_PI +#define M_PI 3.1415926f +#endif + + +static uint8 imu660rc_quarternion_rate; + +float imu660rc_transition_factor[2]; +int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro () +int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ) +float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ +float imu660rc_quarternion[4]; // Ԫ + + + +#if IMU660RC_USE_SOFT_IIC +static soft_iic_info_struct imu660rc_iic_struct; + +#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data))) +#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len))) +#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg))) +#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len))) +#else +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC дĴ +// ˵ reg Ĵַ +// ˵ data +// ز void +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_write_register (uint8 reg, uint8 data) +{ + IMU660RC_CS(0); + spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data); + IMU660RC_CS(1); +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ĵ +// ˵ reg Ĵַ +// ز uint8 +// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_read_register (uint8 reg) +{ + uint8 data; + IMU660RC_CS(0); + data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R); + IMU660RC_CS(1); + return data; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC +// ˵ reg Ĵַ +// ˵ data ݻ +// ˵ len ݳ +// ز void +// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len) +{ + IMU660RC_CS(0); + spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len); + IMU660RC_CS(1); +} +#endif + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC fp16ת +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint32 fp16_to_float(uint16 h) +{ + uint16 h_exp = (h & 0x7c00u); + uint32 f_sgn = ((uint32)h & 0x8000u) << 16; + switch (h_exp) + { + case 0x0000u: // 0 or subnormal + { + uint16 h_sig = (h & 0x03ffu); + // Signed zero + if (h_sig == 0) + { + return f_sgn; + } + // Subnormal + h_sig <<= 1; + while ((h_sig & 0x0400u) == 0) + { + h_sig <<= 1; + h_exp++; + } + uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23; + uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13; + return f_sgn + f_exp + f_sig; + } + case 0x7c00u: // inf or NaN + { + // All-ones exponent and a copy of the significand + return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13); + } + default: // normalized + { + // Just need to adjust the exponent and shift + return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13); + } + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫһ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_normalize(float quat[4], uint16 *fp16) +{ + float n = 0; + float temp[4]; + + *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]); + *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]); + *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]); + *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]); + + n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3]; + n = sqrtf(n); + + if(n > 0.001f) // Խӽ0ֵ + { + n = temp[3] < 0.0f ? -n : n; + + quat[0] = temp[1] / n; + quat[1] = temp[2] / n; + quat[2] = temp[0] / n; + quat[3] = temp[3] / n; + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫתŷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw) +{ + float euler[3]; + + float sqx = quat[0] * quat[0]; + float sqy = quat[1] * quat[1]; + float sqz = quat[2] * quat[2]; + + euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx)); + euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2])); + euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz)); + + // תǶ + euler[0] = 180 * (euler[0]) / M_PI; + euler[1] = 180 * (euler[1]) / M_PI; + euler[2] = 180 * (euler[2]) / M_PI; + + // Ƕȵ + euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2]; + + *roll = euler[0]; + *pitch = euler[1]; + *yaw = euler[2]; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ÷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank) +{ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank); +} + + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Լ +// ˵ void +// ز uint8 1-Լʧ 0-Լɹ +// ʹʾ imu660rc_self_check(); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_self_check (void) +{ + uint8 dat = 0, return_state = 0; + uint16 timeout_count = 0; + do + { + if(IMU660RC_TIMEOUT_COUNT < timeout_count ++) + { + return_state = 1; + break; + } + dat = imu660rc_read_register(IMU660RC_CHIP_ID); + system_delay_ms(1); + }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû⵽豸 + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ٶȼ +// ˵ void +// ز void +// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_acc (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6); + imu660rc_acc_x = dat[0]; + imu660rc_acc_y = dat[1]; + imu660rc_acc_z = dat[2]; + } +} +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC +// ˵ void +// ز void +// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_gyro (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6); + imu660rc_gyro_x = dat[0]; + imu660rc_gyro_y = dat[1]; + imu660rc_gyro_z = dat[2]; + } +} + + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ԪݲתΪŷ +// ˵ void +// ز void +// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı +// עϢ ҪINT2Ŵжϵô˺ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_quarternion(void) +{ + uint8 i; + uint16 buff[4]; + uint8 *buff1_ptr; + int16 *buff2_ptr; + + if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate) + { + buff1_ptr = (uint8 *)buff; + + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x20); + imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31); + + for(i = 0; 8 > i; i++) + { + imu660rc_write_register(0x08, 0x4C + i); + buff1_ptr[i] = imu660rc_read_register(0x09); + } + + imu660rc_write_register(IMU660RC_PAGE_RW, 0x0); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // Ԫһ + quarternion_normalize(imu660rc_quarternion, buff); + // Ԫתŷ + quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw); + + // ȡٶٶϢ + #if(1 == IMU660RC_QUARTERNION_GET_ACC) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6); + imu660rc_acc_x = buff2_ptr[0]; + imu660rc_acc_y = buff2_ptr[1]; + imu660rc_acc_z = buff2_ptr[2]; + } + #endif + #if(1 == IMU660RC_QUARTERNION_GET_GYRO) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6); + imu660rc_gyro_x = buff2_ptr[0]; + imu660rc_gyro_y = buff2_ptr[1]; + imu660rc_gyro_z = buff2_ptr[2]; + } + #endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RCжϻصҪжڶȡԪ +// ˵ void +// ز void +// ʹʾ +// עϢ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_callback(void) +{ + imu660rc_get_quarternion(); + +} + +//------------------------------------------------------------------------------------------------------------------- +// ʼ IMU660RC +// ˵ quarternion_rate ѡԪ +// ز uint8 1-ʼʧ 0-ʼɹ +// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate) +{ + uint8 return_state = 0; + + imu660rc_quarternion_rate = quarternion_rate; + #if IMU660RC_USE_SOFT_IIC + soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿ + + #else + spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿ + gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿ + #endif + + system_delay_ms(10); + + do + { + if(imu660rc_self_check()) // IMU660RC Լ + { + // ˶Ϣ ʾλ + // ô IMU660RC Լʱ˳ + // һ½û ûܾǻ + zf_log(0, "imu660rc self check error."); + return_state = 1; + break; + } + + // λ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04); + system_delay_ms(30); + + // ÿ¹ַ + imu660rc_write_register(IMU660RC_CTRL3, 0x44); + + switch(IMU660RC_ACC_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_ACC_SAMPLE_SGN_2G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x00); + imu660rc_transition_factor[0] = 16393.44; + }break; + case IMU660RC_ACC_SAMPLE_SGN_4G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x01); + imu660rc_transition_factor[0] = 8196.72; + }break; + case IMU660RC_ACC_SAMPLE_SGN_8G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x02); + imu660rc_transition_factor[0] = 4098.36; + }break; + case IMU660RC_ACC_SAMPLE_SGN_16G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x03); + imu660rc_transition_factor[0] = 2049.18; + }break; + } + if(1 == return_state) + { + break; + } + + switch(IMU660RC_GYRO_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_125DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x00); + imu660rc_transition_factor[1] = 228.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_250DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x01); + imu660rc_transition_factor[1] = 114.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_500DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x02); + imu660rc_transition_factor[1] = 57.1428; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_1000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x03); + imu660rc_transition_factor[1] = 28.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_2000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x04); + imu660rc_transition_factor[1] = 14.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_4000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x0C); + imu660rc_transition_factor[1] = 7.14285; + }break; + } + if(1 == return_state) + { + break; + } + + // ôģʽΪ߾ģʽԼ + imu660rc_write_register(IMU660RC_CTRL1, 0x15); + imu660rc_write_register(IMU660RC_CTRL2, 0x18); + + // LPF1˲ + imu660rc_write_register(IMU660RC_CTRL7, 0x01); + + // LPF2˲ + imu660rc_write_register(IMU660RC_CTRL9, 0x08); + + // ԪӦ + if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate) + { + // жϴź + imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80); + imu660rc_write_register(IMU660RC_CTRL4, 0x08); + imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30); + + // üٶȡٶ + imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3)); + imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3)); + + // Ԫʲ + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3)); + imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x00); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // жϼ + exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING); + } + }while(0); + + return return_state; +} + + + + + + + + + + + + + diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rc.h new file mode 100644 index 0000000..dd5a9e3 --- /dev/null +++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rc.h @@ -0,0 +1,211 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#ifndef _zf_device_imu660rc_h_ +#define _zf_device_imu660rc_h_ + +#include "zf_common_typedef.h" + + +// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC +// IMU660RC_USE_SOFT_IICҪȱ벢س򣬵ƬģҪϵͨѶ +#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ + +#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ +//==================================================== IIC ==================================================== +#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ +#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL +#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA +//==================================================== IIC ==================================================== +#else + +//====================================================Ӳ SPI ==================================================== +#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI +#define IMU660RC_SPI (SPI_0) // Ӳ SPI +#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK +#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI +#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO +//====================================================Ӳ SPI ==================================================== +#endif +#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ +#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) ) +#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ + + +#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ +#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ + +typedef enum +{ + IMU660RC_MAIN_MEM_BANK = 0x00, + IMU660RC_HUB_MEM_BANK = 0x40, + IMU660RC_EMBED_MEM_BANK = 0x80, +}imu660rc_mem_bank_enum; + +typedef enum +{ + IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2) + IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G + IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G + IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G +}imu660rc_acc_sample_config; + +typedef enum +{ + IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S) + IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS + IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS + IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS + IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS + IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS +}imu660rc_gyro_sample_config; + +typedef enum +{ + IMU660RC_QUARTERNION_15HZ, // 15 Hz + IMU660RC_QUARTERNION_30HZ, // 30 Hz + IMU660RC_QUARTERNION_60HZ, // 60 Hz + IMU660RC_QUARTERNION_120HZ, // 120Hz + IMU660RC_QUARTERNION_240HZ, // 240Hz + IMU660RC_QUARTERNION_480HZ, // 480Hz + IMU660RC_QUARTERNION_DISABLE, // Ԫ +}imu660rc_quarternion_rate_config; + + +//================================================ IMU660RC ڲַ================================================ +#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ +#define IMU660RC_SPI_W ( 0x00 ) +#define IMU660RC_SPI_R ( 0x80 ) +#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ + + +//================================================ IMU660RC Ĵַ================================================ +#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 ) +#define IMU660RC_INT2_CTRL ( 0x0E ) +#define IMU660RC_CHIP_ID ( 0x0F ) +#define IMU660RC_CTRL1 ( 0x10 ) +#define IMU660RC_CTRL2 ( 0x11 ) +#define IMU660RC_CTRL3 ( 0x12 ) +#define IMU660RC_CTRL4 ( 0x13 ) +#define IMU660RC_CTRL5 ( 0x14 ) +#define IMU660RC_CTRL6 ( 0x15 ) +#define IMU660RC_CTRL7 ( 0x16 ) +#define IMU660RC_CTRL8 ( 0x17 ) +#define IMU660RC_CTRL9 ( 0x18 ) +#define IMU660RC_CTRL10 ( 0x19 ) +#define IMU660RC_CTRL_STATUS ( 0x1A ) +#define IMU660RC_STATUS_REG ( 0x1E ) +#define IMU660RC_OUT_TEMP_L ( 0x20 ) +#define IMU660RC_OUT_TEMP_H ( 0x21 ) +#define IMU660RC_OUTX_L_G ( 0x22 ) +#define IMU660RC_OUTX_H_G ( 0x23 ) +#define IMU660RC_OUTY_L_G ( 0x24 ) +#define IMU660RC_OUTY_H_G ( 0x25 ) +#define IMU660RC_OUTZ_L_G ( 0x26 ) +#define IMU660RC_OUTZ_H_G ( 0x27 ) +#define IMU660RC_OUTX_L_A ( 0x28 ) +#define IMU660RC_OUTX_H_A ( 0x29 ) +#define IMU660RC_OUTY_L_A ( 0x2A ) +#define IMU660RC_OUTY_H_A ( 0x2B ) +#define IMU660RC_OUTZ_L_A ( 0x2C ) +#define IMU660RC_OUTZ_H_A ( 0x2D ) + +#define IMU660RC_PAGE_SEL ( 0x02 ) +#define IMU660RC_EMB_FUNC_EN_A ( 0x04 ) +#define IMU660RC_PAGE_RW ( 0x17 ) +#define IMU660RC_SFLP_ODR ( 0x5E ) +#define IMU660RC_EMB_FUNC_CFG ( 0x63 ) + + + +extern float imu660rc_transition_factor[2]; +extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; // +extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ +extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ +extern float imu660rc_quarternion[4]; // Ԫ + + +void imu660rc_get_acc (void); +void imu660rc_get_gyro (void); +void imu660rc_get_quarternion (void); + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ٶȼתΪʵ +// ˵ acc_value ļٶȼ +// ز void +// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2) +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0]) + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC תΪʵ +// ˵ gyro_value +// ز void +// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1]) +void imu660rc_callback (void); +uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate); + + + +#endif diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rx.h index 45699d9..81b8b41 100644 --- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rx.h +++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_imu660rx.h @@ -97,7 +97,7 @@ //================================================ IMU660RX ȫֱ================================================ extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro () extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ) -extern float imu660ra_transition_factor[2]; +extern float imu660rx_transition_factor[2]; //================================================ IMU660RX ȫֱ================================================ diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips114.h index c56f310..9c4ac0d 100644 --- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips114.h +++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips114.h @@ -167,7 +167,7 @@ void ips114_init (void); // ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================= IPS114 չ================================================ #endif diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200.h index 850fb11..5bf4284 100644 --- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200.h +++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200.h @@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select); // ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================== IPS200 չ================================================ diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h index 98c5364..557e1d2 100644 --- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h @@ -86,7 +86,7 @@ // £SCC8660_PCLK_DIVԽͼԽ #define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1> #define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ -#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) +#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) #define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0 //================================================ SCC8660 ã֧ͫ֡ʰ汾=========================== diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.c index b51c600..b06e6a1 100644 --- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.c +++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.c @@ -24,7 +24,7 @@ * ļ zf_device_wifi_spi * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.9.20 +* ADS v1.10.2 * ƽ̨ TC264D * https://seekfree.taobao.com/ * @@ -63,6 +63,21 @@ #define SOCKET_CONNECT_TIME_OUT 50000 // λ #define OTHER_TIME_OUT 1000 // λ +#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088)) + #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088" +#endif + +#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE) + #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE" +#endif + + +#if (WIFI_SPI_TRANSFER_SIZE != 4088) + #error "WIFI_SPI_TRANSFER_SIZE must be == 4088" +#endif + + + char wifi_spi_version[12]; // ģ̼汾Ϣ char wifi_spi_mac_addr[20]; // ģMACַϢ char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ @@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void) { memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1; - return return_state; } @@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void) { memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1; - return return_state; } @@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void) { memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1; + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ȡϵͳʱ +// ˵ time_format ʱʽ +// ز *buffer ʱַַ СҪ30ֽ +// ز buffer_size С +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size) +{ + uint8 return_state = 1; + wifi_spi_packets_struct temp_packets; + uint8 send_cmd, receive_cmd; + + // ʱ30ֽ + // ģ̼V2汾 + if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2))) + { + send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0; + receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0; + + return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT); + if((0 == return_state) && (receive_cmd == temp_packets.head.command)) + { + return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2); + if(0 == return_state) + { + memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3); + buffer[temp_packets.head.length - 3] = 0; + } + } + } + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ɨȵ +// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз +// ˵ buffer_size ij +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +// עϢ ÿһаһwifi +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size) +{ + uint8 return_state; + + // ģV2汾Ĺִ̼֧˹ + if(!strncmp(wifi_spi_version, "V2", 2)) + { + return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT); + + if(0 == return_state) + { + #if (0 == WIFI_SPI_READ_TRANSFER) + wifi_spi_send_buffer(NULL, 0); + #endif + while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size)) + { + system_delay_ms(10); + } + } + } return return_state; } @@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) while(length) { - send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length; + send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length); if(wifi_spi_wait_idle(OTHER_TIME_OUT)) { @@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) return length; } +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ַͺͬ +// ˵ *string Ҫ͵ַ +// ز void +// ʹʾ wifi_spi_send_string("123"); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +void wifi_spi_send_string(const char *string) +{ + wifi_spi_send_buffer((uint8*)string, strlen(string)); +} + //------------------------------------------------------------------------------------------------------------------- // WIFI SPI ȡ // ˵ *buff ջ @@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) { zf_assert(NULL != buffer); - uint32 data_len = length; + uint32 fifo_read_length; + uint32 write_length = 0; + wifi_spi_packets_struct temp_packets; + + // жFIFOǷݣȴFIFOȡ + if(fifo_used(&wifi_spi_fifo)) + { + fifo_read_length = fifo_used(&wifi_spi_fifo); + fifo_read_length = length < fifo_read_length ? length : fifo_read_length; + fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN); + + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + } #if(1 == WIFI_SPI_READ_TRANSFER) - - wifi_spi_packets_struct temp_packets; - // WIFI SPI״̬жϻ߳ѾͨѶ򱾴βܷ if(WIFI_SPI_IDLE == wifi_spi_mutex) { - // ͨѶ״̬Ϊæ - wifi_spi_mutex = WIFI_SPI_BUSY; + wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ - // ͨѶ鿴ģǷδȡ do { - if(wifi_spi_wait_idle(OTHER_TIME_OUT)) + if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ + (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳ + ) { break; } + temp_packets.head.command = WIFI_SPI_DATA; temp_packets.head.length = 0; wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE); // յİǷ - if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) + if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) && + (temp_packets.head.length) + ) { - // յ - if(temp_packets.head.length) + if(length) + { + fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length; + memcpy(buffer, temp_packets.buffer, fifo_read_length); + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO + { + fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length); + } + } + else // ȫдFIFO { fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length); } @@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command); wifi_spi_mutex = WIFI_SPI_IDLE; } -#endif +#endif - fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN); - return data_len; + return write_length; } //------------------------------------------------------------------------------------------------------------------- @@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word) // MACַϢַʽwifi_spi_mac_addr wifi_spi_get_mac_addr(); - + if(NULL == wifi_ssid) + { + // ʼʱҪWIFI + break; + } return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word); if(return_state) { diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.h index eea8a78..e7cec39 100644 --- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.h +++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.h @@ -73,8 +73,8 @@ #if (WIFI_SPI_AUTO_CONNECT > 2) #error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]" #else -#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP -#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿ +#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP +#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666 #endif @@ -95,10 +95,15 @@ typedef enum WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ + WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI + WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾 WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ + WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1 + WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2 + WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3 // ӻش WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ @@ -110,6 +115,9 @@ typedef enum WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾 WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں + WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ + WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ + WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ WIFI_SPI_INVALID2 = 0xFF // Чݰ }wifi_spi_packets_command_enum; @@ -134,19 +142,27 @@ typedef struct uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // }wifi_spi_packets_struct; - +typedef enum +{ + WIFI_SPI_UTC_0 = 1, // ʱ + WIFI_SPI_GMT, // ʱ תΪGMTʽ׺GMT һڶԽƶ˴ģʹ + WIFI_SPI_UTC_8, // ʱ +}wifi_spi_time_enum; + extern char wifi_spi_version[12]; // ̼汾 ַ extern char wifi_spi_mac_addr[20]; // ģMACַ ַ extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ -uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); -uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); -uint8 wifi_spi_socket_disconnect (void); -uint8 wifi_spi_udp_send_now (void); -uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); -uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size); +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size); +uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); +uint8 wifi_spi_socket_disconnect (void); +uint8 wifi_spi_udp_send_now (void); +uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); +void wifi_spi_send_string (const char *string); +uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); -uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); #endif - diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.h index 0f392ff..24b88cc 100644 --- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.h +++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.h @@ -73,7 +73,7 @@ #if (WIFI_UART_AUTO_CONNECT > 3) #error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]" #else -#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP +#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP #define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_UART_LOCAL_PORT "8080" // ˿ #endif diff --git a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_driver/zf_driver_encoder.c index 8d514b7..ad4099e 100644 --- a/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_driver/zf_driver_encoder.c +++ b/Example/Coreboard_Demo/E07_encoder_demo/libraries/zf_driver/zf_driver_encoder.c @@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n) //------------------------------------------------------------------------------------------------------------------- void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin) { -// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init + zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init IfxGpt12_enableModule(&MODULE_GPT120); IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4); diff --git a/Example/Coreboard_Demo/E07_encoder_demo/user/isr.c b/Example/Coreboard_Demo/E07_encoder_demo/user/isr.c index daa57f0..927ed43 100644 --- a/Example/Coreboard_Demo/E07_encoder_demo/user/isr.c +++ b/Example/Coreboard_Demo/E07_encoder_demo/user/isr.c @@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж { exti_flag_clear(ERU_CH0_REQ0_P15_4); - + + imu660rc_callback(); // 660RC ģ INT ж } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж @@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) { exti_flag_clear(ERU_CH5_REQ1_P15_8); - } } @@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) // exti_flag_clear(ERU_CH6_REQ9_P20_0); // } // } - IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO) { interrupt_global_enable(0); // жǶ @@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { interrupt_global_enable(0); // жǶ - gnss_uart_callback(); // GPSڻص + gnss_uart_callback(); // GNSSڻص diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/doc/version.txt index 1e222a3..8ce85ca 100644 --- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/doc/version.txt +++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/doc/version.txt @@ -1,3 +1,13 @@ +V3.4.4 + SCC8660ʽ + ָV2 + ޸ips200ʾscc8660ͷʽ + ޸ips114ʾscc8660ͷʽ +V3.4.3 + 660RC +V3.4.2 + ޸printfضеĺ궨 + WIFI_SPI V3.4.1 ޸Ĵڷ麯еķ ޸ips200proע diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h index 27b7965..e8d6021 100644 --- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h @@ -91,6 +91,7 @@ #include "zf_device_imu660ra.h" #include "zf_device_imu660rb.h" #include "zf_device_imu660rx.h" +#include "zf_device_imu660rc.h" #include "zf_device_imu963ra.h" #include "zf_device_ips114.h" #include "zf_device_ips200.h" diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/printf_redirect.c index c44d826..299da76 100644 --- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/printf_redirect.c +++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/printf_redirect.c @@ -45,7 +45,7 @@ //------------------------------------------------------------------------------------------------------------------- int fputc(int ch, FILE *stream) { - uart_write_byte(DEBUG_UART_INDEX, (char)ch); + uart_write_byte(PRINTF_USE_UART, (char)ch); return (ch); } @@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len) int fgetc(FILE *f) { #if PRINTF_OUTPUT_TYPE == 0 - return uart_read_byte(DEBUG_UART_INDEX); + return uart_read_byte(PRINTF_USE_UART); #else uint8 buf; wifi_spi_read_buffer(&buf, 1); diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.c index 231b20d..3e9ec74 100644 --- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,423 +24,519 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_debug.h" #include "seekfree_assistant.h" +// ͨö +typedef enum +{ + SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 , + SEEKFREE_ASSISTANT_SEND_CAMERA_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD , -extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); -extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); + SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 , -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) + SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 , +}seekfree_assistant_cmd_type_enum; + +#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ +#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ + +// ݷͺָ +extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); +seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + +// ݽպָ +extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); +seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) #include "zf_common_fifo.h" -static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO -static fifo_struct seekfree_assistant_fifo = // FIFOṹ +static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE]; +static fifo_struct seekfree_assistant_debug_param_fifo = { - .buffer = seekfree_assistant_buffer, + .buffer = seekfree_assistant_debug_param_buffer, .execution = FIFO_IDLE, .type = FIFO_DATA_8BIT, .head = 0, .end = 0, - .size = SEEKFREE_ASSISTANT_BUFFER_SIZE, - .max = SEEKFREE_ASSISTANT_BUFFER_SIZE, -}; + .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, + .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, +}; #endif -static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ -static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ -static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ - -seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ -seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ - -seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ -vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ - //------------------------------------------------------------------------------------------------------------------- // ͺ -// ˵ *buffer ҪУݵַ -// ˵ length У鳤 -// ز uint8 ֵ +// ˵ *buffer ҪУݵַ +// ˵ length У鳤 +// ز uint8 ֵ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length) +static uint8 seekfree_assistant_sum (void *buffer, uint32 length) { uint8 temp_sum = 0; + uint8 *ptr = (uint8 *)buffer; while(length--) { - temp_sum += *buffer++; + temp_sum += *ptr ++; } return temp_sum; } //------------------------------------------------------------------------------------------------------------------- -// ͼͺ -// ˵ camera_type ͷ -// ˵ *image_addr ͼ׵ַ -// ˵ boundary_num ͼа߽ -// ˵ width ͼ -// ˵ height ͼ߶ +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ // ز void -// ʹʾ +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height) +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer) { - uint32 image_size = 0; + zf_assert(NULL != ccd_obj); + zf_assert(NULL != data_buffer); - seekfree_assistant_camera_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_data.function = SEEKFREE_ASSISTANT_CAMERA_FUNCTION; - seekfree_assistant_camera_data.camera_type = (camera_type << 5) | ((image_addr != NULL ? 0 : 1) << 4) | boundary_num; - // дϢЭ鲿 - seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct); - seekfree_assistant_camera_data.image_width = width; - seekfree_assistant_camera_data.image_height = height; + memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct)); + ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD; + ccd_obj->config.channel_index = channel_index; - // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct)); - - // ͷͼͼС - switch(camera_type) + uint16 data_max = 256; + uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT; + loop_count = (2 >= loop_count) ? (loop_count) : (2); + for(uint8 i = 0; loop_count > i; i ++) { - case SEEKFREE_ASSISTANT_OV7725_BIN: - { - image_size = width * height / 8; - }break; - - case SEEKFREE_ASSISTANT_MT9V03X: - { - image_size = width * height; - }break; - - case SEEKFREE_ASSISTANT_SCC8660: - { - image_size = width * height * 2; - }break; + data_max *= 4; } - // ͼ - if(NULL != image_addr) + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF); + #else + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + ccd_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + ccd_obj->config.data_type = data_type; + } + + // ¼ʵֽ uint16 Ҫݳ + ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1)); + // Ȼ¼Ӧݻ + ccd_obj->data_buffer = data_buffer; + + // У + ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.check_sum += seekfree_assistant_sum( + &(ccd_obj->config.cmd), + sizeof(ccd_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)ccd_obj, + sizeof(ccd_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(ccd_obj->data_buffer), + ccd_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer) +{ + zf_assert(NULL != camera_obj); + + memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct)); + camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD; + camera_obj->config.camera_type = camera_type; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF); + #else + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type + && NULL != data_buffer) { - seekfree_assistant_transfer_callback(image_addr, image_size); + camera_obj->config.data_type = 0x02; + } + else + { + camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01); + } + + // RGB565 ͼ ôֽ + camera_obj->buffer_byte_size = + image_width * image_height + * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1)); + camera_obj->buffer_byte_size = + (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type) + ? (camera_obj->buffer_byte_size / 8) + : (camera_obj->buffer_byte_size); + camera_obj->data_buffer = data_buffer; + + // У + camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.check_sum += seekfree_assistant_sum( + &(camera_obj->config.cmd), + sizeof(camera_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_obj, + sizeof(camera_obj->config)); + if(NULL != camera_obj->data_buffer) + { + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_obj->data_buffer), + camera_obj->buffer_byte_size); } } //------------------------------------------------------------------------------------------------------------------- -// ͼ߻ƺ -// ˵ boundary_id ID -// ˵ dot_num -// ˵ *dot_x ׵ַ -// ˵ *dot_y ׵ַ -// ˵ width ͼ -// ˵ height ͼ߶ +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 // ز void -// ʹʾ +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer) +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer) { - uint8 i; - uint16 dot_bytes = 0; // ֽ + zf_assert(NULL != camera_boundary_obj); + zf_assert(NULL != data_buffer); - dot_bytes = seekfree_assistant_camera_dot_data.dot_num; + memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct)); + camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD; - if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5)) - { - dot_bytes *= 2; + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + camera_boundary_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + camera_boundary_obj->config.data_type = data_type; } - // ȷ֡ͷܡ߽š곤ȡ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct)); + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif - for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++) - { - // жǷͺ - if(NULL != buffer->boundary_x[i]) - { - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes); - } + camera_boundary_obj->buffer_byte_size = + boundary_lenght * 2 + * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2)); + camera_boundary_obj->data_buffer = data_buffer; - // жǷ - if(NULL != buffer->boundary_y[i]) - { - // ûݣʾÿһֻһ߽ - // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣 - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes); - } - } + // У + camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.check_sum += seekfree_assistant_sum( + &(camera_boundary_obj->config.cmd), + sizeof(camera_boundary_obj->config) - 2); } //------------------------------------------------------------------------------------------------------------------- -// ʾͺ +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_boundary_obj, + sizeof(camera_boundary_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_boundary_obj->data_buffer), + camera_boundary_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color) +{ + seekfree_assistant_camera_rectangular_struct camera_rectangular_obj; + memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct)); + camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif + + // У + camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.check_sum += seekfree_assistant_sum( + &(camera_rectangular_obj.cmd), + sizeof(camera_rectangular_obj) - 2); + + seekfree_assistant_transfer_callback( + (const uint8 *)&camera_rectangular_obj, + sizeof(camera_rectangular_obj)); +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer) +{ + zf_assert(NULL != oscilloscope_obj); + zf_assert(NULL != data_buffer); + + memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct)); + oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD; + oscilloscope_obj->config.channel_max = + (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max) + ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX) + : ((0 == channel_max) ? (1) : (channel_max)); + oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00); + oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4; + oscilloscope_obj->data_buffer = data_buffer; +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ // ˵ *seekfree_assistant_oscilloscope ʾݽṹ // ز void // ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope) +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj) { - uint8 packet_size; - - // λ - seekfree_assistant_oscilloscope->channel_num &= 0x0f; - - zf_assert(SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT >= seekfree_assistant_oscilloscope->channel_num); - - // ֡ͷ - seekfree_assistant_oscilloscope->head = SEEKFREE_ASSISTANT_SEND_HEAD; - - // дϢ - packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4; - seekfree_assistant_oscilloscope->length = packet_size; - - // д빦ͨ - seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE; - // У - seekfree_assistant_oscilloscope->check_sum = 0; - seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size); + oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + &(oscilloscope_obj->config.cmd), + sizeof(oscilloscope_obj->config) - 2); + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + (oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); - // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[] - - seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size); + seekfree_assistant_transfer_callback( + (const uint8 *)oscilloscope_obj, + sizeof(oscilloscope_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); } +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) //------------------------------------------------------------------------------------------------------------------- -// ͼϢú -// ˵ camera_type ͼ -// ˵ image_addr ͼַ NULLʾֻͱϢλ -// ˵ width ͼ -// ˵ height ͼ߶ +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ // ز void -// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H); -// עϢ +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height) +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj) { - seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION; - // дϢ - seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct); + zf_assert(NULL != debug_param_obj); - seekfree_assistant_camera_buffer.camera_type = camera_type; - seekfree_assistant_camera_buffer.image_addr = image_addr; - seekfree_assistant_camera_buffer.width = width; - seekfree_assistant_camera_buffer.height = height; -} + seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ + uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ + uint8 temp_sum = 0xFF; // Уʱ + uint32 read_length = 0; // ȡʱ -//------------------------------------------------------------------------------------------------------------------- -// ͼ߷ú -// ˵ boundary_type ߽ -// ˵ dot_num һ߽жٸ -// ˵ dot_x1 ű1ĵַ NULLʾͱ1 -// ˵ dot_x2 ű2ĵַ NULLʾͱ2 -// ˵ dot_x3 ű3ĵַ NULLʾͱ3 -// ˵ dot_y1 ű1ĵַ NULLʾͱ1 -// ˵ dot_y2 ű2ĵַ NULLʾͱ2 -// ˵ dot_y3 ű3ĵַ NULLʾͱ3 -// ز void -// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк -// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ -// ʹʾ seekfree_assistant_camera_config(XY_BOUNDARY, 160, xy_x1_boundary, xy_x2_boundary, xy_x3_boundary, xy_y1_boundary, xy_y2_boundary, xy_y3_boundary); // ͼʱߣ߰ -// עϢ -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3) -{ - uint8 i = 0; - uint8 boundary_num = 0; - uint8 boundary_data_type = 0; - - // ͼͻǷ׼, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_dot_data.dot_num = dot_num; - seekfree_assistant_camera_dot_data.valid_flag = 0; - for(i = 0; i < 3; i++) - { - seekfree_assistant_camera_buffer.boundary_x[i] = NULL; - seekfree_assistant_camera_buffer.boundary_y[i] = NULL; - } - - switch(boundary_type) - { - case X_BOUNDARY: - { - if(NULL != dot_x1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x1; - } - if(NULL != dot_x2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x2; - } - if(NULL != dot_x3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x3; - } - - if(255 < seekfree_assistant_camera_buffer.height) - { - boundary_data_type = 1; - } - }break; - - case Y_BOUNDARY: - { - if(NULL != dot_y1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if(NULL != dot_y2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if(NULL != dot_y3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if(255 < seekfree_assistant_camera_buffer.width) - { - boundary_data_type = 1; - } - }break; - - case XY_BOUNDARY: - { - if((NULL != dot_x1) && (NULL != dot_y1)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if((NULL != dot_x2) && (NULL != dot_y2)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if((NULL != dot_x3) && (NULL != dot_y3)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x3; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if((255 < seekfree_assistant_camera_buffer.width) || (255 < seekfree_assistant_camera_buffer.height)) - { - boundary_data_type = 1; - } - }break; - - case NO_BOUNDARY:break; - } - - seekfree_assistant_camera_dot_data.dot_type = (boundary_type << 6) | (boundary_data_type << 5) | boundary_num; -} - -//------------------------------------------------------------------------------------------------------------------- -// ַͷͼ -// ˵ void -// ز void -// ʹʾ -// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_send (void) -{ - // ͼͻǷ׼ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_data_send(seekfree_assistant_camera_buffer.camera_type, seekfree_assistant_camera_buffer.image_addr, seekfree_assistant_camera_dot_data.dot_type & 0x0f, seekfree_assistant_camera_buffer.width, seekfree_assistant_camera_buffer.height); - - if(seekfree_assistant_camera_dot_data.dot_type & 0x0f) - { - seekfree_assistant_camera_dot_send(&seekfree_assistant_camera_buffer); - } -} - - -//------------------------------------------------------------------------------------------------------------------- -// ֽյ -// ˵ void -// ز void -// ʹʾ ֻҪŵеPITжϻѭ -//------------------------------------------------------------------------------------------------------------------- -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) -void seekfree_assistant_data_analysis (void) -{ - uint8 temp_sum; - uint32 read_length; - seekfree_assistant_parameter_struct *receive_packet; - - // ʹuint32ж壬ĿΪ˱ֽ֤ڶ - uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4]; - - // Զȡ, ԶĴ䷽ʽӽջصжȡ - read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE); + // Զȡһݰ + // ԶĴ䷽ʽӽջصжȡ + read_length = seekfree_assistant_receive_callback( + debug_param_cmd_pointer, + sizeof(seekfree_assistant_debug_param_cmd_struct)); if(read_length) - { - // ȡдFIFO - fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length); + { // ȡдFIFO + fifo_write_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + read_length); } - while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo)) - { - read_length = sizeof(seekfree_assistant_parameter_struct); - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_ONLY); + while( sizeof(seekfree_assistant_debug_param_cmd_struct) + <= fifo_used(&seekfree_assistant_debug_param_fifo)) + { // FIFO һݰ ôͽн + // ֱӶһݰ + read_length = sizeof(seekfree_assistant_debug_param_cmd_struct); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_ONLY); - if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0]) - { - // û֡ͷFIFOȥһ - read_length = 1; - } - else - { - // ҵ֡ͷ - receive_packet = (seekfree_assistant_parameter_struct *)temp_buffer; - temp_sum = receive_packet->check_sum; - receive_packet->check_sum = 0; - if(temp_sum == seekfree_assistant_sum((uint8 *)temp_buffer, sizeof(seekfree_assistant_parameter_struct))) - { - // Уɹ - seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data; - seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1; + if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0] + && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2]) + { // ֱƥ֡ͷ ҹҲƥ + temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ + debug_param_cmd_obj.check_sum = 0; // հУֵ У + if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct))) + { // Уɹ + debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float; + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0]; + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + #endif + debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1; + temp_sum = 0x00; } else - { - read_length = 1; + { // Уƥ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + } + else + { // ƥ䲻֡ͷ͹ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + + if(0xFF == temp_sum) + { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ + for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++) + { // Ϊȡһ һ + if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length]) + { // ҵ¸֡ͷ˳ + break; + } } } // ʹõ - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_AND_CLEAN); } } #endif - - - diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.h index 5b7e1b5..937f784 100644 --- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,142 +24,292 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ - #include "zf_common_typedef.h" +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 , + SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 , +}seekfree_assistant_data_type_enum; -// 1ʹܲڵĹ 0رղڵĹ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 ) - - - -// FIFOС -#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) - -// ʾͨ -#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) - -// Եͨ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) - -// ͼ -#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) - -// Ƭλ͵֡ͷ -#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) - -// ͷ -#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) -#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) -#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) - -// λƬ͵֡ͷ -#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) - -// -#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) - +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ +}seekfree_assistant_ccd_resolution_enum; // ͷö typedef enum { - // ͷͺŶ - SEEKFREE_ASSISTANT_OV7725_BIN = 1, - SEEKFREE_ASSISTANT_MT9V03X, - SEEKFREE_ASSISTANT_SCC8660, - // ͼͶ - SEEKFREE_ASSISTANT_BINARY = 1, - SEEKFREE_ASSISTANT_GRAY, - SEEKFREE_ASSISTANT_RGB565, -}seekfree_assistant_image_type_enum; + SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY , + SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 , -// ͷö -typedef enum -{ - // ͷͺŶ - X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ - Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ - XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ - NO_BOUNDARY, // ͵ͼûбϢ -}seekfree_assistant_boundary_type_enum; + // ͷͺƥ䶨 + SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X , + SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 , +}seekfree_assistant_camera_type_enum; + +#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨 + +#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ +#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤ + +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС +#endif typedef struct { - uint8 head; // ֡ͷ - uint8 channel_num; // λΪ λΪͨ - uint8 check_sum; // У - uint8 length; // - float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + uint8 data_lenght_buffer[2] ; // CCD ݳ + uint8 channel_color_buffer[2] ; // ͨɫ + uint8 channel_data_max[2] ; // ֵͨ + uint8 data_type ; // ȷϴС + uint8 reserve ; // + }config; + uint16 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_ccd_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 camera_type ; // ͷ + uint8 image_width_buffer[2] ; // ͼ + uint8 image_height_buffer[2] ; // ͼ߶ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 data_type ; // ȷϴС + uint8 boundary_lenght_buffer[2] ; // ߳ + uint8 color_buffer[2] ; // ͨɫ + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_boundary_struct; + +typedef struct +{ + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 reserve ; // + uint8 x_axis_buffer[2] ; // X + uint8 y_axis_buffer[2] ; // Y + uint8 width_buffer[2] ; // ο + uint8 height_buffer[2] ; // θ߶ + uint8 color_buffer[2] ; // ɫ +}seekfree_assistant_camera_rectangular_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_max ; // ͨ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ }seekfree_assistant_oscilloscope_struct; +typedef union +{ + uint8 data_uint8[4] ; + float data_float ; +}seekfree_assistant_param_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ - uint8 length; // ȣЭ鲿֣ - uint16 image_width; // ͼ - uint16 image_height; // ͼ߶ -}seekfree_assistant_camera_struct; - - -typedef struct -{ - uint8 head; // ֡ͷ - uint8 function; // - uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽ - uint8 length; // ȣЭ鲿֣ - uint16 dot_num; // - uint8 valid_flag; // ͨʶ - uint8 reserve; // -}seekfree_assistant_camera_dot_struct; - -typedef struct -{ - void *image_addr; // ͷַ - uint16 width; // ͼ - uint16 height; // ͼ߶ - seekfree_assistant_image_type_enum camera_type; // ͷ - void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ - void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ -}seekfree_assistant_camera_buffer_struct; + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + seekfree_assistant_param_struct dat ; // һ + +}seekfree_assistant_debug_param_cmd_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 channel; // ͨ - uint8 check_sum; // У - float data; // -}seekfree_assistant_parameter_struct; + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint8_struct; + + +typedef struct +{ + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint16_struct; + +typedef struct +{ + float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; + uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; +}seekfree_assistant_debug_param_struct; typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length); typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length); -extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ -extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ - - -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope); -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height); -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3); -void seekfree_assistant_camera_send (void); -void seekfree_assistant_data_analysis (void); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ +// ز void +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, 16] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *seekfree_assistant_oscilloscope ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj); + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj); +#endif #endif diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c index d139201..23205d5 100644 --- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,23 +24,20 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_typedef.h" #include "zf_common_fifo.h" #include "zf_common_debug.h" -#include "zf_driver_uart.h" + #include "zf_device_wireless_uart.h" -#include "zf_device_ble6a20.h" -#include "zf_device_bluetooth_ch9141.h" -#include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" #include "seekfree_assistant.h" @@ -50,7 +47,6 @@ extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ - //------------------------------------------------------------------------------------------------------------------- // ַͺ // ˵ *buff Ҫ͵ݵַ @@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv // ز uint32 ʣδݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) +uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݷ͹ @@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) // ز uint32 յݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) +uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݽչ return 0; @@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) // ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ // ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) +void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) { switch(transfer_device) { case SEEKFREE_ASSISTANT_DEBUG_UART: { -#if DEBUG_UART_USE_INTERRUPT == 1 seekfree_assistant_transfer_callback = debug_send_buffer; seekfree_assistant_receive_callback = debug_read_ring_buffer; -#endif }break; - + case SEEKFREE_ASSISTANT_WIRELESS_UART: { seekfree_assistant_transfer_callback = wireless_uart_send_buffer; seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; - - case SEEKFREE_ASSISTANT_BLE6A20: - { - seekfree_assistant_transfer_callback = ble6a20_send_buffer; - seekfree_assistant_receive_callback = ble6a20_read_buffer; - }break; - case SEEKFREE_ASSISTANT_CH9141: - { - seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; - seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; - }break; - - case SEEKFREE_ASSISTANT_WIFI_UART: - { - seekfree_assistant_transfer_callback = wifi_uart_send_buffer; - seekfree_assistant_receive_callback = wifi_uart_read_buffer; - }break; - + // case SEEKFREE_ASSISTANT_CH9141: + // { + // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; + // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; + // }break; + + // case SEEKFREE_ASSISTANT_WIFI_UART: + // { + // seekfree_assistant_transfer_callback = wifi_uart_send_buffer; + // seekfree_assistant_receive_callback = wifi_uart_read_buffer; + // }break; + case SEEKFREE_ASSISTANT_WIFI_SPI: { seekfree_assistant_transfer_callback = wifi_spi_send_buffer; seekfree_assistant_receive_callback = wifi_spi_read_buffer; }break; - - case SEEKFREE_ASSISTANT_CUSTOM: - { + + default: + { // Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ - + seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + seekfree_assistant_receive_callback = seekfree_assistant_receive; }break; } } - - diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.h index 2ccfd8a..0e28f49 100644 --- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,13 +24,13 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,7 +43,6 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ SEEKFREE_ASSISTANT_WIRELESS_UART, // ת - SEEKFREE_ASSISTANT_BLE6A20, // ת SEEKFREE_ASSISTANT_CH9141, // CH9141 SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_absolute_encoder.h index 1166c84..dc091aa 100644 --- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_absolute_encoder.h +++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_absolute_encoder.h @@ -62,7 +62,7 @@ //==================================================== SPI ==================================================== #else //====================================================Ӳ SPI ==================================================== -#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI +#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI #define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI #define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK #define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI @@ -70,7 +70,7 @@ //====================================================Ӳ SPI ==================================================== #endif -#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ +#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ #define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN))) #define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ble6a20.h index 6f4544a..6af089f 100644 --- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ble6a20.h +++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ble6a20.h @@ -76,7 +76,7 @@ // 1Զ Զʵ޸ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ // Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000 -#define BLE6A20_AUTO_BAUD_RATE ( 0 ) +#define BLE6A20_AUTO_BAUD_RATE ( 1 ) #if (1 == BLE6A20_AUTO_BAUD_RATE) typedef enum diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rc.c new file mode 100644 index 0000000..68840e2 --- /dev/null +++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rc.c @@ -0,0 +1,563 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#include "math.h" +#include "zf_common_debug.h" +#include "zf_driver_delay.h" +#include "zf_driver_spi.h" +#include "zf_driver_gpio.h" +#include "zf_driver_soft_iic.h" +#include "zf_device_config.h" +#include "zf_driver_uart.h" +#include "zf_driver_exti.h" + +#include "zf_device_imu660rc.h" + +#ifndef M_PI +#define M_PI 3.1415926f +#endif + + +static uint8 imu660rc_quarternion_rate; + +float imu660rc_transition_factor[2]; +int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro () +int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ) +float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ +float imu660rc_quarternion[4]; // Ԫ + + + +#if IMU660RC_USE_SOFT_IIC +static soft_iic_info_struct imu660rc_iic_struct; + +#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data))) +#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len))) +#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg))) +#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len))) +#else +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC дĴ +// ˵ reg Ĵַ +// ˵ data +// ز void +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_write_register (uint8 reg, uint8 data) +{ + IMU660RC_CS(0); + spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data); + IMU660RC_CS(1); +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ĵ +// ˵ reg Ĵַ +// ز uint8 +// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_read_register (uint8 reg) +{ + uint8 data; + IMU660RC_CS(0); + data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R); + IMU660RC_CS(1); + return data; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC +// ˵ reg Ĵַ +// ˵ data ݻ +// ˵ len ݳ +// ز void +// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len) +{ + IMU660RC_CS(0); + spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len); + IMU660RC_CS(1); +} +#endif + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC fp16ת +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint32 fp16_to_float(uint16 h) +{ + uint16 h_exp = (h & 0x7c00u); + uint32 f_sgn = ((uint32)h & 0x8000u) << 16; + switch (h_exp) + { + case 0x0000u: // 0 or subnormal + { + uint16 h_sig = (h & 0x03ffu); + // Signed zero + if (h_sig == 0) + { + return f_sgn; + } + // Subnormal + h_sig <<= 1; + while ((h_sig & 0x0400u) == 0) + { + h_sig <<= 1; + h_exp++; + } + uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23; + uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13; + return f_sgn + f_exp + f_sig; + } + case 0x7c00u: // inf or NaN + { + // All-ones exponent and a copy of the significand + return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13); + } + default: // normalized + { + // Just need to adjust the exponent and shift + return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13); + } + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫһ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_normalize(float quat[4], uint16 *fp16) +{ + float n = 0; + float temp[4]; + + *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]); + *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]); + *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]); + *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]); + + n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3]; + n = sqrtf(n); + + if(n > 0.001f) // Խӽ0ֵ + { + n = temp[3] < 0.0f ? -n : n; + + quat[0] = temp[1] / n; + quat[1] = temp[2] / n; + quat[2] = temp[0] / n; + quat[3] = temp[3] / n; + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫתŷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw) +{ + float euler[3]; + + float sqx = quat[0] * quat[0]; + float sqy = quat[1] * quat[1]; + float sqz = quat[2] * quat[2]; + + euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx)); + euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2])); + euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz)); + + // תǶ + euler[0] = 180 * (euler[0]) / M_PI; + euler[1] = 180 * (euler[1]) / M_PI; + euler[2] = 180 * (euler[2]) / M_PI; + + // Ƕȵ + euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2]; + + *roll = euler[0]; + *pitch = euler[1]; + *yaw = euler[2]; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ÷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank) +{ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank); +} + + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Լ +// ˵ void +// ز uint8 1-Լʧ 0-Լɹ +// ʹʾ imu660rc_self_check(); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_self_check (void) +{ + uint8 dat = 0, return_state = 0; + uint16 timeout_count = 0; + do + { + if(IMU660RC_TIMEOUT_COUNT < timeout_count ++) + { + return_state = 1; + break; + } + dat = imu660rc_read_register(IMU660RC_CHIP_ID); + system_delay_ms(1); + }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû⵽豸 + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ٶȼ +// ˵ void +// ز void +// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_acc (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6); + imu660rc_acc_x = dat[0]; + imu660rc_acc_y = dat[1]; + imu660rc_acc_z = dat[2]; + } +} +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC +// ˵ void +// ز void +// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_gyro (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6); + imu660rc_gyro_x = dat[0]; + imu660rc_gyro_y = dat[1]; + imu660rc_gyro_z = dat[2]; + } +} + + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ԪݲתΪŷ +// ˵ void +// ز void +// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı +// עϢ ҪINT2Ŵжϵô˺ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_quarternion(void) +{ + uint8 i; + uint16 buff[4]; + uint8 *buff1_ptr; + int16 *buff2_ptr; + + if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate) + { + buff1_ptr = (uint8 *)buff; + + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x20); + imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31); + + for(i = 0; 8 > i; i++) + { + imu660rc_write_register(0x08, 0x4C + i); + buff1_ptr[i] = imu660rc_read_register(0x09); + } + + imu660rc_write_register(IMU660RC_PAGE_RW, 0x0); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // Ԫһ + quarternion_normalize(imu660rc_quarternion, buff); + // Ԫתŷ + quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw); + + // ȡٶٶϢ + #if(1 == IMU660RC_QUARTERNION_GET_ACC) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6); + imu660rc_acc_x = buff2_ptr[0]; + imu660rc_acc_y = buff2_ptr[1]; + imu660rc_acc_z = buff2_ptr[2]; + } + #endif + #if(1 == IMU660RC_QUARTERNION_GET_GYRO) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6); + imu660rc_gyro_x = buff2_ptr[0]; + imu660rc_gyro_y = buff2_ptr[1]; + imu660rc_gyro_z = buff2_ptr[2]; + } + #endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RCжϻصҪжڶȡԪ +// ˵ void +// ز void +// ʹʾ +// עϢ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_callback(void) +{ + imu660rc_get_quarternion(); + +} + +//------------------------------------------------------------------------------------------------------------------- +// ʼ IMU660RC +// ˵ quarternion_rate ѡԪ +// ز uint8 1-ʼʧ 0-ʼɹ +// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate) +{ + uint8 return_state = 0; + + imu660rc_quarternion_rate = quarternion_rate; + #if IMU660RC_USE_SOFT_IIC + soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿ + + #else + spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿ + gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿ + #endif + + system_delay_ms(10); + + do + { + if(imu660rc_self_check()) // IMU660RC Լ + { + // ˶Ϣ ʾλ + // ô IMU660RC Լʱ˳ + // һ½û ûܾǻ + zf_log(0, "imu660rc self check error."); + return_state = 1; + break; + } + + // λ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04); + system_delay_ms(30); + + // ÿ¹ַ + imu660rc_write_register(IMU660RC_CTRL3, 0x44); + + switch(IMU660RC_ACC_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_ACC_SAMPLE_SGN_2G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x00); + imu660rc_transition_factor[0] = 16393.44; + }break; + case IMU660RC_ACC_SAMPLE_SGN_4G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x01); + imu660rc_transition_factor[0] = 8196.72; + }break; + case IMU660RC_ACC_SAMPLE_SGN_8G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x02); + imu660rc_transition_factor[0] = 4098.36; + }break; + case IMU660RC_ACC_SAMPLE_SGN_16G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x03); + imu660rc_transition_factor[0] = 2049.18; + }break; + } + if(1 == return_state) + { + break; + } + + switch(IMU660RC_GYRO_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_125DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x00); + imu660rc_transition_factor[1] = 228.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_250DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x01); + imu660rc_transition_factor[1] = 114.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_500DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x02); + imu660rc_transition_factor[1] = 57.1428; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_1000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x03); + imu660rc_transition_factor[1] = 28.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_2000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x04); + imu660rc_transition_factor[1] = 14.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_4000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x0C); + imu660rc_transition_factor[1] = 7.14285; + }break; + } + if(1 == return_state) + { + break; + } + + // ôģʽΪ߾ģʽԼ + imu660rc_write_register(IMU660RC_CTRL1, 0x15); + imu660rc_write_register(IMU660RC_CTRL2, 0x18); + + // LPF1˲ + imu660rc_write_register(IMU660RC_CTRL7, 0x01); + + // LPF2˲ + imu660rc_write_register(IMU660RC_CTRL9, 0x08); + + // ԪӦ + if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate) + { + // жϴź + imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80); + imu660rc_write_register(IMU660RC_CTRL4, 0x08); + imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30); + + // üٶȡٶ + imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3)); + imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3)); + + // Ԫʲ + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3)); + imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x00); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // жϼ + exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING); + } + }while(0); + + return return_state; +} + + + + + + + + + + + + + diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rc.h new file mode 100644 index 0000000..dd5a9e3 --- /dev/null +++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rc.h @@ -0,0 +1,211 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#ifndef _zf_device_imu660rc_h_ +#define _zf_device_imu660rc_h_ + +#include "zf_common_typedef.h" + + +// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC +// IMU660RC_USE_SOFT_IICҪȱ벢س򣬵ƬģҪϵͨѶ +#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ + +#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ +//==================================================== IIC ==================================================== +#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ +#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL +#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA +//==================================================== IIC ==================================================== +#else + +//====================================================Ӳ SPI ==================================================== +#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI +#define IMU660RC_SPI (SPI_0) // Ӳ SPI +#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK +#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI +#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO +//====================================================Ӳ SPI ==================================================== +#endif +#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ +#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) ) +#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ + + +#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ +#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ + +typedef enum +{ + IMU660RC_MAIN_MEM_BANK = 0x00, + IMU660RC_HUB_MEM_BANK = 0x40, + IMU660RC_EMBED_MEM_BANK = 0x80, +}imu660rc_mem_bank_enum; + +typedef enum +{ + IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2) + IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G + IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G + IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G +}imu660rc_acc_sample_config; + +typedef enum +{ + IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S) + IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS + IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS + IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS + IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS + IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS +}imu660rc_gyro_sample_config; + +typedef enum +{ + IMU660RC_QUARTERNION_15HZ, // 15 Hz + IMU660RC_QUARTERNION_30HZ, // 30 Hz + IMU660RC_QUARTERNION_60HZ, // 60 Hz + IMU660RC_QUARTERNION_120HZ, // 120Hz + IMU660RC_QUARTERNION_240HZ, // 240Hz + IMU660RC_QUARTERNION_480HZ, // 480Hz + IMU660RC_QUARTERNION_DISABLE, // Ԫ +}imu660rc_quarternion_rate_config; + + +//================================================ IMU660RC ڲַ================================================ +#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ +#define IMU660RC_SPI_W ( 0x00 ) +#define IMU660RC_SPI_R ( 0x80 ) +#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ + + +//================================================ IMU660RC Ĵַ================================================ +#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 ) +#define IMU660RC_INT2_CTRL ( 0x0E ) +#define IMU660RC_CHIP_ID ( 0x0F ) +#define IMU660RC_CTRL1 ( 0x10 ) +#define IMU660RC_CTRL2 ( 0x11 ) +#define IMU660RC_CTRL3 ( 0x12 ) +#define IMU660RC_CTRL4 ( 0x13 ) +#define IMU660RC_CTRL5 ( 0x14 ) +#define IMU660RC_CTRL6 ( 0x15 ) +#define IMU660RC_CTRL7 ( 0x16 ) +#define IMU660RC_CTRL8 ( 0x17 ) +#define IMU660RC_CTRL9 ( 0x18 ) +#define IMU660RC_CTRL10 ( 0x19 ) +#define IMU660RC_CTRL_STATUS ( 0x1A ) +#define IMU660RC_STATUS_REG ( 0x1E ) +#define IMU660RC_OUT_TEMP_L ( 0x20 ) +#define IMU660RC_OUT_TEMP_H ( 0x21 ) +#define IMU660RC_OUTX_L_G ( 0x22 ) +#define IMU660RC_OUTX_H_G ( 0x23 ) +#define IMU660RC_OUTY_L_G ( 0x24 ) +#define IMU660RC_OUTY_H_G ( 0x25 ) +#define IMU660RC_OUTZ_L_G ( 0x26 ) +#define IMU660RC_OUTZ_H_G ( 0x27 ) +#define IMU660RC_OUTX_L_A ( 0x28 ) +#define IMU660RC_OUTX_H_A ( 0x29 ) +#define IMU660RC_OUTY_L_A ( 0x2A ) +#define IMU660RC_OUTY_H_A ( 0x2B ) +#define IMU660RC_OUTZ_L_A ( 0x2C ) +#define IMU660RC_OUTZ_H_A ( 0x2D ) + +#define IMU660RC_PAGE_SEL ( 0x02 ) +#define IMU660RC_EMB_FUNC_EN_A ( 0x04 ) +#define IMU660RC_PAGE_RW ( 0x17 ) +#define IMU660RC_SFLP_ODR ( 0x5E ) +#define IMU660RC_EMB_FUNC_CFG ( 0x63 ) + + + +extern float imu660rc_transition_factor[2]; +extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; // +extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ +extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ +extern float imu660rc_quarternion[4]; // Ԫ + + +void imu660rc_get_acc (void); +void imu660rc_get_gyro (void); +void imu660rc_get_quarternion (void); + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ٶȼתΪʵ +// ˵ acc_value ļٶȼ +// ز void +// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2) +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0]) + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC תΪʵ +// ˵ gyro_value +// ز void +// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1]) +void imu660rc_callback (void); +uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate); + + + +#endif diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rx.h index 45699d9..81b8b41 100644 --- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rx.h +++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_imu660rx.h @@ -97,7 +97,7 @@ //================================================ IMU660RX ȫֱ================================================ extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro () extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ) -extern float imu660ra_transition_factor[2]; +extern float imu660rx_transition_factor[2]; //================================================ IMU660RX ȫֱ================================================ diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips114.h index c56f310..9c4ac0d 100644 --- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips114.h +++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips114.h @@ -167,7 +167,7 @@ void ips114_init (void); // ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================= IPS114 չ================================================ #endif diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200.h index 850fb11..5bf4284 100644 --- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200.h +++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200.h @@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select); // ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================== IPS200 չ================================================ diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h index 98c5364..557e1d2 100644 --- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h @@ -86,7 +86,7 @@ // £SCC8660_PCLK_DIVԽͼԽ #define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1> #define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ -#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) +#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) #define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0 //================================================ SCC8660 ã֧ͫ֡ʰ汾=========================== diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.c index b51c600..b06e6a1 100644 --- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.c +++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.c @@ -24,7 +24,7 @@ * ļ zf_device_wifi_spi * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.9.20 +* ADS v1.10.2 * ƽ̨ TC264D * https://seekfree.taobao.com/ * @@ -63,6 +63,21 @@ #define SOCKET_CONNECT_TIME_OUT 50000 // λ #define OTHER_TIME_OUT 1000 // λ +#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088)) + #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088" +#endif + +#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE) + #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE" +#endif + + +#if (WIFI_SPI_TRANSFER_SIZE != 4088) + #error "WIFI_SPI_TRANSFER_SIZE must be == 4088" +#endif + + + char wifi_spi_version[12]; // ģ̼汾Ϣ char wifi_spi_mac_addr[20]; // ģMACַϢ char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ @@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void) { memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1; - return return_state; } @@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void) { memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1; - return return_state; } @@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void) { memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1; + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ȡϵͳʱ +// ˵ time_format ʱʽ +// ز *buffer ʱַַ СҪ30ֽ +// ز buffer_size С +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size) +{ + uint8 return_state = 1; + wifi_spi_packets_struct temp_packets; + uint8 send_cmd, receive_cmd; + + // ʱ30ֽ + // ģ̼V2汾 + if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2))) + { + send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0; + receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0; + + return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT); + if((0 == return_state) && (receive_cmd == temp_packets.head.command)) + { + return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2); + if(0 == return_state) + { + memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3); + buffer[temp_packets.head.length - 3] = 0; + } + } + } + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ɨȵ +// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз +// ˵ buffer_size ij +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +// עϢ ÿһаһwifi +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size) +{ + uint8 return_state; + + // ģV2汾Ĺִ̼֧˹ + if(!strncmp(wifi_spi_version, "V2", 2)) + { + return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT); + + if(0 == return_state) + { + #if (0 == WIFI_SPI_READ_TRANSFER) + wifi_spi_send_buffer(NULL, 0); + #endif + while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size)) + { + system_delay_ms(10); + } + } + } return return_state; } @@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) while(length) { - send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length; + send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length); if(wifi_spi_wait_idle(OTHER_TIME_OUT)) { @@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) return length; } +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ַͺͬ +// ˵ *string Ҫ͵ַ +// ز void +// ʹʾ wifi_spi_send_string("123"); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +void wifi_spi_send_string(const char *string) +{ + wifi_spi_send_buffer((uint8*)string, strlen(string)); +} + //------------------------------------------------------------------------------------------------------------------- // WIFI SPI ȡ // ˵ *buff ջ @@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) { zf_assert(NULL != buffer); - uint32 data_len = length; + uint32 fifo_read_length; + uint32 write_length = 0; + wifi_spi_packets_struct temp_packets; + + // жFIFOǷݣȴFIFOȡ + if(fifo_used(&wifi_spi_fifo)) + { + fifo_read_length = fifo_used(&wifi_spi_fifo); + fifo_read_length = length < fifo_read_length ? length : fifo_read_length; + fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN); + + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + } #if(1 == WIFI_SPI_READ_TRANSFER) - - wifi_spi_packets_struct temp_packets; - // WIFI SPI״̬жϻ߳ѾͨѶ򱾴βܷ if(WIFI_SPI_IDLE == wifi_spi_mutex) { - // ͨѶ״̬Ϊæ - wifi_spi_mutex = WIFI_SPI_BUSY; + wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ - // ͨѶ鿴ģǷδȡ do { - if(wifi_spi_wait_idle(OTHER_TIME_OUT)) + if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ + (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳ + ) { break; } + temp_packets.head.command = WIFI_SPI_DATA; temp_packets.head.length = 0; wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE); // յİǷ - if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) + if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) && + (temp_packets.head.length) + ) { - // յ - if(temp_packets.head.length) + if(length) + { + fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length; + memcpy(buffer, temp_packets.buffer, fifo_read_length); + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO + { + fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length); + } + } + else // ȫдFIFO { fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length); } @@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command); wifi_spi_mutex = WIFI_SPI_IDLE; } -#endif +#endif - fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN); - return data_len; + return write_length; } //------------------------------------------------------------------------------------------------------------------- @@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word) // MACַϢַʽwifi_spi_mac_addr wifi_spi_get_mac_addr(); - + if(NULL == wifi_ssid) + { + // ʼʱҪWIFI + break; + } return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word); if(return_state) { diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.h index eea8a78..e7cec39 100644 --- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.h +++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.h @@ -73,8 +73,8 @@ #if (WIFI_SPI_AUTO_CONNECT > 2) #error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]" #else -#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP -#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿ +#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP +#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666 #endif @@ -95,10 +95,15 @@ typedef enum WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ + WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI + WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾 WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ + WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1 + WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2 + WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3 // ӻش WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ @@ -110,6 +115,9 @@ typedef enum WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾 WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں + WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ + WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ + WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ WIFI_SPI_INVALID2 = 0xFF // Чݰ }wifi_spi_packets_command_enum; @@ -134,19 +142,27 @@ typedef struct uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // }wifi_spi_packets_struct; - +typedef enum +{ + WIFI_SPI_UTC_0 = 1, // ʱ + WIFI_SPI_GMT, // ʱ תΪGMTʽ׺GMT һڶԽƶ˴ģʹ + WIFI_SPI_UTC_8, // ʱ +}wifi_spi_time_enum; + extern char wifi_spi_version[12]; // ̼汾 ַ extern char wifi_spi_mac_addr[20]; // ģMACַ ַ extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ -uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); -uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); -uint8 wifi_spi_socket_disconnect (void); -uint8 wifi_spi_udp_send_now (void); -uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); -uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size); +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size); +uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); +uint8 wifi_spi_socket_disconnect (void); +uint8 wifi_spi_udp_send_now (void); +uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); +void wifi_spi_send_string (const char *string); +uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); -uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); #endif - diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.h index 0f392ff..24b88cc 100644 --- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.h +++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.h @@ -73,7 +73,7 @@ #if (WIFI_UART_AUTO_CONNECT > 3) #error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]" #else -#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP +#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP #define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_UART_LOCAL_PORT "8080" // ˿ #endif diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_driver/zf_driver_encoder.c index 8d514b7..ad4099e 100644 --- a/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_driver/zf_driver_encoder.c +++ b/Example/Coreboard_Demo/E08_eeprom_demo/libraries/zf_driver/zf_driver_encoder.c @@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n) //------------------------------------------------------------------------------------------------------------------- void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin) { -// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init + zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init IfxGpt12_enableModule(&MODULE_GPT120); IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4); diff --git a/Example/Coreboard_Demo/E08_eeprom_demo/user/isr.c b/Example/Coreboard_Demo/E08_eeprom_demo/user/isr.c index 7b5a1e9..927ed43 100644 --- a/Example/Coreboard_Demo/E08_eeprom_demo/user/isr.c +++ b/Example/Coreboard_Demo/E08_eeprom_demo/user/isr.c @@ -40,14 +40,14 @@ // 򵥵˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ // **************************** PITжϺ **************************** -IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) -{ - interrupt_global_enable(0); // жǶ - pit_clear_flag(CCU60_CH0); - - - -} +//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) +//{ +// interrupt_global_enable(0); // жǶ +// pit_clear_flag(CCU60_CH0); +// +// +// +//} IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) @@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж { exti_flag_clear(ERU_CH0_REQ0_P15_4); - + + imu660rc_callback(); // 660RC ģ INT ж } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж @@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) { exti_flag_clear(ERU_CH5_REQ1_P15_8); - } } @@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) // exti_flag_clear(ERU_CH6_REQ9_P20_0); // } // } - IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO) { interrupt_global_enable(0); // жǶ @@ -229,11 +228,12 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { interrupt_global_enable(0); // жǶ - gnss_uart_callback(); // GPSڻص + gnss_uart_callback(); // GNSSڻص } + // ͨѶж IFX_INTERRUPT(uart0_er_isr, 0, UART0_ER_INT_PRIO) { diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E09_timer_demo/libraries/doc/version.txt index 1e222a3..8ce85ca 100644 --- a/Example/Coreboard_Demo/E09_timer_demo/libraries/doc/version.txt +++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/doc/version.txt @@ -1,3 +1,13 @@ +V3.4.4 + SCC8660ʽ + ָV2 + ޸ips200ʾscc8660ͷʽ + ޸ips114ʾscc8660ͷʽ +V3.4.3 + 660RC +V3.4.2 + ޸printfضеĺ궨 + WIFI_SPI V3.4.1 ޸Ĵڷ麯еķ ޸ips200proע diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_common/zf_common_headfile.h index 27b7965..e8d6021 100644 --- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_common/zf_common_headfile.h @@ -91,6 +91,7 @@ #include "zf_device_imu660ra.h" #include "zf_device_imu660rb.h" #include "zf_device_imu660rx.h" +#include "zf_device_imu660rc.h" #include "zf_device_imu963ra.h" #include "zf_device_ips114.h" #include "zf_device_ips200.h" diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/printf_redirect.c index c44d826..299da76 100644 --- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/printf_redirect.c +++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/printf_redirect.c @@ -45,7 +45,7 @@ //------------------------------------------------------------------------------------------------------------------- int fputc(int ch, FILE *stream) { - uart_write_byte(DEBUG_UART_INDEX, (char)ch); + uart_write_byte(PRINTF_USE_UART, (char)ch); return (ch); } @@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len) int fgetc(FILE *f) { #if PRINTF_OUTPUT_TYPE == 0 - return uart_read_byte(DEBUG_UART_INDEX); + return uart_read_byte(PRINTF_USE_UART); #else uint8 buf; wifi_spi_read_buffer(&buf, 1); diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant.c index 231b20d..3e9ec74 100644 --- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,423 +24,519 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_debug.h" #include "seekfree_assistant.h" +// ͨö +typedef enum +{ + SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 , + SEEKFREE_ASSISTANT_SEND_CAMERA_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD , -extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); -extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); + SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 , -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) + SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 , +}seekfree_assistant_cmd_type_enum; + +#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ +#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ + +// ݷͺָ +extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); +seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + +// ݽպָ +extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); +seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) #include "zf_common_fifo.h" -static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO -static fifo_struct seekfree_assistant_fifo = // FIFOṹ +static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE]; +static fifo_struct seekfree_assistant_debug_param_fifo = { - .buffer = seekfree_assistant_buffer, + .buffer = seekfree_assistant_debug_param_buffer, .execution = FIFO_IDLE, .type = FIFO_DATA_8BIT, .head = 0, .end = 0, - .size = SEEKFREE_ASSISTANT_BUFFER_SIZE, - .max = SEEKFREE_ASSISTANT_BUFFER_SIZE, -}; + .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, + .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, +}; #endif -static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ -static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ -static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ - -seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ -seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ - -seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ -vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ - //------------------------------------------------------------------------------------------------------------------- // ͺ -// ˵ *buffer ҪУݵַ -// ˵ length У鳤 -// ز uint8 ֵ +// ˵ *buffer ҪУݵַ +// ˵ length У鳤 +// ز uint8 ֵ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length) +static uint8 seekfree_assistant_sum (void *buffer, uint32 length) { uint8 temp_sum = 0; + uint8 *ptr = (uint8 *)buffer; while(length--) { - temp_sum += *buffer++; + temp_sum += *ptr ++; } return temp_sum; } //------------------------------------------------------------------------------------------------------------------- -// ͼͺ -// ˵ camera_type ͷ -// ˵ *image_addr ͼ׵ַ -// ˵ boundary_num ͼа߽ -// ˵ width ͼ -// ˵ height ͼ߶ +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ // ز void -// ʹʾ +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height) +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer) { - uint32 image_size = 0; + zf_assert(NULL != ccd_obj); + zf_assert(NULL != data_buffer); - seekfree_assistant_camera_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_data.function = SEEKFREE_ASSISTANT_CAMERA_FUNCTION; - seekfree_assistant_camera_data.camera_type = (camera_type << 5) | ((image_addr != NULL ? 0 : 1) << 4) | boundary_num; - // дϢЭ鲿 - seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct); - seekfree_assistant_camera_data.image_width = width; - seekfree_assistant_camera_data.image_height = height; + memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct)); + ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD; + ccd_obj->config.channel_index = channel_index; - // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct)); - - // ͷͼͼС - switch(camera_type) + uint16 data_max = 256; + uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT; + loop_count = (2 >= loop_count) ? (loop_count) : (2); + for(uint8 i = 0; loop_count > i; i ++) { - case SEEKFREE_ASSISTANT_OV7725_BIN: - { - image_size = width * height / 8; - }break; - - case SEEKFREE_ASSISTANT_MT9V03X: - { - image_size = width * height; - }break; - - case SEEKFREE_ASSISTANT_SCC8660: - { - image_size = width * height * 2; - }break; + data_max *= 4; } - // ͼ - if(NULL != image_addr) + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF); + #else + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + ccd_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + ccd_obj->config.data_type = data_type; + } + + // ¼ʵֽ uint16 Ҫݳ + ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1)); + // Ȼ¼Ӧݻ + ccd_obj->data_buffer = data_buffer; + + // У + ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.check_sum += seekfree_assistant_sum( + &(ccd_obj->config.cmd), + sizeof(ccd_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)ccd_obj, + sizeof(ccd_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(ccd_obj->data_buffer), + ccd_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer) +{ + zf_assert(NULL != camera_obj); + + memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct)); + camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD; + camera_obj->config.camera_type = camera_type; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF); + #else + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type + && NULL != data_buffer) { - seekfree_assistant_transfer_callback(image_addr, image_size); + camera_obj->config.data_type = 0x02; + } + else + { + camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01); + } + + // RGB565 ͼ ôֽ + camera_obj->buffer_byte_size = + image_width * image_height + * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1)); + camera_obj->buffer_byte_size = + (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type) + ? (camera_obj->buffer_byte_size / 8) + : (camera_obj->buffer_byte_size); + camera_obj->data_buffer = data_buffer; + + // У + camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.check_sum += seekfree_assistant_sum( + &(camera_obj->config.cmd), + sizeof(camera_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_obj, + sizeof(camera_obj->config)); + if(NULL != camera_obj->data_buffer) + { + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_obj->data_buffer), + camera_obj->buffer_byte_size); } } //------------------------------------------------------------------------------------------------------------------- -// ͼ߻ƺ -// ˵ boundary_id ID -// ˵ dot_num -// ˵ *dot_x ׵ַ -// ˵ *dot_y ׵ַ -// ˵ width ͼ -// ˵ height ͼ߶ +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 // ز void -// ʹʾ +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer) +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer) { - uint8 i; - uint16 dot_bytes = 0; // ֽ + zf_assert(NULL != camera_boundary_obj); + zf_assert(NULL != data_buffer); - dot_bytes = seekfree_assistant_camera_dot_data.dot_num; + memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct)); + camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD; - if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5)) - { - dot_bytes *= 2; + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + camera_boundary_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + camera_boundary_obj->config.data_type = data_type; } - // ȷ֡ͷܡ߽š곤ȡ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct)); + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif - for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++) - { - // жǷͺ - if(NULL != buffer->boundary_x[i]) - { - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes); - } + camera_boundary_obj->buffer_byte_size = + boundary_lenght * 2 + * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2)); + camera_boundary_obj->data_buffer = data_buffer; - // жǷ - if(NULL != buffer->boundary_y[i]) - { - // ûݣʾÿһֻһ߽ - // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣 - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes); - } - } + // У + camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.check_sum += seekfree_assistant_sum( + &(camera_boundary_obj->config.cmd), + sizeof(camera_boundary_obj->config) - 2); } //------------------------------------------------------------------------------------------------------------------- -// ʾͺ +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_boundary_obj, + sizeof(camera_boundary_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_boundary_obj->data_buffer), + camera_boundary_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color) +{ + seekfree_assistant_camera_rectangular_struct camera_rectangular_obj; + memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct)); + camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif + + // У + camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.check_sum += seekfree_assistant_sum( + &(camera_rectangular_obj.cmd), + sizeof(camera_rectangular_obj) - 2); + + seekfree_assistant_transfer_callback( + (const uint8 *)&camera_rectangular_obj, + sizeof(camera_rectangular_obj)); +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer) +{ + zf_assert(NULL != oscilloscope_obj); + zf_assert(NULL != data_buffer); + + memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct)); + oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD; + oscilloscope_obj->config.channel_max = + (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max) + ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX) + : ((0 == channel_max) ? (1) : (channel_max)); + oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00); + oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4; + oscilloscope_obj->data_buffer = data_buffer; +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ // ˵ *seekfree_assistant_oscilloscope ʾݽṹ // ز void // ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope) +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj) { - uint8 packet_size; - - // λ - seekfree_assistant_oscilloscope->channel_num &= 0x0f; - - zf_assert(SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT >= seekfree_assistant_oscilloscope->channel_num); - - // ֡ͷ - seekfree_assistant_oscilloscope->head = SEEKFREE_ASSISTANT_SEND_HEAD; - - // дϢ - packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4; - seekfree_assistant_oscilloscope->length = packet_size; - - // д빦ͨ - seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE; - // У - seekfree_assistant_oscilloscope->check_sum = 0; - seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size); + oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + &(oscilloscope_obj->config.cmd), + sizeof(oscilloscope_obj->config) - 2); + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + (oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); - // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[] - - seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size); + seekfree_assistant_transfer_callback( + (const uint8 *)oscilloscope_obj, + sizeof(oscilloscope_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); } +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) //------------------------------------------------------------------------------------------------------------------- -// ͼϢú -// ˵ camera_type ͼ -// ˵ image_addr ͼַ NULLʾֻͱϢλ -// ˵ width ͼ -// ˵ height ͼ߶ +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ // ز void -// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H); -// עϢ +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height) +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj) { - seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION; - // дϢ - seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct); + zf_assert(NULL != debug_param_obj); - seekfree_assistant_camera_buffer.camera_type = camera_type; - seekfree_assistant_camera_buffer.image_addr = image_addr; - seekfree_assistant_camera_buffer.width = width; - seekfree_assistant_camera_buffer.height = height; -} + seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ + uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ + uint8 temp_sum = 0xFF; // Уʱ + uint32 read_length = 0; // ȡʱ -//------------------------------------------------------------------------------------------------------------------- -// ͼ߷ú -// ˵ boundary_type ߽ -// ˵ dot_num һ߽жٸ -// ˵ dot_x1 ű1ĵַ NULLʾͱ1 -// ˵ dot_x2 ű2ĵַ NULLʾͱ2 -// ˵ dot_x3 ű3ĵַ NULLʾͱ3 -// ˵ dot_y1 ű1ĵַ NULLʾͱ1 -// ˵ dot_y2 ű2ĵַ NULLʾͱ2 -// ˵ dot_y3 ű3ĵַ NULLʾͱ3 -// ز void -// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк -// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ -// ʹʾ seekfree_assistant_camera_config(XY_BOUNDARY, 160, xy_x1_boundary, xy_x2_boundary, xy_x3_boundary, xy_y1_boundary, xy_y2_boundary, xy_y3_boundary); // ͼʱߣ߰ -// עϢ -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3) -{ - uint8 i = 0; - uint8 boundary_num = 0; - uint8 boundary_data_type = 0; - - // ͼͻǷ׼, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_dot_data.dot_num = dot_num; - seekfree_assistant_camera_dot_data.valid_flag = 0; - for(i = 0; i < 3; i++) - { - seekfree_assistant_camera_buffer.boundary_x[i] = NULL; - seekfree_assistant_camera_buffer.boundary_y[i] = NULL; - } - - switch(boundary_type) - { - case X_BOUNDARY: - { - if(NULL != dot_x1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x1; - } - if(NULL != dot_x2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x2; - } - if(NULL != dot_x3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x3; - } - - if(255 < seekfree_assistant_camera_buffer.height) - { - boundary_data_type = 1; - } - }break; - - case Y_BOUNDARY: - { - if(NULL != dot_y1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if(NULL != dot_y2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if(NULL != dot_y3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if(255 < seekfree_assistant_camera_buffer.width) - { - boundary_data_type = 1; - } - }break; - - case XY_BOUNDARY: - { - if((NULL != dot_x1) && (NULL != dot_y1)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if((NULL != dot_x2) && (NULL != dot_y2)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if((NULL != dot_x3) && (NULL != dot_y3)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x3; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if((255 < seekfree_assistant_camera_buffer.width) || (255 < seekfree_assistant_camera_buffer.height)) - { - boundary_data_type = 1; - } - }break; - - case NO_BOUNDARY:break; - } - - seekfree_assistant_camera_dot_data.dot_type = (boundary_type << 6) | (boundary_data_type << 5) | boundary_num; -} - -//------------------------------------------------------------------------------------------------------------------- -// ַͷͼ -// ˵ void -// ز void -// ʹʾ -// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_send (void) -{ - // ͼͻǷ׼ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_data_send(seekfree_assistant_camera_buffer.camera_type, seekfree_assistant_camera_buffer.image_addr, seekfree_assistant_camera_dot_data.dot_type & 0x0f, seekfree_assistant_camera_buffer.width, seekfree_assistant_camera_buffer.height); - - if(seekfree_assistant_camera_dot_data.dot_type & 0x0f) - { - seekfree_assistant_camera_dot_send(&seekfree_assistant_camera_buffer); - } -} - - -//------------------------------------------------------------------------------------------------------------------- -// ֽյ -// ˵ void -// ز void -// ʹʾ ֻҪŵеPITжϻѭ -//------------------------------------------------------------------------------------------------------------------- -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) -void seekfree_assistant_data_analysis (void) -{ - uint8 temp_sum; - uint32 read_length; - seekfree_assistant_parameter_struct *receive_packet; - - // ʹuint32ж壬ĿΪ˱ֽ֤ڶ - uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4]; - - // Զȡ, ԶĴ䷽ʽӽջصжȡ - read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE); + // Զȡһݰ + // ԶĴ䷽ʽӽջصжȡ + read_length = seekfree_assistant_receive_callback( + debug_param_cmd_pointer, + sizeof(seekfree_assistant_debug_param_cmd_struct)); if(read_length) - { - // ȡдFIFO - fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length); + { // ȡдFIFO + fifo_write_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + read_length); } - while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo)) - { - read_length = sizeof(seekfree_assistant_parameter_struct); - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_ONLY); + while( sizeof(seekfree_assistant_debug_param_cmd_struct) + <= fifo_used(&seekfree_assistant_debug_param_fifo)) + { // FIFO һݰ ôͽн + // ֱӶһݰ + read_length = sizeof(seekfree_assistant_debug_param_cmd_struct); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_ONLY); - if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0]) - { - // û֡ͷFIFOȥһ - read_length = 1; - } - else - { - // ҵ֡ͷ - receive_packet = (seekfree_assistant_parameter_struct *)temp_buffer; - temp_sum = receive_packet->check_sum; - receive_packet->check_sum = 0; - if(temp_sum == seekfree_assistant_sum((uint8 *)temp_buffer, sizeof(seekfree_assistant_parameter_struct))) - { - // Уɹ - seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data; - seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1; + if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0] + && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2]) + { // ֱƥ֡ͷ ҹҲƥ + temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ + debug_param_cmd_obj.check_sum = 0; // հУֵ У + if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct))) + { // Уɹ + debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float; + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0]; + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + #endif + debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1; + temp_sum = 0x00; } else - { - read_length = 1; + { // Уƥ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + } + else + { // ƥ䲻֡ͷ͹ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + + if(0xFF == temp_sum) + { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ + for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++) + { // Ϊȡһ һ + if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length]) + { // ҵ¸֡ͷ˳ + break; + } } } // ʹõ - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_AND_CLEAN); } } #endif - - - diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant.h index 5b7e1b5..937f784 100644 --- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,142 +24,292 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ - #include "zf_common_typedef.h" +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 , + SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 , +}seekfree_assistant_data_type_enum; -// 1ʹܲڵĹ 0رղڵĹ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 ) - - - -// FIFOС -#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) - -// ʾͨ -#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) - -// Եͨ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) - -// ͼ -#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) - -// Ƭλ͵֡ͷ -#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) - -// ͷ -#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) -#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) -#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) - -// λƬ͵֡ͷ -#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) - -// -#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) - +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ +}seekfree_assistant_ccd_resolution_enum; // ͷö typedef enum { - // ͷͺŶ - SEEKFREE_ASSISTANT_OV7725_BIN = 1, - SEEKFREE_ASSISTANT_MT9V03X, - SEEKFREE_ASSISTANT_SCC8660, - // ͼͶ - SEEKFREE_ASSISTANT_BINARY = 1, - SEEKFREE_ASSISTANT_GRAY, - SEEKFREE_ASSISTANT_RGB565, -}seekfree_assistant_image_type_enum; + SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY , + SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 , -// ͷö -typedef enum -{ - // ͷͺŶ - X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ - Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ - XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ - NO_BOUNDARY, // ͵ͼûбϢ -}seekfree_assistant_boundary_type_enum; + // ͷͺƥ䶨 + SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X , + SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 , +}seekfree_assistant_camera_type_enum; + +#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨 + +#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ +#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤ + +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС +#endif typedef struct { - uint8 head; // ֡ͷ - uint8 channel_num; // λΪ λΪͨ - uint8 check_sum; // У - uint8 length; // - float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + uint8 data_lenght_buffer[2] ; // CCD ݳ + uint8 channel_color_buffer[2] ; // ͨɫ + uint8 channel_data_max[2] ; // ֵͨ + uint8 data_type ; // ȷϴС + uint8 reserve ; // + }config; + uint16 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_ccd_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 camera_type ; // ͷ + uint8 image_width_buffer[2] ; // ͼ + uint8 image_height_buffer[2] ; // ͼ߶ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 data_type ; // ȷϴС + uint8 boundary_lenght_buffer[2] ; // ߳ + uint8 color_buffer[2] ; // ͨɫ + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_boundary_struct; + +typedef struct +{ + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 reserve ; // + uint8 x_axis_buffer[2] ; // X + uint8 y_axis_buffer[2] ; // Y + uint8 width_buffer[2] ; // ο + uint8 height_buffer[2] ; // θ߶ + uint8 color_buffer[2] ; // ɫ +}seekfree_assistant_camera_rectangular_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_max ; // ͨ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ }seekfree_assistant_oscilloscope_struct; +typedef union +{ + uint8 data_uint8[4] ; + float data_float ; +}seekfree_assistant_param_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ - uint8 length; // ȣЭ鲿֣ - uint16 image_width; // ͼ - uint16 image_height; // ͼ߶ -}seekfree_assistant_camera_struct; - - -typedef struct -{ - uint8 head; // ֡ͷ - uint8 function; // - uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽ - uint8 length; // ȣЭ鲿֣ - uint16 dot_num; // - uint8 valid_flag; // ͨʶ - uint8 reserve; // -}seekfree_assistant_camera_dot_struct; - -typedef struct -{ - void *image_addr; // ͷַ - uint16 width; // ͼ - uint16 height; // ͼ߶ - seekfree_assistant_image_type_enum camera_type; // ͷ - void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ - void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ -}seekfree_assistant_camera_buffer_struct; + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + seekfree_assistant_param_struct dat ; // һ + +}seekfree_assistant_debug_param_cmd_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 channel; // ͨ - uint8 check_sum; // У - float data; // -}seekfree_assistant_parameter_struct; + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint8_struct; + + +typedef struct +{ + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint16_struct; + +typedef struct +{ + float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; + uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; +}seekfree_assistant_debug_param_struct; typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length); typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length); -extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ -extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ - - -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope); -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height); -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3); -void seekfree_assistant_camera_send (void); -void seekfree_assistant_data_analysis (void); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ +// ز void +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, 16] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *seekfree_assistant_oscilloscope ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj); + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj); +#endif #endif diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c index d139201..23205d5 100644 --- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,23 +24,20 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_typedef.h" #include "zf_common_fifo.h" #include "zf_common_debug.h" -#include "zf_driver_uart.h" + #include "zf_device_wireless_uart.h" -#include "zf_device_ble6a20.h" -#include "zf_device_bluetooth_ch9141.h" -#include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" #include "seekfree_assistant.h" @@ -50,7 +47,6 @@ extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ - //------------------------------------------------------------------------------------------------------------------- // ַͺ // ˵ *buff Ҫ͵ݵַ @@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv // ز uint32 ʣδݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) +uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݷ͹ @@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) // ز uint32 յݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) +uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݽչ return 0; @@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) // ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ // ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) +void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) { switch(transfer_device) { case SEEKFREE_ASSISTANT_DEBUG_UART: { -#if DEBUG_UART_USE_INTERRUPT == 1 seekfree_assistant_transfer_callback = debug_send_buffer; seekfree_assistant_receive_callback = debug_read_ring_buffer; -#endif }break; - + case SEEKFREE_ASSISTANT_WIRELESS_UART: { seekfree_assistant_transfer_callback = wireless_uart_send_buffer; seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; - - case SEEKFREE_ASSISTANT_BLE6A20: - { - seekfree_assistant_transfer_callback = ble6a20_send_buffer; - seekfree_assistant_receive_callback = ble6a20_read_buffer; - }break; - case SEEKFREE_ASSISTANT_CH9141: - { - seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; - seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; - }break; - - case SEEKFREE_ASSISTANT_WIFI_UART: - { - seekfree_assistant_transfer_callback = wifi_uart_send_buffer; - seekfree_assistant_receive_callback = wifi_uart_read_buffer; - }break; - + // case SEEKFREE_ASSISTANT_CH9141: + // { + // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; + // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; + // }break; + + // case SEEKFREE_ASSISTANT_WIFI_UART: + // { + // seekfree_assistant_transfer_callback = wifi_uart_send_buffer; + // seekfree_assistant_receive_callback = wifi_uart_read_buffer; + // }break; + case SEEKFREE_ASSISTANT_WIFI_SPI: { seekfree_assistant_transfer_callback = wifi_spi_send_buffer; seekfree_assistant_receive_callback = wifi_spi_read_buffer; }break; - - case SEEKFREE_ASSISTANT_CUSTOM: - { + + default: + { // Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ - + seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + seekfree_assistant_receive_callback = seekfree_assistant_receive; }break; } } - - diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.h index 2ccfd8a..0e28f49 100644 --- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,13 +24,13 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,7 +43,6 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ SEEKFREE_ASSISTANT_WIRELESS_UART, // ת - SEEKFREE_ASSISTANT_BLE6A20, // ת SEEKFREE_ASSISTANT_CH9141, // CH9141 SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_absolute_encoder.h index 1166c84..dc091aa 100644 --- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_absolute_encoder.h +++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_absolute_encoder.h @@ -62,7 +62,7 @@ //==================================================== SPI ==================================================== #else //====================================================Ӳ SPI ==================================================== -#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI +#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI #define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI #define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK #define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI @@ -70,7 +70,7 @@ //====================================================Ӳ SPI ==================================================== #endif -#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ +#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ #define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN))) #define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ble6a20.h index 6f4544a..6af089f 100644 --- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ble6a20.h +++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ble6a20.h @@ -76,7 +76,7 @@ // 1Զ Զʵ޸ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ // Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000 -#define BLE6A20_AUTO_BAUD_RATE ( 0 ) +#define BLE6A20_AUTO_BAUD_RATE ( 1 ) #if (1 == BLE6A20_AUTO_BAUD_RATE) typedef enum diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rc.c new file mode 100644 index 0000000..68840e2 --- /dev/null +++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rc.c @@ -0,0 +1,563 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#include "math.h" +#include "zf_common_debug.h" +#include "zf_driver_delay.h" +#include "zf_driver_spi.h" +#include "zf_driver_gpio.h" +#include "zf_driver_soft_iic.h" +#include "zf_device_config.h" +#include "zf_driver_uart.h" +#include "zf_driver_exti.h" + +#include "zf_device_imu660rc.h" + +#ifndef M_PI +#define M_PI 3.1415926f +#endif + + +static uint8 imu660rc_quarternion_rate; + +float imu660rc_transition_factor[2]; +int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro () +int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ) +float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ +float imu660rc_quarternion[4]; // Ԫ + + + +#if IMU660RC_USE_SOFT_IIC +static soft_iic_info_struct imu660rc_iic_struct; + +#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data))) +#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len))) +#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg))) +#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len))) +#else +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC дĴ +// ˵ reg Ĵַ +// ˵ data +// ز void +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_write_register (uint8 reg, uint8 data) +{ + IMU660RC_CS(0); + spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data); + IMU660RC_CS(1); +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ĵ +// ˵ reg Ĵַ +// ز uint8 +// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_read_register (uint8 reg) +{ + uint8 data; + IMU660RC_CS(0); + data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R); + IMU660RC_CS(1); + return data; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC +// ˵ reg Ĵַ +// ˵ data ݻ +// ˵ len ݳ +// ز void +// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len) +{ + IMU660RC_CS(0); + spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len); + IMU660RC_CS(1); +} +#endif + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC fp16ת +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint32 fp16_to_float(uint16 h) +{ + uint16 h_exp = (h & 0x7c00u); + uint32 f_sgn = ((uint32)h & 0x8000u) << 16; + switch (h_exp) + { + case 0x0000u: // 0 or subnormal + { + uint16 h_sig = (h & 0x03ffu); + // Signed zero + if (h_sig == 0) + { + return f_sgn; + } + // Subnormal + h_sig <<= 1; + while ((h_sig & 0x0400u) == 0) + { + h_sig <<= 1; + h_exp++; + } + uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23; + uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13; + return f_sgn + f_exp + f_sig; + } + case 0x7c00u: // inf or NaN + { + // All-ones exponent and a copy of the significand + return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13); + } + default: // normalized + { + // Just need to adjust the exponent and shift + return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13); + } + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫһ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_normalize(float quat[4], uint16 *fp16) +{ + float n = 0; + float temp[4]; + + *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]); + *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]); + *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]); + *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]); + + n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3]; + n = sqrtf(n); + + if(n > 0.001f) // Խӽ0ֵ + { + n = temp[3] < 0.0f ? -n : n; + + quat[0] = temp[1] / n; + quat[1] = temp[2] / n; + quat[2] = temp[0] / n; + quat[3] = temp[3] / n; + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫתŷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw) +{ + float euler[3]; + + float sqx = quat[0] * quat[0]; + float sqy = quat[1] * quat[1]; + float sqz = quat[2] * quat[2]; + + euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx)); + euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2])); + euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz)); + + // תǶ + euler[0] = 180 * (euler[0]) / M_PI; + euler[1] = 180 * (euler[1]) / M_PI; + euler[2] = 180 * (euler[2]) / M_PI; + + // Ƕȵ + euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2]; + + *roll = euler[0]; + *pitch = euler[1]; + *yaw = euler[2]; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ÷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank) +{ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank); +} + + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Լ +// ˵ void +// ز uint8 1-Լʧ 0-Լɹ +// ʹʾ imu660rc_self_check(); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_self_check (void) +{ + uint8 dat = 0, return_state = 0; + uint16 timeout_count = 0; + do + { + if(IMU660RC_TIMEOUT_COUNT < timeout_count ++) + { + return_state = 1; + break; + } + dat = imu660rc_read_register(IMU660RC_CHIP_ID); + system_delay_ms(1); + }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû⵽豸 + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ٶȼ +// ˵ void +// ز void +// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_acc (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6); + imu660rc_acc_x = dat[0]; + imu660rc_acc_y = dat[1]; + imu660rc_acc_z = dat[2]; + } +} +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC +// ˵ void +// ز void +// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_gyro (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6); + imu660rc_gyro_x = dat[0]; + imu660rc_gyro_y = dat[1]; + imu660rc_gyro_z = dat[2]; + } +} + + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ԪݲתΪŷ +// ˵ void +// ز void +// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı +// עϢ ҪINT2Ŵжϵô˺ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_quarternion(void) +{ + uint8 i; + uint16 buff[4]; + uint8 *buff1_ptr; + int16 *buff2_ptr; + + if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate) + { + buff1_ptr = (uint8 *)buff; + + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x20); + imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31); + + for(i = 0; 8 > i; i++) + { + imu660rc_write_register(0x08, 0x4C + i); + buff1_ptr[i] = imu660rc_read_register(0x09); + } + + imu660rc_write_register(IMU660RC_PAGE_RW, 0x0); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // Ԫһ + quarternion_normalize(imu660rc_quarternion, buff); + // Ԫתŷ + quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw); + + // ȡٶٶϢ + #if(1 == IMU660RC_QUARTERNION_GET_ACC) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6); + imu660rc_acc_x = buff2_ptr[0]; + imu660rc_acc_y = buff2_ptr[1]; + imu660rc_acc_z = buff2_ptr[2]; + } + #endif + #if(1 == IMU660RC_QUARTERNION_GET_GYRO) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6); + imu660rc_gyro_x = buff2_ptr[0]; + imu660rc_gyro_y = buff2_ptr[1]; + imu660rc_gyro_z = buff2_ptr[2]; + } + #endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RCжϻصҪжڶȡԪ +// ˵ void +// ز void +// ʹʾ +// עϢ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_callback(void) +{ + imu660rc_get_quarternion(); + +} + +//------------------------------------------------------------------------------------------------------------------- +// ʼ IMU660RC +// ˵ quarternion_rate ѡԪ +// ز uint8 1-ʼʧ 0-ʼɹ +// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate) +{ + uint8 return_state = 0; + + imu660rc_quarternion_rate = quarternion_rate; + #if IMU660RC_USE_SOFT_IIC + soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿ + + #else + spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿ + gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿ + #endif + + system_delay_ms(10); + + do + { + if(imu660rc_self_check()) // IMU660RC Լ + { + // ˶Ϣ ʾλ + // ô IMU660RC Լʱ˳ + // һ½û ûܾǻ + zf_log(0, "imu660rc self check error."); + return_state = 1; + break; + } + + // λ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04); + system_delay_ms(30); + + // ÿ¹ַ + imu660rc_write_register(IMU660RC_CTRL3, 0x44); + + switch(IMU660RC_ACC_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_ACC_SAMPLE_SGN_2G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x00); + imu660rc_transition_factor[0] = 16393.44; + }break; + case IMU660RC_ACC_SAMPLE_SGN_4G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x01); + imu660rc_transition_factor[0] = 8196.72; + }break; + case IMU660RC_ACC_SAMPLE_SGN_8G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x02); + imu660rc_transition_factor[0] = 4098.36; + }break; + case IMU660RC_ACC_SAMPLE_SGN_16G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x03); + imu660rc_transition_factor[0] = 2049.18; + }break; + } + if(1 == return_state) + { + break; + } + + switch(IMU660RC_GYRO_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_125DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x00); + imu660rc_transition_factor[1] = 228.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_250DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x01); + imu660rc_transition_factor[1] = 114.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_500DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x02); + imu660rc_transition_factor[1] = 57.1428; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_1000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x03); + imu660rc_transition_factor[1] = 28.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_2000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x04); + imu660rc_transition_factor[1] = 14.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_4000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x0C); + imu660rc_transition_factor[1] = 7.14285; + }break; + } + if(1 == return_state) + { + break; + } + + // ôģʽΪ߾ģʽԼ + imu660rc_write_register(IMU660RC_CTRL1, 0x15); + imu660rc_write_register(IMU660RC_CTRL2, 0x18); + + // LPF1˲ + imu660rc_write_register(IMU660RC_CTRL7, 0x01); + + // LPF2˲ + imu660rc_write_register(IMU660RC_CTRL9, 0x08); + + // ԪӦ + if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate) + { + // жϴź + imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80); + imu660rc_write_register(IMU660RC_CTRL4, 0x08); + imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30); + + // üٶȡٶ + imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3)); + imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3)); + + // Ԫʲ + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3)); + imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x00); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // жϼ + exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING); + } + }while(0); + + return return_state; +} + + + + + + + + + + + + + diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rc.h new file mode 100644 index 0000000..dd5a9e3 --- /dev/null +++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rc.h @@ -0,0 +1,211 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#ifndef _zf_device_imu660rc_h_ +#define _zf_device_imu660rc_h_ + +#include "zf_common_typedef.h" + + +// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC +// IMU660RC_USE_SOFT_IICҪȱ벢س򣬵ƬģҪϵͨѶ +#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ + +#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ +//==================================================== IIC ==================================================== +#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ +#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL +#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA +//==================================================== IIC ==================================================== +#else + +//====================================================Ӳ SPI ==================================================== +#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI +#define IMU660RC_SPI (SPI_0) // Ӳ SPI +#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK +#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI +#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO +//====================================================Ӳ SPI ==================================================== +#endif +#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ +#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) ) +#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ + + +#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ +#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ + +typedef enum +{ + IMU660RC_MAIN_MEM_BANK = 0x00, + IMU660RC_HUB_MEM_BANK = 0x40, + IMU660RC_EMBED_MEM_BANK = 0x80, +}imu660rc_mem_bank_enum; + +typedef enum +{ + IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2) + IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G + IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G + IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G +}imu660rc_acc_sample_config; + +typedef enum +{ + IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S) + IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS + IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS + IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS + IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS + IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS +}imu660rc_gyro_sample_config; + +typedef enum +{ + IMU660RC_QUARTERNION_15HZ, // 15 Hz + IMU660RC_QUARTERNION_30HZ, // 30 Hz + IMU660RC_QUARTERNION_60HZ, // 60 Hz + IMU660RC_QUARTERNION_120HZ, // 120Hz + IMU660RC_QUARTERNION_240HZ, // 240Hz + IMU660RC_QUARTERNION_480HZ, // 480Hz + IMU660RC_QUARTERNION_DISABLE, // Ԫ +}imu660rc_quarternion_rate_config; + + +//================================================ IMU660RC ڲַ================================================ +#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ +#define IMU660RC_SPI_W ( 0x00 ) +#define IMU660RC_SPI_R ( 0x80 ) +#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ + + +//================================================ IMU660RC Ĵַ================================================ +#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 ) +#define IMU660RC_INT2_CTRL ( 0x0E ) +#define IMU660RC_CHIP_ID ( 0x0F ) +#define IMU660RC_CTRL1 ( 0x10 ) +#define IMU660RC_CTRL2 ( 0x11 ) +#define IMU660RC_CTRL3 ( 0x12 ) +#define IMU660RC_CTRL4 ( 0x13 ) +#define IMU660RC_CTRL5 ( 0x14 ) +#define IMU660RC_CTRL6 ( 0x15 ) +#define IMU660RC_CTRL7 ( 0x16 ) +#define IMU660RC_CTRL8 ( 0x17 ) +#define IMU660RC_CTRL9 ( 0x18 ) +#define IMU660RC_CTRL10 ( 0x19 ) +#define IMU660RC_CTRL_STATUS ( 0x1A ) +#define IMU660RC_STATUS_REG ( 0x1E ) +#define IMU660RC_OUT_TEMP_L ( 0x20 ) +#define IMU660RC_OUT_TEMP_H ( 0x21 ) +#define IMU660RC_OUTX_L_G ( 0x22 ) +#define IMU660RC_OUTX_H_G ( 0x23 ) +#define IMU660RC_OUTY_L_G ( 0x24 ) +#define IMU660RC_OUTY_H_G ( 0x25 ) +#define IMU660RC_OUTZ_L_G ( 0x26 ) +#define IMU660RC_OUTZ_H_G ( 0x27 ) +#define IMU660RC_OUTX_L_A ( 0x28 ) +#define IMU660RC_OUTX_H_A ( 0x29 ) +#define IMU660RC_OUTY_L_A ( 0x2A ) +#define IMU660RC_OUTY_H_A ( 0x2B ) +#define IMU660RC_OUTZ_L_A ( 0x2C ) +#define IMU660RC_OUTZ_H_A ( 0x2D ) + +#define IMU660RC_PAGE_SEL ( 0x02 ) +#define IMU660RC_EMB_FUNC_EN_A ( 0x04 ) +#define IMU660RC_PAGE_RW ( 0x17 ) +#define IMU660RC_SFLP_ODR ( 0x5E ) +#define IMU660RC_EMB_FUNC_CFG ( 0x63 ) + + + +extern float imu660rc_transition_factor[2]; +extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; // +extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ +extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ +extern float imu660rc_quarternion[4]; // Ԫ + + +void imu660rc_get_acc (void); +void imu660rc_get_gyro (void); +void imu660rc_get_quarternion (void); + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ٶȼתΪʵ +// ˵ acc_value ļٶȼ +// ز void +// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2) +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0]) + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC תΪʵ +// ˵ gyro_value +// ز void +// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1]) +void imu660rc_callback (void); +uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate); + + + +#endif diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rx.h index 45699d9..81b8b41 100644 --- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rx.h +++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_imu660rx.h @@ -97,7 +97,7 @@ //================================================ IMU660RX ȫֱ================================================ extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro () extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ) -extern float imu660ra_transition_factor[2]; +extern float imu660rx_transition_factor[2]; //================================================ IMU660RX ȫֱ================================================ diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips114.h index c56f310..9c4ac0d 100644 --- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips114.h +++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips114.h @@ -167,7 +167,7 @@ void ips114_init (void); // ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================= IPS114 չ================================================ #endif diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200.h index 850fb11..5bf4284 100644 --- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200.h +++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200.h @@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select); // ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================== IPS200 չ================================================ diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h index 98c5364..557e1d2 100644 --- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h @@ -86,7 +86,7 @@ // £SCC8660_PCLK_DIVԽͼԽ #define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1> #define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ -#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) +#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) #define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0 //================================================ SCC8660 ã֧ͫ֡ʰ汾=========================== diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.c index b51c600..b06e6a1 100644 --- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.c +++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.c @@ -24,7 +24,7 @@ * ļ zf_device_wifi_spi * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.9.20 +* ADS v1.10.2 * ƽ̨ TC264D * https://seekfree.taobao.com/ * @@ -63,6 +63,21 @@ #define SOCKET_CONNECT_TIME_OUT 50000 // λ #define OTHER_TIME_OUT 1000 // λ +#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088)) + #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088" +#endif + +#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE) + #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE" +#endif + + +#if (WIFI_SPI_TRANSFER_SIZE != 4088) + #error "WIFI_SPI_TRANSFER_SIZE must be == 4088" +#endif + + + char wifi_spi_version[12]; // ģ̼汾Ϣ char wifi_spi_mac_addr[20]; // ģMACַϢ char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ @@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void) { memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1; - return return_state; } @@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void) { memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1; - return return_state; } @@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void) { memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1; + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ȡϵͳʱ +// ˵ time_format ʱʽ +// ز *buffer ʱַַ СҪ30ֽ +// ز buffer_size С +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size) +{ + uint8 return_state = 1; + wifi_spi_packets_struct temp_packets; + uint8 send_cmd, receive_cmd; + + // ʱ30ֽ + // ģ̼V2汾 + if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2))) + { + send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0; + receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0; + + return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT); + if((0 == return_state) && (receive_cmd == temp_packets.head.command)) + { + return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2); + if(0 == return_state) + { + memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3); + buffer[temp_packets.head.length - 3] = 0; + } + } + } + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ɨȵ +// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз +// ˵ buffer_size ij +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +// עϢ ÿһаһwifi +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size) +{ + uint8 return_state; + + // ģV2汾Ĺִ̼֧˹ + if(!strncmp(wifi_spi_version, "V2", 2)) + { + return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT); + + if(0 == return_state) + { + #if (0 == WIFI_SPI_READ_TRANSFER) + wifi_spi_send_buffer(NULL, 0); + #endif + while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size)) + { + system_delay_ms(10); + } + } + } return return_state; } @@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) while(length) { - send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length; + send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length); if(wifi_spi_wait_idle(OTHER_TIME_OUT)) { @@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) return length; } +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ַͺͬ +// ˵ *string Ҫ͵ַ +// ز void +// ʹʾ wifi_spi_send_string("123"); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +void wifi_spi_send_string(const char *string) +{ + wifi_spi_send_buffer((uint8*)string, strlen(string)); +} + //------------------------------------------------------------------------------------------------------------------- // WIFI SPI ȡ // ˵ *buff ջ @@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) { zf_assert(NULL != buffer); - uint32 data_len = length; + uint32 fifo_read_length; + uint32 write_length = 0; + wifi_spi_packets_struct temp_packets; + + // жFIFOǷݣȴFIFOȡ + if(fifo_used(&wifi_spi_fifo)) + { + fifo_read_length = fifo_used(&wifi_spi_fifo); + fifo_read_length = length < fifo_read_length ? length : fifo_read_length; + fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN); + + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + } #if(1 == WIFI_SPI_READ_TRANSFER) - - wifi_spi_packets_struct temp_packets; - // WIFI SPI״̬жϻ߳ѾͨѶ򱾴βܷ if(WIFI_SPI_IDLE == wifi_spi_mutex) { - // ͨѶ״̬Ϊæ - wifi_spi_mutex = WIFI_SPI_BUSY; + wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ - // ͨѶ鿴ģǷδȡ do { - if(wifi_spi_wait_idle(OTHER_TIME_OUT)) + if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ + (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳ + ) { break; } + temp_packets.head.command = WIFI_SPI_DATA; temp_packets.head.length = 0; wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE); // յİǷ - if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) + if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) && + (temp_packets.head.length) + ) { - // յ - if(temp_packets.head.length) + if(length) + { + fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length; + memcpy(buffer, temp_packets.buffer, fifo_read_length); + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO + { + fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length); + } + } + else // ȫдFIFO { fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length); } @@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command); wifi_spi_mutex = WIFI_SPI_IDLE; } -#endif +#endif - fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN); - return data_len; + return write_length; } //------------------------------------------------------------------------------------------------------------------- @@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word) // MACַϢַʽwifi_spi_mac_addr wifi_spi_get_mac_addr(); - + if(NULL == wifi_ssid) + { + // ʼʱҪWIFI + break; + } return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word); if(return_state) { diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.h index eea8a78..e7cec39 100644 --- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.h +++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.h @@ -73,8 +73,8 @@ #if (WIFI_SPI_AUTO_CONNECT > 2) #error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]" #else -#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP -#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿ +#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP +#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666 #endif @@ -95,10 +95,15 @@ typedef enum WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ + WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI + WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾 WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ + WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1 + WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2 + WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3 // ӻش WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ @@ -110,6 +115,9 @@ typedef enum WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾 WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں + WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ + WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ + WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ WIFI_SPI_INVALID2 = 0xFF // Чݰ }wifi_spi_packets_command_enum; @@ -134,19 +142,27 @@ typedef struct uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // }wifi_spi_packets_struct; - +typedef enum +{ + WIFI_SPI_UTC_0 = 1, // ʱ + WIFI_SPI_GMT, // ʱ תΪGMTʽ׺GMT һڶԽƶ˴ģʹ + WIFI_SPI_UTC_8, // ʱ +}wifi_spi_time_enum; + extern char wifi_spi_version[12]; // ̼汾 ַ extern char wifi_spi_mac_addr[20]; // ģMACַ ַ extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ -uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); -uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); -uint8 wifi_spi_socket_disconnect (void); -uint8 wifi_spi_udp_send_now (void); -uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); -uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size); +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size); +uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); +uint8 wifi_spi_socket_disconnect (void); +uint8 wifi_spi_udp_send_now (void); +uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); +void wifi_spi_send_string (const char *string); +uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); -uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); #endif - diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.h index 0f392ff..24b88cc 100644 --- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.h +++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.h @@ -73,7 +73,7 @@ #if (WIFI_UART_AUTO_CONNECT > 3) #error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]" #else -#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP +#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP #define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_UART_LOCAL_PORT "8080" // ˿ #endif diff --git a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_driver/zf_driver_encoder.c index 8d514b7..ad4099e 100644 --- a/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_driver/zf_driver_encoder.c +++ b/Example/Coreboard_Demo/E09_timer_demo/libraries/zf_driver/zf_driver_encoder.c @@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n) //------------------------------------------------------------------------------------------------------------------- void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin) { -// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init + zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init IfxGpt12_enableModule(&MODULE_GPT120); IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4); diff --git a/Example/Coreboard_Demo/E09_timer_demo/user/isr.c b/Example/Coreboard_Demo/E09_timer_demo/user/isr.c index e19382e..927ed43 100644 --- a/Example/Coreboard_Demo/E09_timer_demo/user/isr.c +++ b/Example/Coreboard_Demo/E09_timer_demo/user/isr.c @@ -40,14 +40,14 @@ // 򵥵˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ // **************************** PITжϺ **************************** -IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) -{ - interrupt_global_enable(0); // жǶ - pit_clear_flag(CCU60_CH0); - - - -} +//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) +//{ +// interrupt_global_enable(0); // жǶ +// pit_clear_flag(CCU60_CH0); +// +// +// +//} IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) @@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж { exti_flag_clear(ERU_CH0_REQ0_P15_4); - + + imu660rc_callback(); // 660RC ģ INT ж } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж @@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) { exti_flag_clear(ERU_CH5_REQ1_P15_8); - } } @@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) // exti_flag_clear(ERU_CH6_REQ9_P20_0); // } // } - IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO) { interrupt_global_enable(0); // жǶ @@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { interrupt_global_enable(0); // жǶ - gnss_uart_callback(); // GPSڻص + gnss_uart_callback(); // GNSSڻص diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/doc/version.txt index 1e222a3..8ce85ca 100644 --- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/doc/version.txt +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/doc/version.txt @@ -1,3 +1,13 @@ +V3.4.4 + SCC8660ʽ + ָV2 + ޸ips200ʾscc8660ͷʽ + ޸ips114ʾscc8660ͷʽ +V3.4.3 + 660RC +V3.4.2 + ޸printfضеĺ궨 + WIFI_SPI V3.4.1 ޸Ĵڷ麯еķ ޸ips200proע diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h index 27b7965..e8d6021 100644 --- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h @@ -91,6 +91,7 @@ #include "zf_device_imu660ra.h" #include "zf_device_imu660rb.h" #include "zf_device_imu660rx.h" +#include "zf_device_imu660rc.h" #include "zf_device_imu963ra.h" #include "zf_device_ips114.h" #include "zf_device_ips200.h" diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/printf_redirect.c index c44d826..299da76 100644 --- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/printf_redirect.c +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/printf_redirect.c @@ -45,7 +45,7 @@ //------------------------------------------------------------------------------------------------------------------- int fputc(int ch, FILE *stream) { - uart_write_byte(DEBUG_UART_INDEX, (char)ch); + uart_write_byte(PRINTF_USE_UART, (char)ch); return (ch); } @@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len) int fgetc(FILE *f) { #if PRINTF_OUTPUT_TYPE == 0 - return uart_read_byte(DEBUG_UART_INDEX); + return uart_read_byte(PRINTF_USE_UART); #else uint8 buf; wifi_spi_read_buffer(&buf, 1); diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.c index 231b20d..3e9ec74 100644 --- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,423 +24,519 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_debug.h" #include "seekfree_assistant.h" +// ͨö +typedef enum +{ + SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 , + SEEKFREE_ASSISTANT_SEND_CAMERA_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD , -extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); -extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); + SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 , -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) + SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 , +}seekfree_assistant_cmd_type_enum; + +#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ +#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ + +// ݷͺָ +extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); +seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + +// ݽպָ +extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); +seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) #include "zf_common_fifo.h" -static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO -static fifo_struct seekfree_assistant_fifo = // FIFOṹ +static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE]; +static fifo_struct seekfree_assistant_debug_param_fifo = { - .buffer = seekfree_assistant_buffer, + .buffer = seekfree_assistant_debug_param_buffer, .execution = FIFO_IDLE, .type = FIFO_DATA_8BIT, .head = 0, .end = 0, - .size = SEEKFREE_ASSISTANT_BUFFER_SIZE, - .max = SEEKFREE_ASSISTANT_BUFFER_SIZE, -}; + .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, + .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, +}; #endif -static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ -static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ -static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ - -seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ -seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ - -seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ -vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ - //------------------------------------------------------------------------------------------------------------------- // ͺ -// ˵ *buffer ҪУݵַ -// ˵ length У鳤 -// ز uint8 ֵ +// ˵ *buffer ҪУݵַ +// ˵ length У鳤 +// ز uint8 ֵ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length) +static uint8 seekfree_assistant_sum (void *buffer, uint32 length) { uint8 temp_sum = 0; + uint8 *ptr = (uint8 *)buffer; while(length--) { - temp_sum += *buffer++; + temp_sum += *ptr ++; } return temp_sum; } //------------------------------------------------------------------------------------------------------------------- -// ͼͺ -// ˵ camera_type ͷ -// ˵ *image_addr ͼ׵ַ -// ˵ boundary_num ͼа߽ -// ˵ width ͼ -// ˵ height ͼ߶ +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ // ز void -// ʹʾ +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height) +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer) { - uint32 image_size = 0; + zf_assert(NULL != ccd_obj); + zf_assert(NULL != data_buffer); - seekfree_assistant_camera_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_data.function = SEEKFREE_ASSISTANT_CAMERA_FUNCTION; - seekfree_assistant_camera_data.camera_type = (camera_type << 5) | ((image_addr != NULL ? 0 : 1) << 4) | boundary_num; - // дϢЭ鲿 - seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct); - seekfree_assistant_camera_data.image_width = width; - seekfree_assistant_camera_data.image_height = height; + memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct)); + ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD; + ccd_obj->config.channel_index = channel_index; - // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct)); - - // ͷͼͼС - switch(camera_type) + uint16 data_max = 256; + uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT; + loop_count = (2 >= loop_count) ? (loop_count) : (2); + for(uint8 i = 0; loop_count > i; i ++) { - case SEEKFREE_ASSISTANT_OV7725_BIN: - { - image_size = width * height / 8; - }break; - - case SEEKFREE_ASSISTANT_MT9V03X: - { - image_size = width * height; - }break; - - case SEEKFREE_ASSISTANT_SCC8660: - { - image_size = width * height * 2; - }break; + data_max *= 4; } - // ͼ - if(NULL != image_addr) + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF); + #else + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + ccd_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + ccd_obj->config.data_type = data_type; + } + + // ¼ʵֽ uint16 Ҫݳ + ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1)); + // Ȼ¼Ӧݻ + ccd_obj->data_buffer = data_buffer; + + // У + ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.check_sum += seekfree_assistant_sum( + &(ccd_obj->config.cmd), + sizeof(ccd_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)ccd_obj, + sizeof(ccd_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(ccd_obj->data_buffer), + ccd_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer) +{ + zf_assert(NULL != camera_obj); + + memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct)); + camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD; + camera_obj->config.camera_type = camera_type; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF); + #else + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type + && NULL != data_buffer) { - seekfree_assistant_transfer_callback(image_addr, image_size); + camera_obj->config.data_type = 0x02; + } + else + { + camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01); + } + + // RGB565 ͼ ôֽ + camera_obj->buffer_byte_size = + image_width * image_height + * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1)); + camera_obj->buffer_byte_size = + (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type) + ? (camera_obj->buffer_byte_size / 8) + : (camera_obj->buffer_byte_size); + camera_obj->data_buffer = data_buffer; + + // У + camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.check_sum += seekfree_assistant_sum( + &(camera_obj->config.cmd), + sizeof(camera_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_obj, + sizeof(camera_obj->config)); + if(NULL != camera_obj->data_buffer) + { + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_obj->data_buffer), + camera_obj->buffer_byte_size); } } //------------------------------------------------------------------------------------------------------------------- -// ͼ߻ƺ -// ˵ boundary_id ID -// ˵ dot_num -// ˵ *dot_x ׵ַ -// ˵ *dot_y ׵ַ -// ˵ width ͼ -// ˵ height ͼ߶ +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 // ز void -// ʹʾ +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer) +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer) { - uint8 i; - uint16 dot_bytes = 0; // ֽ + zf_assert(NULL != camera_boundary_obj); + zf_assert(NULL != data_buffer); - dot_bytes = seekfree_assistant_camera_dot_data.dot_num; + memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct)); + camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD; - if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5)) - { - dot_bytes *= 2; + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + camera_boundary_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + camera_boundary_obj->config.data_type = data_type; } - // ȷ֡ͷܡ߽š곤ȡ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct)); + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif - for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++) - { - // жǷͺ - if(NULL != buffer->boundary_x[i]) - { - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes); - } + camera_boundary_obj->buffer_byte_size = + boundary_lenght * 2 + * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2)); + camera_boundary_obj->data_buffer = data_buffer; - // жǷ - if(NULL != buffer->boundary_y[i]) - { - // ûݣʾÿһֻһ߽ - // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣 - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes); - } - } + // У + camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.check_sum += seekfree_assistant_sum( + &(camera_boundary_obj->config.cmd), + sizeof(camera_boundary_obj->config) - 2); } //------------------------------------------------------------------------------------------------------------------- -// ʾͺ +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_boundary_obj, + sizeof(camera_boundary_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_boundary_obj->data_buffer), + camera_boundary_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color) +{ + seekfree_assistant_camera_rectangular_struct camera_rectangular_obj; + memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct)); + camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif + + // У + camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.check_sum += seekfree_assistant_sum( + &(camera_rectangular_obj.cmd), + sizeof(camera_rectangular_obj) - 2); + + seekfree_assistant_transfer_callback( + (const uint8 *)&camera_rectangular_obj, + sizeof(camera_rectangular_obj)); +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer) +{ + zf_assert(NULL != oscilloscope_obj); + zf_assert(NULL != data_buffer); + + memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct)); + oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD; + oscilloscope_obj->config.channel_max = + (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max) + ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX) + : ((0 == channel_max) ? (1) : (channel_max)); + oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00); + oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4; + oscilloscope_obj->data_buffer = data_buffer; +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ // ˵ *seekfree_assistant_oscilloscope ʾݽṹ // ز void // ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope) +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj) { - uint8 packet_size; - - // λ - seekfree_assistant_oscilloscope->channel_num &= 0x0f; - - zf_assert(SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT >= seekfree_assistant_oscilloscope->channel_num); - - // ֡ͷ - seekfree_assistant_oscilloscope->head = SEEKFREE_ASSISTANT_SEND_HEAD; - - // дϢ - packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4; - seekfree_assistant_oscilloscope->length = packet_size; - - // д빦ͨ - seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE; - // У - seekfree_assistant_oscilloscope->check_sum = 0; - seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size); + oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + &(oscilloscope_obj->config.cmd), + sizeof(oscilloscope_obj->config) - 2); + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + (oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); - // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[] - - seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size); + seekfree_assistant_transfer_callback( + (const uint8 *)oscilloscope_obj, + sizeof(oscilloscope_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); } +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) //------------------------------------------------------------------------------------------------------------------- -// ͼϢú -// ˵ camera_type ͼ -// ˵ image_addr ͼַ NULLʾֻͱϢλ -// ˵ width ͼ -// ˵ height ͼ߶ +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ // ز void -// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H); -// עϢ +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height) +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj) { - seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION; - // дϢ - seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct); + zf_assert(NULL != debug_param_obj); - seekfree_assistant_camera_buffer.camera_type = camera_type; - seekfree_assistant_camera_buffer.image_addr = image_addr; - seekfree_assistant_camera_buffer.width = width; - seekfree_assistant_camera_buffer.height = height; -} + seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ + uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ + uint8 temp_sum = 0xFF; // Уʱ + uint32 read_length = 0; // ȡʱ -//------------------------------------------------------------------------------------------------------------------- -// ͼ߷ú -// ˵ boundary_type ߽ -// ˵ dot_num һ߽жٸ -// ˵ dot_x1 ű1ĵַ NULLʾͱ1 -// ˵ dot_x2 ű2ĵַ NULLʾͱ2 -// ˵ dot_x3 ű3ĵַ NULLʾͱ3 -// ˵ dot_y1 ű1ĵַ NULLʾͱ1 -// ˵ dot_y2 ű2ĵַ NULLʾͱ2 -// ˵ dot_y3 ű3ĵַ NULLʾͱ3 -// ز void -// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк -// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ -// ʹʾ seekfree_assistant_camera_config(XY_BOUNDARY, 160, xy_x1_boundary, xy_x2_boundary, xy_x3_boundary, xy_y1_boundary, xy_y2_boundary, xy_y3_boundary); // ͼʱߣ߰ -// עϢ -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3) -{ - uint8 i = 0; - uint8 boundary_num = 0; - uint8 boundary_data_type = 0; - - // ͼͻǷ׼, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_dot_data.dot_num = dot_num; - seekfree_assistant_camera_dot_data.valid_flag = 0; - for(i = 0; i < 3; i++) - { - seekfree_assistant_camera_buffer.boundary_x[i] = NULL; - seekfree_assistant_camera_buffer.boundary_y[i] = NULL; - } - - switch(boundary_type) - { - case X_BOUNDARY: - { - if(NULL != dot_x1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x1; - } - if(NULL != dot_x2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x2; - } - if(NULL != dot_x3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x3; - } - - if(255 < seekfree_assistant_camera_buffer.height) - { - boundary_data_type = 1; - } - }break; - - case Y_BOUNDARY: - { - if(NULL != dot_y1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if(NULL != dot_y2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if(NULL != dot_y3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if(255 < seekfree_assistant_camera_buffer.width) - { - boundary_data_type = 1; - } - }break; - - case XY_BOUNDARY: - { - if((NULL != dot_x1) && (NULL != dot_y1)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if((NULL != dot_x2) && (NULL != dot_y2)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if((NULL != dot_x3) && (NULL != dot_y3)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x3; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if((255 < seekfree_assistant_camera_buffer.width) || (255 < seekfree_assistant_camera_buffer.height)) - { - boundary_data_type = 1; - } - }break; - - case NO_BOUNDARY:break; - } - - seekfree_assistant_camera_dot_data.dot_type = (boundary_type << 6) | (boundary_data_type << 5) | boundary_num; -} - -//------------------------------------------------------------------------------------------------------------------- -// ַͷͼ -// ˵ void -// ز void -// ʹʾ -// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_send (void) -{ - // ͼͻǷ׼ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_data_send(seekfree_assistant_camera_buffer.camera_type, seekfree_assistant_camera_buffer.image_addr, seekfree_assistant_camera_dot_data.dot_type & 0x0f, seekfree_assistant_camera_buffer.width, seekfree_assistant_camera_buffer.height); - - if(seekfree_assistant_camera_dot_data.dot_type & 0x0f) - { - seekfree_assistant_camera_dot_send(&seekfree_assistant_camera_buffer); - } -} - - -//------------------------------------------------------------------------------------------------------------------- -// ֽյ -// ˵ void -// ز void -// ʹʾ ֻҪŵеPITжϻѭ -//------------------------------------------------------------------------------------------------------------------- -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) -void seekfree_assistant_data_analysis (void) -{ - uint8 temp_sum; - uint32 read_length; - seekfree_assistant_parameter_struct *receive_packet; - - // ʹuint32ж壬ĿΪ˱ֽ֤ڶ - uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4]; - - // Զȡ, ԶĴ䷽ʽӽջصжȡ - read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE); + // Զȡһݰ + // ԶĴ䷽ʽӽջصжȡ + read_length = seekfree_assistant_receive_callback( + debug_param_cmd_pointer, + sizeof(seekfree_assistant_debug_param_cmd_struct)); if(read_length) - { - // ȡдFIFO - fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length); + { // ȡдFIFO + fifo_write_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + read_length); } - while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo)) - { - read_length = sizeof(seekfree_assistant_parameter_struct); - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_ONLY); + while( sizeof(seekfree_assistant_debug_param_cmd_struct) + <= fifo_used(&seekfree_assistant_debug_param_fifo)) + { // FIFO һݰ ôͽн + // ֱӶһݰ + read_length = sizeof(seekfree_assistant_debug_param_cmd_struct); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_ONLY); - if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0]) - { - // û֡ͷFIFOȥһ - read_length = 1; - } - else - { - // ҵ֡ͷ - receive_packet = (seekfree_assistant_parameter_struct *)temp_buffer; - temp_sum = receive_packet->check_sum; - receive_packet->check_sum = 0; - if(temp_sum == seekfree_assistant_sum((uint8 *)temp_buffer, sizeof(seekfree_assistant_parameter_struct))) - { - // Уɹ - seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data; - seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1; + if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0] + && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2]) + { // ֱƥ֡ͷ ҹҲƥ + temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ + debug_param_cmd_obj.check_sum = 0; // հУֵ У + if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct))) + { // Уɹ + debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float; + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0]; + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + #endif + debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1; + temp_sum = 0x00; } else - { - read_length = 1; + { // Уƥ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + } + else + { // ƥ䲻֡ͷ͹ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + + if(0xFF == temp_sum) + { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ + for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++) + { // Ϊȡһ һ + if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length]) + { // ҵ¸֡ͷ˳ + break; + } } } // ʹõ - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_AND_CLEAN); } } #endif - - - diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.h index 5b7e1b5..937f784 100644 --- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,142 +24,292 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ - #include "zf_common_typedef.h" +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 , + SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 , +}seekfree_assistant_data_type_enum; -// 1ʹܲڵĹ 0رղڵĹ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 ) - - - -// FIFOС -#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) - -// ʾͨ -#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) - -// Եͨ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) - -// ͼ -#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) - -// Ƭλ͵֡ͷ -#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) - -// ͷ -#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) -#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) -#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) - -// λƬ͵֡ͷ -#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) - -// -#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) - +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ +}seekfree_assistant_ccd_resolution_enum; // ͷö typedef enum { - // ͷͺŶ - SEEKFREE_ASSISTANT_OV7725_BIN = 1, - SEEKFREE_ASSISTANT_MT9V03X, - SEEKFREE_ASSISTANT_SCC8660, - // ͼͶ - SEEKFREE_ASSISTANT_BINARY = 1, - SEEKFREE_ASSISTANT_GRAY, - SEEKFREE_ASSISTANT_RGB565, -}seekfree_assistant_image_type_enum; + SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY , + SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 , -// ͷö -typedef enum -{ - // ͷͺŶ - X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ - Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ - XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ - NO_BOUNDARY, // ͵ͼûбϢ -}seekfree_assistant_boundary_type_enum; + // ͷͺƥ䶨 + SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X , + SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 , +}seekfree_assistant_camera_type_enum; + +#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨 + +#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ +#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤ + +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС +#endif typedef struct { - uint8 head; // ֡ͷ - uint8 channel_num; // λΪ λΪͨ - uint8 check_sum; // У - uint8 length; // - float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + uint8 data_lenght_buffer[2] ; // CCD ݳ + uint8 channel_color_buffer[2] ; // ͨɫ + uint8 channel_data_max[2] ; // ֵͨ + uint8 data_type ; // ȷϴС + uint8 reserve ; // + }config; + uint16 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_ccd_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 camera_type ; // ͷ + uint8 image_width_buffer[2] ; // ͼ + uint8 image_height_buffer[2] ; // ͼ߶ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 data_type ; // ȷϴС + uint8 boundary_lenght_buffer[2] ; // ߳ + uint8 color_buffer[2] ; // ͨɫ + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_boundary_struct; + +typedef struct +{ + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 reserve ; // + uint8 x_axis_buffer[2] ; // X + uint8 y_axis_buffer[2] ; // Y + uint8 width_buffer[2] ; // ο + uint8 height_buffer[2] ; // θ߶ + uint8 color_buffer[2] ; // ɫ +}seekfree_assistant_camera_rectangular_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_max ; // ͨ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ }seekfree_assistant_oscilloscope_struct; +typedef union +{ + uint8 data_uint8[4] ; + float data_float ; +}seekfree_assistant_param_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ - uint8 length; // ȣЭ鲿֣ - uint16 image_width; // ͼ - uint16 image_height; // ͼ߶ -}seekfree_assistant_camera_struct; - - -typedef struct -{ - uint8 head; // ֡ͷ - uint8 function; // - uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽ - uint8 length; // ȣЭ鲿֣ - uint16 dot_num; // - uint8 valid_flag; // ͨʶ - uint8 reserve; // -}seekfree_assistant_camera_dot_struct; - -typedef struct -{ - void *image_addr; // ͷַ - uint16 width; // ͼ - uint16 height; // ͼ߶ - seekfree_assistant_image_type_enum camera_type; // ͷ - void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ - void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ -}seekfree_assistant_camera_buffer_struct; + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + seekfree_assistant_param_struct dat ; // һ + +}seekfree_assistant_debug_param_cmd_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 channel; // ͨ - uint8 check_sum; // У - float data; // -}seekfree_assistant_parameter_struct; + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint8_struct; + + +typedef struct +{ + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint16_struct; + +typedef struct +{ + float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; + uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; +}seekfree_assistant_debug_param_struct; typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length); typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length); -extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ -extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ - - -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope); -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height); -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3); -void seekfree_assistant_camera_send (void); -void seekfree_assistant_data_analysis (void); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ +// ز void +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, 16] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *seekfree_assistant_oscilloscope ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj); + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj); +#endif #endif diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c index d139201..23205d5 100644 --- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,23 +24,20 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_typedef.h" #include "zf_common_fifo.h" #include "zf_common_debug.h" -#include "zf_driver_uart.h" + #include "zf_device_wireless_uart.h" -#include "zf_device_ble6a20.h" -#include "zf_device_bluetooth_ch9141.h" -#include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" #include "seekfree_assistant.h" @@ -50,7 +47,6 @@ extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ - //------------------------------------------------------------------------------------------------------------------- // ַͺ // ˵ *buff Ҫ͵ݵַ @@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv // ز uint32 ʣδݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) +uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݷ͹ @@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) // ز uint32 յݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) +uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݽչ return 0; @@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) // ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ // ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) +void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) { switch(transfer_device) { case SEEKFREE_ASSISTANT_DEBUG_UART: { -#if DEBUG_UART_USE_INTERRUPT == 1 seekfree_assistant_transfer_callback = debug_send_buffer; seekfree_assistant_receive_callback = debug_read_ring_buffer; -#endif }break; - + case SEEKFREE_ASSISTANT_WIRELESS_UART: { seekfree_assistant_transfer_callback = wireless_uart_send_buffer; seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; - - case SEEKFREE_ASSISTANT_BLE6A20: - { - seekfree_assistant_transfer_callback = ble6a20_send_buffer; - seekfree_assistant_receive_callback = ble6a20_read_buffer; - }break; - case SEEKFREE_ASSISTANT_CH9141: - { - seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; - seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; - }break; - - case SEEKFREE_ASSISTANT_WIFI_UART: - { - seekfree_assistant_transfer_callback = wifi_uart_send_buffer; - seekfree_assistant_receive_callback = wifi_uart_read_buffer; - }break; - + // case SEEKFREE_ASSISTANT_CH9141: + // { + // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; + // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; + // }break; + + // case SEEKFREE_ASSISTANT_WIFI_UART: + // { + // seekfree_assistant_transfer_callback = wifi_uart_send_buffer; + // seekfree_assistant_receive_callback = wifi_uart_read_buffer; + // }break; + case SEEKFREE_ASSISTANT_WIFI_SPI: { seekfree_assistant_transfer_callback = wifi_spi_send_buffer; seekfree_assistant_receive_callback = wifi_spi_read_buffer; }break; - - case SEEKFREE_ASSISTANT_CUSTOM: - { + + default: + { // Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ - + seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + seekfree_assistant_receive_callback = seekfree_assistant_receive; }break; } } - - diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.h index 2ccfd8a..0e28f49 100644 --- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,13 +24,13 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,7 +43,6 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ SEEKFREE_ASSISTANT_WIRELESS_UART, // ת - SEEKFREE_ASSISTANT_BLE6A20, // ת SEEKFREE_ASSISTANT_CH9141, // CH9141 SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_absolute_encoder.h index 1166c84..dc091aa 100644 --- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_absolute_encoder.h +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_absolute_encoder.h @@ -62,7 +62,7 @@ //==================================================== SPI ==================================================== #else //====================================================Ӳ SPI ==================================================== -#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI +#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI #define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI #define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK #define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI @@ -70,7 +70,7 @@ //====================================================Ӳ SPI ==================================================== #endif -#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ +#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ #define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN))) #define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ble6a20.h index 6f4544a..6af089f 100644 --- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ble6a20.h +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ble6a20.h @@ -76,7 +76,7 @@ // 1Զ Զʵ޸ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ // Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000 -#define BLE6A20_AUTO_BAUD_RATE ( 0 ) +#define BLE6A20_AUTO_BAUD_RATE ( 1 ) #if (1 == BLE6A20_AUTO_BAUD_RATE) typedef enum diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rc.c new file mode 100644 index 0000000..68840e2 --- /dev/null +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rc.c @@ -0,0 +1,563 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#include "math.h" +#include "zf_common_debug.h" +#include "zf_driver_delay.h" +#include "zf_driver_spi.h" +#include "zf_driver_gpio.h" +#include "zf_driver_soft_iic.h" +#include "zf_device_config.h" +#include "zf_driver_uart.h" +#include "zf_driver_exti.h" + +#include "zf_device_imu660rc.h" + +#ifndef M_PI +#define M_PI 3.1415926f +#endif + + +static uint8 imu660rc_quarternion_rate; + +float imu660rc_transition_factor[2]; +int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro () +int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ) +float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ +float imu660rc_quarternion[4]; // Ԫ + + + +#if IMU660RC_USE_SOFT_IIC +static soft_iic_info_struct imu660rc_iic_struct; + +#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data))) +#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len))) +#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg))) +#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len))) +#else +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC дĴ +// ˵ reg Ĵַ +// ˵ data +// ز void +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_write_register (uint8 reg, uint8 data) +{ + IMU660RC_CS(0); + spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data); + IMU660RC_CS(1); +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ĵ +// ˵ reg Ĵַ +// ز uint8 +// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_read_register (uint8 reg) +{ + uint8 data; + IMU660RC_CS(0); + data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R); + IMU660RC_CS(1); + return data; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC +// ˵ reg Ĵַ +// ˵ data ݻ +// ˵ len ݳ +// ز void +// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len) +{ + IMU660RC_CS(0); + spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len); + IMU660RC_CS(1); +} +#endif + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC fp16ת +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint32 fp16_to_float(uint16 h) +{ + uint16 h_exp = (h & 0x7c00u); + uint32 f_sgn = ((uint32)h & 0x8000u) << 16; + switch (h_exp) + { + case 0x0000u: // 0 or subnormal + { + uint16 h_sig = (h & 0x03ffu); + // Signed zero + if (h_sig == 0) + { + return f_sgn; + } + // Subnormal + h_sig <<= 1; + while ((h_sig & 0x0400u) == 0) + { + h_sig <<= 1; + h_exp++; + } + uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23; + uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13; + return f_sgn + f_exp + f_sig; + } + case 0x7c00u: // inf or NaN + { + // All-ones exponent and a copy of the significand + return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13); + } + default: // normalized + { + // Just need to adjust the exponent and shift + return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13); + } + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫһ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_normalize(float quat[4], uint16 *fp16) +{ + float n = 0; + float temp[4]; + + *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]); + *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]); + *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]); + *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]); + + n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3]; + n = sqrtf(n); + + if(n > 0.001f) // Խӽ0ֵ + { + n = temp[3] < 0.0f ? -n : n; + + quat[0] = temp[1] / n; + quat[1] = temp[2] / n; + quat[2] = temp[0] / n; + quat[3] = temp[3] / n; + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫתŷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw) +{ + float euler[3]; + + float sqx = quat[0] * quat[0]; + float sqy = quat[1] * quat[1]; + float sqz = quat[2] * quat[2]; + + euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx)); + euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2])); + euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz)); + + // תǶ + euler[0] = 180 * (euler[0]) / M_PI; + euler[1] = 180 * (euler[1]) / M_PI; + euler[2] = 180 * (euler[2]) / M_PI; + + // Ƕȵ + euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2]; + + *roll = euler[0]; + *pitch = euler[1]; + *yaw = euler[2]; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ÷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank) +{ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank); +} + + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Լ +// ˵ void +// ز uint8 1-Լʧ 0-Լɹ +// ʹʾ imu660rc_self_check(); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_self_check (void) +{ + uint8 dat = 0, return_state = 0; + uint16 timeout_count = 0; + do + { + if(IMU660RC_TIMEOUT_COUNT < timeout_count ++) + { + return_state = 1; + break; + } + dat = imu660rc_read_register(IMU660RC_CHIP_ID); + system_delay_ms(1); + }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû⵽豸 + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ٶȼ +// ˵ void +// ز void +// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_acc (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6); + imu660rc_acc_x = dat[0]; + imu660rc_acc_y = dat[1]; + imu660rc_acc_z = dat[2]; + } +} +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC +// ˵ void +// ز void +// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_gyro (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6); + imu660rc_gyro_x = dat[0]; + imu660rc_gyro_y = dat[1]; + imu660rc_gyro_z = dat[2]; + } +} + + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ԪݲתΪŷ +// ˵ void +// ز void +// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı +// עϢ ҪINT2Ŵжϵô˺ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_quarternion(void) +{ + uint8 i; + uint16 buff[4]; + uint8 *buff1_ptr; + int16 *buff2_ptr; + + if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate) + { + buff1_ptr = (uint8 *)buff; + + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x20); + imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31); + + for(i = 0; 8 > i; i++) + { + imu660rc_write_register(0x08, 0x4C + i); + buff1_ptr[i] = imu660rc_read_register(0x09); + } + + imu660rc_write_register(IMU660RC_PAGE_RW, 0x0); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // Ԫһ + quarternion_normalize(imu660rc_quarternion, buff); + // Ԫתŷ + quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw); + + // ȡٶٶϢ + #if(1 == IMU660RC_QUARTERNION_GET_ACC) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6); + imu660rc_acc_x = buff2_ptr[0]; + imu660rc_acc_y = buff2_ptr[1]; + imu660rc_acc_z = buff2_ptr[2]; + } + #endif + #if(1 == IMU660RC_QUARTERNION_GET_GYRO) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6); + imu660rc_gyro_x = buff2_ptr[0]; + imu660rc_gyro_y = buff2_ptr[1]; + imu660rc_gyro_z = buff2_ptr[2]; + } + #endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RCжϻصҪжڶȡԪ +// ˵ void +// ز void +// ʹʾ +// עϢ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_callback(void) +{ + imu660rc_get_quarternion(); + +} + +//------------------------------------------------------------------------------------------------------------------- +// ʼ IMU660RC +// ˵ quarternion_rate ѡԪ +// ز uint8 1-ʼʧ 0-ʼɹ +// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate) +{ + uint8 return_state = 0; + + imu660rc_quarternion_rate = quarternion_rate; + #if IMU660RC_USE_SOFT_IIC + soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿ + + #else + spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿ + gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿ + #endif + + system_delay_ms(10); + + do + { + if(imu660rc_self_check()) // IMU660RC Լ + { + // ˶Ϣ ʾλ + // ô IMU660RC Լʱ˳ + // һ½û ûܾǻ + zf_log(0, "imu660rc self check error."); + return_state = 1; + break; + } + + // λ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04); + system_delay_ms(30); + + // ÿ¹ַ + imu660rc_write_register(IMU660RC_CTRL3, 0x44); + + switch(IMU660RC_ACC_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_ACC_SAMPLE_SGN_2G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x00); + imu660rc_transition_factor[0] = 16393.44; + }break; + case IMU660RC_ACC_SAMPLE_SGN_4G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x01); + imu660rc_transition_factor[0] = 8196.72; + }break; + case IMU660RC_ACC_SAMPLE_SGN_8G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x02); + imu660rc_transition_factor[0] = 4098.36; + }break; + case IMU660RC_ACC_SAMPLE_SGN_16G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x03); + imu660rc_transition_factor[0] = 2049.18; + }break; + } + if(1 == return_state) + { + break; + } + + switch(IMU660RC_GYRO_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_125DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x00); + imu660rc_transition_factor[1] = 228.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_250DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x01); + imu660rc_transition_factor[1] = 114.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_500DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x02); + imu660rc_transition_factor[1] = 57.1428; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_1000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x03); + imu660rc_transition_factor[1] = 28.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_2000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x04); + imu660rc_transition_factor[1] = 14.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_4000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x0C); + imu660rc_transition_factor[1] = 7.14285; + }break; + } + if(1 == return_state) + { + break; + } + + // ôģʽΪ߾ģʽԼ + imu660rc_write_register(IMU660RC_CTRL1, 0x15); + imu660rc_write_register(IMU660RC_CTRL2, 0x18); + + // LPF1˲ + imu660rc_write_register(IMU660RC_CTRL7, 0x01); + + // LPF2˲ + imu660rc_write_register(IMU660RC_CTRL9, 0x08); + + // ԪӦ + if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate) + { + // жϴź + imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80); + imu660rc_write_register(IMU660RC_CTRL4, 0x08); + imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30); + + // üٶȡٶ + imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3)); + imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3)); + + // Ԫʲ + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3)); + imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x00); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // жϼ + exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING); + } + }while(0); + + return return_state; +} + + + + + + + + + + + + + diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rc.h new file mode 100644 index 0000000..dd5a9e3 --- /dev/null +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rc.h @@ -0,0 +1,211 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#ifndef _zf_device_imu660rc_h_ +#define _zf_device_imu660rc_h_ + +#include "zf_common_typedef.h" + + +// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC +// IMU660RC_USE_SOFT_IICҪȱ벢س򣬵ƬģҪϵͨѶ +#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ + +#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ +//==================================================== IIC ==================================================== +#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ +#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL +#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA +//==================================================== IIC ==================================================== +#else + +//====================================================Ӳ SPI ==================================================== +#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI +#define IMU660RC_SPI (SPI_0) // Ӳ SPI +#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK +#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI +#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO +//====================================================Ӳ SPI ==================================================== +#endif +#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ +#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) ) +#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ + + +#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ +#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ + +typedef enum +{ + IMU660RC_MAIN_MEM_BANK = 0x00, + IMU660RC_HUB_MEM_BANK = 0x40, + IMU660RC_EMBED_MEM_BANK = 0x80, +}imu660rc_mem_bank_enum; + +typedef enum +{ + IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2) + IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G + IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G + IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G +}imu660rc_acc_sample_config; + +typedef enum +{ + IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S) + IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS + IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS + IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS + IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS + IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS +}imu660rc_gyro_sample_config; + +typedef enum +{ + IMU660RC_QUARTERNION_15HZ, // 15 Hz + IMU660RC_QUARTERNION_30HZ, // 30 Hz + IMU660RC_QUARTERNION_60HZ, // 60 Hz + IMU660RC_QUARTERNION_120HZ, // 120Hz + IMU660RC_QUARTERNION_240HZ, // 240Hz + IMU660RC_QUARTERNION_480HZ, // 480Hz + IMU660RC_QUARTERNION_DISABLE, // Ԫ +}imu660rc_quarternion_rate_config; + + +//================================================ IMU660RC ڲַ================================================ +#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ +#define IMU660RC_SPI_W ( 0x00 ) +#define IMU660RC_SPI_R ( 0x80 ) +#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ + + +//================================================ IMU660RC Ĵַ================================================ +#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 ) +#define IMU660RC_INT2_CTRL ( 0x0E ) +#define IMU660RC_CHIP_ID ( 0x0F ) +#define IMU660RC_CTRL1 ( 0x10 ) +#define IMU660RC_CTRL2 ( 0x11 ) +#define IMU660RC_CTRL3 ( 0x12 ) +#define IMU660RC_CTRL4 ( 0x13 ) +#define IMU660RC_CTRL5 ( 0x14 ) +#define IMU660RC_CTRL6 ( 0x15 ) +#define IMU660RC_CTRL7 ( 0x16 ) +#define IMU660RC_CTRL8 ( 0x17 ) +#define IMU660RC_CTRL9 ( 0x18 ) +#define IMU660RC_CTRL10 ( 0x19 ) +#define IMU660RC_CTRL_STATUS ( 0x1A ) +#define IMU660RC_STATUS_REG ( 0x1E ) +#define IMU660RC_OUT_TEMP_L ( 0x20 ) +#define IMU660RC_OUT_TEMP_H ( 0x21 ) +#define IMU660RC_OUTX_L_G ( 0x22 ) +#define IMU660RC_OUTX_H_G ( 0x23 ) +#define IMU660RC_OUTY_L_G ( 0x24 ) +#define IMU660RC_OUTY_H_G ( 0x25 ) +#define IMU660RC_OUTZ_L_G ( 0x26 ) +#define IMU660RC_OUTZ_H_G ( 0x27 ) +#define IMU660RC_OUTX_L_A ( 0x28 ) +#define IMU660RC_OUTX_H_A ( 0x29 ) +#define IMU660RC_OUTY_L_A ( 0x2A ) +#define IMU660RC_OUTY_H_A ( 0x2B ) +#define IMU660RC_OUTZ_L_A ( 0x2C ) +#define IMU660RC_OUTZ_H_A ( 0x2D ) + +#define IMU660RC_PAGE_SEL ( 0x02 ) +#define IMU660RC_EMB_FUNC_EN_A ( 0x04 ) +#define IMU660RC_PAGE_RW ( 0x17 ) +#define IMU660RC_SFLP_ODR ( 0x5E ) +#define IMU660RC_EMB_FUNC_CFG ( 0x63 ) + + + +extern float imu660rc_transition_factor[2]; +extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; // +extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ +extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ +extern float imu660rc_quarternion[4]; // Ԫ + + +void imu660rc_get_acc (void); +void imu660rc_get_gyro (void); +void imu660rc_get_quarternion (void); + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ٶȼתΪʵ +// ˵ acc_value ļٶȼ +// ز void +// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2) +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0]) + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC תΪʵ +// ˵ gyro_value +// ز void +// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1]) +void imu660rc_callback (void); +uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate); + + + +#endif diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rx.h index 45699d9..81b8b41 100644 --- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rx.h +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660rx.h @@ -97,7 +97,7 @@ //================================================ IMU660RX ȫֱ================================================ extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro () extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ) -extern float imu660ra_transition_factor[2]; +extern float imu660rx_transition_factor[2]; //================================================ IMU660RX ȫֱ================================================ diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips114.h index c56f310..9c4ac0d 100644 --- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips114.h +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips114.h @@ -167,7 +167,7 @@ void ips114_init (void); // ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================= IPS114 չ================================================ #endif diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200.h index 850fb11..5bf4284 100644 --- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200.h +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200.h @@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select); // ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================== IPS200 չ================================================ diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h index 98c5364..557e1d2 100644 --- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h @@ -86,7 +86,7 @@ // £SCC8660_PCLK_DIVԽͼԽ #define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1> #define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ -#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) +#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) #define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0 //================================================ SCC8660 ã֧ͫ֡ʰ汾=========================== diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.c index b51c600..b06e6a1 100644 --- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.c +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.c @@ -24,7 +24,7 @@ * ļ zf_device_wifi_spi * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.9.20 +* ADS v1.10.2 * ƽ̨ TC264D * https://seekfree.taobao.com/ * @@ -63,6 +63,21 @@ #define SOCKET_CONNECT_TIME_OUT 50000 // λ #define OTHER_TIME_OUT 1000 // λ +#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088)) + #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088" +#endif + +#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE) + #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE" +#endif + + +#if (WIFI_SPI_TRANSFER_SIZE != 4088) + #error "WIFI_SPI_TRANSFER_SIZE must be == 4088" +#endif + + + char wifi_spi_version[12]; // ģ̼汾Ϣ char wifi_spi_mac_addr[20]; // ģMACַϢ char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ @@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void) { memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1; - return return_state; } @@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void) { memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1; - return return_state; } @@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void) { memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1; + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ȡϵͳʱ +// ˵ time_format ʱʽ +// ز *buffer ʱַַ СҪ30ֽ +// ز buffer_size С +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size) +{ + uint8 return_state = 1; + wifi_spi_packets_struct temp_packets; + uint8 send_cmd, receive_cmd; + + // ʱ30ֽ + // ģ̼V2汾 + if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2))) + { + send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0; + receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0; + + return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT); + if((0 == return_state) && (receive_cmd == temp_packets.head.command)) + { + return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2); + if(0 == return_state) + { + memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3); + buffer[temp_packets.head.length - 3] = 0; + } + } + } + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ɨȵ +// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз +// ˵ buffer_size ij +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +// עϢ ÿһаһwifi +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size) +{ + uint8 return_state; + + // ģV2汾Ĺִ̼֧˹ + if(!strncmp(wifi_spi_version, "V2", 2)) + { + return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT); + + if(0 == return_state) + { + #if (0 == WIFI_SPI_READ_TRANSFER) + wifi_spi_send_buffer(NULL, 0); + #endif + while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size)) + { + system_delay_ms(10); + } + } + } return return_state; } @@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) while(length) { - send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length; + send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length); if(wifi_spi_wait_idle(OTHER_TIME_OUT)) { @@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) return length; } +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ַͺͬ +// ˵ *string Ҫ͵ַ +// ز void +// ʹʾ wifi_spi_send_string("123"); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +void wifi_spi_send_string(const char *string) +{ + wifi_spi_send_buffer((uint8*)string, strlen(string)); +} + //------------------------------------------------------------------------------------------------------------------- // WIFI SPI ȡ // ˵ *buff ջ @@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) { zf_assert(NULL != buffer); - uint32 data_len = length; + uint32 fifo_read_length; + uint32 write_length = 0; + wifi_spi_packets_struct temp_packets; + + // жFIFOǷݣȴFIFOȡ + if(fifo_used(&wifi_spi_fifo)) + { + fifo_read_length = fifo_used(&wifi_spi_fifo); + fifo_read_length = length < fifo_read_length ? length : fifo_read_length; + fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN); + + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + } #if(1 == WIFI_SPI_READ_TRANSFER) - - wifi_spi_packets_struct temp_packets; - // WIFI SPI״̬жϻ߳ѾͨѶ򱾴βܷ if(WIFI_SPI_IDLE == wifi_spi_mutex) { - // ͨѶ״̬Ϊæ - wifi_spi_mutex = WIFI_SPI_BUSY; + wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ - // ͨѶ鿴ģǷδȡ do { - if(wifi_spi_wait_idle(OTHER_TIME_OUT)) + if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ + (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳ + ) { break; } + temp_packets.head.command = WIFI_SPI_DATA; temp_packets.head.length = 0; wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE); // յİǷ - if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) + if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) && + (temp_packets.head.length) + ) { - // յ - if(temp_packets.head.length) + if(length) + { + fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length; + memcpy(buffer, temp_packets.buffer, fifo_read_length); + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO + { + fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length); + } + } + else // ȫдFIFO { fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length); } @@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command); wifi_spi_mutex = WIFI_SPI_IDLE; } -#endif +#endif - fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN); - return data_len; + return write_length; } //------------------------------------------------------------------------------------------------------------------- @@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word) // MACַϢַʽwifi_spi_mac_addr wifi_spi_get_mac_addr(); - + if(NULL == wifi_ssid) + { + // ʼʱҪWIFI + break; + } return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word); if(return_state) { diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.h index eea8a78..e7cec39 100644 --- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.h +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.h @@ -73,8 +73,8 @@ #if (WIFI_SPI_AUTO_CONNECT > 2) #error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]" #else -#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP -#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿ +#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP +#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666 #endif @@ -95,10 +95,15 @@ typedef enum WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ + WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI + WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾 WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ + WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1 + WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2 + WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3 // ӻش WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ @@ -110,6 +115,9 @@ typedef enum WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾 WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں + WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ + WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ + WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ WIFI_SPI_INVALID2 = 0xFF // Чݰ }wifi_spi_packets_command_enum; @@ -134,19 +142,27 @@ typedef struct uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // }wifi_spi_packets_struct; - +typedef enum +{ + WIFI_SPI_UTC_0 = 1, // ʱ + WIFI_SPI_GMT, // ʱ תΪGMTʽ׺GMT һڶԽƶ˴ģʹ + WIFI_SPI_UTC_8, // ʱ +}wifi_spi_time_enum; + extern char wifi_spi_version[12]; // ̼汾 ַ extern char wifi_spi_mac_addr[20]; // ģMACַ ַ extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ -uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); -uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); -uint8 wifi_spi_socket_disconnect (void); -uint8 wifi_spi_udp_send_now (void); -uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); -uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size); +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size); +uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); +uint8 wifi_spi_socket_disconnect (void); +uint8 wifi_spi_udp_send_now (void); +uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); +void wifi_spi_send_string (const char *string); +uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); -uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); #endif - diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.h index 0f392ff..24b88cc 100644 --- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.h +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.h @@ -73,7 +73,7 @@ #if (WIFI_UART_AUTO_CONNECT > 3) #error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]" #else -#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP +#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP #define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_UART_LOCAL_PORT "8080" // ˿ #endif diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_encoder.c index 8d514b7..ad4099e 100644 --- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_encoder.c +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_encoder.c @@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n) //------------------------------------------------------------------------------------------------------------------- void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin) { -// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init + zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init IfxGpt12_enableModule(&MODULE_GPT120); IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4); diff --git a/Example/Coreboard_Demo/E10_printf_debug_log_demo/user/isr.c b/Example/Coreboard_Demo/E10_printf_debug_log_demo/user/isr.c index e19382e..927ed43 100644 --- a/Example/Coreboard_Demo/E10_printf_debug_log_demo/user/isr.c +++ b/Example/Coreboard_Demo/E10_printf_debug_log_demo/user/isr.c @@ -40,14 +40,14 @@ // 򵥵˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ // **************************** PITжϺ **************************** -IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) -{ - interrupt_global_enable(0); // жǶ - pit_clear_flag(CCU60_CH0); - - - -} +//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) +//{ +// interrupt_global_enable(0); // жǶ +// pit_clear_flag(CCU60_CH0); +// +// +// +//} IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) @@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж { exti_flag_clear(ERU_CH0_REQ0_P15_4); - + + imu660rc_callback(); // 660RC ģ INT ж } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж @@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) { exti_flag_clear(ERU_CH5_REQ1_P15_8); - } } @@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) // exti_flag_clear(ERU_CH6_REQ9_P20_0); // } // } - IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO) { interrupt_global_enable(0); // жǶ @@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { interrupt_global_enable(0); // жǶ - gnss_uart_callback(); // GPSڻص + gnss_uart_callback(); // GNSSڻص diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/doc/version.txt index 1e222a3..8ce85ca 100644 --- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/doc/version.txt +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/doc/version.txt @@ -1,3 +1,13 @@ +V3.4.4 + SCC8660ʽ + ָV2 + ޸ips200ʾscc8660ͷʽ + ޸ips114ʾscc8660ͷʽ +V3.4.3 + 660RC +V3.4.2 + ޸printfضеĺ궨 + WIFI_SPI V3.4.1 ޸Ĵڷ麯еķ ޸ips200proע diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h index 27b7965..e8d6021 100644 --- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h @@ -91,6 +91,7 @@ #include "zf_device_imu660ra.h" #include "zf_device_imu660rb.h" #include "zf_device_imu660rx.h" +#include "zf_device_imu660rc.h" #include "zf_device_imu963ra.h" #include "zf_device_ips114.h" #include "zf_device_ips200.h" diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/printf_redirect.c index c44d826..299da76 100644 --- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/printf_redirect.c +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/printf_redirect.c @@ -45,7 +45,7 @@ //------------------------------------------------------------------------------------------------------------------- int fputc(int ch, FILE *stream) { - uart_write_byte(DEBUG_UART_INDEX, (char)ch); + uart_write_byte(PRINTF_USE_UART, (char)ch); return (ch); } @@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len) int fgetc(FILE *f) { #if PRINTF_OUTPUT_TYPE == 0 - return uart_read_byte(DEBUG_UART_INDEX); + return uart_read_byte(PRINTF_USE_UART); #else uint8 buf; wifi_spi_read_buffer(&buf, 1); diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.c index 231b20d..3e9ec74 100644 --- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,423 +24,519 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_debug.h" #include "seekfree_assistant.h" +// ͨö +typedef enum +{ + SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 , + SEEKFREE_ASSISTANT_SEND_CAMERA_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD , -extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); -extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); + SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 , -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) + SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 , +}seekfree_assistant_cmd_type_enum; + +#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ +#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ + +// ݷͺָ +extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); +seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + +// ݽպָ +extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); +seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) #include "zf_common_fifo.h" -static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO -static fifo_struct seekfree_assistant_fifo = // FIFOṹ +static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE]; +static fifo_struct seekfree_assistant_debug_param_fifo = { - .buffer = seekfree_assistant_buffer, + .buffer = seekfree_assistant_debug_param_buffer, .execution = FIFO_IDLE, .type = FIFO_DATA_8BIT, .head = 0, .end = 0, - .size = SEEKFREE_ASSISTANT_BUFFER_SIZE, - .max = SEEKFREE_ASSISTANT_BUFFER_SIZE, -}; + .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, + .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, +}; #endif -static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ -static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ -static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ - -seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ -seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ - -seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ -vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ - //------------------------------------------------------------------------------------------------------------------- // ͺ -// ˵ *buffer ҪУݵַ -// ˵ length У鳤 -// ز uint8 ֵ +// ˵ *buffer ҪУݵַ +// ˵ length У鳤 +// ز uint8 ֵ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length) +static uint8 seekfree_assistant_sum (void *buffer, uint32 length) { uint8 temp_sum = 0; + uint8 *ptr = (uint8 *)buffer; while(length--) { - temp_sum += *buffer++; + temp_sum += *ptr ++; } return temp_sum; } //------------------------------------------------------------------------------------------------------------------- -// ͼͺ -// ˵ camera_type ͷ -// ˵ *image_addr ͼ׵ַ -// ˵ boundary_num ͼа߽ -// ˵ width ͼ -// ˵ height ͼ߶ +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ // ز void -// ʹʾ +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height) +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer) { - uint32 image_size = 0; + zf_assert(NULL != ccd_obj); + zf_assert(NULL != data_buffer); - seekfree_assistant_camera_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_data.function = SEEKFREE_ASSISTANT_CAMERA_FUNCTION; - seekfree_assistant_camera_data.camera_type = (camera_type << 5) | ((image_addr != NULL ? 0 : 1) << 4) | boundary_num; - // дϢЭ鲿 - seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct); - seekfree_assistant_camera_data.image_width = width; - seekfree_assistant_camera_data.image_height = height; + memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct)); + ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD; + ccd_obj->config.channel_index = channel_index; - // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct)); - - // ͷͼͼС - switch(camera_type) + uint16 data_max = 256; + uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT; + loop_count = (2 >= loop_count) ? (loop_count) : (2); + for(uint8 i = 0; loop_count > i; i ++) { - case SEEKFREE_ASSISTANT_OV7725_BIN: - { - image_size = width * height / 8; - }break; - - case SEEKFREE_ASSISTANT_MT9V03X: - { - image_size = width * height; - }break; - - case SEEKFREE_ASSISTANT_SCC8660: - { - image_size = width * height * 2; - }break; + data_max *= 4; } - // ͼ - if(NULL != image_addr) + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF); + #else + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + ccd_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + ccd_obj->config.data_type = data_type; + } + + // ¼ʵֽ uint16 Ҫݳ + ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1)); + // Ȼ¼Ӧݻ + ccd_obj->data_buffer = data_buffer; + + // У + ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.check_sum += seekfree_assistant_sum( + &(ccd_obj->config.cmd), + sizeof(ccd_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)ccd_obj, + sizeof(ccd_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(ccd_obj->data_buffer), + ccd_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer) +{ + zf_assert(NULL != camera_obj); + + memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct)); + camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD; + camera_obj->config.camera_type = camera_type; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF); + #else + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type + && NULL != data_buffer) { - seekfree_assistant_transfer_callback(image_addr, image_size); + camera_obj->config.data_type = 0x02; + } + else + { + camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01); + } + + // RGB565 ͼ ôֽ + camera_obj->buffer_byte_size = + image_width * image_height + * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1)); + camera_obj->buffer_byte_size = + (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type) + ? (camera_obj->buffer_byte_size / 8) + : (camera_obj->buffer_byte_size); + camera_obj->data_buffer = data_buffer; + + // У + camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.check_sum += seekfree_assistant_sum( + &(camera_obj->config.cmd), + sizeof(camera_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_obj, + sizeof(camera_obj->config)); + if(NULL != camera_obj->data_buffer) + { + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_obj->data_buffer), + camera_obj->buffer_byte_size); } } //------------------------------------------------------------------------------------------------------------------- -// ͼ߻ƺ -// ˵ boundary_id ID -// ˵ dot_num -// ˵ *dot_x ׵ַ -// ˵ *dot_y ׵ַ -// ˵ width ͼ -// ˵ height ͼ߶ +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 // ز void -// ʹʾ +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer) +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer) { - uint8 i; - uint16 dot_bytes = 0; // ֽ + zf_assert(NULL != camera_boundary_obj); + zf_assert(NULL != data_buffer); - dot_bytes = seekfree_assistant_camera_dot_data.dot_num; + memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct)); + camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD; - if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5)) - { - dot_bytes *= 2; + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + camera_boundary_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + camera_boundary_obj->config.data_type = data_type; } - // ȷ֡ͷܡ߽š곤ȡ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct)); + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif - for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++) - { - // жǷͺ - if(NULL != buffer->boundary_x[i]) - { - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes); - } + camera_boundary_obj->buffer_byte_size = + boundary_lenght * 2 + * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2)); + camera_boundary_obj->data_buffer = data_buffer; - // жǷ - if(NULL != buffer->boundary_y[i]) - { - // ûݣʾÿһֻһ߽ - // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣 - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes); - } - } + // У + camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.check_sum += seekfree_assistant_sum( + &(camera_boundary_obj->config.cmd), + sizeof(camera_boundary_obj->config) - 2); } //------------------------------------------------------------------------------------------------------------------- -// ʾͺ +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_boundary_obj, + sizeof(camera_boundary_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_boundary_obj->data_buffer), + camera_boundary_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color) +{ + seekfree_assistant_camera_rectangular_struct camera_rectangular_obj; + memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct)); + camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif + + // У + camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.check_sum += seekfree_assistant_sum( + &(camera_rectangular_obj.cmd), + sizeof(camera_rectangular_obj) - 2); + + seekfree_assistant_transfer_callback( + (const uint8 *)&camera_rectangular_obj, + sizeof(camera_rectangular_obj)); +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer) +{ + zf_assert(NULL != oscilloscope_obj); + zf_assert(NULL != data_buffer); + + memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct)); + oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD; + oscilloscope_obj->config.channel_max = + (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max) + ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX) + : ((0 == channel_max) ? (1) : (channel_max)); + oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00); + oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4; + oscilloscope_obj->data_buffer = data_buffer; +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ // ˵ *seekfree_assistant_oscilloscope ʾݽṹ // ز void // ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope) +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj) { - uint8 packet_size; - - // λ - seekfree_assistant_oscilloscope->channel_num &= 0x0f; - - zf_assert(SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT >= seekfree_assistant_oscilloscope->channel_num); - - // ֡ͷ - seekfree_assistant_oscilloscope->head = SEEKFREE_ASSISTANT_SEND_HEAD; - - // дϢ - packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4; - seekfree_assistant_oscilloscope->length = packet_size; - - // д빦ͨ - seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE; - // У - seekfree_assistant_oscilloscope->check_sum = 0; - seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size); + oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + &(oscilloscope_obj->config.cmd), + sizeof(oscilloscope_obj->config) - 2); + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + (oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); - // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[] - - seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size); + seekfree_assistant_transfer_callback( + (const uint8 *)oscilloscope_obj, + sizeof(oscilloscope_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); } +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) //------------------------------------------------------------------------------------------------------------------- -// ͼϢú -// ˵ camera_type ͼ -// ˵ image_addr ͼַ NULLʾֻͱϢλ -// ˵ width ͼ -// ˵ height ͼ߶ +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ // ز void -// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H); -// עϢ +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height) +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj) { - seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION; - // дϢ - seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct); + zf_assert(NULL != debug_param_obj); - seekfree_assistant_camera_buffer.camera_type = camera_type; - seekfree_assistant_camera_buffer.image_addr = image_addr; - seekfree_assistant_camera_buffer.width = width; - seekfree_assistant_camera_buffer.height = height; -} + seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ + uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ + uint8 temp_sum = 0xFF; // Уʱ + uint32 read_length = 0; // ȡʱ -//------------------------------------------------------------------------------------------------------------------- -// ͼ߷ú -// ˵ boundary_type ߽ -// ˵ dot_num һ߽жٸ -// ˵ dot_x1 ű1ĵַ NULLʾͱ1 -// ˵ dot_x2 ű2ĵַ NULLʾͱ2 -// ˵ dot_x3 ű3ĵַ NULLʾͱ3 -// ˵ dot_y1 ű1ĵַ NULLʾͱ1 -// ˵ dot_y2 ű2ĵַ NULLʾͱ2 -// ˵ dot_y3 ű3ĵַ NULLʾͱ3 -// ز void -// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк -// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ -// ʹʾ seekfree_assistant_camera_config(XY_BOUNDARY, 160, xy_x1_boundary, xy_x2_boundary, xy_x3_boundary, xy_y1_boundary, xy_y2_boundary, xy_y3_boundary); // ͼʱߣ߰ -// עϢ -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3) -{ - uint8 i = 0; - uint8 boundary_num = 0; - uint8 boundary_data_type = 0; - - // ͼͻǷ׼, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_dot_data.dot_num = dot_num; - seekfree_assistant_camera_dot_data.valid_flag = 0; - for(i = 0; i < 3; i++) - { - seekfree_assistant_camera_buffer.boundary_x[i] = NULL; - seekfree_assistant_camera_buffer.boundary_y[i] = NULL; - } - - switch(boundary_type) - { - case X_BOUNDARY: - { - if(NULL != dot_x1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x1; - } - if(NULL != dot_x2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x2; - } - if(NULL != dot_x3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x3; - } - - if(255 < seekfree_assistant_camera_buffer.height) - { - boundary_data_type = 1; - } - }break; - - case Y_BOUNDARY: - { - if(NULL != dot_y1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if(NULL != dot_y2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if(NULL != dot_y3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if(255 < seekfree_assistant_camera_buffer.width) - { - boundary_data_type = 1; - } - }break; - - case XY_BOUNDARY: - { - if((NULL != dot_x1) && (NULL != dot_y1)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if((NULL != dot_x2) && (NULL != dot_y2)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if((NULL != dot_x3) && (NULL != dot_y3)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x3; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if((255 < seekfree_assistant_camera_buffer.width) || (255 < seekfree_assistant_camera_buffer.height)) - { - boundary_data_type = 1; - } - }break; - - case NO_BOUNDARY:break; - } - - seekfree_assistant_camera_dot_data.dot_type = (boundary_type << 6) | (boundary_data_type << 5) | boundary_num; -} - -//------------------------------------------------------------------------------------------------------------------- -// ַͷͼ -// ˵ void -// ز void -// ʹʾ -// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_send (void) -{ - // ͼͻǷ׼ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_data_send(seekfree_assistant_camera_buffer.camera_type, seekfree_assistant_camera_buffer.image_addr, seekfree_assistant_camera_dot_data.dot_type & 0x0f, seekfree_assistant_camera_buffer.width, seekfree_assistant_camera_buffer.height); - - if(seekfree_assistant_camera_dot_data.dot_type & 0x0f) - { - seekfree_assistant_camera_dot_send(&seekfree_assistant_camera_buffer); - } -} - - -//------------------------------------------------------------------------------------------------------------------- -// ֽյ -// ˵ void -// ز void -// ʹʾ ֻҪŵеPITжϻѭ -//------------------------------------------------------------------------------------------------------------------- -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) -void seekfree_assistant_data_analysis (void) -{ - uint8 temp_sum; - uint32 read_length; - seekfree_assistant_parameter_struct *receive_packet; - - // ʹuint32ж壬ĿΪ˱ֽ֤ڶ - uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4]; - - // Զȡ, ԶĴ䷽ʽӽջصжȡ - read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE); + // Զȡһݰ + // ԶĴ䷽ʽӽջصжȡ + read_length = seekfree_assistant_receive_callback( + debug_param_cmd_pointer, + sizeof(seekfree_assistant_debug_param_cmd_struct)); if(read_length) - { - // ȡдFIFO - fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length); + { // ȡдFIFO + fifo_write_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + read_length); } - while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo)) - { - read_length = sizeof(seekfree_assistant_parameter_struct); - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_ONLY); + while( sizeof(seekfree_assistant_debug_param_cmd_struct) + <= fifo_used(&seekfree_assistant_debug_param_fifo)) + { // FIFO һݰ ôͽн + // ֱӶһݰ + read_length = sizeof(seekfree_assistant_debug_param_cmd_struct); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_ONLY); - if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0]) - { - // û֡ͷFIFOȥһ - read_length = 1; - } - else - { - // ҵ֡ͷ - receive_packet = (seekfree_assistant_parameter_struct *)temp_buffer; - temp_sum = receive_packet->check_sum; - receive_packet->check_sum = 0; - if(temp_sum == seekfree_assistant_sum((uint8 *)temp_buffer, sizeof(seekfree_assistant_parameter_struct))) - { - // Уɹ - seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data; - seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1; + if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0] + && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2]) + { // ֱƥ֡ͷ ҹҲƥ + temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ + debug_param_cmd_obj.check_sum = 0; // հУֵ У + if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct))) + { // Уɹ + debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float; + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0]; + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + #endif + debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1; + temp_sum = 0x00; } else - { - read_length = 1; + { // Уƥ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + } + else + { // ƥ䲻֡ͷ͹ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + + if(0xFF == temp_sum) + { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ + for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++) + { // Ϊȡһ һ + if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length]) + { // ҵ¸֡ͷ˳ + break; + } } } // ʹõ - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_AND_CLEAN); } } #endif - - - diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.h index 5b7e1b5..937f784 100644 --- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,142 +24,292 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ - #include "zf_common_typedef.h" +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 , + SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 , +}seekfree_assistant_data_type_enum; -// 1ʹܲڵĹ 0رղڵĹ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 ) - - - -// FIFOС -#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) - -// ʾͨ -#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) - -// Եͨ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) - -// ͼ -#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) - -// Ƭλ͵֡ͷ -#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) - -// ͷ -#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) -#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) -#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) - -// λƬ͵֡ͷ -#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) - -// -#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) - +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ +}seekfree_assistant_ccd_resolution_enum; // ͷö typedef enum { - // ͷͺŶ - SEEKFREE_ASSISTANT_OV7725_BIN = 1, - SEEKFREE_ASSISTANT_MT9V03X, - SEEKFREE_ASSISTANT_SCC8660, - // ͼͶ - SEEKFREE_ASSISTANT_BINARY = 1, - SEEKFREE_ASSISTANT_GRAY, - SEEKFREE_ASSISTANT_RGB565, -}seekfree_assistant_image_type_enum; + SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY , + SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 , -// ͷö -typedef enum -{ - // ͷͺŶ - X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ - Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ - XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ - NO_BOUNDARY, // ͵ͼûбϢ -}seekfree_assistant_boundary_type_enum; + // ͷͺƥ䶨 + SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X , + SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 , +}seekfree_assistant_camera_type_enum; + +#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨 + +#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ +#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤ + +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС +#endif typedef struct { - uint8 head; // ֡ͷ - uint8 channel_num; // λΪ λΪͨ - uint8 check_sum; // У - uint8 length; // - float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + uint8 data_lenght_buffer[2] ; // CCD ݳ + uint8 channel_color_buffer[2] ; // ͨɫ + uint8 channel_data_max[2] ; // ֵͨ + uint8 data_type ; // ȷϴС + uint8 reserve ; // + }config; + uint16 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_ccd_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 camera_type ; // ͷ + uint8 image_width_buffer[2] ; // ͼ + uint8 image_height_buffer[2] ; // ͼ߶ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 data_type ; // ȷϴС + uint8 boundary_lenght_buffer[2] ; // ߳ + uint8 color_buffer[2] ; // ͨɫ + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_boundary_struct; + +typedef struct +{ + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 reserve ; // + uint8 x_axis_buffer[2] ; // X + uint8 y_axis_buffer[2] ; // Y + uint8 width_buffer[2] ; // ο + uint8 height_buffer[2] ; // θ߶ + uint8 color_buffer[2] ; // ɫ +}seekfree_assistant_camera_rectangular_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_max ; // ͨ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ }seekfree_assistant_oscilloscope_struct; +typedef union +{ + uint8 data_uint8[4] ; + float data_float ; +}seekfree_assistant_param_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ - uint8 length; // ȣЭ鲿֣ - uint16 image_width; // ͼ - uint16 image_height; // ͼ߶ -}seekfree_assistant_camera_struct; - - -typedef struct -{ - uint8 head; // ֡ͷ - uint8 function; // - uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽ - uint8 length; // ȣЭ鲿֣ - uint16 dot_num; // - uint8 valid_flag; // ͨʶ - uint8 reserve; // -}seekfree_assistant_camera_dot_struct; - -typedef struct -{ - void *image_addr; // ͷַ - uint16 width; // ͼ - uint16 height; // ͼ߶ - seekfree_assistant_image_type_enum camera_type; // ͷ - void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ - void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ -}seekfree_assistant_camera_buffer_struct; + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + seekfree_assistant_param_struct dat ; // һ + +}seekfree_assistant_debug_param_cmd_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 channel; // ͨ - uint8 check_sum; // У - float data; // -}seekfree_assistant_parameter_struct; + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint8_struct; + + +typedef struct +{ + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint16_struct; + +typedef struct +{ + float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; + uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; +}seekfree_assistant_debug_param_struct; typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length); typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length); -extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ -extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ - - -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope); -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height); -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3); -void seekfree_assistant_camera_send (void); -void seekfree_assistant_data_analysis (void); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ +// ز void +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, 16] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *seekfree_assistant_oscilloscope ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj); + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj); +#endif #endif diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c index d139201..23205d5 100644 --- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,23 +24,20 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_typedef.h" #include "zf_common_fifo.h" #include "zf_common_debug.h" -#include "zf_driver_uart.h" + #include "zf_device_wireless_uart.h" -#include "zf_device_ble6a20.h" -#include "zf_device_bluetooth_ch9141.h" -#include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" #include "seekfree_assistant.h" @@ -50,7 +47,6 @@ extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ - //------------------------------------------------------------------------------------------------------------------- // ַͺ // ˵ *buff Ҫ͵ݵַ @@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv // ز uint32 ʣδݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) +uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݷ͹ @@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) // ز uint32 յݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) +uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݽչ return 0; @@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) // ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ // ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) +void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) { switch(transfer_device) { case SEEKFREE_ASSISTANT_DEBUG_UART: { -#if DEBUG_UART_USE_INTERRUPT == 1 seekfree_assistant_transfer_callback = debug_send_buffer; seekfree_assistant_receive_callback = debug_read_ring_buffer; -#endif }break; - + case SEEKFREE_ASSISTANT_WIRELESS_UART: { seekfree_assistant_transfer_callback = wireless_uart_send_buffer; seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; - - case SEEKFREE_ASSISTANT_BLE6A20: - { - seekfree_assistant_transfer_callback = ble6a20_send_buffer; - seekfree_assistant_receive_callback = ble6a20_read_buffer; - }break; - case SEEKFREE_ASSISTANT_CH9141: - { - seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; - seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; - }break; - - case SEEKFREE_ASSISTANT_WIFI_UART: - { - seekfree_assistant_transfer_callback = wifi_uart_send_buffer; - seekfree_assistant_receive_callback = wifi_uart_read_buffer; - }break; - + // case SEEKFREE_ASSISTANT_CH9141: + // { + // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; + // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; + // }break; + + // case SEEKFREE_ASSISTANT_WIFI_UART: + // { + // seekfree_assistant_transfer_callback = wifi_uart_send_buffer; + // seekfree_assistant_receive_callback = wifi_uart_read_buffer; + // }break; + case SEEKFREE_ASSISTANT_WIFI_SPI: { seekfree_assistant_transfer_callback = wifi_spi_send_buffer; seekfree_assistant_receive_callback = wifi_spi_read_buffer; }break; - - case SEEKFREE_ASSISTANT_CUSTOM: - { + + default: + { // Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ - + seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + seekfree_assistant_receive_callback = seekfree_assistant_receive; }break; } } - - diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.h index 2ccfd8a..0e28f49 100644 --- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,13 +24,13 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,7 +43,6 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ SEEKFREE_ASSISTANT_WIRELESS_UART, // ת - SEEKFREE_ASSISTANT_BLE6A20, // ת SEEKFREE_ASSISTANT_CH9141, // CH9141 SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_absolute_encoder.h index 1166c84..dc091aa 100644 --- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_absolute_encoder.h +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_absolute_encoder.h @@ -62,7 +62,7 @@ //==================================================== SPI ==================================================== #else //====================================================Ӳ SPI ==================================================== -#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI +#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI #define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI #define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK #define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI @@ -70,7 +70,7 @@ //====================================================Ӳ SPI ==================================================== #endif -#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ +#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ #define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN))) #define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ble6a20.h index 6f4544a..6af089f 100644 --- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ble6a20.h +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ble6a20.h @@ -76,7 +76,7 @@ // 1Զ Զʵ޸ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ // Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000 -#define BLE6A20_AUTO_BAUD_RATE ( 0 ) +#define BLE6A20_AUTO_BAUD_RATE ( 1 ) #if (1 == BLE6A20_AUTO_BAUD_RATE) typedef enum diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rc.c new file mode 100644 index 0000000..68840e2 --- /dev/null +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rc.c @@ -0,0 +1,563 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#include "math.h" +#include "zf_common_debug.h" +#include "zf_driver_delay.h" +#include "zf_driver_spi.h" +#include "zf_driver_gpio.h" +#include "zf_driver_soft_iic.h" +#include "zf_device_config.h" +#include "zf_driver_uart.h" +#include "zf_driver_exti.h" + +#include "zf_device_imu660rc.h" + +#ifndef M_PI +#define M_PI 3.1415926f +#endif + + +static uint8 imu660rc_quarternion_rate; + +float imu660rc_transition_factor[2]; +int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro () +int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ) +float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ +float imu660rc_quarternion[4]; // Ԫ + + + +#if IMU660RC_USE_SOFT_IIC +static soft_iic_info_struct imu660rc_iic_struct; + +#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data))) +#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len))) +#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg))) +#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len))) +#else +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC дĴ +// ˵ reg Ĵַ +// ˵ data +// ز void +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_write_register (uint8 reg, uint8 data) +{ + IMU660RC_CS(0); + spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data); + IMU660RC_CS(1); +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ĵ +// ˵ reg Ĵַ +// ز uint8 +// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_read_register (uint8 reg) +{ + uint8 data; + IMU660RC_CS(0); + data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R); + IMU660RC_CS(1); + return data; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC +// ˵ reg Ĵַ +// ˵ data ݻ +// ˵ len ݳ +// ز void +// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len) +{ + IMU660RC_CS(0); + spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len); + IMU660RC_CS(1); +} +#endif + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC fp16ת +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint32 fp16_to_float(uint16 h) +{ + uint16 h_exp = (h & 0x7c00u); + uint32 f_sgn = ((uint32)h & 0x8000u) << 16; + switch (h_exp) + { + case 0x0000u: // 0 or subnormal + { + uint16 h_sig = (h & 0x03ffu); + // Signed zero + if (h_sig == 0) + { + return f_sgn; + } + // Subnormal + h_sig <<= 1; + while ((h_sig & 0x0400u) == 0) + { + h_sig <<= 1; + h_exp++; + } + uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23; + uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13; + return f_sgn + f_exp + f_sig; + } + case 0x7c00u: // inf or NaN + { + // All-ones exponent and a copy of the significand + return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13); + } + default: // normalized + { + // Just need to adjust the exponent and shift + return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13); + } + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫһ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_normalize(float quat[4], uint16 *fp16) +{ + float n = 0; + float temp[4]; + + *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]); + *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]); + *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]); + *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]); + + n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3]; + n = sqrtf(n); + + if(n > 0.001f) // Խӽ0ֵ + { + n = temp[3] < 0.0f ? -n : n; + + quat[0] = temp[1] / n; + quat[1] = temp[2] / n; + quat[2] = temp[0] / n; + quat[3] = temp[3] / n; + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫתŷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw) +{ + float euler[3]; + + float sqx = quat[0] * quat[0]; + float sqy = quat[1] * quat[1]; + float sqz = quat[2] * quat[2]; + + euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx)); + euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2])); + euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz)); + + // תǶ + euler[0] = 180 * (euler[0]) / M_PI; + euler[1] = 180 * (euler[1]) / M_PI; + euler[2] = 180 * (euler[2]) / M_PI; + + // Ƕȵ + euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2]; + + *roll = euler[0]; + *pitch = euler[1]; + *yaw = euler[2]; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ÷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank) +{ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank); +} + + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Լ +// ˵ void +// ز uint8 1-Լʧ 0-Լɹ +// ʹʾ imu660rc_self_check(); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_self_check (void) +{ + uint8 dat = 0, return_state = 0; + uint16 timeout_count = 0; + do + { + if(IMU660RC_TIMEOUT_COUNT < timeout_count ++) + { + return_state = 1; + break; + } + dat = imu660rc_read_register(IMU660RC_CHIP_ID); + system_delay_ms(1); + }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû⵽豸 + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ٶȼ +// ˵ void +// ز void +// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_acc (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6); + imu660rc_acc_x = dat[0]; + imu660rc_acc_y = dat[1]; + imu660rc_acc_z = dat[2]; + } +} +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC +// ˵ void +// ز void +// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_gyro (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6); + imu660rc_gyro_x = dat[0]; + imu660rc_gyro_y = dat[1]; + imu660rc_gyro_z = dat[2]; + } +} + + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ԪݲתΪŷ +// ˵ void +// ز void +// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı +// עϢ ҪINT2Ŵжϵô˺ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_quarternion(void) +{ + uint8 i; + uint16 buff[4]; + uint8 *buff1_ptr; + int16 *buff2_ptr; + + if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate) + { + buff1_ptr = (uint8 *)buff; + + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x20); + imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31); + + for(i = 0; 8 > i; i++) + { + imu660rc_write_register(0x08, 0x4C + i); + buff1_ptr[i] = imu660rc_read_register(0x09); + } + + imu660rc_write_register(IMU660RC_PAGE_RW, 0x0); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // Ԫһ + quarternion_normalize(imu660rc_quarternion, buff); + // Ԫתŷ + quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw); + + // ȡٶٶϢ + #if(1 == IMU660RC_QUARTERNION_GET_ACC) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6); + imu660rc_acc_x = buff2_ptr[0]; + imu660rc_acc_y = buff2_ptr[1]; + imu660rc_acc_z = buff2_ptr[2]; + } + #endif + #if(1 == IMU660RC_QUARTERNION_GET_GYRO) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6); + imu660rc_gyro_x = buff2_ptr[0]; + imu660rc_gyro_y = buff2_ptr[1]; + imu660rc_gyro_z = buff2_ptr[2]; + } + #endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RCжϻصҪжڶȡԪ +// ˵ void +// ز void +// ʹʾ +// עϢ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_callback(void) +{ + imu660rc_get_quarternion(); + +} + +//------------------------------------------------------------------------------------------------------------------- +// ʼ IMU660RC +// ˵ quarternion_rate ѡԪ +// ز uint8 1-ʼʧ 0-ʼɹ +// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate) +{ + uint8 return_state = 0; + + imu660rc_quarternion_rate = quarternion_rate; + #if IMU660RC_USE_SOFT_IIC + soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿ + + #else + spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿ + gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿ + #endif + + system_delay_ms(10); + + do + { + if(imu660rc_self_check()) // IMU660RC Լ + { + // ˶Ϣ ʾλ + // ô IMU660RC Լʱ˳ + // һ½û ûܾǻ + zf_log(0, "imu660rc self check error."); + return_state = 1; + break; + } + + // λ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04); + system_delay_ms(30); + + // ÿ¹ַ + imu660rc_write_register(IMU660RC_CTRL3, 0x44); + + switch(IMU660RC_ACC_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_ACC_SAMPLE_SGN_2G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x00); + imu660rc_transition_factor[0] = 16393.44; + }break; + case IMU660RC_ACC_SAMPLE_SGN_4G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x01); + imu660rc_transition_factor[0] = 8196.72; + }break; + case IMU660RC_ACC_SAMPLE_SGN_8G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x02); + imu660rc_transition_factor[0] = 4098.36; + }break; + case IMU660RC_ACC_SAMPLE_SGN_16G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x03); + imu660rc_transition_factor[0] = 2049.18; + }break; + } + if(1 == return_state) + { + break; + } + + switch(IMU660RC_GYRO_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_125DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x00); + imu660rc_transition_factor[1] = 228.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_250DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x01); + imu660rc_transition_factor[1] = 114.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_500DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x02); + imu660rc_transition_factor[1] = 57.1428; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_1000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x03); + imu660rc_transition_factor[1] = 28.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_2000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x04); + imu660rc_transition_factor[1] = 14.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_4000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x0C); + imu660rc_transition_factor[1] = 7.14285; + }break; + } + if(1 == return_state) + { + break; + } + + // ôģʽΪ߾ģʽԼ + imu660rc_write_register(IMU660RC_CTRL1, 0x15); + imu660rc_write_register(IMU660RC_CTRL2, 0x18); + + // LPF1˲ + imu660rc_write_register(IMU660RC_CTRL7, 0x01); + + // LPF2˲ + imu660rc_write_register(IMU660RC_CTRL9, 0x08); + + // ԪӦ + if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate) + { + // жϴź + imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80); + imu660rc_write_register(IMU660RC_CTRL4, 0x08); + imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30); + + // üٶȡٶ + imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3)); + imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3)); + + // Ԫʲ + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3)); + imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x00); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // жϼ + exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING); + } + }while(0); + + return return_state; +} + + + + + + + + + + + + + diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rc.h new file mode 100644 index 0000000..dd5a9e3 --- /dev/null +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rc.h @@ -0,0 +1,211 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#ifndef _zf_device_imu660rc_h_ +#define _zf_device_imu660rc_h_ + +#include "zf_common_typedef.h" + + +// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC +// IMU660RC_USE_SOFT_IICҪȱ벢س򣬵ƬģҪϵͨѶ +#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ + +#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ +//==================================================== IIC ==================================================== +#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ +#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL +#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA +//==================================================== IIC ==================================================== +#else + +//====================================================Ӳ SPI ==================================================== +#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI +#define IMU660RC_SPI (SPI_0) // Ӳ SPI +#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK +#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI +#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO +//====================================================Ӳ SPI ==================================================== +#endif +#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ +#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) ) +#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ + + +#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ +#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ + +typedef enum +{ + IMU660RC_MAIN_MEM_BANK = 0x00, + IMU660RC_HUB_MEM_BANK = 0x40, + IMU660RC_EMBED_MEM_BANK = 0x80, +}imu660rc_mem_bank_enum; + +typedef enum +{ + IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2) + IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G + IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G + IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G +}imu660rc_acc_sample_config; + +typedef enum +{ + IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S) + IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS + IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS + IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS + IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS + IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS +}imu660rc_gyro_sample_config; + +typedef enum +{ + IMU660RC_QUARTERNION_15HZ, // 15 Hz + IMU660RC_QUARTERNION_30HZ, // 30 Hz + IMU660RC_QUARTERNION_60HZ, // 60 Hz + IMU660RC_QUARTERNION_120HZ, // 120Hz + IMU660RC_QUARTERNION_240HZ, // 240Hz + IMU660RC_QUARTERNION_480HZ, // 480Hz + IMU660RC_QUARTERNION_DISABLE, // Ԫ +}imu660rc_quarternion_rate_config; + + +//================================================ IMU660RC ڲַ================================================ +#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ +#define IMU660RC_SPI_W ( 0x00 ) +#define IMU660RC_SPI_R ( 0x80 ) +#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ + + +//================================================ IMU660RC Ĵַ================================================ +#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 ) +#define IMU660RC_INT2_CTRL ( 0x0E ) +#define IMU660RC_CHIP_ID ( 0x0F ) +#define IMU660RC_CTRL1 ( 0x10 ) +#define IMU660RC_CTRL2 ( 0x11 ) +#define IMU660RC_CTRL3 ( 0x12 ) +#define IMU660RC_CTRL4 ( 0x13 ) +#define IMU660RC_CTRL5 ( 0x14 ) +#define IMU660RC_CTRL6 ( 0x15 ) +#define IMU660RC_CTRL7 ( 0x16 ) +#define IMU660RC_CTRL8 ( 0x17 ) +#define IMU660RC_CTRL9 ( 0x18 ) +#define IMU660RC_CTRL10 ( 0x19 ) +#define IMU660RC_CTRL_STATUS ( 0x1A ) +#define IMU660RC_STATUS_REG ( 0x1E ) +#define IMU660RC_OUT_TEMP_L ( 0x20 ) +#define IMU660RC_OUT_TEMP_H ( 0x21 ) +#define IMU660RC_OUTX_L_G ( 0x22 ) +#define IMU660RC_OUTX_H_G ( 0x23 ) +#define IMU660RC_OUTY_L_G ( 0x24 ) +#define IMU660RC_OUTY_H_G ( 0x25 ) +#define IMU660RC_OUTZ_L_G ( 0x26 ) +#define IMU660RC_OUTZ_H_G ( 0x27 ) +#define IMU660RC_OUTX_L_A ( 0x28 ) +#define IMU660RC_OUTX_H_A ( 0x29 ) +#define IMU660RC_OUTY_L_A ( 0x2A ) +#define IMU660RC_OUTY_H_A ( 0x2B ) +#define IMU660RC_OUTZ_L_A ( 0x2C ) +#define IMU660RC_OUTZ_H_A ( 0x2D ) + +#define IMU660RC_PAGE_SEL ( 0x02 ) +#define IMU660RC_EMB_FUNC_EN_A ( 0x04 ) +#define IMU660RC_PAGE_RW ( 0x17 ) +#define IMU660RC_SFLP_ODR ( 0x5E ) +#define IMU660RC_EMB_FUNC_CFG ( 0x63 ) + + + +extern float imu660rc_transition_factor[2]; +extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; // +extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ +extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ +extern float imu660rc_quarternion[4]; // Ԫ + + +void imu660rc_get_acc (void); +void imu660rc_get_gyro (void); +void imu660rc_get_quarternion (void); + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ٶȼתΪʵ +// ˵ acc_value ļٶȼ +// ز void +// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2) +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0]) + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC תΪʵ +// ˵ gyro_value +// ز void +// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1]) +void imu660rc_callback (void); +uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate); + + + +#endif diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rx.h index 45699d9..81b8b41 100644 --- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rx.h +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660rx.h @@ -97,7 +97,7 @@ //================================================ IMU660RX ȫֱ================================================ extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro () extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ) -extern float imu660ra_transition_factor[2]; +extern float imu660rx_transition_factor[2]; //================================================ IMU660RX ȫֱ================================================ diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips114.h index c56f310..9c4ac0d 100644 --- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips114.h +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips114.h @@ -167,7 +167,7 @@ void ips114_init (void); // ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================= IPS114 չ================================================ #endif diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200.h index 850fb11..5bf4284 100644 --- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200.h +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200.h @@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select); // ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================== IPS200 չ================================================ diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h index 98c5364..557e1d2 100644 --- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h @@ -86,7 +86,7 @@ // £SCC8660_PCLK_DIVԽͼԽ #define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1> #define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ -#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) +#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) #define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0 //================================================ SCC8660 ã֧ͫ֡ʰ汾=========================== diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.c index b51c600..b06e6a1 100644 --- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.c +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.c @@ -24,7 +24,7 @@ * ļ zf_device_wifi_spi * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.9.20 +* ADS v1.10.2 * ƽ̨ TC264D * https://seekfree.taobao.com/ * @@ -63,6 +63,21 @@ #define SOCKET_CONNECT_TIME_OUT 50000 // λ #define OTHER_TIME_OUT 1000 // λ +#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088)) + #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088" +#endif + +#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE) + #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE" +#endif + + +#if (WIFI_SPI_TRANSFER_SIZE != 4088) + #error "WIFI_SPI_TRANSFER_SIZE must be == 4088" +#endif + + + char wifi_spi_version[12]; // ģ̼汾Ϣ char wifi_spi_mac_addr[20]; // ģMACַϢ char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ @@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void) { memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1; - return return_state; } @@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void) { memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1; - return return_state; } @@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void) { memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1; + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ȡϵͳʱ +// ˵ time_format ʱʽ +// ز *buffer ʱַַ СҪ30ֽ +// ز buffer_size С +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size) +{ + uint8 return_state = 1; + wifi_spi_packets_struct temp_packets; + uint8 send_cmd, receive_cmd; + + // ʱ30ֽ + // ģ̼V2汾 + if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2))) + { + send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0; + receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0; + + return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT); + if((0 == return_state) && (receive_cmd == temp_packets.head.command)) + { + return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2); + if(0 == return_state) + { + memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3); + buffer[temp_packets.head.length - 3] = 0; + } + } + } + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ɨȵ +// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз +// ˵ buffer_size ij +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +// עϢ ÿһаһwifi +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size) +{ + uint8 return_state; + + // ģV2汾Ĺִ̼֧˹ + if(!strncmp(wifi_spi_version, "V2", 2)) + { + return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT); + + if(0 == return_state) + { + #if (0 == WIFI_SPI_READ_TRANSFER) + wifi_spi_send_buffer(NULL, 0); + #endif + while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size)) + { + system_delay_ms(10); + } + } + } return return_state; } @@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) while(length) { - send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length; + send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length); if(wifi_spi_wait_idle(OTHER_TIME_OUT)) { @@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) return length; } +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ַͺͬ +// ˵ *string Ҫ͵ַ +// ز void +// ʹʾ wifi_spi_send_string("123"); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +void wifi_spi_send_string(const char *string) +{ + wifi_spi_send_buffer((uint8*)string, strlen(string)); +} + //------------------------------------------------------------------------------------------------------------------- // WIFI SPI ȡ // ˵ *buff ջ @@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) { zf_assert(NULL != buffer); - uint32 data_len = length; + uint32 fifo_read_length; + uint32 write_length = 0; + wifi_spi_packets_struct temp_packets; + + // жFIFOǷݣȴFIFOȡ + if(fifo_used(&wifi_spi_fifo)) + { + fifo_read_length = fifo_used(&wifi_spi_fifo); + fifo_read_length = length < fifo_read_length ? length : fifo_read_length; + fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN); + + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + } #if(1 == WIFI_SPI_READ_TRANSFER) - - wifi_spi_packets_struct temp_packets; - // WIFI SPI״̬жϻ߳ѾͨѶ򱾴βܷ if(WIFI_SPI_IDLE == wifi_spi_mutex) { - // ͨѶ״̬Ϊæ - wifi_spi_mutex = WIFI_SPI_BUSY; + wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ - // ͨѶ鿴ģǷδȡ do { - if(wifi_spi_wait_idle(OTHER_TIME_OUT)) + if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ + (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳ + ) { break; } + temp_packets.head.command = WIFI_SPI_DATA; temp_packets.head.length = 0; wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE); // յİǷ - if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) + if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) && + (temp_packets.head.length) + ) { - // յ - if(temp_packets.head.length) + if(length) + { + fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length; + memcpy(buffer, temp_packets.buffer, fifo_read_length); + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO + { + fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length); + } + } + else // ȫдFIFO { fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length); } @@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command); wifi_spi_mutex = WIFI_SPI_IDLE; } -#endif +#endif - fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN); - return data_len; + return write_length; } //------------------------------------------------------------------------------------------------------------------- @@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word) // MACַϢַʽwifi_spi_mac_addr wifi_spi_get_mac_addr(); - + if(NULL == wifi_ssid) + { + // ʼʱҪWIFI + break; + } return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word); if(return_state) { diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.h index eea8a78..e7cec39 100644 --- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.h +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.h @@ -73,8 +73,8 @@ #if (WIFI_SPI_AUTO_CONNECT > 2) #error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]" #else -#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP -#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿ +#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP +#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666 #endif @@ -95,10 +95,15 @@ typedef enum WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ + WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI + WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾 WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ + WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1 + WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2 + WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3 // ӻش WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ @@ -110,6 +115,9 @@ typedef enum WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾 WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں + WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ + WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ + WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ WIFI_SPI_INVALID2 = 0xFF // Чݰ }wifi_spi_packets_command_enum; @@ -134,19 +142,27 @@ typedef struct uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // }wifi_spi_packets_struct; - +typedef enum +{ + WIFI_SPI_UTC_0 = 1, // ʱ + WIFI_SPI_GMT, // ʱ תΪGMTʽ׺GMT һڶԽƶ˴ģʹ + WIFI_SPI_UTC_8, // ʱ +}wifi_spi_time_enum; + extern char wifi_spi_version[12]; // ̼汾 ַ extern char wifi_spi_mac_addr[20]; // ģMACַ ַ extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ -uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); -uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); -uint8 wifi_spi_socket_disconnect (void); -uint8 wifi_spi_udp_send_now (void); -uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); -uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size); +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size); +uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); +uint8 wifi_spi_socket_disconnect (void); +uint8 wifi_spi_udp_send_now (void); +uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); +void wifi_spi_send_string (const char *string); +uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); -uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); #endif - diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.h index 0f392ff..24b88cc 100644 --- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.h +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.h @@ -73,7 +73,7 @@ #if (WIFI_UART_AUTO_CONNECT > 3) #error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]" #else -#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP +#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP #define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_UART_LOCAL_PORT "8080" // ˿ #endif diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_encoder.c index 8d514b7..ad4099e 100644 --- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_encoder.c +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_encoder.c @@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n) //------------------------------------------------------------------------------------------------------------------- void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin) { -// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init + zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init IfxGpt12_enableModule(&MODULE_GPT120); IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4); diff --git a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/user/isr.c b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/user/isr.c index e19382e..927ed43 100644 --- a/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/user/isr.c +++ b/Example/Coreboard_Demo/E11_interrupt_priority_set_demo/user/isr.c @@ -40,14 +40,14 @@ // 򵥵˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ // **************************** PITжϺ **************************** -IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) -{ - interrupt_global_enable(0); // жǶ - pit_clear_flag(CCU60_CH0); - - - -} +//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) +//{ +// interrupt_global_enable(0); // жǶ +// pit_clear_flag(CCU60_CH0); +// +// +// +//} IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) @@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж { exti_flag_clear(ERU_CH0_REQ0_P15_4); - + + imu660rc_callback(); // 660RC ģ INT ж } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж @@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) { exti_flag_clear(ERU_CH5_REQ1_P15_8); - } } @@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) // exti_flag_clear(ERU_CH6_REQ9_P20_0); // } // } - IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO) { interrupt_global_enable(0); // жǶ @@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { interrupt_global_enable(0); // жǶ - gnss_uart_callback(); // GPSڻص + gnss_uart_callback(); // GNSSڻص diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt index 1e222a3..8ce85ca 100644 --- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt @@ -1,3 +1,13 @@ +V3.4.4 + SCC8660ʽ + ָV2 + ޸ips200ʾscc8660ͷʽ + ޸ips114ʾscc8660ͷʽ +V3.4.3 + 660RC +V3.4.2 + ޸printfضеĺ궨 + WIFI_SPI V3.4.1 ޸Ĵڷ麯еķ ޸ips200proע diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h index 27b7965..e8d6021 100644 --- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h @@ -91,6 +91,7 @@ #include "zf_device_imu660ra.h" #include "zf_device_imu660rb.h" #include "zf_device_imu660rx.h" +#include "zf_device_imu660rc.h" #include "zf_device_imu963ra.h" #include "zf_device_ips114.h" #include "zf_device_ips200.h" diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/printf_redirect.c index c44d826..299da76 100644 --- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/printf_redirect.c +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/printf_redirect.c @@ -45,7 +45,7 @@ //------------------------------------------------------------------------------------------------------------------- int fputc(int ch, FILE *stream) { - uart_write_byte(DEBUG_UART_INDEX, (char)ch); + uart_write_byte(PRINTF_USE_UART, (char)ch); return (ch); } @@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len) int fgetc(FILE *f) { #if PRINTF_OUTPUT_TYPE == 0 - return uart_read_byte(DEBUG_UART_INDEX); + return uart_read_byte(PRINTF_USE_UART); #else uint8 buf; wifi_spi_read_buffer(&buf, 1); diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.c index 231b20d..3e9ec74 100644 --- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,423 +24,519 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_debug.h" #include "seekfree_assistant.h" +// ͨö +typedef enum +{ + SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 , + SEEKFREE_ASSISTANT_SEND_CAMERA_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD , -extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); -extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); + SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 , -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) + SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 , +}seekfree_assistant_cmd_type_enum; + +#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ +#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ + +// ݷͺָ +extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); +seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + +// ݽպָ +extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); +seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) #include "zf_common_fifo.h" -static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO -static fifo_struct seekfree_assistant_fifo = // FIFOṹ +static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE]; +static fifo_struct seekfree_assistant_debug_param_fifo = { - .buffer = seekfree_assistant_buffer, + .buffer = seekfree_assistant_debug_param_buffer, .execution = FIFO_IDLE, .type = FIFO_DATA_8BIT, .head = 0, .end = 0, - .size = SEEKFREE_ASSISTANT_BUFFER_SIZE, - .max = SEEKFREE_ASSISTANT_BUFFER_SIZE, -}; + .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, + .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, +}; #endif -static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ -static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ -static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ - -seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ -seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ - -seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ -vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ - //------------------------------------------------------------------------------------------------------------------- // ͺ -// ˵ *buffer ҪУݵַ -// ˵ length У鳤 -// ز uint8 ֵ +// ˵ *buffer ҪУݵַ +// ˵ length У鳤 +// ز uint8 ֵ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length) +static uint8 seekfree_assistant_sum (void *buffer, uint32 length) { uint8 temp_sum = 0; + uint8 *ptr = (uint8 *)buffer; while(length--) { - temp_sum += *buffer++; + temp_sum += *ptr ++; } return temp_sum; } //------------------------------------------------------------------------------------------------------------------- -// ͼͺ -// ˵ camera_type ͷ -// ˵ *image_addr ͼ׵ַ -// ˵ boundary_num ͼа߽ -// ˵ width ͼ -// ˵ height ͼ߶ +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ // ز void -// ʹʾ +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height) +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer) { - uint32 image_size = 0; + zf_assert(NULL != ccd_obj); + zf_assert(NULL != data_buffer); - seekfree_assistant_camera_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_data.function = SEEKFREE_ASSISTANT_CAMERA_FUNCTION; - seekfree_assistant_camera_data.camera_type = (camera_type << 5) | ((image_addr != NULL ? 0 : 1) << 4) | boundary_num; - // дϢЭ鲿 - seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct); - seekfree_assistant_camera_data.image_width = width; - seekfree_assistant_camera_data.image_height = height; + memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct)); + ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD; + ccd_obj->config.channel_index = channel_index; - // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct)); - - // ͷͼͼС - switch(camera_type) + uint16 data_max = 256; + uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT; + loop_count = (2 >= loop_count) ? (loop_count) : (2); + for(uint8 i = 0; loop_count > i; i ++) { - case SEEKFREE_ASSISTANT_OV7725_BIN: - { - image_size = width * height / 8; - }break; - - case SEEKFREE_ASSISTANT_MT9V03X: - { - image_size = width * height; - }break; - - case SEEKFREE_ASSISTANT_SCC8660: - { - image_size = width * height * 2; - }break; + data_max *= 4; } - // ͼ - if(NULL != image_addr) + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF); + #else + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + ccd_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + ccd_obj->config.data_type = data_type; + } + + // ¼ʵֽ uint16 Ҫݳ + ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1)); + // Ȼ¼Ӧݻ + ccd_obj->data_buffer = data_buffer; + + // У + ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.check_sum += seekfree_assistant_sum( + &(ccd_obj->config.cmd), + sizeof(ccd_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)ccd_obj, + sizeof(ccd_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(ccd_obj->data_buffer), + ccd_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer) +{ + zf_assert(NULL != camera_obj); + + memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct)); + camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD; + camera_obj->config.camera_type = camera_type; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF); + #else + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type + && NULL != data_buffer) { - seekfree_assistant_transfer_callback(image_addr, image_size); + camera_obj->config.data_type = 0x02; + } + else + { + camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01); + } + + // RGB565 ͼ ôֽ + camera_obj->buffer_byte_size = + image_width * image_height + * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1)); + camera_obj->buffer_byte_size = + (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type) + ? (camera_obj->buffer_byte_size / 8) + : (camera_obj->buffer_byte_size); + camera_obj->data_buffer = data_buffer; + + // У + camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.check_sum += seekfree_assistant_sum( + &(camera_obj->config.cmd), + sizeof(camera_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_obj, + sizeof(camera_obj->config)); + if(NULL != camera_obj->data_buffer) + { + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_obj->data_buffer), + camera_obj->buffer_byte_size); } } //------------------------------------------------------------------------------------------------------------------- -// ͼ߻ƺ -// ˵ boundary_id ID -// ˵ dot_num -// ˵ *dot_x ׵ַ -// ˵ *dot_y ׵ַ -// ˵ width ͼ -// ˵ height ͼ߶ +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 // ز void -// ʹʾ +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer) +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer) { - uint8 i; - uint16 dot_bytes = 0; // ֽ + zf_assert(NULL != camera_boundary_obj); + zf_assert(NULL != data_buffer); - dot_bytes = seekfree_assistant_camera_dot_data.dot_num; + memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct)); + camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD; - if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5)) - { - dot_bytes *= 2; + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + camera_boundary_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + camera_boundary_obj->config.data_type = data_type; } - // ȷ֡ͷܡ߽š곤ȡ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct)); + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif - for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++) - { - // жǷͺ - if(NULL != buffer->boundary_x[i]) - { - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes); - } + camera_boundary_obj->buffer_byte_size = + boundary_lenght * 2 + * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2)); + camera_boundary_obj->data_buffer = data_buffer; - // жǷ - if(NULL != buffer->boundary_y[i]) - { - // ûݣʾÿһֻһ߽ - // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣 - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes); - } - } + // У + camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.check_sum += seekfree_assistant_sum( + &(camera_boundary_obj->config.cmd), + sizeof(camera_boundary_obj->config) - 2); } //------------------------------------------------------------------------------------------------------------------- -// ʾͺ +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_boundary_obj, + sizeof(camera_boundary_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_boundary_obj->data_buffer), + camera_boundary_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color) +{ + seekfree_assistant_camera_rectangular_struct camera_rectangular_obj; + memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct)); + camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif + + // У + camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.check_sum += seekfree_assistant_sum( + &(camera_rectangular_obj.cmd), + sizeof(camera_rectangular_obj) - 2); + + seekfree_assistant_transfer_callback( + (const uint8 *)&camera_rectangular_obj, + sizeof(camera_rectangular_obj)); +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer) +{ + zf_assert(NULL != oscilloscope_obj); + zf_assert(NULL != data_buffer); + + memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct)); + oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD; + oscilloscope_obj->config.channel_max = + (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max) + ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX) + : ((0 == channel_max) ? (1) : (channel_max)); + oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00); + oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4; + oscilloscope_obj->data_buffer = data_buffer; +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ // ˵ *seekfree_assistant_oscilloscope ʾݽṹ // ز void // ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope) +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj) { - uint8 packet_size; - - // λ - seekfree_assistant_oscilloscope->channel_num &= 0x0f; - - zf_assert(SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT >= seekfree_assistant_oscilloscope->channel_num); - - // ֡ͷ - seekfree_assistant_oscilloscope->head = SEEKFREE_ASSISTANT_SEND_HEAD; - - // дϢ - packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4; - seekfree_assistant_oscilloscope->length = packet_size; - - // д빦ͨ - seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE; - // У - seekfree_assistant_oscilloscope->check_sum = 0; - seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size); + oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + &(oscilloscope_obj->config.cmd), + sizeof(oscilloscope_obj->config) - 2); + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + (oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); - // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[] - - seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size); + seekfree_assistant_transfer_callback( + (const uint8 *)oscilloscope_obj, + sizeof(oscilloscope_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); } +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) //------------------------------------------------------------------------------------------------------------------- -// ͼϢú -// ˵ camera_type ͼ -// ˵ image_addr ͼַ NULLʾֻͱϢλ -// ˵ width ͼ -// ˵ height ͼ߶ +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ // ز void -// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H); -// עϢ +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height) +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj) { - seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION; - // дϢ - seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct); + zf_assert(NULL != debug_param_obj); - seekfree_assistant_camera_buffer.camera_type = camera_type; - seekfree_assistant_camera_buffer.image_addr = image_addr; - seekfree_assistant_camera_buffer.width = width; - seekfree_assistant_camera_buffer.height = height; -} + seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ + uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ + uint8 temp_sum = 0xFF; // Уʱ + uint32 read_length = 0; // ȡʱ -//------------------------------------------------------------------------------------------------------------------- -// ͼ߷ú -// ˵ boundary_type ߽ -// ˵ dot_num һ߽жٸ -// ˵ dot_x1 ű1ĵַ NULLʾͱ1 -// ˵ dot_x2 ű2ĵַ NULLʾͱ2 -// ˵ dot_x3 ű3ĵַ NULLʾͱ3 -// ˵ dot_y1 ű1ĵַ NULLʾͱ1 -// ˵ dot_y2 ű2ĵַ NULLʾͱ2 -// ˵ dot_y3 ű3ĵַ NULLʾͱ3 -// ز void -// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк -// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ -// ʹʾ seekfree_assistant_camera_config(XY_BOUNDARY, 160, xy_x1_boundary, xy_x2_boundary, xy_x3_boundary, xy_y1_boundary, xy_y2_boundary, xy_y3_boundary); // ͼʱߣ߰ -// עϢ -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3) -{ - uint8 i = 0; - uint8 boundary_num = 0; - uint8 boundary_data_type = 0; - - // ͼͻǷ׼, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_dot_data.dot_num = dot_num; - seekfree_assistant_camera_dot_data.valid_flag = 0; - for(i = 0; i < 3; i++) - { - seekfree_assistant_camera_buffer.boundary_x[i] = NULL; - seekfree_assistant_camera_buffer.boundary_y[i] = NULL; - } - - switch(boundary_type) - { - case X_BOUNDARY: - { - if(NULL != dot_x1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x1; - } - if(NULL != dot_x2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x2; - } - if(NULL != dot_x3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x3; - } - - if(255 < seekfree_assistant_camera_buffer.height) - { - boundary_data_type = 1; - } - }break; - - case Y_BOUNDARY: - { - if(NULL != dot_y1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if(NULL != dot_y2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if(NULL != dot_y3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if(255 < seekfree_assistant_camera_buffer.width) - { - boundary_data_type = 1; - } - }break; - - case XY_BOUNDARY: - { - if((NULL != dot_x1) && (NULL != dot_y1)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if((NULL != dot_x2) && (NULL != dot_y2)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if((NULL != dot_x3) && (NULL != dot_y3)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x3; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if((255 < seekfree_assistant_camera_buffer.width) || (255 < seekfree_assistant_camera_buffer.height)) - { - boundary_data_type = 1; - } - }break; - - case NO_BOUNDARY:break; - } - - seekfree_assistant_camera_dot_data.dot_type = (boundary_type << 6) | (boundary_data_type << 5) | boundary_num; -} - -//------------------------------------------------------------------------------------------------------------------- -// ַͷͼ -// ˵ void -// ز void -// ʹʾ -// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_send (void) -{ - // ͼͻǷ׼ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_data_send(seekfree_assistant_camera_buffer.camera_type, seekfree_assistant_camera_buffer.image_addr, seekfree_assistant_camera_dot_data.dot_type & 0x0f, seekfree_assistant_camera_buffer.width, seekfree_assistant_camera_buffer.height); - - if(seekfree_assistant_camera_dot_data.dot_type & 0x0f) - { - seekfree_assistant_camera_dot_send(&seekfree_assistant_camera_buffer); - } -} - - -//------------------------------------------------------------------------------------------------------------------- -// ֽյ -// ˵ void -// ز void -// ʹʾ ֻҪŵеPITжϻѭ -//------------------------------------------------------------------------------------------------------------------- -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) -void seekfree_assistant_data_analysis (void) -{ - uint8 temp_sum; - uint32 read_length; - seekfree_assistant_parameter_struct *receive_packet; - - // ʹuint32ж壬ĿΪ˱ֽ֤ڶ - uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4]; - - // Զȡ, ԶĴ䷽ʽӽջصжȡ - read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE); + // Զȡһݰ + // ԶĴ䷽ʽӽջصжȡ + read_length = seekfree_assistant_receive_callback( + debug_param_cmd_pointer, + sizeof(seekfree_assistant_debug_param_cmd_struct)); if(read_length) - { - // ȡдFIFO - fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length); + { // ȡдFIFO + fifo_write_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + read_length); } - while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo)) - { - read_length = sizeof(seekfree_assistant_parameter_struct); - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_ONLY); + while( sizeof(seekfree_assistant_debug_param_cmd_struct) + <= fifo_used(&seekfree_assistant_debug_param_fifo)) + { // FIFO һݰ ôͽн + // ֱӶһݰ + read_length = sizeof(seekfree_assistant_debug_param_cmd_struct); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_ONLY); - if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0]) - { - // û֡ͷFIFOȥһ - read_length = 1; - } - else - { - // ҵ֡ͷ - receive_packet = (seekfree_assistant_parameter_struct *)temp_buffer; - temp_sum = receive_packet->check_sum; - receive_packet->check_sum = 0; - if(temp_sum == seekfree_assistant_sum((uint8 *)temp_buffer, sizeof(seekfree_assistant_parameter_struct))) - { - // Уɹ - seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data; - seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1; + if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0] + && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2]) + { // ֱƥ֡ͷ ҹҲƥ + temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ + debug_param_cmd_obj.check_sum = 0; // հУֵ У + if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct))) + { // Уɹ + debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float; + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0]; + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + #endif + debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1; + temp_sum = 0x00; } else - { - read_length = 1; + { // Уƥ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + } + else + { // ƥ䲻֡ͷ͹ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + + if(0xFF == temp_sum) + { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ + for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++) + { // Ϊȡһ һ + if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length]) + { // ҵ¸֡ͷ˳ + break; + } } } // ʹõ - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_AND_CLEAN); } } #endif - - - diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.h index 5b7e1b5..937f784 100644 --- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,142 +24,292 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ - #include "zf_common_typedef.h" +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 , + SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 , +}seekfree_assistant_data_type_enum; -// 1ʹܲڵĹ 0رղڵĹ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 ) - - - -// FIFOС -#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) - -// ʾͨ -#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) - -// Եͨ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) - -// ͼ -#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) - -// Ƭλ͵֡ͷ -#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) - -// ͷ -#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) -#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) -#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) - -// λƬ͵֡ͷ -#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) - -// -#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) - +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ +}seekfree_assistant_ccd_resolution_enum; // ͷö typedef enum { - // ͷͺŶ - SEEKFREE_ASSISTANT_OV7725_BIN = 1, - SEEKFREE_ASSISTANT_MT9V03X, - SEEKFREE_ASSISTANT_SCC8660, - // ͼͶ - SEEKFREE_ASSISTANT_BINARY = 1, - SEEKFREE_ASSISTANT_GRAY, - SEEKFREE_ASSISTANT_RGB565, -}seekfree_assistant_image_type_enum; + SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY , + SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 , -// ͷö -typedef enum -{ - // ͷͺŶ - X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ - Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ - XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ - NO_BOUNDARY, // ͵ͼûбϢ -}seekfree_assistant_boundary_type_enum; + // ͷͺƥ䶨 + SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X , + SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 , +}seekfree_assistant_camera_type_enum; + +#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨 + +#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ +#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤ + +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС +#endif typedef struct { - uint8 head; // ֡ͷ - uint8 channel_num; // λΪ λΪͨ - uint8 check_sum; // У - uint8 length; // - float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + uint8 data_lenght_buffer[2] ; // CCD ݳ + uint8 channel_color_buffer[2] ; // ͨɫ + uint8 channel_data_max[2] ; // ֵͨ + uint8 data_type ; // ȷϴС + uint8 reserve ; // + }config; + uint16 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_ccd_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 camera_type ; // ͷ + uint8 image_width_buffer[2] ; // ͼ + uint8 image_height_buffer[2] ; // ͼ߶ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 data_type ; // ȷϴС + uint8 boundary_lenght_buffer[2] ; // ߳ + uint8 color_buffer[2] ; // ͨɫ + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_boundary_struct; + +typedef struct +{ + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 reserve ; // + uint8 x_axis_buffer[2] ; // X + uint8 y_axis_buffer[2] ; // Y + uint8 width_buffer[2] ; // ο + uint8 height_buffer[2] ; // θ߶ + uint8 color_buffer[2] ; // ɫ +}seekfree_assistant_camera_rectangular_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_max ; // ͨ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ }seekfree_assistant_oscilloscope_struct; +typedef union +{ + uint8 data_uint8[4] ; + float data_float ; +}seekfree_assistant_param_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ - uint8 length; // ȣЭ鲿֣ - uint16 image_width; // ͼ - uint16 image_height; // ͼ߶ -}seekfree_assistant_camera_struct; - - -typedef struct -{ - uint8 head; // ֡ͷ - uint8 function; // - uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽ - uint8 length; // ȣЭ鲿֣ - uint16 dot_num; // - uint8 valid_flag; // ͨʶ - uint8 reserve; // -}seekfree_assistant_camera_dot_struct; - -typedef struct -{ - void *image_addr; // ͷַ - uint16 width; // ͼ - uint16 height; // ͼ߶ - seekfree_assistant_image_type_enum camera_type; // ͷ - void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ - void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ -}seekfree_assistant_camera_buffer_struct; + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + seekfree_assistant_param_struct dat ; // һ + +}seekfree_assistant_debug_param_cmd_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 channel; // ͨ - uint8 check_sum; // У - float data; // -}seekfree_assistant_parameter_struct; + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint8_struct; + + +typedef struct +{ + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint16_struct; + +typedef struct +{ + float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; + uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; +}seekfree_assistant_debug_param_struct; typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length); typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length); -extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ -extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ - - -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope); -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height); -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3); -void seekfree_assistant_camera_send (void); -void seekfree_assistant_data_analysis (void); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ +// ز void +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, 16] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *seekfree_assistant_oscilloscope ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj); + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj); +#endif #endif diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c index d139201..23205d5 100644 --- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,23 +24,20 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_typedef.h" #include "zf_common_fifo.h" #include "zf_common_debug.h" -#include "zf_driver_uart.h" + #include "zf_device_wireless_uart.h" -#include "zf_device_ble6a20.h" -#include "zf_device_bluetooth_ch9141.h" -#include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" #include "seekfree_assistant.h" @@ -50,7 +47,6 @@ extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ - //------------------------------------------------------------------------------------------------------------------- // ַͺ // ˵ *buff Ҫ͵ݵַ @@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv // ز uint32 ʣδݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) +uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݷ͹ @@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) // ز uint32 յݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) +uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݽչ return 0; @@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) // ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ // ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) +void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) { switch(transfer_device) { case SEEKFREE_ASSISTANT_DEBUG_UART: { -#if DEBUG_UART_USE_INTERRUPT == 1 seekfree_assistant_transfer_callback = debug_send_buffer; seekfree_assistant_receive_callback = debug_read_ring_buffer; -#endif }break; - + case SEEKFREE_ASSISTANT_WIRELESS_UART: { seekfree_assistant_transfer_callback = wireless_uart_send_buffer; seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; - - case SEEKFREE_ASSISTANT_BLE6A20: - { - seekfree_assistant_transfer_callback = ble6a20_send_buffer; - seekfree_assistant_receive_callback = ble6a20_read_buffer; - }break; - case SEEKFREE_ASSISTANT_CH9141: - { - seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; - seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; - }break; - - case SEEKFREE_ASSISTANT_WIFI_UART: - { - seekfree_assistant_transfer_callback = wifi_uart_send_buffer; - seekfree_assistant_receive_callback = wifi_uart_read_buffer; - }break; - + // case SEEKFREE_ASSISTANT_CH9141: + // { + // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; + // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; + // }break; + + // case SEEKFREE_ASSISTANT_WIFI_UART: + // { + // seekfree_assistant_transfer_callback = wifi_uart_send_buffer; + // seekfree_assistant_receive_callback = wifi_uart_read_buffer; + // }break; + case SEEKFREE_ASSISTANT_WIFI_SPI: { seekfree_assistant_transfer_callback = wifi_spi_send_buffer; seekfree_assistant_receive_callback = wifi_spi_read_buffer; }break; - - case SEEKFREE_ASSISTANT_CUSTOM: - { + + default: + { // Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ - + seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + seekfree_assistant_receive_callback = seekfree_assistant_receive; }break; } } - - diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.h index 2ccfd8a..0e28f49 100644 --- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,13 +24,13 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,7 +43,6 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ SEEKFREE_ASSISTANT_WIRELESS_UART, // ת - SEEKFREE_ASSISTANT_BLE6A20, // ת SEEKFREE_ASSISTANT_CH9141, // CH9141 SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_absolute_encoder.h index 1166c84..dc091aa 100644 --- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_absolute_encoder.h +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_absolute_encoder.h @@ -62,7 +62,7 @@ //==================================================== SPI ==================================================== #else //====================================================Ӳ SPI ==================================================== -#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI +#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI #define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI #define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK #define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI @@ -70,7 +70,7 @@ //====================================================Ӳ SPI ==================================================== #endif -#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ +#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ #define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN))) #define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ble6a20.h index 6f4544a..6af089f 100644 --- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ble6a20.h +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ble6a20.h @@ -76,7 +76,7 @@ // 1Զ Զʵ޸ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ // Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000 -#define BLE6A20_AUTO_BAUD_RATE ( 0 ) +#define BLE6A20_AUTO_BAUD_RATE ( 1 ) #if (1 == BLE6A20_AUTO_BAUD_RATE) typedef enum diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rc.c new file mode 100644 index 0000000..68840e2 --- /dev/null +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rc.c @@ -0,0 +1,563 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#include "math.h" +#include "zf_common_debug.h" +#include "zf_driver_delay.h" +#include "zf_driver_spi.h" +#include "zf_driver_gpio.h" +#include "zf_driver_soft_iic.h" +#include "zf_device_config.h" +#include "zf_driver_uart.h" +#include "zf_driver_exti.h" + +#include "zf_device_imu660rc.h" + +#ifndef M_PI +#define M_PI 3.1415926f +#endif + + +static uint8 imu660rc_quarternion_rate; + +float imu660rc_transition_factor[2]; +int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro () +int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ) +float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ +float imu660rc_quarternion[4]; // Ԫ + + + +#if IMU660RC_USE_SOFT_IIC +static soft_iic_info_struct imu660rc_iic_struct; + +#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data))) +#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len))) +#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg))) +#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len))) +#else +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC дĴ +// ˵ reg Ĵַ +// ˵ data +// ز void +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_write_register (uint8 reg, uint8 data) +{ + IMU660RC_CS(0); + spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data); + IMU660RC_CS(1); +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ĵ +// ˵ reg Ĵַ +// ز uint8 +// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_read_register (uint8 reg) +{ + uint8 data; + IMU660RC_CS(0); + data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R); + IMU660RC_CS(1); + return data; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC +// ˵ reg Ĵַ +// ˵ data ݻ +// ˵ len ݳ +// ز void +// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len) +{ + IMU660RC_CS(0); + spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len); + IMU660RC_CS(1); +} +#endif + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC fp16ת +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint32 fp16_to_float(uint16 h) +{ + uint16 h_exp = (h & 0x7c00u); + uint32 f_sgn = ((uint32)h & 0x8000u) << 16; + switch (h_exp) + { + case 0x0000u: // 0 or subnormal + { + uint16 h_sig = (h & 0x03ffu); + // Signed zero + if (h_sig == 0) + { + return f_sgn; + } + // Subnormal + h_sig <<= 1; + while ((h_sig & 0x0400u) == 0) + { + h_sig <<= 1; + h_exp++; + } + uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23; + uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13; + return f_sgn + f_exp + f_sig; + } + case 0x7c00u: // inf or NaN + { + // All-ones exponent and a copy of the significand + return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13); + } + default: // normalized + { + // Just need to adjust the exponent and shift + return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13); + } + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫһ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_normalize(float quat[4], uint16 *fp16) +{ + float n = 0; + float temp[4]; + + *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]); + *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]); + *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]); + *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]); + + n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3]; + n = sqrtf(n); + + if(n > 0.001f) // Խӽ0ֵ + { + n = temp[3] < 0.0f ? -n : n; + + quat[0] = temp[1] / n; + quat[1] = temp[2] / n; + quat[2] = temp[0] / n; + quat[3] = temp[3] / n; + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫתŷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw) +{ + float euler[3]; + + float sqx = quat[0] * quat[0]; + float sqy = quat[1] * quat[1]; + float sqz = quat[2] * quat[2]; + + euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx)); + euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2])); + euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz)); + + // תǶ + euler[0] = 180 * (euler[0]) / M_PI; + euler[1] = 180 * (euler[1]) / M_PI; + euler[2] = 180 * (euler[2]) / M_PI; + + // Ƕȵ + euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2]; + + *roll = euler[0]; + *pitch = euler[1]; + *yaw = euler[2]; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ÷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank) +{ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank); +} + + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Լ +// ˵ void +// ز uint8 1-Լʧ 0-Լɹ +// ʹʾ imu660rc_self_check(); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_self_check (void) +{ + uint8 dat = 0, return_state = 0; + uint16 timeout_count = 0; + do + { + if(IMU660RC_TIMEOUT_COUNT < timeout_count ++) + { + return_state = 1; + break; + } + dat = imu660rc_read_register(IMU660RC_CHIP_ID); + system_delay_ms(1); + }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû⵽豸 + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ٶȼ +// ˵ void +// ز void +// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_acc (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6); + imu660rc_acc_x = dat[0]; + imu660rc_acc_y = dat[1]; + imu660rc_acc_z = dat[2]; + } +} +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC +// ˵ void +// ز void +// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_gyro (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6); + imu660rc_gyro_x = dat[0]; + imu660rc_gyro_y = dat[1]; + imu660rc_gyro_z = dat[2]; + } +} + + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ԪݲתΪŷ +// ˵ void +// ز void +// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı +// עϢ ҪINT2Ŵжϵô˺ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_quarternion(void) +{ + uint8 i; + uint16 buff[4]; + uint8 *buff1_ptr; + int16 *buff2_ptr; + + if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate) + { + buff1_ptr = (uint8 *)buff; + + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x20); + imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31); + + for(i = 0; 8 > i; i++) + { + imu660rc_write_register(0x08, 0x4C + i); + buff1_ptr[i] = imu660rc_read_register(0x09); + } + + imu660rc_write_register(IMU660RC_PAGE_RW, 0x0); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // Ԫһ + quarternion_normalize(imu660rc_quarternion, buff); + // Ԫתŷ + quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw); + + // ȡٶٶϢ + #if(1 == IMU660RC_QUARTERNION_GET_ACC) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6); + imu660rc_acc_x = buff2_ptr[0]; + imu660rc_acc_y = buff2_ptr[1]; + imu660rc_acc_z = buff2_ptr[2]; + } + #endif + #if(1 == IMU660RC_QUARTERNION_GET_GYRO) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6); + imu660rc_gyro_x = buff2_ptr[0]; + imu660rc_gyro_y = buff2_ptr[1]; + imu660rc_gyro_z = buff2_ptr[2]; + } + #endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RCжϻصҪжڶȡԪ +// ˵ void +// ز void +// ʹʾ +// עϢ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_callback(void) +{ + imu660rc_get_quarternion(); + +} + +//------------------------------------------------------------------------------------------------------------------- +// ʼ IMU660RC +// ˵ quarternion_rate ѡԪ +// ز uint8 1-ʼʧ 0-ʼɹ +// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate) +{ + uint8 return_state = 0; + + imu660rc_quarternion_rate = quarternion_rate; + #if IMU660RC_USE_SOFT_IIC + soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿ + + #else + spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿ + gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿ + #endif + + system_delay_ms(10); + + do + { + if(imu660rc_self_check()) // IMU660RC Լ + { + // ˶Ϣ ʾλ + // ô IMU660RC Լʱ˳ + // һ½û ûܾǻ + zf_log(0, "imu660rc self check error."); + return_state = 1; + break; + } + + // λ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04); + system_delay_ms(30); + + // ÿ¹ַ + imu660rc_write_register(IMU660RC_CTRL3, 0x44); + + switch(IMU660RC_ACC_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_ACC_SAMPLE_SGN_2G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x00); + imu660rc_transition_factor[0] = 16393.44; + }break; + case IMU660RC_ACC_SAMPLE_SGN_4G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x01); + imu660rc_transition_factor[0] = 8196.72; + }break; + case IMU660RC_ACC_SAMPLE_SGN_8G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x02); + imu660rc_transition_factor[0] = 4098.36; + }break; + case IMU660RC_ACC_SAMPLE_SGN_16G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x03); + imu660rc_transition_factor[0] = 2049.18; + }break; + } + if(1 == return_state) + { + break; + } + + switch(IMU660RC_GYRO_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_125DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x00); + imu660rc_transition_factor[1] = 228.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_250DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x01); + imu660rc_transition_factor[1] = 114.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_500DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x02); + imu660rc_transition_factor[1] = 57.1428; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_1000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x03); + imu660rc_transition_factor[1] = 28.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_2000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x04); + imu660rc_transition_factor[1] = 14.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_4000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x0C); + imu660rc_transition_factor[1] = 7.14285; + }break; + } + if(1 == return_state) + { + break; + } + + // ôģʽΪ߾ģʽԼ + imu660rc_write_register(IMU660RC_CTRL1, 0x15); + imu660rc_write_register(IMU660RC_CTRL2, 0x18); + + // LPF1˲ + imu660rc_write_register(IMU660RC_CTRL7, 0x01); + + // LPF2˲ + imu660rc_write_register(IMU660RC_CTRL9, 0x08); + + // ԪӦ + if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate) + { + // жϴź + imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80); + imu660rc_write_register(IMU660RC_CTRL4, 0x08); + imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30); + + // üٶȡٶ + imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3)); + imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3)); + + // Ԫʲ + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3)); + imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x00); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // жϼ + exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING); + } + }while(0); + + return return_state; +} + + + + + + + + + + + + + diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rc.h new file mode 100644 index 0000000..dd5a9e3 --- /dev/null +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rc.h @@ -0,0 +1,211 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#ifndef _zf_device_imu660rc_h_ +#define _zf_device_imu660rc_h_ + +#include "zf_common_typedef.h" + + +// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC +// IMU660RC_USE_SOFT_IICҪȱ벢س򣬵ƬģҪϵͨѶ +#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ + +#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ +//==================================================== IIC ==================================================== +#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ +#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL +#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA +//==================================================== IIC ==================================================== +#else + +//====================================================Ӳ SPI ==================================================== +#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI +#define IMU660RC_SPI (SPI_0) // Ӳ SPI +#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK +#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI +#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO +//====================================================Ӳ SPI ==================================================== +#endif +#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ +#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) ) +#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ + + +#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ +#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ + +typedef enum +{ + IMU660RC_MAIN_MEM_BANK = 0x00, + IMU660RC_HUB_MEM_BANK = 0x40, + IMU660RC_EMBED_MEM_BANK = 0x80, +}imu660rc_mem_bank_enum; + +typedef enum +{ + IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2) + IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G + IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G + IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G +}imu660rc_acc_sample_config; + +typedef enum +{ + IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S) + IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS + IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS + IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS + IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS + IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS +}imu660rc_gyro_sample_config; + +typedef enum +{ + IMU660RC_QUARTERNION_15HZ, // 15 Hz + IMU660RC_QUARTERNION_30HZ, // 30 Hz + IMU660RC_QUARTERNION_60HZ, // 60 Hz + IMU660RC_QUARTERNION_120HZ, // 120Hz + IMU660RC_QUARTERNION_240HZ, // 240Hz + IMU660RC_QUARTERNION_480HZ, // 480Hz + IMU660RC_QUARTERNION_DISABLE, // Ԫ +}imu660rc_quarternion_rate_config; + + +//================================================ IMU660RC ڲַ================================================ +#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ +#define IMU660RC_SPI_W ( 0x00 ) +#define IMU660RC_SPI_R ( 0x80 ) +#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ + + +//================================================ IMU660RC Ĵַ================================================ +#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 ) +#define IMU660RC_INT2_CTRL ( 0x0E ) +#define IMU660RC_CHIP_ID ( 0x0F ) +#define IMU660RC_CTRL1 ( 0x10 ) +#define IMU660RC_CTRL2 ( 0x11 ) +#define IMU660RC_CTRL3 ( 0x12 ) +#define IMU660RC_CTRL4 ( 0x13 ) +#define IMU660RC_CTRL5 ( 0x14 ) +#define IMU660RC_CTRL6 ( 0x15 ) +#define IMU660RC_CTRL7 ( 0x16 ) +#define IMU660RC_CTRL8 ( 0x17 ) +#define IMU660RC_CTRL9 ( 0x18 ) +#define IMU660RC_CTRL10 ( 0x19 ) +#define IMU660RC_CTRL_STATUS ( 0x1A ) +#define IMU660RC_STATUS_REG ( 0x1E ) +#define IMU660RC_OUT_TEMP_L ( 0x20 ) +#define IMU660RC_OUT_TEMP_H ( 0x21 ) +#define IMU660RC_OUTX_L_G ( 0x22 ) +#define IMU660RC_OUTX_H_G ( 0x23 ) +#define IMU660RC_OUTY_L_G ( 0x24 ) +#define IMU660RC_OUTY_H_G ( 0x25 ) +#define IMU660RC_OUTZ_L_G ( 0x26 ) +#define IMU660RC_OUTZ_H_G ( 0x27 ) +#define IMU660RC_OUTX_L_A ( 0x28 ) +#define IMU660RC_OUTX_H_A ( 0x29 ) +#define IMU660RC_OUTY_L_A ( 0x2A ) +#define IMU660RC_OUTY_H_A ( 0x2B ) +#define IMU660RC_OUTZ_L_A ( 0x2C ) +#define IMU660RC_OUTZ_H_A ( 0x2D ) + +#define IMU660RC_PAGE_SEL ( 0x02 ) +#define IMU660RC_EMB_FUNC_EN_A ( 0x04 ) +#define IMU660RC_PAGE_RW ( 0x17 ) +#define IMU660RC_SFLP_ODR ( 0x5E ) +#define IMU660RC_EMB_FUNC_CFG ( 0x63 ) + + + +extern float imu660rc_transition_factor[2]; +extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; // +extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ +extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ +extern float imu660rc_quarternion[4]; // Ԫ + + +void imu660rc_get_acc (void); +void imu660rc_get_gyro (void); +void imu660rc_get_quarternion (void); + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ٶȼתΪʵ +// ˵ acc_value ļٶȼ +// ز void +// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2) +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0]) + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC תΪʵ +// ˵ gyro_value +// ز void +// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1]) +void imu660rc_callback (void); +uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate); + + + +#endif diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rx.h index 45699d9..81b8b41 100644 --- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rx.h +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660rx.h @@ -97,7 +97,7 @@ //================================================ IMU660RX ȫֱ================================================ extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro () extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ) -extern float imu660ra_transition_factor[2]; +extern float imu660rx_transition_factor[2]; //================================================ IMU660RX ȫֱ================================================ diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips114.h index c56f310..9c4ac0d 100644 --- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips114.h +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips114.h @@ -167,7 +167,7 @@ void ips114_init (void); // ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================= IPS114 չ================================================ #endif diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200.h index 850fb11..5bf4284 100644 --- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200.h +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200.h @@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select); // ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================== IPS200 չ================================================ diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h index 98c5364..557e1d2 100644 --- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h @@ -86,7 +86,7 @@ // £SCC8660_PCLK_DIVԽͼԽ #define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1> #define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ -#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) +#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) #define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0 //================================================ SCC8660 ã֧ͫ֡ʰ汾=========================== diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.c index b51c600..b06e6a1 100644 --- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.c +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.c @@ -24,7 +24,7 @@ * ļ zf_device_wifi_spi * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.9.20 +* ADS v1.10.2 * ƽ̨ TC264D * https://seekfree.taobao.com/ * @@ -63,6 +63,21 @@ #define SOCKET_CONNECT_TIME_OUT 50000 // λ #define OTHER_TIME_OUT 1000 // λ +#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088)) + #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088" +#endif + +#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE) + #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE" +#endif + + +#if (WIFI_SPI_TRANSFER_SIZE != 4088) + #error "WIFI_SPI_TRANSFER_SIZE must be == 4088" +#endif + + + char wifi_spi_version[12]; // ģ̼汾Ϣ char wifi_spi_mac_addr[20]; // ģMACַϢ char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ @@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void) { memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1; - return return_state; } @@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void) { memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1; - return return_state; } @@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void) { memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1; + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ȡϵͳʱ +// ˵ time_format ʱʽ +// ز *buffer ʱַַ СҪ30ֽ +// ز buffer_size С +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size) +{ + uint8 return_state = 1; + wifi_spi_packets_struct temp_packets; + uint8 send_cmd, receive_cmd; + + // ʱ30ֽ + // ģ̼V2汾 + if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2))) + { + send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0; + receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0; + + return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT); + if((0 == return_state) && (receive_cmd == temp_packets.head.command)) + { + return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2); + if(0 == return_state) + { + memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3); + buffer[temp_packets.head.length - 3] = 0; + } + } + } + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ɨȵ +// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз +// ˵ buffer_size ij +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +// עϢ ÿһаһwifi +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size) +{ + uint8 return_state; + + // ģV2汾Ĺִ̼֧˹ + if(!strncmp(wifi_spi_version, "V2", 2)) + { + return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT); + + if(0 == return_state) + { + #if (0 == WIFI_SPI_READ_TRANSFER) + wifi_spi_send_buffer(NULL, 0); + #endif + while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size)) + { + system_delay_ms(10); + } + } + } return return_state; } @@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) while(length) { - send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length; + send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length); if(wifi_spi_wait_idle(OTHER_TIME_OUT)) { @@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) return length; } +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ַͺͬ +// ˵ *string Ҫ͵ַ +// ز void +// ʹʾ wifi_spi_send_string("123"); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +void wifi_spi_send_string(const char *string) +{ + wifi_spi_send_buffer((uint8*)string, strlen(string)); +} + //------------------------------------------------------------------------------------------------------------------- // WIFI SPI ȡ // ˵ *buff ջ @@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) { zf_assert(NULL != buffer); - uint32 data_len = length; + uint32 fifo_read_length; + uint32 write_length = 0; + wifi_spi_packets_struct temp_packets; + + // жFIFOǷݣȴFIFOȡ + if(fifo_used(&wifi_spi_fifo)) + { + fifo_read_length = fifo_used(&wifi_spi_fifo); + fifo_read_length = length < fifo_read_length ? length : fifo_read_length; + fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN); + + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + } #if(1 == WIFI_SPI_READ_TRANSFER) - - wifi_spi_packets_struct temp_packets; - // WIFI SPI״̬жϻ߳ѾͨѶ򱾴βܷ if(WIFI_SPI_IDLE == wifi_spi_mutex) { - // ͨѶ״̬Ϊæ - wifi_spi_mutex = WIFI_SPI_BUSY; + wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ - // ͨѶ鿴ģǷδȡ do { - if(wifi_spi_wait_idle(OTHER_TIME_OUT)) + if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ + (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳ + ) { break; } + temp_packets.head.command = WIFI_SPI_DATA; temp_packets.head.length = 0; wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE); // յİǷ - if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) + if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) && + (temp_packets.head.length) + ) { - // յ - if(temp_packets.head.length) + if(length) + { + fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length; + memcpy(buffer, temp_packets.buffer, fifo_read_length); + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO + { + fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length); + } + } + else // ȫдFIFO { fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length); } @@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command); wifi_spi_mutex = WIFI_SPI_IDLE; } -#endif +#endif - fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN); - return data_len; + return write_length; } //------------------------------------------------------------------------------------------------------------------- @@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word) // MACַϢַʽwifi_spi_mac_addr wifi_spi_get_mac_addr(); - + if(NULL == wifi_ssid) + { + // ʼʱҪWIFI + break; + } return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word); if(return_state) { diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.h index eea8a78..e7cec39 100644 --- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.h +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.h @@ -73,8 +73,8 @@ #if (WIFI_SPI_AUTO_CONNECT > 2) #error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]" #else -#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP -#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿ +#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP +#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666 #endif @@ -95,10 +95,15 @@ typedef enum WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ + WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI + WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾 WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ + WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1 + WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2 + WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3 // ӻش WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ @@ -110,6 +115,9 @@ typedef enum WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾 WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں + WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ + WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ + WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ WIFI_SPI_INVALID2 = 0xFF // Чݰ }wifi_spi_packets_command_enum; @@ -134,19 +142,27 @@ typedef struct uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // }wifi_spi_packets_struct; - +typedef enum +{ + WIFI_SPI_UTC_0 = 1, // ʱ + WIFI_SPI_GMT, // ʱ תΪGMTʽ׺GMT һڶԽƶ˴ģʹ + WIFI_SPI_UTC_8, // ʱ +}wifi_spi_time_enum; + extern char wifi_spi_version[12]; // ̼汾 ַ extern char wifi_spi_mac_addr[20]; // ģMACַ ַ extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ -uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); -uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); -uint8 wifi_spi_socket_disconnect (void); -uint8 wifi_spi_udp_send_now (void); -uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); -uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size); +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size); +uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); +uint8 wifi_spi_socket_disconnect (void); +uint8 wifi_spi_udp_send_now (void); +uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); +void wifi_spi_send_string (const char *string); +uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); -uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); #endif - diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.h index 0f392ff..24b88cc 100644 --- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.h +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.h @@ -73,7 +73,7 @@ #if (WIFI_UART_AUTO_CONNECT > 3) #error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]" #else -#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP +#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP #define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_UART_LOCAL_PORT "8080" // ˿ #endif diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_encoder.c index 8d514b7..ad4099e 100644 --- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_encoder.c +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_encoder.c @@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n) //------------------------------------------------------------------------------------------------------------------- void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin) { -// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init + zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init IfxGpt12_enableModule(&MODULE_GPT120); IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4); diff --git a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/user/isr.c b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/user/isr.c index daa57f0..927ed43 100644 --- a/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/user/isr.c +++ b/Example/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/user/isr.c @@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж { exti_flag_clear(ERU_CH0_REQ0_P15_4); - + + imu660rc_callback(); // 660RC ģ INT ж } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж @@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) { exti_flag_clear(ERU_CH5_REQ1_P15_8); - } } @@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) // exti_flag_clear(ERU_CH6_REQ9_P20_0); // } // } - IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO) { interrupt_global_enable(0); // жǶ @@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { interrupt_global_enable(0); // жǶ - gnss_uart_callback(); // GPSڻص + gnss_uart_callback(); // GNSSڻص diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/doc/version.txt index 1e222a3..8ce85ca 100644 --- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/doc/version.txt +++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/doc/version.txt @@ -1,3 +1,13 @@ +V3.4.4 + SCC8660ʽ + ָV2 + ޸ips200ʾscc8660ͷʽ + ޸ips114ʾscc8660ͷʽ +V3.4.3 + 660RC +V3.4.2 + ޸printfضеĺ궨 + WIFI_SPI V3.4.1 ޸Ĵڷ麯еķ ޸ips200proע diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h index 27b7965..e8d6021 100644 --- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h @@ -91,6 +91,7 @@ #include "zf_device_imu660ra.h" #include "zf_device_imu660rb.h" #include "zf_device_imu660rx.h" +#include "zf_device_imu660rc.h" #include "zf_device_imu963ra.h" #include "zf_device_ips114.h" #include "zf_device_ips200.h" diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/printf_redirect.c index c44d826..299da76 100644 --- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/printf_redirect.c +++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/printf_redirect.c @@ -45,7 +45,7 @@ //------------------------------------------------------------------------------------------------------------------- int fputc(int ch, FILE *stream) { - uart_write_byte(DEBUG_UART_INDEX, (char)ch); + uart_write_byte(PRINTF_USE_UART, (char)ch); return (ch); } @@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len) int fgetc(FILE *f) { #if PRINTF_OUTPUT_TYPE == 0 - return uart_read_byte(DEBUG_UART_INDEX); + return uart_read_byte(PRINTF_USE_UART); #else uint8 buf; wifi_spi_read_buffer(&buf, 1); diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.c index 231b20d..3e9ec74 100644 --- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,423 +24,519 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_debug.h" #include "seekfree_assistant.h" +// ͨö +typedef enum +{ + SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 , + SEEKFREE_ASSISTANT_SEND_CAMERA_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD , -extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); -extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); + SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 , -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) + SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 , +}seekfree_assistant_cmd_type_enum; + +#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ +#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ + +// ݷͺָ +extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); +seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + +// ݽպָ +extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); +seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) #include "zf_common_fifo.h" -static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO -static fifo_struct seekfree_assistant_fifo = // FIFOṹ +static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE]; +static fifo_struct seekfree_assistant_debug_param_fifo = { - .buffer = seekfree_assistant_buffer, + .buffer = seekfree_assistant_debug_param_buffer, .execution = FIFO_IDLE, .type = FIFO_DATA_8BIT, .head = 0, .end = 0, - .size = SEEKFREE_ASSISTANT_BUFFER_SIZE, - .max = SEEKFREE_ASSISTANT_BUFFER_SIZE, -}; + .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, + .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, +}; #endif -static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ -static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ -static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ - -seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ -seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ - -seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ -vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ - //------------------------------------------------------------------------------------------------------------------- // ͺ -// ˵ *buffer ҪУݵַ -// ˵ length У鳤 -// ز uint8 ֵ +// ˵ *buffer ҪУݵַ +// ˵ length У鳤 +// ز uint8 ֵ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length) +static uint8 seekfree_assistant_sum (void *buffer, uint32 length) { uint8 temp_sum = 0; + uint8 *ptr = (uint8 *)buffer; while(length--) { - temp_sum += *buffer++; + temp_sum += *ptr ++; } return temp_sum; } //------------------------------------------------------------------------------------------------------------------- -// ͼͺ -// ˵ camera_type ͷ -// ˵ *image_addr ͼ׵ַ -// ˵ boundary_num ͼа߽ -// ˵ width ͼ -// ˵ height ͼ߶ +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ // ز void -// ʹʾ +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height) +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer) { - uint32 image_size = 0; + zf_assert(NULL != ccd_obj); + zf_assert(NULL != data_buffer); - seekfree_assistant_camera_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_data.function = SEEKFREE_ASSISTANT_CAMERA_FUNCTION; - seekfree_assistant_camera_data.camera_type = (camera_type << 5) | ((image_addr != NULL ? 0 : 1) << 4) | boundary_num; - // дϢЭ鲿 - seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct); - seekfree_assistant_camera_data.image_width = width; - seekfree_assistant_camera_data.image_height = height; + memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct)); + ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD; + ccd_obj->config.channel_index = channel_index; - // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct)); - - // ͷͼͼС - switch(camera_type) + uint16 data_max = 256; + uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT; + loop_count = (2 >= loop_count) ? (loop_count) : (2); + for(uint8 i = 0; loop_count > i; i ++) { - case SEEKFREE_ASSISTANT_OV7725_BIN: - { - image_size = width * height / 8; - }break; - - case SEEKFREE_ASSISTANT_MT9V03X: - { - image_size = width * height; - }break; - - case SEEKFREE_ASSISTANT_SCC8660: - { - image_size = width * height * 2; - }break; + data_max *= 4; } - // ͼ - if(NULL != image_addr) + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF); + #else + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + ccd_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + ccd_obj->config.data_type = data_type; + } + + // ¼ʵֽ uint16 Ҫݳ + ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1)); + // Ȼ¼Ӧݻ + ccd_obj->data_buffer = data_buffer; + + // У + ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.check_sum += seekfree_assistant_sum( + &(ccd_obj->config.cmd), + sizeof(ccd_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)ccd_obj, + sizeof(ccd_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(ccd_obj->data_buffer), + ccd_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer) +{ + zf_assert(NULL != camera_obj); + + memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct)); + camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD; + camera_obj->config.camera_type = camera_type; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF); + #else + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type + && NULL != data_buffer) { - seekfree_assistant_transfer_callback(image_addr, image_size); + camera_obj->config.data_type = 0x02; + } + else + { + camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01); + } + + // RGB565 ͼ ôֽ + camera_obj->buffer_byte_size = + image_width * image_height + * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1)); + camera_obj->buffer_byte_size = + (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type) + ? (camera_obj->buffer_byte_size / 8) + : (camera_obj->buffer_byte_size); + camera_obj->data_buffer = data_buffer; + + // У + camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.check_sum += seekfree_assistant_sum( + &(camera_obj->config.cmd), + sizeof(camera_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_obj, + sizeof(camera_obj->config)); + if(NULL != camera_obj->data_buffer) + { + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_obj->data_buffer), + camera_obj->buffer_byte_size); } } //------------------------------------------------------------------------------------------------------------------- -// ͼ߻ƺ -// ˵ boundary_id ID -// ˵ dot_num -// ˵ *dot_x ׵ַ -// ˵ *dot_y ׵ַ -// ˵ width ͼ -// ˵ height ͼ߶ +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 // ز void -// ʹʾ +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer) +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer) { - uint8 i; - uint16 dot_bytes = 0; // ֽ + zf_assert(NULL != camera_boundary_obj); + zf_assert(NULL != data_buffer); - dot_bytes = seekfree_assistant_camera_dot_data.dot_num; + memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct)); + camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD; - if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5)) - { - dot_bytes *= 2; + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + camera_boundary_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + camera_boundary_obj->config.data_type = data_type; } - // ȷ֡ͷܡ߽š곤ȡ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct)); + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif - for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++) - { - // жǷͺ - if(NULL != buffer->boundary_x[i]) - { - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes); - } + camera_boundary_obj->buffer_byte_size = + boundary_lenght * 2 + * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2)); + camera_boundary_obj->data_buffer = data_buffer; - // жǷ - if(NULL != buffer->boundary_y[i]) - { - // ûݣʾÿһֻһ߽ - // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣 - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes); - } - } + // У + camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.check_sum += seekfree_assistant_sum( + &(camera_boundary_obj->config.cmd), + sizeof(camera_boundary_obj->config) - 2); } //------------------------------------------------------------------------------------------------------------------- -// ʾͺ +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_boundary_obj, + sizeof(camera_boundary_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_boundary_obj->data_buffer), + camera_boundary_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color) +{ + seekfree_assistant_camera_rectangular_struct camera_rectangular_obj; + memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct)); + camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif + + // У + camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.check_sum += seekfree_assistant_sum( + &(camera_rectangular_obj.cmd), + sizeof(camera_rectangular_obj) - 2); + + seekfree_assistant_transfer_callback( + (const uint8 *)&camera_rectangular_obj, + sizeof(camera_rectangular_obj)); +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer) +{ + zf_assert(NULL != oscilloscope_obj); + zf_assert(NULL != data_buffer); + + memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct)); + oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD; + oscilloscope_obj->config.channel_max = + (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max) + ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX) + : ((0 == channel_max) ? (1) : (channel_max)); + oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00); + oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4; + oscilloscope_obj->data_buffer = data_buffer; +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ // ˵ *seekfree_assistant_oscilloscope ʾݽṹ // ز void // ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope) +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj) { - uint8 packet_size; - - // λ - seekfree_assistant_oscilloscope->channel_num &= 0x0f; - - zf_assert(SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT >= seekfree_assistant_oscilloscope->channel_num); - - // ֡ͷ - seekfree_assistant_oscilloscope->head = SEEKFREE_ASSISTANT_SEND_HEAD; - - // дϢ - packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4; - seekfree_assistant_oscilloscope->length = packet_size; - - // д빦ͨ - seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE; - // У - seekfree_assistant_oscilloscope->check_sum = 0; - seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size); + oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + &(oscilloscope_obj->config.cmd), + sizeof(oscilloscope_obj->config) - 2); + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + (oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); - // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[] - - seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size); + seekfree_assistant_transfer_callback( + (const uint8 *)oscilloscope_obj, + sizeof(oscilloscope_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); } +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) //------------------------------------------------------------------------------------------------------------------- -// ͼϢú -// ˵ camera_type ͼ -// ˵ image_addr ͼַ NULLʾֻͱϢλ -// ˵ width ͼ -// ˵ height ͼ߶ +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ // ز void -// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H); -// עϢ +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height) +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj) { - seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION; - // дϢ - seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct); + zf_assert(NULL != debug_param_obj); - seekfree_assistant_camera_buffer.camera_type = camera_type; - seekfree_assistant_camera_buffer.image_addr = image_addr; - seekfree_assistant_camera_buffer.width = width; - seekfree_assistant_camera_buffer.height = height; -} + seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ + uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ + uint8 temp_sum = 0xFF; // Уʱ + uint32 read_length = 0; // ȡʱ -//------------------------------------------------------------------------------------------------------------------- -// ͼ߷ú -// ˵ boundary_type ߽ -// ˵ dot_num һ߽жٸ -// ˵ dot_x1 ű1ĵַ NULLʾͱ1 -// ˵ dot_x2 ű2ĵַ NULLʾͱ2 -// ˵ dot_x3 ű3ĵַ NULLʾͱ3 -// ˵ dot_y1 ű1ĵַ NULLʾͱ1 -// ˵ dot_y2 ű2ĵַ NULLʾͱ2 -// ˵ dot_y3 ű3ĵַ NULLʾͱ3 -// ز void -// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк -// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ -// ʹʾ seekfree_assistant_camera_config(XY_BOUNDARY, 160, xy_x1_boundary, xy_x2_boundary, xy_x3_boundary, xy_y1_boundary, xy_y2_boundary, xy_y3_boundary); // ͼʱߣ߰ -// עϢ -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3) -{ - uint8 i = 0; - uint8 boundary_num = 0; - uint8 boundary_data_type = 0; - - // ͼͻǷ׼, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_dot_data.dot_num = dot_num; - seekfree_assistant_camera_dot_data.valid_flag = 0; - for(i = 0; i < 3; i++) - { - seekfree_assistant_camera_buffer.boundary_x[i] = NULL; - seekfree_assistant_camera_buffer.boundary_y[i] = NULL; - } - - switch(boundary_type) - { - case X_BOUNDARY: - { - if(NULL != dot_x1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x1; - } - if(NULL != dot_x2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x2; - } - if(NULL != dot_x3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x3; - } - - if(255 < seekfree_assistant_camera_buffer.height) - { - boundary_data_type = 1; - } - }break; - - case Y_BOUNDARY: - { - if(NULL != dot_y1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if(NULL != dot_y2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if(NULL != dot_y3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if(255 < seekfree_assistant_camera_buffer.width) - { - boundary_data_type = 1; - } - }break; - - case XY_BOUNDARY: - { - if((NULL != dot_x1) && (NULL != dot_y1)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if((NULL != dot_x2) && (NULL != dot_y2)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if((NULL != dot_x3) && (NULL != dot_y3)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x3; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if((255 < seekfree_assistant_camera_buffer.width) || (255 < seekfree_assistant_camera_buffer.height)) - { - boundary_data_type = 1; - } - }break; - - case NO_BOUNDARY:break; - } - - seekfree_assistant_camera_dot_data.dot_type = (boundary_type << 6) | (boundary_data_type << 5) | boundary_num; -} - -//------------------------------------------------------------------------------------------------------------------- -// ַͷͼ -// ˵ void -// ز void -// ʹʾ -// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_send (void) -{ - // ͼͻǷ׼ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_data_send(seekfree_assistant_camera_buffer.camera_type, seekfree_assistant_camera_buffer.image_addr, seekfree_assistant_camera_dot_data.dot_type & 0x0f, seekfree_assistant_camera_buffer.width, seekfree_assistant_camera_buffer.height); - - if(seekfree_assistant_camera_dot_data.dot_type & 0x0f) - { - seekfree_assistant_camera_dot_send(&seekfree_assistant_camera_buffer); - } -} - - -//------------------------------------------------------------------------------------------------------------------- -// ֽյ -// ˵ void -// ز void -// ʹʾ ֻҪŵеPITжϻѭ -//------------------------------------------------------------------------------------------------------------------- -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) -void seekfree_assistant_data_analysis (void) -{ - uint8 temp_sum; - uint32 read_length; - seekfree_assistant_parameter_struct *receive_packet; - - // ʹuint32ж壬ĿΪ˱ֽ֤ڶ - uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4]; - - // Զȡ, ԶĴ䷽ʽӽջصжȡ - read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE); + // Զȡһݰ + // ԶĴ䷽ʽӽջصжȡ + read_length = seekfree_assistant_receive_callback( + debug_param_cmd_pointer, + sizeof(seekfree_assistant_debug_param_cmd_struct)); if(read_length) - { - // ȡдFIFO - fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length); + { // ȡдFIFO + fifo_write_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + read_length); } - while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo)) - { - read_length = sizeof(seekfree_assistant_parameter_struct); - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_ONLY); + while( sizeof(seekfree_assistant_debug_param_cmd_struct) + <= fifo_used(&seekfree_assistant_debug_param_fifo)) + { // FIFO һݰ ôͽн + // ֱӶһݰ + read_length = sizeof(seekfree_assistant_debug_param_cmd_struct); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_ONLY); - if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0]) - { - // û֡ͷFIFOȥһ - read_length = 1; - } - else - { - // ҵ֡ͷ - receive_packet = (seekfree_assistant_parameter_struct *)temp_buffer; - temp_sum = receive_packet->check_sum; - receive_packet->check_sum = 0; - if(temp_sum == seekfree_assistant_sum((uint8 *)temp_buffer, sizeof(seekfree_assistant_parameter_struct))) - { - // Уɹ - seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data; - seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1; + if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0] + && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2]) + { // ֱƥ֡ͷ ҹҲƥ + temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ + debug_param_cmd_obj.check_sum = 0; // հУֵ У + if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct))) + { // Уɹ + debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float; + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0]; + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + #endif + debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1; + temp_sum = 0x00; } else - { - read_length = 1; + { // Уƥ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + } + else + { // ƥ䲻֡ͷ͹ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + + if(0xFF == temp_sum) + { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ + for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++) + { // Ϊȡһ һ + if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length]) + { // ҵ¸֡ͷ˳ + break; + } } } // ʹõ - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_AND_CLEAN); } } #endif - - - diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.h index 5b7e1b5..937f784 100644 --- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,142 +24,292 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ - #include "zf_common_typedef.h" +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 , + SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 , +}seekfree_assistant_data_type_enum; -// 1ʹܲڵĹ 0رղڵĹ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 ) - - - -// FIFOС -#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) - -// ʾͨ -#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) - -// Եͨ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) - -// ͼ -#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) - -// Ƭλ͵֡ͷ -#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) - -// ͷ -#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) -#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) -#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) - -// λƬ͵֡ͷ -#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) - -// -#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) - +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ +}seekfree_assistant_ccd_resolution_enum; // ͷö typedef enum { - // ͷͺŶ - SEEKFREE_ASSISTANT_OV7725_BIN = 1, - SEEKFREE_ASSISTANT_MT9V03X, - SEEKFREE_ASSISTANT_SCC8660, - // ͼͶ - SEEKFREE_ASSISTANT_BINARY = 1, - SEEKFREE_ASSISTANT_GRAY, - SEEKFREE_ASSISTANT_RGB565, -}seekfree_assistant_image_type_enum; + SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY , + SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 , -// ͷö -typedef enum -{ - // ͷͺŶ - X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ - Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ - XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ - NO_BOUNDARY, // ͵ͼûбϢ -}seekfree_assistant_boundary_type_enum; + // ͷͺƥ䶨 + SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X , + SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 , +}seekfree_assistant_camera_type_enum; + +#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨 + +#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ +#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤ + +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС +#endif typedef struct { - uint8 head; // ֡ͷ - uint8 channel_num; // λΪ λΪͨ - uint8 check_sum; // У - uint8 length; // - float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + uint8 data_lenght_buffer[2] ; // CCD ݳ + uint8 channel_color_buffer[2] ; // ͨɫ + uint8 channel_data_max[2] ; // ֵͨ + uint8 data_type ; // ȷϴС + uint8 reserve ; // + }config; + uint16 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_ccd_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 camera_type ; // ͷ + uint8 image_width_buffer[2] ; // ͼ + uint8 image_height_buffer[2] ; // ͼ߶ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 data_type ; // ȷϴС + uint8 boundary_lenght_buffer[2] ; // ߳ + uint8 color_buffer[2] ; // ͨɫ + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_boundary_struct; + +typedef struct +{ + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 reserve ; // + uint8 x_axis_buffer[2] ; // X + uint8 y_axis_buffer[2] ; // Y + uint8 width_buffer[2] ; // ο + uint8 height_buffer[2] ; // θ߶ + uint8 color_buffer[2] ; // ɫ +}seekfree_assistant_camera_rectangular_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_max ; // ͨ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ }seekfree_assistant_oscilloscope_struct; +typedef union +{ + uint8 data_uint8[4] ; + float data_float ; +}seekfree_assistant_param_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ - uint8 length; // ȣЭ鲿֣ - uint16 image_width; // ͼ - uint16 image_height; // ͼ߶ -}seekfree_assistant_camera_struct; - - -typedef struct -{ - uint8 head; // ֡ͷ - uint8 function; // - uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽ - uint8 length; // ȣЭ鲿֣ - uint16 dot_num; // - uint8 valid_flag; // ͨʶ - uint8 reserve; // -}seekfree_assistant_camera_dot_struct; - -typedef struct -{ - void *image_addr; // ͷַ - uint16 width; // ͼ - uint16 height; // ͼ߶ - seekfree_assistant_image_type_enum camera_type; // ͷ - void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ - void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ -}seekfree_assistant_camera_buffer_struct; + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + seekfree_assistant_param_struct dat ; // һ + +}seekfree_assistant_debug_param_cmd_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 channel; // ͨ - uint8 check_sum; // У - float data; // -}seekfree_assistant_parameter_struct; + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint8_struct; + + +typedef struct +{ + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint16_struct; + +typedef struct +{ + float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; + uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; +}seekfree_assistant_debug_param_struct; typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length); typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length); -extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ -extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ - - -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope); -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height); -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3); -void seekfree_assistant_camera_send (void); -void seekfree_assistant_data_analysis (void); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ +// ز void +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, 16] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *seekfree_assistant_oscilloscope ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj); + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj); +#endif #endif diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c index d139201..23205d5 100644 --- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,23 +24,20 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_typedef.h" #include "zf_common_fifo.h" #include "zf_common_debug.h" -#include "zf_driver_uart.h" + #include "zf_device_wireless_uart.h" -#include "zf_device_ble6a20.h" -#include "zf_device_bluetooth_ch9141.h" -#include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" #include "seekfree_assistant.h" @@ -50,7 +47,6 @@ extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ - //------------------------------------------------------------------------------------------------------------------- // ַͺ // ˵ *buff Ҫ͵ݵַ @@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv // ز uint32 ʣδݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) +uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݷ͹ @@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) // ز uint32 յݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) +uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݽչ return 0; @@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) // ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ // ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) +void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) { switch(transfer_device) { case SEEKFREE_ASSISTANT_DEBUG_UART: { -#if DEBUG_UART_USE_INTERRUPT == 1 seekfree_assistant_transfer_callback = debug_send_buffer; seekfree_assistant_receive_callback = debug_read_ring_buffer; -#endif }break; - + case SEEKFREE_ASSISTANT_WIRELESS_UART: { seekfree_assistant_transfer_callback = wireless_uart_send_buffer; seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; - - case SEEKFREE_ASSISTANT_BLE6A20: - { - seekfree_assistant_transfer_callback = ble6a20_send_buffer; - seekfree_assistant_receive_callback = ble6a20_read_buffer; - }break; - case SEEKFREE_ASSISTANT_CH9141: - { - seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; - seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; - }break; - - case SEEKFREE_ASSISTANT_WIFI_UART: - { - seekfree_assistant_transfer_callback = wifi_uart_send_buffer; - seekfree_assistant_receive_callback = wifi_uart_read_buffer; - }break; - + // case SEEKFREE_ASSISTANT_CH9141: + // { + // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; + // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; + // }break; + + // case SEEKFREE_ASSISTANT_WIFI_UART: + // { + // seekfree_assistant_transfer_callback = wifi_uart_send_buffer; + // seekfree_assistant_receive_callback = wifi_uart_read_buffer; + // }break; + case SEEKFREE_ASSISTANT_WIFI_SPI: { seekfree_assistant_transfer_callback = wifi_spi_send_buffer; seekfree_assistant_receive_callback = wifi_spi_read_buffer; }break; - - case SEEKFREE_ASSISTANT_CUSTOM: - { + + default: + { // Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ - + seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + seekfree_assistant_receive_callback = seekfree_assistant_receive; }break; } } - - diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.h index 2ccfd8a..0e28f49 100644 --- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,13 +24,13 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,7 +43,6 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ SEEKFREE_ASSISTANT_WIRELESS_UART, // ת - SEEKFREE_ASSISTANT_BLE6A20, // ת SEEKFREE_ASSISTANT_CH9141, // CH9141 SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_absolute_encoder.h index 1166c84..dc091aa 100644 --- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_absolute_encoder.h +++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_absolute_encoder.h @@ -62,7 +62,7 @@ //==================================================== SPI ==================================================== #else //====================================================Ӳ SPI ==================================================== -#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI +#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI #define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI #define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK #define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI @@ -70,7 +70,7 @@ //====================================================Ӳ SPI ==================================================== #endif -#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ +#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ #define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN))) #define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ble6a20.h index 6f4544a..6af089f 100644 --- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ble6a20.h +++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ble6a20.h @@ -76,7 +76,7 @@ // 1Զ Զʵ޸ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ // Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000 -#define BLE6A20_AUTO_BAUD_RATE ( 0 ) +#define BLE6A20_AUTO_BAUD_RATE ( 1 ) #if (1 == BLE6A20_AUTO_BAUD_RATE) typedef enum diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rc.c new file mode 100644 index 0000000..68840e2 --- /dev/null +++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rc.c @@ -0,0 +1,563 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#include "math.h" +#include "zf_common_debug.h" +#include "zf_driver_delay.h" +#include "zf_driver_spi.h" +#include "zf_driver_gpio.h" +#include "zf_driver_soft_iic.h" +#include "zf_device_config.h" +#include "zf_driver_uart.h" +#include "zf_driver_exti.h" + +#include "zf_device_imu660rc.h" + +#ifndef M_PI +#define M_PI 3.1415926f +#endif + + +static uint8 imu660rc_quarternion_rate; + +float imu660rc_transition_factor[2]; +int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro () +int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ) +float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ +float imu660rc_quarternion[4]; // Ԫ + + + +#if IMU660RC_USE_SOFT_IIC +static soft_iic_info_struct imu660rc_iic_struct; + +#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data))) +#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len))) +#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg))) +#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len))) +#else +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC дĴ +// ˵ reg Ĵַ +// ˵ data +// ز void +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_write_register (uint8 reg, uint8 data) +{ + IMU660RC_CS(0); + spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data); + IMU660RC_CS(1); +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ĵ +// ˵ reg Ĵַ +// ز uint8 +// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_read_register (uint8 reg) +{ + uint8 data; + IMU660RC_CS(0); + data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R); + IMU660RC_CS(1); + return data; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC +// ˵ reg Ĵַ +// ˵ data ݻ +// ˵ len ݳ +// ز void +// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len) +{ + IMU660RC_CS(0); + spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len); + IMU660RC_CS(1); +} +#endif + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC fp16ת +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint32 fp16_to_float(uint16 h) +{ + uint16 h_exp = (h & 0x7c00u); + uint32 f_sgn = ((uint32)h & 0x8000u) << 16; + switch (h_exp) + { + case 0x0000u: // 0 or subnormal + { + uint16 h_sig = (h & 0x03ffu); + // Signed zero + if (h_sig == 0) + { + return f_sgn; + } + // Subnormal + h_sig <<= 1; + while ((h_sig & 0x0400u) == 0) + { + h_sig <<= 1; + h_exp++; + } + uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23; + uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13; + return f_sgn + f_exp + f_sig; + } + case 0x7c00u: // inf or NaN + { + // All-ones exponent and a copy of the significand + return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13); + } + default: // normalized + { + // Just need to adjust the exponent and shift + return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13); + } + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫһ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_normalize(float quat[4], uint16 *fp16) +{ + float n = 0; + float temp[4]; + + *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]); + *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]); + *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]); + *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]); + + n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3]; + n = sqrtf(n); + + if(n > 0.001f) // Խӽ0ֵ + { + n = temp[3] < 0.0f ? -n : n; + + quat[0] = temp[1] / n; + quat[1] = temp[2] / n; + quat[2] = temp[0] / n; + quat[3] = temp[3] / n; + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫתŷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw) +{ + float euler[3]; + + float sqx = quat[0] * quat[0]; + float sqy = quat[1] * quat[1]; + float sqz = quat[2] * quat[2]; + + euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx)); + euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2])); + euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz)); + + // תǶ + euler[0] = 180 * (euler[0]) / M_PI; + euler[1] = 180 * (euler[1]) / M_PI; + euler[2] = 180 * (euler[2]) / M_PI; + + // Ƕȵ + euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2]; + + *roll = euler[0]; + *pitch = euler[1]; + *yaw = euler[2]; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ÷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank) +{ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank); +} + + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Լ +// ˵ void +// ز uint8 1-Լʧ 0-Լɹ +// ʹʾ imu660rc_self_check(); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_self_check (void) +{ + uint8 dat = 0, return_state = 0; + uint16 timeout_count = 0; + do + { + if(IMU660RC_TIMEOUT_COUNT < timeout_count ++) + { + return_state = 1; + break; + } + dat = imu660rc_read_register(IMU660RC_CHIP_ID); + system_delay_ms(1); + }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû⵽豸 + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ٶȼ +// ˵ void +// ز void +// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_acc (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6); + imu660rc_acc_x = dat[0]; + imu660rc_acc_y = dat[1]; + imu660rc_acc_z = dat[2]; + } +} +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC +// ˵ void +// ز void +// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_gyro (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6); + imu660rc_gyro_x = dat[0]; + imu660rc_gyro_y = dat[1]; + imu660rc_gyro_z = dat[2]; + } +} + + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ԪݲתΪŷ +// ˵ void +// ز void +// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı +// עϢ ҪINT2Ŵжϵô˺ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_quarternion(void) +{ + uint8 i; + uint16 buff[4]; + uint8 *buff1_ptr; + int16 *buff2_ptr; + + if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate) + { + buff1_ptr = (uint8 *)buff; + + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x20); + imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31); + + for(i = 0; 8 > i; i++) + { + imu660rc_write_register(0x08, 0x4C + i); + buff1_ptr[i] = imu660rc_read_register(0x09); + } + + imu660rc_write_register(IMU660RC_PAGE_RW, 0x0); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // Ԫһ + quarternion_normalize(imu660rc_quarternion, buff); + // Ԫתŷ + quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw); + + // ȡٶٶϢ + #if(1 == IMU660RC_QUARTERNION_GET_ACC) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6); + imu660rc_acc_x = buff2_ptr[0]; + imu660rc_acc_y = buff2_ptr[1]; + imu660rc_acc_z = buff2_ptr[2]; + } + #endif + #if(1 == IMU660RC_QUARTERNION_GET_GYRO) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6); + imu660rc_gyro_x = buff2_ptr[0]; + imu660rc_gyro_y = buff2_ptr[1]; + imu660rc_gyro_z = buff2_ptr[2]; + } + #endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RCжϻصҪжڶȡԪ +// ˵ void +// ز void +// ʹʾ +// עϢ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_callback(void) +{ + imu660rc_get_quarternion(); + +} + +//------------------------------------------------------------------------------------------------------------------- +// ʼ IMU660RC +// ˵ quarternion_rate ѡԪ +// ز uint8 1-ʼʧ 0-ʼɹ +// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate) +{ + uint8 return_state = 0; + + imu660rc_quarternion_rate = quarternion_rate; + #if IMU660RC_USE_SOFT_IIC + soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿ + + #else + spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿ + gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿ + #endif + + system_delay_ms(10); + + do + { + if(imu660rc_self_check()) // IMU660RC Լ + { + // ˶Ϣ ʾλ + // ô IMU660RC Լʱ˳ + // һ½û ûܾǻ + zf_log(0, "imu660rc self check error."); + return_state = 1; + break; + } + + // λ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04); + system_delay_ms(30); + + // ÿ¹ַ + imu660rc_write_register(IMU660RC_CTRL3, 0x44); + + switch(IMU660RC_ACC_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_ACC_SAMPLE_SGN_2G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x00); + imu660rc_transition_factor[0] = 16393.44; + }break; + case IMU660RC_ACC_SAMPLE_SGN_4G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x01); + imu660rc_transition_factor[0] = 8196.72; + }break; + case IMU660RC_ACC_SAMPLE_SGN_8G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x02); + imu660rc_transition_factor[0] = 4098.36; + }break; + case IMU660RC_ACC_SAMPLE_SGN_16G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x03); + imu660rc_transition_factor[0] = 2049.18; + }break; + } + if(1 == return_state) + { + break; + } + + switch(IMU660RC_GYRO_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_125DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x00); + imu660rc_transition_factor[1] = 228.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_250DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x01); + imu660rc_transition_factor[1] = 114.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_500DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x02); + imu660rc_transition_factor[1] = 57.1428; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_1000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x03); + imu660rc_transition_factor[1] = 28.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_2000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x04); + imu660rc_transition_factor[1] = 14.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_4000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x0C); + imu660rc_transition_factor[1] = 7.14285; + }break; + } + if(1 == return_state) + { + break; + } + + // ôģʽΪ߾ģʽԼ + imu660rc_write_register(IMU660RC_CTRL1, 0x15); + imu660rc_write_register(IMU660RC_CTRL2, 0x18); + + // LPF1˲ + imu660rc_write_register(IMU660RC_CTRL7, 0x01); + + // LPF2˲ + imu660rc_write_register(IMU660RC_CTRL9, 0x08); + + // ԪӦ + if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate) + { + // жϴź + imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80); + imu660rc_write_register(IMU660RC_CTRL4, 0x08); + imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30); + + // üٶȡٶ + imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3)); + imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3)); + + // Ԫʲ + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3)); + imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x00); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // жϼ + exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING); + } + }while(0); + + return return_state; +} + + + + + + + + + + + + + diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rc.h new file mode 100644 index 0000000..dd5a9e3 --- /dev/null +++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rc.h @@ -0,0 +1,211 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#ifndef _zf_device_imu660rc_h_ +#define _zf_device_imu660rc_h_ + +#include "zf_common_typedef.h" + + +// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC +// IMU660RC_USE_SOFT_IICҪȱ벢س򣬵ƬģҪϵͨѶ +#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ + +#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ +//==================================================== IIC ==================================================== +#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ +#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL +#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA +//==================================================== IIC ==================================================== +#else + +//====================================================Ӳ SPI ==================================================== +#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI +#define IMU660RC_SPI (SPI_0) // Ӳ SPI +#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK +#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI +#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO +//====================================================Ӳ SPI ==================================================== +#endif +#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ +#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) ) +#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ + + +#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ +#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ + +typedef enum +{ + IMU660RC_MAIN_MEM_BANK = 0x00, + IMU660RC_HUB_MEM_BANK = 0x40, + IMU660RC_EMBED_MEM_BANK = 0x80, +}imu660rc_mem_bank_enum; + +typedef enum +{ + IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2) + IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G + IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G + IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G +}imu660rc_acc_sample_config; + +typedef enum +{ + IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S) + IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS + IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS + IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS + IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS + IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS +}imu660rc_gyro_sample_config; + +typedef enum +{ + IMU660RC_QUARTERNION_15HZ, // 15 Hz + IMU660RC_QUARTERNION_30HZ, // 30 Hz + IMU660RC_QUARTERNION_60HZ, // 60 Hz + IMU660RC_QUARTERNION_120HZ, // 120Hz + IMU660RC_QUARTERNION_240HZ, // 240Hz + IMU660RC_QUARTERNION_480HZ, // 480Hz + IMU660RC_QUARTERNION_DISABLE, // Ԫ +}imu660rc_quarternion_rate_config; + + +//================================================ IMU660RC ڲַ================================================ +#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ +#define IMU660RC_SPI_W ( 0x00 ) +#define IMU660RC_SPI_R ( 0x80 ) +#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ + + +//================================================ IMU660RC Ĵַ================================================ +#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 ) +#define IMU660RC_INT2_CTRL ( 0x0E ) +#define IMU660RC_CHIP_ID ( 0x0F ) +#define IMU660RC_CTRL1 ( 0x10 ) +#define IMU660RC_CTRL2 ( 0x11 ) +#define IMU660RC_CTRL3 ( 0x12 ) +#define IMU660RC_CTRL4 ( 0x13 ) +#define IMU660RC_CTRL5 ( 0x14 ) +#define IMU660RC_CTRL6 ( 0x15 ) +#define IMU660RC_CTRL7 ( 0x16 ) +#define IMU660RC_CTRL8 ( 0x17 ) +#define IMU660RC_CTRL9 ( 0x18 ) +#define IMU660RC_CTRL10 ( 0x19 ) +#define IMU660RC_CTRL_STATUS ( 0x1A ) +#define IMU660RC_STATUS_REG ( 0x1E ) +#define IMU660RC_OUT_TEMP_L ( 0x20 ) +#define IMU660RC_OUT_TEMP_H ( 0x21 ) +#define IMU660RC_OUTX_L_G ( 0x22 ) +#define IMU660RC_OUTX_H_G ( 0x23 ) +#define IMU660RC_OUTY_L_G ( 0x24 ) +#define IMU660RC_OUTY_H_G ( 0x25 ) +#define IMU660RC_OUTZ_L_G ( 0x26 ) +#define IMU660RC_OUTZ_H_G ( 0x27 ) +#define IMU660RC_OUTX_L_A ( 0x28 ) +#define IMU660RC_OUTX_H_A ( 0x29 ) +#define IMU660RC_OUTY_L_A ( 0x2A ) +#define IMU660RC_OUTY_H_A ( 0x2B ) +#define IMU660RC_OUTZ_L_A ( 0x2C ) +#define IMU660RC_OUTZ_H_A ( 0x2D ) + +#define IMU660RC_PAGE_SEL ( 0x02 ) +#define IMU660RC_EMB_FUNC_EN_A ( 0x04 ) +#define IMU660RC_PAGE_RW ( 0x17 ) +#define IMU660RC_SFLP_ODR ( 0x5E ) +#define IMU660RC_EMB_FUNC_CFG ( 0x63 ) + + + +extern float imu660rc_transition_factor[2]; +extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; // +extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ +extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ +extern float imu660rc_quarternion[4]; // Ԫ + + +void imu660rc_get_acc (void); +void imu660rc_get_gyro (void); +void imu660rc_get_quarternion (void); + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ٶȼתΪʵ +// ˵ acc_value ļٶȼ +// ز void +// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2) +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0]) + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC תΪʵ +// ˵ gyro_value +// ز void +// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1]) +void imu660rc_callback (void); +uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate); + + + +#endif diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rx.h index 45699d9..81b8b41 100644 --- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rx.h +++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_imu660rx.h @@ -97,7 +97,7 @@ //================================================ IMU660RX ȫֱ================================================ extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro () extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ) -extern float imu660ra_transition_factor[2]; +extern float imu660rx_transition_factor[2]; //================================================ IMU660RX ȫֱ================================================ diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips114.h index c56f310..9c4ac0d 100644 --- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips114.h +++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips114.h @@ -167,7 +167,7 @@ void ips114_init (void); // ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================= IPS114 չ================================================ #endif diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200.h index 850fb11..5bf4284 100644 --- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200.h +++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200.h @@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select); // ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================== IPS200 չ================================================ diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h index 98c5364..557e1d2 100644 --- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h @@ -86,7 +86,7 @@ // £SCC8660_PCLK_DIVԽͼԽ #define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1> #define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ -#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) +#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) #define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0 //================================================ SCC8660 ã֧ͫ֡ʰ汾=========================== diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.c index b51c600..b06e6a1 100644 --- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.c +++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.c @@ -24,7 +24,7 @@ * ļ zf_device_wifi_spi * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.9.20 +* ADS v1.10.2 * ƽ̨ TC264D * https://seekfree.taobao.com/ * @@ -63,6 +63,21 @@ #define SOCKET_CONNECT_TIME_OUT 50000 // λ #define OTHER_TIME_OUT 1000 // λ +#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088)) + #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088" +#endif + +#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE) + #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE" +#endif + + +#if (WIFI_SPI_TRANSFER_SIZE != 4088) + #error "WIFI_SPI_TRANSFER_SIZE must be == 4088" +#endif + + + char wifi_spi_version[12]; // ģ̼汾Ϣ char wifi_spi_mac_addr[20]; // ģMACַϢ char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ @@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void) { memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1; - return return_state; } @@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void) { memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1; - return return_state; } @@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void) { memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1; + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ȡϵͳʱ +// ˵ time_format ʱʽ +// ز *buffer ʱַַ СҪ30ֽ +// ز buffer_size С +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size) +{ + uint8 return_state = 1; + wifi_spi_packets_struct temp_packets; + uint8 send_cmd, receive_cmd; + + // ʱ30ֽ + // ģ̼V2汾 + if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2))) + { + send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0; + receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0; + + return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT); + if((0 == return_state) && (receive_cmd == temp_packets.head.command)) + { + return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2); + if(0 == return_state) + { + memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3); + buffer[temp_packets.head.length - 3] = 0; + } + } + } + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ɨȵ +// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз +// ˵ buffer_size ij +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +// עϢ ÿһаһwifi +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size) +{ + uint8 return_state; + + // ģV2汾Ĺִ̼֧˹ + if(!strncmp(wifi_spi_version, "V2", 2)) + { + return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT); + + if(0 == return_state) + { + #if (0 == WIFI_SPI_READ_TRANSFER) + wifi_spi_send_buffer(NULL, 0); + #endif + while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size)) + { + system_delay_ms(10); + } + } + } return return_state; } @@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) while(length) { - send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length; + send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length); if(wifi_spi_wait_idle(OTHER_TIME_OUT)) { @@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) return length; } +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ַͺͬ +// ˵ *string Ҫ͵ַ +// ز void +// ʹʾ wifi_spi_send_string("123"); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +void wifi_spi_send_string(const char *string) +{ + wifi_spi_send_buffer((uint8*)string, strlen(string)); +} + //------------------------------------------------------------------------------------------------------------------- // WIFI SPI ȡ // ˵ *buff ջ @@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) { zf_assert(NULL != buffer); - uint32 data_len = length; + uint32 fifo_read_length; + uint32 write_length = 0; + wifi_spi_packets_struct temp_packets; + + // жFIFOǷݣȴFIFOȡ + if(fifo_used(&wifi_spi_fifo)) + { + fifo_read_length = fifo_used(&wifi_spi_fifo); + fifo_read_length = length < fifo_read_length ? length : fifo_read_length; + fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN); + + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + } #if(1 == WIFI_SPI_READ_TRANSFER) - - wifi_spi_packets_struct temp_packets; - // WIFI SPI״̬жϻ߳ѾͨѶ򱾴βܷ if(WIFI_SPI_IDLE == wifi_spi_mutex) { - // ͨѶ״̬Ϊæ - wifi_spi_mutex = WIFI_SPI_BUSY; + wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ - // ͨѶ鿴ģǷδȡ do { - if(wifi_spi_wait_idle(OTHER_TIME_OUT)) + if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ + (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳ + ) { break; } + temp_packets.head.command = WIFI_SPI_DATA; temp_packets.head.length = 0; wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE); // յİǷ - if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) + if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) && + (temp_packets.head.length) + ) { - // յ - if(temp_packets.head.length) + if(length) + { + fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length; + memcpy(buffer, temp_packets.buffer, fifo_read_length); + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO + { + fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length); + } + } + else // ȫдFIFO { fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length); } @@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command); wifi_spi_mutex = WIFI_SPI_IDLE; } -#endif +#endif - fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN); - return data_len; + return write_length; } //------------------------------------------------------------------------------------------------------------------- @@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word) // MACַϢַʽwifi_spi_mac_addr wifi_spi_get_mac_addr(); - + if(NULL == wifi_ssid) + { + // ʼʱҪWIFI + break; + } return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word); if(return_state) { diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.h index eea8a78..e7cec39 100644 --- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.h +++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.h @@ -73,8 +73,8 @@ #if (WIFI_SPI_AUTO_CONNECT > 2) #error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]" #else -#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP -#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿ +#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP +#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666 #endif @@ -95,10 +95,15 @@ typedef enum WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ + WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI + WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾 WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ + WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1 + WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2 + WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3 // ӻش WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ @@ -110,6 +115,9 @@ typedef enum WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾 WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں + WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ + WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ + WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ WIFI_SPI_INVALID2 = 0xFF // Чݰ }wifi_spi_packets_command_enum; @@ -134,19 +142,27 @@ typedef struct uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // }wifi_spi_packets_struct; - +typedef enum +{ + WIFI_SPI_UTC_0 = 1, // ʱ + WIFI_SPI_GMT, // ʱ תΪGMTʽ׺GMT һڶԽƶ˴ģʹ + WIFI_SPI_UTC_8, // ʱ +}wifi_spi_time_enum; + extern char wifi_spi_version[12]; // ̼汾 ַ extern char wifi_spi_mac_addr[20]; // ģMACַ ַ extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ -uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); -uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); -uint8 wifi_spi_socket_disconnect (void); -uint8 wifi_spi_udp_send_now (void); -uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); -uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size); +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size); +uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); +uint8 wifi_spi_socket_disconnect (void); +uint8 wifi_spi_udp_send_now (void); +uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); +void wifi_spi_send_string (const char *string); +uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); -uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); #endif - diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.h index 0f392ff..24b88cc 100644 --- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.h +++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.h @@ -73,7 +73,7 @@ #if (WIFI_UART_AUTO_CONNECT > 3) #error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]" #else -#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP +#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP #define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_UART_LOCAL_PORT "8080" // ˿ #endif diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_driver/zf_driver_encoder.c index 8d514b7..ad4099e 100644 --- a/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_driver/zf_driver_encoder.c +++ b/Example/Coreboard_Demo/E13_dual_core_demo/libraries/zf_driver/zf_driver_encoder.c @@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n) //------------------------------------------------------------------------------------------------------------------- void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin) { -// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init + zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init IfxGpt12_enableModule(&MODULE_GPT120); IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4); diff --git a/Example/Coreboard_Demo/E13_dual_core_demo/user/isr.c b/Example/Coreboard_Demo/E13_dual_core_demo/user/isr.c index e19382e..927ed43 100644 --- a/Example/Coreboard_Demo/E13_dual_core_demo/user/isr.c +++ b/Example/Coreboard_Demo/E13_dual_core_demo/user/isr.c @@ -40,14 +40,14 @@ // 򵥵˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ // **************************** PITжϺ **************************** -IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) -{ - interrupt_global_enable(0); // жǶ - pit_clear_flag(CCU60_CH0); - - - -} +//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) +//{ +// interrupt_global_enable(0); // жǶ +// pit_clear_flag(CCU60_CH0); +// +// +// +//} IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) @@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж { exti_flag_clear(ERU_CH0_REQ0_P15_4); - + + imu660rc_callback(); // 660RC ģ INT ж } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж @@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) { exti_flag_clear(ERU_CH5_REQ1_P15_8); - } } @@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) // exti_flag_clear(ERU_CH6_REQ9_P20_0); // } // } - IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO) { interrupt_global_enable(0); // жǶ @@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { interrupt_global_enable(0); // жǶ - gnss_uart_callback(); // GPSڻص + gnss_uart_callback(); // GNSSڻص diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt index 1e222a3..8ce85ca 100644 --- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt @@ -1,3 +1,13 @@ +V3.4.4 + SCC8660ʽ + ָV2 + ޸ips200ʾscc8660ͷʽ + ޸ips114ʾscc8660ͷʽ +V3.4.3 + 660RC +V3.4.2 + ޸printfضеĺ궨 + WIFI_SPI V3.4.1 ޸Ĵڷ麯еķ ޸ips200proע diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h index 27b7965..e8d6021 100644 --- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h @@ -91,6 +91,7 @@ #include "zf_device_imu660ra.h" #include "zf_device_imu660rb.h" #include "zf_device_imu660rx.h" +#include "zf_device_imu660rc.h" #include "zf_device_imu963ra.h" #include "zf_device_ips114.h" #include "zf_device_ips200.h" diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/printf_redirect.c index c44d826..299da76 100644 --- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/printf_redirect.c +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/printf_redirect.c @@ -45,7 +45,7 @@ //------------------------------------------------------------------------------------------------------------------- int fputc(int ch, FILE *stream) { - uart_write_byte(DEBUG_UART_INDEX, (char)ch); + uart_write_byte(PRINTF_USE_UART, (char)ch); return (ch); } @@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len) int fgetc(FILE *f) { #if PRINTF_OUTPUT_TYPE == 0 - return uart_read_byte(DEBUG_UART_INDEX); + return uart_read_byte(PRINTF_USE_UART); #else uint8 buf; wifi_spi_read_buffer(&buf, 1); diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.c index 231b20d..3e9ec74 100644 --- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,423 +24,519 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_debug.h" #include "seekfree_assistant.h" +// ͨö +typedef enum +{ + SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 , + SEEKFREE_ASSISTANT_SEND_CAMERA_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD , -extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); -extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); + SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 , -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) + SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 , +}seekfree_assistant_cmd_type_enum; + +#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ +#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ + +// ݷͺָ +extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); +seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + +// ݽպָ +extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); +seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) #include "zf_common_fifo.h" -static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO -static fifo_struct seekfree_assistant_fifo = // FIFOṹ +static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE]; +static fifo_struct seekfree_assistant_debug_param_fifo = { - .buffer = seekfree_assistant_buffer, + .buffer = seekfree_assistant_debug_param_buffer, .execution = FIFO_IDLE, .type = FIFO_DATA_8BIT, .head = 0, .end = 0, - .size = SEEKFREE_ASSISTANT_BUFFER_SIZE, - .max = SEEKFREE_ASSISTANT_BUFFER_SIZE, -}; + .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, + .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, +}; #endif -static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ -static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ -static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ - -seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ -seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ - -seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ -vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ - //------------------------------------------------------------------------------------------------------------------- // ͺ -// ˵ *buffer ҪУݵַ -// ˵ length У鳤 -// ز uint8 ֵ +// ˵ *buffer ҪУݵַ +// ˵ length У鳤 +// ز uint8 ֵ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length) +static uint8 seekfree_assistant_sum (void *buffer, uint32 length) { uint8 temp_sum = 0; + uint8 *ptr = (uint8 *)buffer; while(length--) { - temp_sum += *buffer++; + temp_sum += *ptr ++; } return temp_sum; } //------------------------------------------------------------------------------------------------------------------- -// ͼͺ -// ˵ camera_type ͷ -// ˵ *image_addr ͼ׵ַ -// ˵ boundary_num ͼа߽ -// ˵ width ͼ -// ˵ height ͼ߶ +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ // ز void -// ʹʾ +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height) +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer) { - uint32 image_size = 0; + zf_assert(NULL != ccd_obj); + zf_assert(NULL != data_buffer); - seekfree_assistant_camera_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_data.function = SEEKFREE_ASSISTANT_CAMERA_FUNCTION; - seekfree_assistant_camera_data.camera_type = (camera_type << 5) | ((image_addr != NULL ? 0 : 1) << 4) | boundary_num; - // дϢЭ鲿 - seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct); - seekfree_assistant_camera_data.image_width = width; - seekfree_assistant_camera_data.image_height = height; + memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct)); + ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD; + ccd_obj->config.channel_index = channel_index; - // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct)); - - // ͷͼͼС - switch(camera_type) + uint16 data_max = 256; + uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT; + loop_count = (2 >= loop_count) ? (loop_count) : (2); + for(uint8 i = 0; loop_count > i; i ++) { - case SEEKFREE_ASSISTANT_OV7725_BIN: - { - image_size = width * height / 8; - }break; - - case SEEKFREE_ASSISTANT_MT9V03X: - { - image_size = width * height; - }break; - - case SEEKFREE_ASSISTANT_SCC8660: - { - image_size = width * height * 2; - }break; + data_max *= 4; } - // ͼ - if(NULL != image_addr) + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF); + #else + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + ccd_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + ccd_obj->config.data_type = data_type; + } + + // ¼ʵֽ uint16 Ҫݳ + ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1)); + // Ȼ¼Ӧݻ + ccd_obj->data_buffer = data_buffer; + + // У + ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.check_sum += seekfree_assistant_sum( + &(ccd_obj->config.cmd), + sizeof(ccd_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)ccd_obj, + sizeof(ccd_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(ccd_obj->data_buffer), + ccd_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer) +{ + zf_assert(NULL != camera_obj); + + memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct)); + camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD; + camera_obj->config.camera_type = camera_type; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF); + #else + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type + && NULL != data_buffer) { - seekfree_assistant_transfer_callback(image_addr, image_size); + camera_obj->config.data_type = 0x02; + } + else + { + camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01); + } + + // RGB565 ͼ ôֽ + camera_obj->buffer_byte_size = + image_width * image_height + * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1)); + camera_obj->buffer_byte_size = + (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type) + ? (camera_obj->buffer_byte_size / 8) + : (camera_obj->buffer_byte_size); + camera_obj->data_buffer = data_buffer; + + // У + camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.check_sum += seekfree_assistant_sum( + &(camera_obj->config.cmd), + sizeof(camera_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_obj, + sizeof(camera_obj->config)); + if(NULL != camera_obj->data_buffer) + { + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_obj->data_buffer), + camera_obj->buffer_byte_size); } } //------------------------------------------------------------------------------------------------------------------- -// ͼ߻ƺ -// ˵ boundary_id ID -// ˵ dot_num -// ˵ *dot_x ׵ַ -// ˵ *dot_y ׵ַ -// ˵ width ͼ -// ˵ height ͼ߶ +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 // ز void -// ʹʾ +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer) +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer) { - uint8 i; - uint16 dot_bytes = 0; // ֽ + zf_assert(NULL != camera_boundary_obj); + zf_assert(NULL != data_buffer); - dot_bytes = seekfree_assistant_camera_dot_data.dot_num; + memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct)); + camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD; - if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5)) - { - dot_bytes *= 2; + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + camera_boundary_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + camera_boundary_obj->config.data_type = data_type; } - // ȷ֡ͷܡ߽š곤ȡ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct)); + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif - for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++) - { - // жǷͺ - if(NULL != buffer->boundary_x[i]) - { - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes); - } + camera_boundary_obj->buffer_byte_size = + boundary_lenght * 2 + * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2)); + camera_boundary_obj->data_buffer = data_buffer; - // жǷ - if(NULL != buffer->boundary_y[i]) - { - // ûݣʾÿһֻһ߽ - // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣 - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes); - } - } + // У + camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.check_sum += seekfree_assistant_sum( + &(camera_boundary_obj->config.cmd), + sizeof(camera_boundary_obj->config) - 2); } //------------------------------------------------------------------------------------------------------------------- -// ʾͺ +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_boundary_obj, + sizeof(camera_boundary_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_boundary_obj->data_buffer), + camera_boundary_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color) +{ + seekfree_assistant_camera_rectangular_struct camera_rectangular_obj; + memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct)); + camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif + + // У + camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.check_sum += seekfree_assistant_sum( + &(camera_rectangular_obj.cmd), + sizeof(camera_rectangular_obj) - 2); + + seekfree_assistant_transfer_callback( + (const uint8 *)&camera_rectangular_obj, + sizeof(camera_rectangular_obj)); +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer) +{ + zf_assert(NULL != oscilloscope_obj); + zf_assert(NULL != data_buffer); + + memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct)); + oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD; + oscilloscope_obj->config.channel_max = + (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max) + ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX) + : ((0 == channel_max) ? (1) : (channel_max)); + oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00); + oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4; + oscilloscope_obj->data_buffer = data_buffer; +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ // ˵ *seekfree_assistant_oscilloscope ʾݽṹ // ز void // ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope) +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj) { - uint8 packet_size; - - // λ - seekfree_assistant_oscilloscope->channel_num &= 0x0f; - - zf_assert(SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT >= seekfree_assistant_oscilloscope->channel_num); - - // ֡ͷ - seekfree_assistant_oscilloscope->head = SEEKFREE_ASSISTANT_SEND_HEAD; - - // дϢ - packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4; - seekfree_assistant_oscilloscope->length = packet_size; - - // д빦ͨ - seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE; - // У - seekfree_assistant_oscilloscope->check_sum = 0; - seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size); + oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + &(oscilloscope_obj->config.cmd), + sizeof(oscilloscope_obj->config) - 2); + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + (oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); - // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[] - - seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size); + seekfree_assistant_transfer_callback( + (const uint8 *)oscilloscope_obj, + sizeof(oscilloscope_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); } +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) //------------------------------------------------------------------------------------------------------------------- -// ͼϢú -// ˵ camera_type ͼ -// ˵ image_addr ͼַ NULLʾֻͱϢλ -// ˵ width ͼ -// ˵ height ͼ߶ +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ // ز void -// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H); -// עϢ +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height) +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj) { - seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION; - // дϢ - seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct); + zf_assert(NULL != debug_param_obj); - seekfree_assistant_camera_buffer.camera_type = camera_type; - seekfree_assistant_camera_buffer.image_addr = image_addr; - seekfree_assistant_camera_buffer.width = width; - seekfree_assistant_camera_buffer.height = height; -} + seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ + uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ + uint8 temp_sum = 0xFF; // Уʱ + uint32 read_length = 0; // ȡʱ -//------------------------------------------------------------------------------------------------------------------- -// ͼ߷ú -// ˵ boundary_type ߽ -// ˵ dot_num һ߽жٸ -// ˵ dot_x1 ű1ĵַ NULLʾͱ1 -// ˵ dot_x2 ű2ĵַ NULLʾͱ2 -// ˵ dot_x3 ű3ĵַ NULLʾͱ3 -// ˵ dot_y1 ű1ĵַ NULLʾͱ1 -// ˵ dot_y2 ű2ĵַ NULLʾͱ2 -// ˵ dot_y3 ű3ĵַ NULLʾͱ3 -// ز void -// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк -// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ -// ʹʾ seekfree_assistant_camera_config(XY_BOUNDARY, 160, xy_x1_boundary, xy_x2_boundary, xy_x3_boundary, xy_y1_boundary, xy_y2_boundary, xy_y3_boundary); // ͼʱߣ߰ -// עϢ -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3) -{ - uint8 i = 0; - uint8 boundary_num = 0; - uint8 boundary_data_type = 0; - - // ͼͻǷ׼, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_dot_data.dot_num = dot_num; - seekfree_assistant_camera_dot_data.valid_flag = 0; - for(i = 0; i < 3; i++) - { - seekfree_assistant_camera_buffer.boundary_x[i] = NULL; - seekfree_assistant_camera_buffer.boundary_y[i] = NULL; - } - - switch(boundary_type) - { - case X_BOUNDARY: - { - if(NULL != dot_x1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x1; - } - if(NULL != dot_x2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x2; - } - if(NULL != dot_x3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x3; - } - - if(255 < seekfree_assistant_camera_buffer.height) - { - boundary_data_type = 1; - } - }break; - - case Y_BOUNDARY: - { - if(NULL != dot_y1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if(NULL != dot_y2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if(NULL != dot_y3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if(255 < seekfree_assistant_camera_buffer.width) - { - boundary_data_type = 1; - } - }break; - - case XY_BOUNDARY: - { - if((NULL != dot_x1) && (NULL != dot_y1)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if((NULL != dot_x2) && (NULL != dot_y2)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if((NULL != dot_x3) && (NULL != dot_y3)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x3; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if((255 < seekfree_assistant_camera_buffer.width) || (255 < seekfree_assistant_camera_buffer.height)) - { - boundary_data_type = 1; - } - }break; - - case NO_BOUNDARY:break; - } - - seekfree_assistant_camera_dot_data.dot_type = (boundary_type << 6) | (boundary_data_type << 5) | boundary_num; -} - -//------------------------------------------------------------------------------------------------------------------- -// ַͷͼ -// ˵ void -// ز void -// ʹʾ -// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_send (void) -{ - // ͼͻǷ׼ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_data_send(seekfree_assistant_camera_buffer.camera_type, seekfree_assistant_camera_buffer.image_addr, seekfree_assistant_camera_dot_data.dot_type & 0x0f, seekfree_assistant_camera_buffer.width, seekfree_assistant_camera_buffer.height); - - if(seekfree_assistant_camera_dot_data.dot_type & 0x0f) - { - seekfree_assistant_camera_dot_send(&seekfree_assistant_camera_buffer); - } -} - - -//------------------------------------------------------------------------------------------------------------------- -// ֽյ -// ˵ void -// ز void -// ʹʾ ֻҪŵеPITжϻѭ -//------------------------------------------------------------------------------------------------------------------- -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) -void seekfree_assistant_data_analysis (void) -{ - uint8 temp_sum; - uint32 read_length; - seekfree_assistant_parameter_struct *receive_packet; - - // ʹuint32ж壬ĿΪ˱ֽ֤ڶ - uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4]; - - // Զȡ, ԶĴ䷽ʽӽջصжȡ - read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE); + // Զȡһݰ + // ԶĴ䷽ʽӽջصжȡ + read_length = seekfree_assistant_receive_callback( + debug_param_cmd_pointer, + sizeof(seekfree_assistant_debug_param_cmd_struct)); if(read_length) - { - // ȡдFIFO - fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length); + { // ȡдFIFO + fifo_write_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + read_length); } - while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo)) - { - read_length = sizeof(seekfree_assistant_parameter_struct); - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_ONLY); + while( sizeof(seekfree_assistant_debug_param_cmd_struct) + <= fifo_used(&seekfree_assistant_debug_param_fifo)) + { // FIFO һݰ ôͽн + // ֱӶһݰ + read_length = sizeof(seekfree_assistant_debug_param_cmd_struct); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_ONLY); - if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0]) - { - // û֡ͷFIFOȥһ - read_length = 1; - } - else - { - // ҵ֡ͷ - receive_packet = (seekfree_assistant_parameter_struct *)temp_buffer; - temp_sum = receive_packet->check_sum; - receive_packet->check_sum = 0; - if(temp_sum == seekfree_assistant_sum((uint8 *)temp_buffer, sizeof(seekfree_assistant_parameter_struct))) - { - // Уɹ - seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data; - seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1; + if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0] + && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2]) + { // ֱƥ֡ͷ ҹҲƥ + temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ + debug_param_cmd_obj.check_sum = 0; // հУֵ У + if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct))) + { // Уɹ + debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float; + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0]; + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + #endif + debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1; + temp_sum = 0x00; } else - { - read_length = 1; + { // Уƥ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + } + else + { // ƥ䲻֡ͷ͹ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + + if(0xFF == temp_sum) + { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ + for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++) + { // Ϊȡһ һ + if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length]) + { // ҵ¸֡ͷ˳ + break; + } } } // ʹõ - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_AND_CLEAN); } } #endif - - - diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.h index 5b7e1b5..937f784 100644 --- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,142 +24,292 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ - #include "zf_common_typedef.h" +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 , + SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 , +}seekfree_assistant_data_type_enum; -// 1ʹܲڵĹ 0رղڵĹ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 ) - - - -// FIFOС -#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) - -// ʾͨ -#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) - -// Եͨ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) - -// ͼ -#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) - -// Ƭλ͵֡ͷ -#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) - -// ͷ -#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) -#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) -#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) - -// λƬ͵֡ͷ -#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) - -// -#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) - +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ +}seekfree_assistant_ccd_resolution_enum; // ͷö typedef enum { - // ͷͺŶ - SEEKFREE_ASSISTANT_OV7725_BIN = 1, - SEEKFREE_ASSISTANT_MT9V03X, - SEEKFREE_ASSISTANT_SCC8660, - // ͼͶ - SEEKFREE_ASSISTANT_BINARY = 1, - SEEKFREE_ASSISTANT_GRAY, - SEEKFREE_ASSISTANT_RGB565, -}seekfree_assistant_image_type_enum; + SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY , + SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 , -// ͷö -typedef enum -{ - // ͷͺŶ - X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ - Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ - XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ - NO_BOUNDARY, // ͵ͼûбϢ -}seekfree_assistant_boundary_type_enum; + // ͷͺƥ䶨 + SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X , + SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 , +}seekfree_assistant_camera_type_enum; + +#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨 + +#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ +#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤ + +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС +#endif typedef struct { - uint8 head; // ֡ͷ - uint8 channel_num; // λΪ λΪͨ - uint8 check_sum; // У - uint8 length; // - float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + uint8 data_lenght_buffer[2] ; // CCD ݳ + uint8 channel_color_buffer[2] ; // ͨɫ + uint8 channel_data_max[2] ; // ֵͨ + uint8 data_type ; // ȷϴС + uint8 reserve ; // + }config; + uint16 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_ccd_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 camera_type ; // ͷ + uint8 image_width_buffer[2] ; // ͼ + uint8 image_height_buffer[2] ; // ͼ߶ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 data_type ; // ȷϴС + uint8 boundary_lenght_buffer[2] ; // ߳ + uint8 color_buffer[2] ; // ͨɫ + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_boundary_struct; + +typedef struct +{ + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 reserve ; // + uint8 x_axis_buffer[2] ; // X + uint8 y_axis_buffer[2] ; // Y + uint8 width_buffer[2] ; // ο + uint8 height_buffer[2] ; // θ߶ + uint8 color_buffer[2] ; // ɫ +}seekfree_assistant_camera_rectangular_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_max ; // ͨ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ }seekfree_assistant_oscilloscope_struct; +typedef union +{ + uint8 data_uint8[4] ; + float data_float ; +}seekfree_assistant_param_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ - uint8 length; // ȣЭ鲿֣ - uint16 image_width; // ͼ - uint16 image_height; // ͼ߶ -}seekfree_assistant_camera_struct; - - -typedef struct -{ - uint8 head; // ֡ͷ - uint8 function; // - uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽ - uint8 length; // ȣЭ鲿֣ - uint16 dot_num; // - uint8 valid_flag; // ͨʶ - uint8 reserve; // -}seekfree_assistant_camera_dot_struct; - -typedef struct -{ - void *image_addr; // ͷַ - uint16 width; // ͼ - uint16 height; // ͼ߶ - seekfree_assistant_image_type_enum camera_type; // ͷ - void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ - void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ -}seekfree_assistant_camera_buffer_struct; + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + seekfree_assistant_param_struct dat ; // һ + +}seekfree_assistant_debug_param_cmd_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 channel; // ͨ - uint8 check_sum; // У - float data; // -}seekfree_assistant_parameter_struct; + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint8_struct; + + +typedef struct +{ + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint16_struct; + +typedef struct +{ + float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; + uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; +}seekfree_assistant_debug_param_struct; typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length); typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length); -extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ -extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ - - -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope); -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height); -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3); -void seekfree_assistant_camera_send (void); -void seekfree_assistant_data_analysis (void); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ +// ز void +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, 16] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *seekfree_assistant_oscilloscope ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj); + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj); +#endif #endif diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c index d139201..23205d5 100644 --- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,23 +24,20 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_typedef.h" #include "zf_common_fifo.h" #include "zf_common_debug.h" -#include "zf_driver_uart.h" + #include "zf_device_wireless_uart.h" -#include "zf_device_ble6a20.h" -#include "zf_device_bluetooth_ch9141.h" -#include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" #include "seekfree_assistant.h" @@ -50,7 +47,6 @@ extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ - //------------------------------------------------------------------------------------------------------------------- // ַͺ // ˵ *buff Ҫ͵ݵַ @@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv // ز uint32 ʣδݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) +uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݷ͹ @@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) // ز uint32 յݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) +uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݽչ return 0; @@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) // ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ // ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) +void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) { switch(transfer_device) { case SEEKFREE_ASSISTANT_DEBUG_UART: { -#if DEBUG_UART_USE_INTERRUPT == 1 seekfree_assistant_transfer_callback = debug_send_buffer; seekfree_assistant_receive_callback = debug_read_ring_buffer; -#endif }break; - + case SEEKFREE_ASSISTANT_WIRELESS_UART: { seekfree_assistant_transfer_callback = wireless_uart_send_buffer; seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; - - case SEEKFREE_ASSISTANT_BLE6A20: - { - seekfree_assistant_transfer_callback = ble6a20_send_buffer; - seekfree_assistant_receive_callback = ble6a20_read_buffer; - }break; - case SEEKFREE_ASSISTANT_CH9141: - { - seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; - seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; - }break; - - case SEEKFREE_ASSISTANT_WIFI_UART: - { - seekfree_assistant_transfer_callback = wifi_uart_send_buffer; - seekfree_assistant_receive_callback = wifi_uart_read_buffer; - }break; - + // case SEEKFREE_ASSISTANT_CH9141: + // { + // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; + // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; + // }break; + + // case SEEKFREE_ASSISTANT_WIFI_UART: + // { + // seekfree_assistant_transfer_callback = wifi_uart_send_buffer; + // seekfree_assistant_receive_callback = wifi_uart_read_buffer; + // }break; + case SEEKFREE_ASSISTANT_WIFI_SPI: { seekfree_assistant_transfer_callback = wifi_spi_send_buffer; seekfree_assistant_receive_callback = wifi_spi_read_buffer; }break; - - case SEEKFREE_ASSISTANT_CUSTOM: - { + + default: + { // Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ - + seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + seekfree_assistant_receive_callback = seekfree_assistant_receive; }break; } } - - diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.h index 2ccfd8a..0e28f49 100644 --- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,13 +24,13 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,7 +43,6 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ SEEKFREE_ASSISTANT_WIRELESS_UART, // ת - SEEKFREE_ASSISTANT_BLE6A20, // ת SEEKFREE_ASSISTANT_CH9141, // CH9141 SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_absolute_encoder.h index 1166c84..dc091aa 100644 --- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_absolute_encoder.h +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_absolute_encoder.h @@ -62,7 +62,7 @@ //==================================================== SPI ==================================================== #else //====================================================Ӳ SPI ==================================================== -#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI +#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI #define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI #define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK #define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI @@ -70,7 +70,7 @@ //====================================================Ӳ SPI ==================================================== #endif -#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ +#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ #define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN))) #define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ble6a20.h index 6f4544a..6af089f 100644 --- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ble6a20.h +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ble6a20.h @@ -76,7 +76,7 @@ // 1Զ Զʵ޸ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ // Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000 -#define BLE6A20_AUTO_BAUD_RATE ( 0 ) +#define BLE6A20_AUTO_BAUD_RATE ( 1 ) #if (1 == BLE6A20_AUTO_BAUD_RATE) typedef enum diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rc.c new file mode 100644 index 0000000..68840e2 --- /dev/null +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rc.c @@ -0,0 +1,563 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#include "math.h" +#include "zf_common_debug.h" +#include "zf_driver_delay.h" +#include "zf_driver_spi.h" +#include "zf_driver_gpio.h" +#include "zf_driver_soft_iic.h" +#include "zf_device_config.h" +#include "zf_driver_uart.h" +#include "zf_driver_exti.h" + +#include "zf_device_imu660rc.h" + +#ifndef M_PI +#define M_PI 3.1415926f +#endif + + +static uint8 imu660rc_quarternion_rate; + +float imu660rc_transition_factor[2]; +int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro () +int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ) +float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ +float imu660rc_quarternion[4]; // Ԫ + + + +#if IMU660RC_USE_SOFT_IIC +static soft_iic_info_struct imu660rc_iic_struct; + +#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data))) +#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len))) +#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg))) +#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len))) +#else +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC дĴ +// ˵ reg Ĵַ +// ˵ data +// ز void +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_write_register (uint8 reg, uint8 data) +{ + IMU660RC_CS(0); + spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data); + IMU660RC_CS(1); +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ĵ +// ˵ reg Ĵַ +// ز uint8 +// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_read_register (uint8 reg) +{ + uint8 data; + IMU660RC_CS(0); + data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R); + IMU660RC_CS(1); + return data; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC +// ˵ reg Ĵַ +// ˵ data ݻ +// ˵ len ݳ +// ز void +// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len) +{ + IMU660RC_CS(0); + spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len); + IMU660RC_CS(1); +} +#endif + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC fp16ת +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint32 fp16_to_float(uint16 h) +{ + uint16 h_exp = (h & 0x7c00u); + uint32 f_sgn = ((uint32)h & 0x8000u) << 16; + switch (h_exp) + { + case 0x0000u: // 0 or subnormal + { + uint16 h_sig = (h & 0x03ffu); + // Signed zero + if (h_sig == 0) + { + return f_sgn; + } + // Subnormal + h_sig <<= 1; + while ((h_sig & 0x0400u) == 0) + { + h_sig <<= 1; + h_exp++; + } + uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23; + uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13; + return f_sgn + f_exp + f_sig; + } + case 0x7c00u: // inf or NaN + { + // All-ones exponent and a copy of the significand + return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13); + } + default: // normalized + { + // Just need to adjust the exponent and shift + return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13); + } + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫһ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_normalize(float quat[4], uint16 *fp16) +{ + float n = 0; + float temp[4]; + + *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]); + *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]); + *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]); + *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]); + + n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3]; + n = sqrtf(n); + + if(n > 0.001f) // Խӽ0ֵ + { + n = temp[3] < 0.0f ? -n : n; + + quat[0] = temp[1] / n; + quat[1] = temp[2] / n; + quat[2] = temp[0] / n; + quat[3] = temp[3] / n; + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫתŷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw) +{ + float euler[3]; + + float sqx = quat[0] * quat[0]; + float sqy = quat[1] * quat[1]; + float sqz = quat[2] * quat[2]; + + euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx)); + euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2])); + euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz)); + + // תǶ + euler[0] = 180 * (euler[0]) / M_PI; + euler[1] = 180 * (euler[1]) / M_PI; + euler[2] = 180 * (euler[2]) / M_PI; + + // Ƕȵ + euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2]; + + *roll = euler[0]; + *pitch = euler[1]; + *yaw = euler[2]; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ÷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank) +{ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank); +} + + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Լ +// ˵ void +// ز uint8 1-Լʧ 0-Լɹ +// ʹʾ imu660rc_self_check(); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_self_check (void) +{ + uint8 dat = 0, return_state = 0; + uint16 timeout_count = 0; + do + { + if(IMU660RC_TIMEOUT_COUNT < timeout_count ++) + { + return_state = 1; + break; + } + dat = imu660rc_read_register(IMU660RC_CHIP_ID); + system_delay_ms(1); + }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû⵽豸 + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ٶȼ +// ˵ void +// ز void +// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_acc (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6); + imu660rc_acc_x = dat[0]; + imu660rc_acc_y = dat[1]; + imu660rc_acc_z = dat[2]; + } +} +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC +// ˵ void +// ز void +// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_gyro (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6); + imu660rc_gyro_x = dat[0]; + imu660rc_gyro_y = dat[1]; + imu660rc_gyro_z = dat[2]; + } +} + + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ԪݲתΪŷ +// ˵ void +// ز void +// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı +// עϢ ҪINT2Ŵжϵô˺ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_quarternion(void) +{ + uint8 i; + uint16 buff[4]; + uint8 *buff1_ptr; + int16 *buff2_ptr; + + if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate) + { + buff1_ptr = (uint8 *)buff; + + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x20); + imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31); + + for(i = 0; 8 > i; i++) + { + imu660rc_write_register(0x08, 0x4C + i); + buff1_ptr[i] = imu660rc_read_register(0x09); + } + + imu660rc_write_register(IMU660RC_PAGE_RW, 0x0); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // Ԫһ + quarternion_normalize(imu660rc_quarternion, buff); + // Ԫתŷ + quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw); + + // ȡٶٶϢ + #if(1 == IMU660RC_QUARTERNION_GET_ACC) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6); + imu660rc_acc_x = buff2_ptr[0]; + imu660rc_acc_y = buff2_ptr[1]; + imu660rc_acc_z = buff2_ptr[2]; + } + #endif + #if(1 == IMU660RC_QUARTERNION_GET_GYRO) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6); + imu660rc_gyro_x = buff2_ptr[0]; + imu660rc_gyro_y = buff2_ptr[1]; + imu660rc_gyro_z = buff2_ptr[2]; + } + #endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RCжϻصҪжڶȡԪ +// ˵ void +// ز void +// ʹʾ +// עϢ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_callback(void) +{ + imu660rc_get_quarternion(); + +} + +//------------------------------------------------------------------------------------------------------------------- +// ʼ IMU660RC +// ˵ quarternion_rate ѡԪ +// ز uint8 1-ʼʧ 0-ʼɹ +// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate) +{ + uint8 return_state = 0; + + imu660rc_quarternion_rate = quarternion_rate; + #if IMU660RC_USE_SOFT_IIC + soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿ + + #else + spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿ + gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿ + #endif + + system_delay_ms(10); + + do + { + if(imu660rc_self_check()) // IMU660RC Լ + { + // ˶Ϣ ʾλ + // ô IMU660RC Լʱ˳ + // һ½û ûܾǻ + zf_log(0, "imu660rc self check error."); + return_state = 1; + break; + } + + // λ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04); + system_delay_ms(30); + + // ÿ¹ַ + imu660rc_write_register(IMU660RC_CTRL3, 0x44); + + switch(IMU660RC_ACC_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_ACC_SAMPLE_SGN_2G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x00); + imu660rc_transition_factor[0] = 16393.44; + }break; + case IMU660RC_ACC_SAMPLE_SGN_4G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x01); + imu660rc_transition_factor[0] = 8196.72; + }break; + case IMU660RC_ACC_SAMPLE_SGN_8G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x02); + imu660rc_transition_factor[0] = 4098.36; + }break; + case IMU660RC_ACC_SAMPLE_SGN_16G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x03); + imu660rc_transition_factor[0] = 2049.18; + }break; + } + if(1 == return_state) + { + break; + } + + switch(IMU660RC_GYRO_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_125DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x00); + imu660rc_transition_factor[1] = 228.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_250DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x01); + imu660rc_transition_factor[1] = 114.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_500DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x02); + imu660rc_transition_factor[1] = 57.1428; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_1000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x03); + imu660rc_transition_factor[1] = 28.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_2000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x04); + imu660rc_transition_factor[1] = 14.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_4000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x0C); + imu660rc_transition_factor[1] = 7.14285; + }break; + } + if(1 == return_state) + { + break; + } + + // ôģʽΪ߾ģʽԼ + imu660rc_write_register(IMU660RC_CTRL1, 0x15); + imu660rc_write_register(IMU660RC_CTRL2, 0x18); + + // LPF1˲ + imu660rc_write_register(IMU660RC_CTRL7, 0x01); + + // LPF2˲ + imu660rc_write_register(IMU660RC_CTRL9, 0x08); + + // ԪӦ + if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate) + { + // жϴź + imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80); + imu660rc_write_register(IMU660RC_CTRL4, 0x08); + imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30); + + // üٶȡٶ + imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3)); + imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3)); + + // Ԫʲ + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3)); + imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x00); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // жϼ + exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING); + } + }while(0); + + return return_state; +} + + + + + + + + + + + + + diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rc.h new file mode 100644 index 0000000..dd5a9e3 --- /dev/null +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rc.h @@ -0,0 +1,211 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#ifndef _zf_device_imu660rc_h_ +#define _zf_device_imu660rc_h_ + +#include "zf_common_typedef.h" + + +// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC +// IMU660RC_USE_SOFT_IICҪȱ벢س򣬵ƬģҪϵͨѶ +#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ + +#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ +//==================================================== IIC ==================================================== +#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ +#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL +#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA +//==================================================== IIC ==================================================== +#else + +//====================================================Ӳ SPI ==================================================== +#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI +#define IMU660RC_SPI (SPI_0) // Ӳ SPI +#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK +#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI +#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO +//====================================================Ӳ SPI ==================================================== +#endif +#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ +#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) ) +#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ + + +#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ +#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ + +typedef enum +{ + IMU660RC_MAIN_MEM_BANK = 0x00, + IMU660RC_HUB_MEM_BANK = 0x40, + IMU660RC_EMBED_MEM_BANK = 0x80, +}imu660rc_mem_bank_enum; + +typedef enum +{ + IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2) + IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G + IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G + IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G +}imu660rc_acc_sample_config; + +typedef enum +{ + IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S) + IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS + IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS + IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS + IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS + IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS +}imu660rc_gyro_sample_config; + +typedef enum +{ + IMU660RC_QUARTERNION_15HZ, // 15 Hz + IMU660RC_QUARTERNION_30HZ, // 30 Hz + IMU660RC_QUARTERNION_60HZ, // 60 Hz + IMU660RC_QUARTERNION_120HZ, // 120Hz + IMU660RC_QUARTERNION_240HZ, // 240Hz + IMU660RC_QUARTERNION_480HZ, // 480Hz + IMU660RC_QUARTERNION_DISABLE, // Ԫ +}imu660rc_quarternion_rate_config; + + +//================================================ IMU660RC ڲַ================================================ +#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ +#define IMU660RC_SPI_W ( 0x00 ) +#define IMU660RC_SPI_R ( 0x80 ) +#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ + + +//================================================ IMU660RC Ĵַ================================================ +#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 ) +#define IMU660RC_INT2_CTRL ( 0x0E ) +#define IMU660RC_CHIP_ID ( 0x0F ) +#define IMU660RC_CTRL1 ( 0x10 ) +#define IMU660RC_CTRL2 ( 0x11 ) +#define IMU660RC_CTRL3 ( 0x12 ) +#define IMU660RC_CTRL4 ( 0x13 ) +#define IMU660RC_CTRL5 ( 0x14 ) +#define IMU660RC_CTRL6 ( 0x15 ) +#define IMU660RC_CTRL7 ( 0x16 ) +#define IMU660RC_CTRL8 ( 0x17 ) +#define IMU660RC_CTRL9 ( 0x18 ) +#define IMU660RC_CTRL10 ( 0x19 ) +#define IMU660RC_CTRL_STATUS ( 0x1A ) +#define IMU660RC_STATUS_REG ( 0x1E ) +#define IMU660RC_OUT_TEMP_L ( 0x20 ) +#define IMU660RC_OUT_TEMP_H ( 0x21 ) +#define IMU660RC_OUTX_L_G ( 0x22 ) +#define IMU660RC_OUTX_H_G ( 0x23 ) +#define IMU660RC_OUTY_L_G ( 0x24 ) +#define IMU660RC_OUTY_H_G ( 0x25 ) +#define IMU660RC_OUTZ_L_G ( 0x26 ) +#define IMU660RC_OUTZ_H_G ( 0x27 ) +#define IMU660RC_OUTX_L_A ( 0x28 ) +#define IMU660RC_OUTX_H_A ( 0x29 ) +#define IMU660RC_OUTY_L_A ( 0x2A ) +#define IMU660RC_OUTY_H_A ( 0x2B ) +#define IMU660RC_OUTZ_L_A ( 0x2C ) +#define IMU660RC_OUTZ_H_A ( 0x2D ) + +#define IMU660RC_PAGE_SEL ( 0x02 ) +#define IMU660RC_EMB_FUNC_EN_A ( 0x04 ) +#define IMU660RC_PAGE_RW ( 0x17 ) +#define IMU660RC_SFLP_ODR ( 0x5E ) +#define IMU660RC_EMB_FUNC_CFG ( 0x63 ) + + + +extern float imu660rc_transition_factor[2]; +extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; // +extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ +extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ +extern float imu660rc_quarternion[4]; // Ԫ + + +void imu660rc_get_acc (void); +void imu660rc_get_gyro (void); +void imu660rc_get_quarternion (void); + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ٶȼתΪʵ +// ˵ acc_value ļٶȼ +// ز void +// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2) +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0]) + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC תΪʵ +// ˵ gyro_value +// ز void +// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1]) +void imu660rc_callback (void); +uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate); + + + +#endif diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rx.h index 45699d9..81b8b41 100644 --- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rx.h +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660rx.h @@ -97,7 +97,7 @@ //================================================ IMU660RX ȫֱ================================================ extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro () extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ) -extern float imu660ra_transition_factor[2]; +extern float imu660rx_transition_factor[2]; //================================================ IMU660RX ȫֱ================================================ diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips114.h index c56f310..9c4ac0d 100644 --- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips114.h +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips114.h @@ -167,7 +167,7 @@ void ips114_init (void); // ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================= IPS114 չ================================================ #endif diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200.h index 850fb11..5bf4284 100644 --- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200.h +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200.h @@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select); // ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================== IPS200 չ================================================ diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h index 98c5364..557e1d2 100644 --- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h @@ -86,7 +86,7 @@ // £SCC8660_PCLK_DIVԽͼԽ #define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1> #define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ -#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) +#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) #define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0 //================================================ SCC8660 ã֧ͫ֡ʰ汾=========================== diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.c index b51c600..b06e6a1 100644 --- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.c +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.c @@ -24,7 +24,7 @@ * ļ zf_device_wifi_spi * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.9.20 +* ADS v1.10.2 * ƽ̨ TC264D * https://seekfree.taobao.com/ * @@ -63,6 +63,21 @@ #define SOCKET_CONNECT_TIME_OUT 50000 // λ #define OTHER_TIME_OUT 1000 // λ +#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088)) + #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088" +#endif + +#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE) + #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE" +#endif + + +#if (WIFI_SPI_TRANSFER_SIZE != 4088) + #error "WIFI_SPI_TRANSFER_SIZE must be == 4088" +#endif + + + char wifi_spi_version[12]; // ģ̼汾Ϣ char wifi_spi_mac_addr[20]; // ģMACַϢ char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ @@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void) { memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1; - return return_state; } @@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void) { memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1; - return return_state; } @@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void) { memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1; + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ȡϵͳʱ +// ˵ time_format ʱʽ +// ز *buffer ʱַַ СҪ30ֽ +// ز buffer_size С +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size) +{ + uint8 return_state = 1; + wifi_spi_packets_struct temp_packets; + uint8 send_cmd, receive_cmd; + + // ʱ30ֽ + // ģ̼V2汾 + if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2))) + { + send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0; + receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0; + + return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT); + if((0 == return_state) && (receive_cmd == temp_packets.head.command)) + { + return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2); + if(0 == return_state) + { + memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3); + buffer[temp_packets.head.length - 3] = 0; + } + } + } + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ɨȵ +// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз +// ˵ buffer_size ij +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +// עϢ ÿһаһwifi +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size) +{ + uint8 return_state; + + // ģV2汾Ĺִ̼֧˹ + if(!strncmp(wifi_spi_version, "V2", 2)) + { + return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT); + + if(0 == return_state) + { + #if (0 == WIFI_SPI_READ_TRANSFER) + wifi_spi_send_buffer(NULL, 0); + #endif + while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size)) + { + system_delay_ms(10); + } + } + } return return_state; } @@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) while(length) { - send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length; + send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length); if(wifi_spi_wait_idle(OTHER_TIME_OUT)) { @@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) return length; } +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ַͺͬ +// ˵ *string Ҫ͵ַ +// ز void +// ʹʾ wifi_spi_send_string("123"); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +void wifi_spi_send_string(const char *string) +{ + wifi_spi_send_buffer((uint8*)string, strlen(string)); +} + //------------------------------------------------------------------------------------------------------------------- // WIFI SPI ȡ // ˵ *buff ջ @@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) { zf_assert(NULL != buffer); - uint32 data_len = length; + uint32 fifo_read_length; + uint32 write_length = 0; + wifi_spi_packets_struct temp_packets; + + // жFIFOǷݣȴFIFOȡ + if(fifo_used(&wifi_spi_fifo)) + { + fifo_read_length = fifo_used(&wifi_spi_fifo); + fifo_read_length = length < fifo_read_length ? length : fifo_read_length; + fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN); + + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + } #if(1 == WIFI_SPI_READ_TRANSFER) - - wifi_spi_packets_struct temp_packets; - // WIFI SPI״̬жϻ߳ѾͨѶ򱾴βܷ if(WIFI_SPI_IDLE == wifi_spi_mutex) { - // ͨѶ״̬Ϊæ - wifi_spi_mutex = WIFI_SPI_BUSY; + wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ - // ͨѶ鿴ģǷδȡ do { - if(wifi_spi_wait_idle(OTHER_TIME_OUT)) + if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ + (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳ + ) { break; } + temp_packets.head.command = WIFI_SPI_DATA; temp_packets.head.length = 0; wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE); // յİǷ - if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) + if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) && + (temp_packets.head.length) + ) { - // յ - if(temp_packets.head.length) + if(length) + { + fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length; + memcpy(buffer, temp_packets.buffer, fifo_read_length); + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO + { + fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length); + } + } + else // ȫдFIFO { fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length); } @@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command); wifi_spi_mutex = WIFI_SPI_IDLE; } -#endif +#endif - fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN); - return data_len; + return write_length; } //------------------------------------------------------------------------------------------------------------------- @@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word) // MACַϢַʽwifi_spi_mac_addr wifi_spi_get_mac_addr(); - + if(NULL == wifi_ssid) + { + // ʼʱҪWIFI + break; + } return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word); if(return_state) { diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.h index eea8a78..e7cec39 100644 --- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.h +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.h @@ -73,8 +73,8 @@ #if (WIFI_SPI_AUTO_CONNECT > 2) #error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]" #else -#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP -#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿ +#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP +#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666 #endif @@ -95,10 +95,15 @@ typedef enum WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ + WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI + WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾 WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ + WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1 + WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2 + WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3 // ӻش WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ @@ -110,6 +115,9 @@ typedef enum WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾 WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں + WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ + WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ + WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ WIFI_SPI_INVALID2 = 0xFF // Чݰ }wifi_spi_packets_command_enum; @@ -134,19 +142,27 @@ typedef struct uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // }wifi_spi_packets_struct; - +typedef enum +{ + WIFI_SPI_UTC_0 = 1, // ʱ + WIFI_SPI_GMT, // ʱ תΪGMTʽ׺GMT һڶԽƶ˴ģʹ + WIFI_SPI_UTC_8, // ʱ +}wifi_spi_time_enum; + extern char wifi_spi_version[12]; // ̼汾 ַ extern char wifi_spi_mac_addr[20]; // ģMACַ ַ extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ -uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); -uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); -uint8 wifi_spi_socket_disconnect (void); -uint8 wifi_spi_udp_send_now (void); -uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); -uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size); +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size); +uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); +uint8 wifi_spi_socket_disconnect (void); +uint8 wifi_spi_udp_send_now (void); +uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); +void wifi_spi_send_string (const char *string); +uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); -uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); #endif - diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.h index 0f392ff..24b88cc 100644 --- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.h +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.h @@ -73,7 +73,7 @@ #if (WIFI_UART_AUTO_CONNECT > 3) #error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]" #else -#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP +#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP #define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_UART_LOCAL_PORT "8080" // ˿ #endif diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_encoder.c index 8d514b7..ad4099e 100644 --- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_encoder.c +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_encoder.c @@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n) //------------------------------------------------------------------------------------------------------------------- void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin) { -// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init + zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init IfxGpt12_enableModule(&MODULE_GPT120); IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4); diff --git a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/user/isr.c b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/user/isr.c index e19382e..927ed43 100644 --- a/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/user/isr.c +++ b/Example/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/user/isr.c @@ -40,14 +40,14 @@ // 򵥵˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ // **************************** PITжϺ **************************** -IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) -{ - interrupt_global_enable(0); // жǶ - pit_clear_flag(CCU60_CH0); - - - -} +//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) +//{ +// interrupt_global_enable(0); // жǶ +// pit_clear_flag(CCU60_CH0); +// +// +// +//} IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) @@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж { exti_flag_clear(ERU_CH0_REQ0_P15_4); - + + imu660rc_callback(); // 660RC ģ INT ж } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж @@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) { exti_flag_clear(ERU_CH5_REQ1_P15_8); - } } @@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) // exti_flag_clear(ERU_CH6_REQ9_P20_0); // } // } - IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO) { interrupt_global_enable(0); // жǶ @@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { interrupt_global_enable(0); // жǶ - gnss_uart_callback(); // GPSڻص + gnss_uart_callback(); // GNSSڻص diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/doc/version.txt b/Example/Coreboard_Demo/E15_fft_demo/libraries/doc/version.txt index 1e222a3..8ce85ca 100644 --- a/Example/Coreboard_Demo/E15_fft_demo/libraries/doc/version.txt +++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/doc/version.txt @@ -1,3 +1,13 @@ +V3.4.4 + SCC8660ʽ + ָV2 + ޸ips200ʾscc8660ͷʽ + ޸ips114ʾscc8660ͷʽ +V3.4.3 + 660RC +V3.4.2 + ޸printfضеĺ궨 + WIFI_SPI V3.4.1 ޸Ĵڷ麯еķ ޸ips200proע diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_common/zf_common_headfile.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_common/zf_common_headfile.h index 27b7965..e8d6021 100644 --- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_common/zf_common_headfile.h +++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_common/zf_common_headfile.h @@ -91,6 +91,7 @@ #include "zf_device_imu660ra.h" #include "zf_device_imu660rb.h" #include "zf_device_imu660rx.h" +#include "zf_device_imu660rc.h" #include "zf_device_imu963ra.h" #include "zf_device_ips114.h" #include "zf_device_ips200.h" diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/printf_redirect.c b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/printf_redirect.c index c44d826..299da76 100644 --- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/printf_redirect.c +++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/printf_redirect.c @@ -45,7 +45,7 @@ //------------------------------------------------------------------------------------------------------------------- int fputc(int ch, FILE *stream) { - uart_write_byte(DEBUG_UART_INDEX, (char)ch); + uart_write_byte(PRINTF_USE_UART, (char)ch); return (ch); } @@ -71,7 +71,7 @@ int _write(int fd, char *buf, int len) int fgetc(FILE *f) { #if PRINTF_OUTPUT_TYPE == 0 - return uart_read_byte(DEBUG_UART_INDEX); + return uart_read_byte(PRINTF_USE_UART); #else uint8 buf; wifi_spi_read_buffer(&buf, 1); diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant.c b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant.c index 231b20d..3e9ec74 100644 --- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant.c +++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,423 +24,519 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_debug.h" #include "seekfree_assistant.h" +// ͨö +typedef enum +{ + SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 , + SEEKFREE_ASSISTANT_SEND_CAMERA_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD , -extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); -extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); + SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 , -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) + SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 , +}seekfree_assistant_cmd_type_enum; + +#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ +#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ + +// ݷͺָ +extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); +seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + +// ݽպָ +extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); +seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) #include "zf_common_fifo.h" -static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO -static fifo_struct seekfree_assistant_fifo = // FIFOṹ +static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE]; +static fifo_struct seekfree_assistant_debug_param_fifo = { - .buffer = seekfree_assistant_buffer, + .buffer = seekfree_assistant_debug_param_buffer, .execution = FIFO_IDLE, .type = FIFO_DATA_8BIT, .head = 0, .end = 0, - .size = SEEKFREE_ASSISTANT_BUFFER_SIZE, - .max = SEEKFREE_ASSISTANT_BUFFER_SIZE, -}; + .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, + .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, +}; #endif -static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ -static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ -static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ - -seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ -seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ - -seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ -vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ - //------------------------------------------------------------------------------------------------------------------- // ͺ -// ˵ *buffer ҪУݵַ -// ˵ length У鳤 -// ز uint8 ֵ +// ˵ *buffer ҪУݵַ +// ˵ length У鳤 +// ز uint8 ֵ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length) +static uint8 seekfree_assistant_sum (void *buffer, uint32 length) { uint8 temp_sum = 0; + uint8 *ptr = (uint8 *)buffer; while(length--) { - temp_sum += *buffer++; + temp_sum += *ptr ++; } return temp_sum; } //------------------------------------------------------------------------------------------------------------------- -// ͼͺ -// ˵ camera_type ͷ -// ˵ *image_addr ͼ׵ַ -// ˵ boundary_num ͼа߽ -// ˵ width ͼ -// ˵ height ͼ߶ +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ // ز void -// ʹʾ +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height) +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer) { - uint32 image_size = 0; + zf_assert(NULL != ccd_obj); + zf_assert(NULL != data_buffer); - seekfree_assistant_camera_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_data.function = SEEKFREE_ASSISTANT_CAMERA_FUNCTION; - seekfree_assistant_camera_data.camera_type = (camera_type << 5) | ((image_addr != NULL ? 0 : 1) << 4) | boundary_num; - // дϢЭ鲿 - seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct); - seekfree_assistant_camera_data.image_width = width; - seekfree_assistant_camera_data.image_height = height; + memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct)); + ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD; + ccd_obj->config.channel_index = channel_index; - // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct)); - - // ͷͼͼС - switch(camera_type) + uint16 data_max = 256; + uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT; + loop_count = (2 >= loop_count) ? (loop_count) : (2); + for(uint8 i = 0; loop_count > i; i ++) { - case SEEKFREE_ASSISTANT_OV7725_BIN: - { - image_size = width * height / 8; - }break; - - case SEEKFREE_ASSISTANT_MT9V03X: - { - image_size = width * height; - }break; - - case SEEKFREE_ASSISTANT_SCC8660: - { - image_size = width * height * 2; - }break; + data_max *= 4; } - // ͼ - if(NULL != image_addr) + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF); + #else + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + ccd_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + ccd_obj->config.data_type = data_type; + } + + // ¼ʵֽ uint16 Ҫݳ + ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1)); + // Ȼ¼Ӧݻ + ccd_obj->data_buffer = data_buffer; + + // У + ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.check_sum += seekfree_assistant_sum( + &(ccd_obj->config.cmd), + sizeof(ccd_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)ccd_obj, + sizeof(ccd_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(ccd_obj->data_buffer), + ccd_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer) +{ + zf_assert(NULL != camera_obj); + + memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct)); + camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD; + camera_obj->config.camera_type = camera_type; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF); + #else + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type + && NULL != data_buffer) { - seekfree_assistant_transfer_callback(image_addr, image_size); + camera_obj->config.data_type = 0x02; + } + else + { + camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01); + } + + // RGB565 ͼ ôֽ + camera_obj->buffer_byte_size = + image_width * image_height + * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1)); + camera_obj->buffer_byte_size = + (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type) + ? (camera_obj->buffer_byte_size / 8) + : (camera_obj->buffer_byte_size); + camera_obj->data_buffer = data_buffer; + + // У + camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.check_sum += seekfree_assistant_sum( + &(camera_obj->config.cmd), + sizeof(camera_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_obj, + sizeof(camera_obj->config)); + if(NULL != camera_obj->data_buffer) + { + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_obj->data_buffer), + camera_obj->buffer_byte_size); } } //------------------------------------------------------------------------------------------------------------------- -// ͼ߻ƺ -// ˵ boundary_id ID -// ˵ dot_num -// ˵ *dot_x ׵ַ -// ˵ *dot_y ׵ַ -// ˵ width ͼ -// ˵ height ͼ߶ +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 // ز void -// ʹʾ +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer) +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer) { - uint8 i; - uint16 dot_bytes = 0; // ֽ + zf_assert(NULL != camera_boundary_obj); + zf_assert(NULL != data_buffer); - dot_bytes = seekfree_assistant_camera_dot_data.dot_num; + memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct)); + camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD; - if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5)) - { - dot_bytes *= 2; + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + camera_boundary_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + camera_boundary_obj->config.data_type = data_type; } - // ȷ֡ͷܡ߽š곤ȡ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct)); + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif - for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++) - { - // жǷͺ - if(NULL != buffer->boundary_x[i]) - { - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes); - } + camera_boundary_obj->buffer_byte_size = + boundary_lenght * 2 + * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2)); + camera_boundary_obj->data_buffer = data_buffer; - // жǷ - if(NULL != buffer->boundary_y[i]) - { - // ûݣʾÿһֻһ߽ - // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣 - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes); - } - } + // У + camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.check_sum += seekfree_assistant_sum( + &(camera_boundary_obj->config.cmd), + sizeof(camera_boundary_obj->config) - 2); } //------------------------------------------------------------------------------------------------------------------- -// ʾͺ +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_boundary_obj, + sizeof(camera_boundary_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_boundary_obj->data_buffer), + camera_boundary_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color) +{ + seekfree_assistant_camera_rectangular_struct camera_rectangular_obj; + memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct)); + camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif + + // У + camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.check_sum += seekfree_assistant_sum( + &(camera_rectangular_obj.cmd), + sizeof(camera_rectangular_obj) - 2); + + seekfree_assistant_transfer_callback( + (const uint8 *)&camera_rectangular_obj, + sizeof(camera_rectangular_obj)); +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer) +{ + zf_assert(NULL != oscilloscope_obj); + zf_assert(NULL != data_buffer); + + memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct)); + oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD; + oscilloscope_obj->config.channel_max = + (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max) + ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX) + : ((0 == channel_max) ? (1) : (channel_max)); + oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00); + oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4; + oscilloscope_obj->data_buffer = data_buffer; +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ // ˵ *seekfree_assistant_oscilloscope ʾݽṹ // ز void // ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope) +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj) { - uint8 packet_size; - - // λ - seekfree_assistant_oscilloscope->channel_num &= 0x0f; - - zf_assert(SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT >= seekfree_assistant_oscilloscope->channel_num); - - // ֡ͷ - seekfree_assistant_oscilloscope->head = SEEKFREE_ASSISTANT_SEND_HEAD; - - // дϢ - packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4; - seekfree_assistant_oscilloscope->length = packet_size; - - // д빦ͨ - seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE; - // У - seekfree_assistant_oscilloscope->check_sum = 0; - seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size); + oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + &(oscilloscope_obj->config.cmd), + sizeof(oscilloscope_obj->config) - 2); + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + (oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); - // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[] - - seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size); + seekfree_assistant_transfer_callback( + (const uint8 *)oscilloscope_obj, + sizeof(oscilloscope_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); } +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) //------------------------------------------------------------------------------------------------------------------- -// ͼϢú -// ˵ camera_type ͼ -// ˵ image_addr ͼַ NULLʾֻͱϢλ -// ˵ width ͼ -// ˵ height ͼ߶ +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ // ز void -// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H); -// עϢ +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height) +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj) { - seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION; - // дϢ - seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct); + zf_assert(NULL != debug_param_obj); - seekfree_assistant_camera_buffer.camera_type = camera_type; - seekfree_assistant_camera_buffer.image_addr = image_addr; - seekfree_assistant_camera_buffer.width = width; - seekfree_assistant_camera_buffer.height = height; -} + seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ + uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ + uint8 temp_sum = 0xFF; // Уʱ + uint32 read_length = 0; // ȡʱ -//------------------------------------------------------------------------------------------------------------------- -// ͼ߷ú -// ˵ boundary_type ߽ -// ˵ dot_num һ߽жٸ -// ˵ dot_x1 ű1ĵַ NULLʾͱ1 -// ˵ dot_x2 ű2ĵַ NULLʾͱ2 -// ˵ dot_x3 ű3ĵַ NULLʾͱ3 -// ˵ dot_y1 ű1ĵַ NULLʾͱ1 -// ˵ dot_y2 ű2ĵַ NULLʾͱ2 -// ˵ dot_y3 ű3ĵַ NULLʾͱ3 -// ز void -// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк -// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ -// ʹʾ seekfree_assistant_camera_config(XY_BOUNDARY, 160, xy_x1_boundary, xy_x2_boundary, xy_x3_boundary, xy_y1_boundary, xy_y2_boundary, xy_y3_boundary); // ͼʱߣ߰ -// עϢ -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3) -{ - uint8 i = 0; - uint8 boundary_num = 0; - uint8 boundary_data_type = 0; - - // ͼͻǷ׼, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_dot_data.dot_num = dot_num; - seekfree_assistant_camera_dot_data.valid_flag = 0; - for(i = 0; i < 3; i++) - { - seekfree_assistant_camera_buffer.boundary_x[i] = NULL; - seekfree_assistant_camera_buffer.boundary_y[i] = NULL; - } - - switch(boundary_type) - { - case X_BOUNDARY: - { - if(NULL != dot_x1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x1; - } - if(NULL != dot_x2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x2; - } - if(NULL != dot_x3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x3; - } - - if(255 < seekfree_assistant_camera_buffer.height) - { - boundary_data_type = 1; - } - }break; - - case Y_BOUNDARY: - { - if(NULL != dot_y1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if(NULL != dot_y2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if(NULL != dot_y3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if(255 < seekfree_assistant_camera_buffer.width) - { - boundary_data_type = 1; - } - }break; - - case XY_BOUNDARY: - { - if((NULL != dot_x1) && (NULL != dot_y1)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if((NULL != dot_x2) && (NULL != dot_y2)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if((NULL != dot_x3) && (NULL != dot_y3)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x3; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if((255 < seekfree_assistant_camera_buffer.width) || (255 < seekfree_assistant_camera_buffer.height)) - { - boundary_data_type = 1; - } - }break; - - case NO_BOUNDARY:break; - } - - seekfree_assistant_camera_dot_data.dot_type = (boundary_type << 6) | (boundary_data_type << 5) | boundary_num; -} - -//------------------------------------------------------------------------------------------------------------------- -// ַͷͼ -// ˵ void -// ز void -// ʹʾ -// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_send (void) -{ - // ͼͻǷ׼ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_data_send(seekfree_assistant_camera_buffer.camera_type, seekfree_assistant_camera_buffer.image_addr, seekfree_assistant_camera_dot_data.dot_type & 0x0f, seekfree_assistant_camera_buffer.width, seekfree_assistant_camera_buffer.height); - - if(seekfree_assistant_camera_dot_data.dot_type & 0x0f) - { - seekfree_assistant_camera_dot_send(&seekfree_assistant_camera_buffer); - } -} - - -//------------------------------------------------------------------------------------------------------------------- -// ֽյ -// ˵ void -// ز void -// ʹʾ ֻҪŵеPITжϻѭ -//------------------------------------------------------------------------------------------------------------------- -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) -void seekfree_assistant_data_analysis (void) -{ - uint8 temp_sum; - uint32 read_length; - seekfree_assistant_parameter_struct *receive_packet; - - // ʹuint32ж壬ĿΪ˱ֽ֤ڶ - uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4]; - - // Զȡ, ԶĴ䷽ʽӽջصжȡ - read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE); + // Զȡһݰ + // ԶĴ䷽ʽӽջصжȡ + read_length = seekfree_assistant_receive_callback( + debug_param_cmd_pointer, + sizeof(seekfree_assistant_debug_param_cmd_struct)); if(read_length) - { - // ȡдFIFO - fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length); + { // ȡдFIFO + fifo_write_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + read_length); } - while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo)) - { - read_length = sizeof(seekfree_assistant_parameter_struct); - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_ONLY); + while( sizeof(seekfree_assistant_debug_param_cmd_struct) + <= fifo_used(&seekfree_assistant_debug_param_fifo)) + { // FIFO һݰ ôͽн + // ֱӶһݰ + read_length = sizeof(seekfree_assistant_debug_param_cmd_struct); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_ONLY); - if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0]) - { - // û֡ͷFIFOȥһ - read_length = 1; - } - else - { - // ҵ֡ͷ - receive_packet = (seekfree_assistant_parameter_struct *)temp_buffer; - temp_sum = receive_packet->check_sum; - receive_packet->check_sum = 0; - if(temp_sum == seekfree_assistant_sum((uint8 *)temp_buffer, sizeof(seekfree_assistant_parameter_struct))) - { - // Уɹ - seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data; - seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1; + if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0] + && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2]) + { // ֱƥ֡ͷ ҹҲƥ + temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ + debug_param_cmd_obj.check_sum = 0; // հУֵ У + if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct))) + { // Уɹ + debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float; + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0]; + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + #endif + debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1; + temp_sum = 0x00; } else - { - read_length = 1; + { // Уƥ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + } + else + { // ƥ䲻֡ͷ͹ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + + if(0xFF == temp_sum) + { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ + for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++) + { // Ϊȡһ һ + if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length]) + { // ҵ¸֡ͷ˳ + break; + } } } // ʹõ - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_AND_CLEAN); } } #endif - - - diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant.h index 5b7e1b5..937f784 100644 --- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant.h +++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,142 +24,292 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ - #include "zf_common_typedef.h" +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 , + SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 , +}seekfree_assistant_data_type_enum; -// 1ʹܲڵĹ 0رղڵĹ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 ) - - - -// FIFOС -#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) - -// ʾͨ -#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) - -// Եͨ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) - -// ͼ -#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) - -// Ƭλ͵֡ͷ -#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) - -// ͷ -#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) -#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) -#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) - -// λƬ͵֡ͷ -#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) - -// -#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) - +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ +}seekfree_assistant_ccd_resolution_enum; // ͷö typedef enum { - // ͷͺŶ - SEEKFREE_ASSISTANT_OV7725_BIN = 1, - SEEKFREE_ASSISTANT_MT9V03X, - SEEKFREE_ASSISTANT_SCC8660, - // ͼͶ - SEEKFREE_ASSISTANT_BINARY = 1, - SEEKFREE_ASSISTANT_GRAY, - SEEKFREE_ASSISTANT_RGB565, -}seekfree_assistant_image_type_enum; + SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY , + SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 , -// ͷö -typedef enum -{ - // ͷͺŶ - X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ - Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ - XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ - NO_BOUNDARY, // ͵ͼûбϢ -}seekfree_assistant_boundary_type_enum; + // ͷͺƥ䶨 + SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X , + SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 , +}seekfree_assistant_camera_type_enum; + +#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨 + +#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ +#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤ + +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС +#endif typedef struct { - uint8 head; // ֡ͷ - uint8 channel_num; // λΪ λΪͨ - uint8 check_sum; // У - uint8 length; // - float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + uint8 data_lenght_buffer[2] ; // CCD ݳ + uint8 channel_color_buffer[2] ; // ͨɫ + uint8 channel_data_max[2] ; // ֵͨ + uint8 data_type ; // ȷϴС + uint8 reserve ; // + }config; + uint16 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_ccd_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 camera_type ; // ͷ + uint8 image_width_buffer[2] ; // ͼ + uint8 image_height_buffer[2] ; // ͼ߶ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 data_type ; // ȷϴС + uint8 boundary_lenght_buffer[2] ; // ߳ + uint8 color_buffer[2] ; // ͨɫ + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_boundary_struct; + +typedef struct +{ + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 reserve ; // + uint8 x_axis_buffer[2] ; // X + uint8 y_axis_buffer[2] ; // Y + uint8 width_buffer[2] ; // ο + uint8 height_buffer[2] ; // θ߶ + uint8 color_buffer[2] ; // ɫ +}seekfree_assistant_camera_rectangular_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_max ; // ͨ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ }seekfree_assistant_oscilloscope_struct; +typedef union +{ + uint8 data_uint8[4] ; + float data_float ; +}seekfree_assistant_param_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ - uint8 length; // ȣЭ鲿֣ - uint16 image_width; // ͼ - uint16 image_height; // ͼ߶ -}seekfree_assistant_camera_struct; - - -typedef struct -{ - uint8 head; // ֡ͷ - uint8 function; // - uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽ - uint8 length; // ȣЭ鲿֣ - uint16 dot_num; // - uint8 valid_flag; // ͨʶ - uint8 reserve; // -}seekfree_assistant_camera_dot_struct; - -typedef struct -{ - void *image_addr; // ͷַ - uint16 width; // ͼ - uint16 height; // ͼ߶ - seekfree_assistant_image_type_enum camera_type; // ͷ - void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ - void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ -}seekfree_assistant_camera_buffer_struct; + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + seekfree_assistant_param_struct dat ; // һ + +}seekfree_assistant_debug_param_cmd_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 channel; // ͨ - uint8 check_sum; // У - float data; // -}seekfree_assistant_parameter_struct; + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint8_struct; + + +typedef struct +{ + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint16_struct; + +typedef struct +{ + float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; + uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; +}seekfree_assistant_debug_param_struct; typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length); typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length); -extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ -extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ - - -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope); -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height); -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3); -void seekfree_assistant_camera_send (void); -void seekfree_assistant_data_analysis (void); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ +// ز void +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, 16] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *seekfree_assistant_oscilloscope ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj); + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj); +#endif #endif diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c index d139201..23205d5 100644 --- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c +++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,23 +24,20 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_typedef.h" #include "zf_common_fifo.h" #include "zf_common_debug.h" -#include "zf_driver_uart.h" + #include "zf_device_wireless_uart.h" -#include "zf_device_ble6a20.h" -#include "zf_device_bluetooth_ch9141.h" -#include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" #include "seekfree_assistant.h" @@ -50,7 +47,6 @@ extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ - //------------------------------------------------------------------------------------------------------------------- // ַͺ // ˵ *buff Ҫ͵ݵַ @@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv // ز uint32 ʣδݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) +uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݷ͹ @@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) // ز uint32 յݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) +uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݽչ return 0; @@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) // ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ // ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) +void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) { switch(transfer_device) { case SEEKFREE_ASSISTANT_DEBUG_UART: { -#if DEBUG_UART_USE_INTERRUPT == 1 seekfree_assistant_transfer_callback = debug_send_buffer; seekfree_assistant_receive_callback = debug_read_ring_buffer; -#endif }break; - + case SEEKFREE_ASSISTANT_WIRELESS_UART: { seekfree_assistant_transfer_callback = wireless_uart_send_buffer; seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; - - case SEEKFREE_ASSISTANT_BLE6A20: - { - seekfree_assistant_transfer_callback = ble6a20_send_buffer; - seekfree_assistant_receive_callback = ble6a20_read_buffer; - }break; - case SEEKFREE_ASSISTANT_CH9141: - { - seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; - seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; - }break; - - case SEEKFREE_ASSISTANT_WIFI_UART: - { - seekfree_assistant_transfer_callback = wifi_uart_send_buffer; - seekfree_assistant_receive_callback = wifi_uart_read_buffer; - }break; - + // case SEEKFREE_ASSISTANT_CH9141: + // { + // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; + // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; + // }break; + + // case SEEKFREE_ASSISTANT_WIFI_UART: + // { + // seekfree_assistant_transfer_callback = wifi_uart_send_buffer; + // seekfree_assistant_receive_callback = wifi_uart_read_buffer; + // }break; + case SEEKFREE_ASSISTANT_WIFI_SPI: { seekfree_assistant_transfer_callback = wifi_spi_send_buffer; seekfree_assistant_receive_callback = wifi_spi_read_buffer; }break; - - case SEEKFREE_ASSISTANT_CUSTOM: - { + + default: + { // Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ - + seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + seekfree_assistant_receive_callback = seekfree_assistant_receive; }break; } } - - diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.h index 2ccfd8a..0e28f49 100644 --- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.h +++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,13 +24,13 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,7 +43,6 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ SEEKFREE_ASSISTANT_WIRELESS_UART, // ת - SEEKFREE_ASSISTANT_BLE6A20, // ת SEEKFREE_ASSISTANT_CH9141, // CH9141 SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_absolute_encoder.h index 1166c84..dc091aa 100644 --- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_absolute_encoder.h +++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_absolute_encoder.h @@ -62,7 +62,7 @@ //==================================================== SPI ==================================================== #else //====================================================Ӳ SPI ==================================================== -#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI +#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI #define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI #define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK #define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI @@ -70,7 +70,7 @@ //====================================================Ӳ SPI ==================================================== #endif -#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ +#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ #define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN))) #define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ble6a20.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ble6a20.h index 6f4544a..6af089f 100644 --- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ble6a20.h +++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ble6a20.h @@ -76,7 +76,7 @@ // 1Զ Զʵ޸ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ // Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000 -#define BLE6A20_AUTO_BAUD_RATE ( 0 ) +#define BLE6A20_AUTO_BAUD_RATE ( 1 ) #if (1 == BLE6A20_AUTO_BAUD_RATE) typedef enum diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rc.c b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rc.c new file mode 100644 index 0000000..68840e2 --- /dev/null +++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rc.c @@ -0,0 +1,563 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#include "math.h" +#include "zf_common_debug.h" +#include "zf_driver_delay.h" +#include "zf_driver_spi.h" +#include "zf_driver_gpio.h" +#include "zf_driver_soft_iic.h" +#include "zf_device_config.h" +#include "zf_driver_uart.h" +#include "zf_driver_exti.h" + +#include "zf_device_imu660rc.h" + +#ifndef M_PI +#define M_PI 3.1415926f +#endif + + +static uint8 imu660rc_quarternion_rate; + +float imu660rc_transition_factor[2]; +int16 imu660rc_gyro_x = 0, imu660rc_gyro_y = 0, imu660rc_gyro_z = 0; // gyro () +int16 imu660rc_acc_x = 0, imu660rc_acc_y = 0, imu660rc_acc_z = 0; // ٶȼ acc (accelerometer ٶȼ) +float imu660rc_roll = 0, imu660rc_pitch = 0, imu660rc_yaw = 0; // ŷ +float imu660rc_quarternion[4]; // Ԫ + + + +#if IMU660RC_USE_SOFT_IIC +static soft_iic_info_struct imu660rc_iic_struct; + +#define imu660rc_write_register(reg, data) (soft_iic_write_8bit_register (&imu660rc_iic_struct, (reg), (data))) +#define imu660rc_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660rc_iic_struct, (reg), (data), (len))) +#define imu660rc_read_register(reg) (soft_iic_read_8bit_register (&imu660rc_iic_struct, (reg))) +#define imu660rc_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660rc_iic_struct, (reg), (data), (len))) +#else +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC дĴ +// ˵ reg Ĵַ +// ˵ data +// ز void +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_write_register (uint8 reg, uint8 data) +{ + IMU660RC_CS(0); + spi_write_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_W, data); + IMU660RC_CS(1); +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ĵ +// ˵ reg Ĵַ +// ز uint8 +// ʹʾ imu660rc_read_register(IMU660RC_CHIP_ID); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_read_register (uint8 reg) +{ + uint8 data; + IMU660RC_CS(0); + data = spi_read_8bit_register(IMU660RC_SPI, reg | IMU660RC_SPI_R); + IMU660RC_CS(1); + return data; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC +// ˵ reg Ĵַ +// ˵ data ݻ +// ˵ len ݳ +// ز void +// ʹʾ imu660rc_read_registers(IMU660RC_ACC_ADDRESS, dat, 6); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_read_registers (uint8 reg, uint8 *data, uint32 len) +{ + IMU660RC_CS(0); + spi_read_8bit_registers(IMU660RC_SPI, reg | IMU660RC_SPI_R, data, len); + IMU660RC_CS(1); +} +#endif + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC fp16ת +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint32 fp16_to_float(uint16 h) +{ + uint16 h_exp = (h & 0x7c00u); + uint32 f_sgn = ((uint32)h & 0x8000u) << 16; + switch (h_exp) + { + case 0x0000u: // 0 or subnormal + { + uint16 h_sig = (h & 0x03ffu); + // Signed zero + if (h_sig == 0) + { + return f_sgn; + } + // Subnormal + h_sig <<= 1; + while ((h_sig & 0x0400u) == 0) + { + h_sig <<= 1; + h_exp++; + } + uint32 f_exp = ((uint32)(127 - 15 - h_exp)) << 23; + uint32 f_sig = ((uint32)(h_sig & 0x03ffu)) << 13; + return f_sgn + f_exp + f_sig; + } + case 0x7c00u: // inf or NaN + { + // All-ones exponent and a copy of the significand + return f_sgn + 0x7f800000u + (((uint32)(h & 0x03ffu)) << 13); + } + default: // normalized + { + // Just need to adjust the exponent and shift + return f_sgn + (((uint32)(h & 0x7fffu) + 0x1c000u) << 13); + } + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫһ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_normalize(float quat[4], uint16 *fp16) +{ + float n = 0; + float temp[4]; + + *(uint32 *)(&temp[0]) = fp16_to_float(fp16[0]); + *(uint32 *)(&temp[1]) = fp16_to_float(fp16[1]); + *(uint32 *)(&temp[2]) = fp16_to_float(fp16[2]); + *(uint32 *)(&temp[3]) = fp16_to_float(fp16[3]); + + n = temp[0] * temp[0] + temp[1] * temp[1] + temp[2] * temp[2] + temp[3] * temp[3]; + n = sqrtf(n); + + if(n > 0.001f) // Խӽ0ֵ + { + n = temp[3] < 0.0f ? -n : n; + + quat[0] = temp[1] / n; + quat[1] = temp[2] / n; + quat[2] = temp[0] / n; + quat[3] = temp[3] / n; + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Ԫתŷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void quarternion_to_euler(float quat[4], float *roll, float *pitch, float *yaw) +{ + float euler[3]; + + float sqx = quat[0] * quat[0]; + float sqy = quat[1] * quat[1]; + float sqz = quat[2] * quat[2]; + + euler[0] = atan2f(2.0f * (quat[1] * quat[3] + quat[0] * quat[2]), 1.0f - 2.0f * (sqy + sqx)); + euler[1] = -asinf(2.0f * (quat[0] * quat[3] - quat[1] * quat[2])); + euler[2] = atan2f(2.0f * (quat[0] * quat[1] + quat[2] * quat[3]), 1.0f - 2.0f * (sqx + sqz)); + + // תǶ + euler[0] = 180 * (euler[0]) / M_PI; + euler[1] = 180 * (euler[1]) / M_PI; + euler[2] = 180 * (euler[2]) / M_PI; + + // Ƕȵ + euler[2] = 0 > euler[2] ? euler[2] + 360 : euler[2]; + + *roll = euler[0]; + *pitch = euler[1]; + *yaw = euler[2]; +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ÷ +// ˵ void +// ز uint8 +// ʹʾ +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static void imu660rc_set_mem_bank (imu660rc_mem_bank_enum bank) +{ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, bank); +} + + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC Լ +// ˵ void +// ز uint8 1-Լʧ 0-Լɹ +// ʹʾ imu660rc_self_check(); +// עϢ ڲ +//------------------------------------------------------------------------------------------------------------------- +static uint8 imu660rc_self_check (void) +{ + uint8 dat = 0, return_state = 0; + uint16 timeout_count = 0; + do + { + if(IMU660RC_TIMEOUT_COUNT < timeout_count ++) + { + return_state = 1; + break; + } + dat = imu660rc_read_register(IMU660RC_CHIP_ID); + system_delay_ms(1); + }while(0x70 != dat); // ȡ豸IDǷ0x700x70Ϊû⵽豸 + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ٶȼ +// ˵ void +// ز void +// ʹʾ imu660rc_get_acc(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_acc (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_ACCΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)dat, 6); + imu660rc_acc_x = dat[0]; + imu660rc_acc_y = dat[1]; + imu660rc_acc_z = dat[2]; + } +} +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC +// ˵ void +// ز void +// ʹʾ imu660rc_get_gyro(); // ִиúֱӲ鿴Ӧı +// עϢ ʹ SPI IJɼʱΪ10us +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_gyro (void) +{ + int16 dat[3]; + if(IMU660RC_QUARTERNION_DISABLE == imu660rc_quarternion_rate) + { // Ԫر״ֵ̬֧ô˺ ԪʱҪȡٶϢIMU660RC_QUARTERNION_GET_GYROΪ1 + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)dat, 6); + imu660rc_gyro_x = dat[0]; + imu660rc_gyro_y = dat[1]; + imu660rc_gyro_z = dat[2]; + } +} + + +//------------------------------------------------------------------------------------------------------------------- +// ȡ IMU660RC ԪݲתΪŷ +// ˵ void +// ز void +// ʹʾ imu660rc_get_quarternion(); // ִиúֱӲ鿴Ӧı +// עϢ ҪINT2Ŵжϵô˺ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_get_quarternion(void) +{ + uint8 i; + uint16 buff[4]; + uint8 *buff1_ptr; + int16 *buff2_ptr; + + if(IMU660RC_QUARTERNION_DISABLE != imu660rc_quarternion_rate) + { + buff1_ptr = (uint8 *)buff; + + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x20); + imu660rc_write_register(IMU660RC_PAGE_SEL, 0x31); + + for(i = 0; 8 > i; i++) + { + imu660rc_write_register(0x08, 0x4C + i); + buff1_ptr[i] = imu660rc_read_register(0x09); + } + + imu660rc_write_register(IMU660RC_PAGE_RW, 0x0); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // Ԫһ + quarternion_normalize(imu660rc_quarternion, buff); + // Ԫתŷ + quarternion_to_euler(imu660rc_quarternion, &imu660rc_roll, &imu660rc_pitch, &imu660rc_yaw); + + // ȡٶٶϢ + #if(1 == IMU660RC_QUARTERNION_GET_ACC) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_A, (uint8 *)buff2_ptr, 6); + imu660rc_acc_x = buff2_ptr[0]; + imu660rc_acc_y = buff2_ptr[1]; + imu660rc_acc_z = buff2_ptr[2]; + } + #endif + #if(1 == IMU660RC_QUARTERNION_GET_GYRO) + { + buff2_ptr = (int16 *)buff; + imu660rc_read_registers(IMU660RC_OUTX_L_G, (uint8 *)buff2_ptr, 6); + imu660rc_gyro_x = buff2_ptr[0]; + imu660rc_gyro_y = buff2_ptr[1]; + imu660rc_gyro_z = buff2_ptr[2]; + } + #endif + } +} + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RCжϻصҪжڶȡԪ +// ˵ void +// ز void +// ʹʾ +// עϢ +// +//------------------------------------------------------------------------------------------------------------------- +void imu660rc_callback(void) +{ + imu660rc_get_quarternion(); + +} + +//------------------------------------------------------------------------------------------------------------------- +// ʼ IMU660RC +// ˵ quarternion_rate ѡԪ +// ز uint8 1-ʼʧ 0-ʼɹ +// ʹʾ imu660rc_init(IMU660RC_QUARTERNION_120HZ); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +uint8 imu660rc_init(imu660rc_quarternion_rate_config quarternion_rate) +{ + uint8 return_state = 0; + + imu660rc_quarternion_rate = quarternion_rate; + #if IMU660RC_USE_SOFT_IIC + soft_iic_init(&imu660rc_iic_struct, IMU660RC_DEV_ADDR, IMU660RC_SOFT_IIC_DELAY, IMU660RC_SCL_PIN, IMU660RC_SDA_PIN); // IMU660RC IIC ˿ + + #else + spi_init(IMU660RC_SPI, SPI_MODE0, IMU660RC_SPI_SPEED, IMU660RC_SPC_PIN, IMU660RC_SDI_PIN, IMU660RC_SDO_PIN, SPI_CS_NULL); // IMU660RC SPI ˿ + gpio_init(IMU660RC_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // IMU660RC CS˿ + #endif + + system_delay_ms(10); + + do + { + if(imu660rc_self_check()) // IMU660RC Լ + { + // ˶Ϣ ʾλ + // ô IMU660RC Լʱ˳ + // һ½û ûܾǻ + zf_log(0, "imu660rc self check error."); + return_state = 1; + break; + } + + // λ + imu660rc_write_register(IMU660RC_FUNC_CFG_ACCESS, 0x04); + system_delay_ms(30); + + // ÿ¹ַ + imu660rc_write_register(IMU660RC_CTRL3, 0x44); + + switch(IMU660RC_ACC_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_ACC_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_ACC_SAMPLE_SGN_2G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x00); + imu660rc_transition_factor[0] = 16393.44; + }break; + case IMU660RC_ACC_SAMPLE_SGN_4G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x01); + imu660rc_transition_factor[0] = 8196.72; + }break; + case IMU660RC_ACC_SAMPLE_SGN_8G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x02); + imu660rc_transition_factor[0] = 4098.36; + }break; + case IMU660RC_ACC_SAMPLE_SGN_16G: + { + imu660rc_write_register(IMU660RC_CTRL8, 0x03); + imu660rc_transition_factor[0] = 2049.18; + }break; + } + if(1 == return_state) + { + break; + } + + switch(IMU660RC_GYRO_SAMPLE_DEFAULT) + { + default: + { + zf_log(0, "IMU660RC_GYRO_SAMPLE_DEFAULT set error."); + return_state = 1; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_125DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x00); + imu660rc_transition_factor[1] = 228.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_250DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x01); + imu660rc_transition_factor[1] = 114.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_500DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x02); + imu660rc_transition_factor[1] = 57.1428; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_1000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x03); + imu660rc_transition_factor[1] = 28.5714; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_2000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x04); + imu660rc_transition_factor[1] = 14.2857; + }break; + case IMU660RC_GYRO_SAMPLE_SGN_4000DPS: + { + imu660rc_write_register(IMU660RC_CTRL6, 0x0C); + imu660rc_transition_factor[1] = 7.14285; + }break; + } + if(1 == return_state) + { + break; + } + + // ôģʽΪ߾ģʽԼ + imu660rc_write_register(IMU660RC_CTRL1, 0x15); + imu660rc_write_register(IMU660RC_CTRL2, 0x18); + + // LPF1˲ + imu660rc_write_register(IMU660RC_CTRL7, 0x01); + + // LPF2˲ + imu660rc_write_register(IMU660RC_CTRL9, 0x08); + + // ԪӦ + if(IMU660RC_QUARTERNION_DISABLE != quarternion_rate) + { + // жϴź + imu660rc_write_register(IMU660RC_INT2_CTRL, 0x80); + imu660rc_write_register(IMU660RC_CTRL4, 0x08); + imu660rc_write_register(IMU660RC_EMB_FUNC_CFG, 0x30); + + // üٶȡٶ + imu660rc_write_register(IMU660RC_CTRL1, 0x10 | (quarternion_rate + 3)); + imu660rc_write_register(IMU660RC_CTRL2, 0x10 | (quarternion_rate + 3)); + + // Ԫʲ + imu660rc_set_mem_bank(IMU660RC_EMBED_MEM_BANK); + imu660rc_write_register(IMU660RC_SFLP_ODR, 0x43 | (quarternion_rate << 3)); + imu660rc_write_register(IMU660RC_EMB_FUNC_EN_A, 0x02); + imu660rc_write_register(IMU660RC_PAGE_RW, 0x00); + imu660rc_set_mem_bank(IMU660RC_MAIN_MEM_BANK); + + // жϼ + exti_init(IMU660RC_INT2_PIN, EXTI_TRIGGER_RISING); + } + }while(0); + + return return_state; +} + + + + + + + + + + + + + diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rc.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rc.h new file mode 100644 index 0000000..dd5a9e3 --- /dev/null +++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rc.h @@ -0,0 +1,211 @@ +/********************************************************************************************************************* +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ +* Copyright (c) 2022 SEEKFREE ɿƼ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ +* Ըᷢ GPLGNU General Public License GNUͨù֤ +* GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ +* +* Դķϣܷãδκεı֤ +* ûԻʺض;ı֤ +* ϸμ GPL +* +* ӦյԴͬʱյһ GPL ĸ +* ûУ +* +* ע +* Դʹ GPL3.0 Դ֤Э Ϊİ汾 +* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ +* ֤ libraries ļ ļµ LICENSE ļ +* ӭλʹò ޸ʱ뱣ɿƼİȨ +* +* ļ zf_device_imu660rc +* ˾ ɶɿƼ޹˾ +* 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ +* ADS v1.10.2 +* ƽ̨ TC264 +* https://seekfree.taobao.com/ +* +* ޸ļ¼ +* ע +* 2025-12-12 SeekFree first version +********************************************************************************************************************/ +/********************************************************************************************************************* +* ߶壺 +* ------------------------------------ +* ģܽ Ƭܽ +* // Ӳ SPI +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SPC_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDI_PIN 궨 +* SA0/SDO 鿴 zf_device_imu660rc.h IMU660RC_SDO_PIN 궨 +* CS 鿴 zf_device_imu660rc.h IMU660RC_CS_PIN 궨 +* INT2 鿴 zf_device_imu660rc.h IMU660RC_INT2_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* +* // IIC +* SCL/SPC 鿴 zf_device_imu660rc.h IMU660RC_SCL_PIN 궨 +* SDA/DSI 鿴 zf_device_imu660rc.h IMU660RC_SDA_PIN 궨 +* VCC 3.3VԴ +* GND Դ +* +* ------------------------------------ +********************************************************************************************************************/ + + +#ifndef _zf_device_imu660rc_h_ +#define _zf_device_imu660rc_h_ + +#include "zf_common_typedef.h" + + +// IMU660RC_USE_SOFT_IICΪ0ʾʹӲSPI Ϊ1ʾʹIIC +// IMU660RC_USE_SOFT_IICҪȱ벢س򣬵ƬģҪϵͨѶ +#define IMU660RC_USE_SOFT_IIC ( 0 ) // ĬʹӲ SPI ʽ + +#if IMU660RC_USE_SOFT_IIC // ɫIJȷ ɫҵľûõ +//==================================================== IIC ==================================================== +#define IMU660RC_SOFT_IIC_DELAY ( 0 ) // IIC ʱʱ ֵԽС IIC ͨԽ +#define IMU660RC_SCL_PIN ( P20_11 ) // IIC SCL IMU660RC SCL +#define IMU660RC_SDA_PIN ( P20_14 ) // IIC SDA IMU660RC SDA +//==================================================== IIC ==================================================== +#else + +//====================================================Ӳ SPI ==================================================== +#define IMU660RC_SPI_SPEED (10 * 1000 * 1000) // Ӳ SPI +#define IMU660RC_SPI (SPI_0) // Ӳ SPI +#define IMU660RC_SPC_PIN (SPI0_SCLK_P20_11 ) // Ӳ SPI SCK +#define IMU660RC_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI +#define IMU660RC_SDO_PIN (SPI0_MISO_P20_12) // Ӳ SPI MISO +//====================================================Ӳ SPI ==================================================== +#endif +#define IMU660RC_CS_PIN ( P20_13 ) // CS Ƭѡ +#define IMU660RC_CS(x) ( (x) ? (gpio_high(IMU660RC_CS_PIN)) : (gpio_low(IMU660RC_CS_PIN)) ) +#define IMU660RC_INT2_PIN ( ERU_CH0_REQ0_P15_4 ) // жźţڶȡԪʱҪʹ + + +#define IMU660RC_QUARTERNION_GET_GYRO ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_QUARTERNION_GET_ACC ( 1 ) // 1ԪģʽʱȡԪʱԶȡٶ 0Զȡ +#define IMU660RC_ACC_SAMPLE_DEFAULT ( IMU660RC_ACC_SAMPLE_SGN_8G ) // Ĭϵ ٶȼ ʼ +#define IMU660RC_GYRO_SAMPLE_DEFAULT ( IMU660RC_GYRO_SAMPLE_SGN_2000DPS ) // Ĭϵ ʼ + +typedef enum +{ + IMU660RC_MAIN_MEM_BANK = 0x00, + IMU660RC_HUB_MEM_BANK = 0x40, + IMU660RC_EMBED_MEM_BANK = 0x80, +}imu660rc_mem_bank_enum; + +typedef enum +{ + IMU660RC_ACC_SAMPLE_SGN_2G , // ٶȼ 2G (ACC = Accelerometer ٶȼ) (SGN = signum ʾΧ) (G = g ٶ g9.80 m/s^2) + IMU660RC_ACC_SAMPLE_SGN_4G , // ٶȼ 4G + IMU660RC_ACC_SAMPLE_SGN_8G , // ٶȼ 8G + IMU660RC_ACC_SAMPLE_SGN_16G, // ٶȼ 16G +}imu660rc_acc_sample_config; + +typedef enum +{ + IMU660RC_GYRO_SAMPLE_SGN_125DPS , // 125DPS (GYRO = Gyroscope ) (SGN = signum ʾΧ) (DPS = Degree Per Second ٶȵλ /S) + IMU660RC_GYRO_SAMPLE_SGN_250DPS , // 250DPS + IMU660RC_GYRO_SAMPLE_SGN_500DPS , // 500DPS + IMU660RC_GYRO_SAMPLE_SGN_1000DPS, // 1000DPS + IMU660RC_GYRO_SAMPLE_SGN_2000DPS, // 2000DPS + IMU660RC_GYRO_SAMPLE_SGN_4000DPS, // 4000DPS +}imu660rc_gyro_sample_config; + +typedef enum +{ + IMU660RC_QUARTERNION_15HZ, // 15 Hz + IMU660RC_QUARTERNION_30HZ, // 30 Hz + IMU660RC_QUARTERNION_60HZ, // 60 Hz + IMU660RC_QUARTERNION_120HZ, // 120Hz + IMU660RC_QUARTERNION_240HZ, // 240Hz + IMU660RC_QUARTERNION_480HZ, // 480Hz + IMU660RC_QUARTERNION_DISABLE, // Ԫ +}imu660rc_quarternion_rate_config; + + +//================================================ IMU660RC ڲַ================================================ +#define IMU660RC_DEV_ADDR ( 0x6B ) // SA0ӵأ0x6A SA00x6B ģĬ +#define IMU660RC_SPI_W ( 0x00 ) +#define IMU660RC_SPI_R ( 0x80 ) +#define IMU660RC_TIMEOUT_COUNT ( 0x00FF ) // IMU660RC ʱ + + +//================================================ IMU660RC Ĵַ================================================ +#define IMU660RC_FUNC_CFG_ACCESS ( 0x01 ) +#define IMU660RC_INT2_CTRL ( 0x0E ) +#define IMU660RC_CHIP_ID ( 0x0F ) +#define IMU660RC_CTRL1 ( 0x10 ) +#define IMU660RC_CTRL2 ( 0x11 ) +#define IMU660RC_CTRL3 ( 0x12 ) +#define IMU660RC_CTRL4 ( 0x13 ) +#define IMU660RC_CTRL5 ( 0x14 ) +#define IMU660RC_CTRL6 ( 0x15 ) +#define IMU660RC_CTRL7 ( 0x16 ) +#define IMU660RC_CTRL8 ( 0x17 ) +#define IMU660RC_CTRL9 ( 0x18 ) +#define IMU660RC_CTRL10 ( 0x19 ) +#define IMU660RC_CTRL_STATUS ( 0x1A ) +#define IMU660RC_STATUS_REG ( 0x1E ) +#define IMU660RC_OUT_TEMP_L ( 0x20 ) +#define IMU660RC_OUT_TEMP_H ( 0x21 ) +#define IMU660RC_OUTX_L_G ( 0x22 ) +#define IMU660RC_OUTX_H_G ( 0x23 ) +#define IMU660RC_OUTY_L_G ( 0x24 ) +#define IMU660RC_OUTY_H_G ( 0x25 ) +#define IMU660RC_OUTZ_L_G ( 0x26 ) +#define IMU660RC_OUTZ_H_G ( 0x27 ) +#define IMU660RC_OUTX_L_A ( 0x28 ) +#define IMU660RC_OUTX_H_A ( 0x29 ) +#define IMU660RC_OUTY_L_A ( 0x2A ) +#define IMU660RC_OUTY_H_A ( 0x2B ) +#define IMU660RC_OUTZ_L_A ( 0x2C ) +#define IMU660RC_OUTZ_H_A ( 0x2D ) + +#define IMU660RC_PAGE_SEL ( 0x02 ) +#define IMU660RC_EMB_FUNC_EN_A ( 0x04 ) +#define IMU660RC_PAGE_RW ( 0x17 ) +#define IMU660RC_SFLP_ODR ( 0x5E ) +#define IMU660RC_EMB_FUNC_CFG ( 0x63 ) + + + +extern float imu660rc_transition_factor[2]; +extern int16 imu660rc_gyro_x, imu660rc_gyro_y, imu660rc_gyro_z; // +extern int16 imu660rc_acc_x , imu660rc_acc_y , imu660rc_acc_z; // ٶȼ +extern float imu660rc_roll , imu660rc_pitch , imu660rc_yaw; // ŷ +extern float imu660rc_quarternion[4]; // Ԫ + + +void imu660rc_get_acc (void); +void imu660rc_get_gyro (void); +void imu660rc_get_quarternion (void); + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC ٶȼתΪʵ +// ˵ acc_value ļٶȼ +// ز void +// ʹʾ float data = imu660rc_acc_transition(imu660rc_acc_x); // λΪ g(m/s^2) +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_acc_transition(acc_value) ((float)(acc_value) / imu660rc_transition_factor[0]) + +//------------------------------------------------------------------------------------------------------------------- +// IMU660RC תΪʵ +// ˵ gyro_value +// ز void +// ʹʾ float data = imu660rc_gyro_transition(imu660rc_gyro_x); // λΪ /s +// עϢ +//------------------------------------------------------------------------------------------------------------------- +#define imu660rc_gyro_transition(gyro_value) ((float)(gyro_value) / imu660rc_transition_factor[1]) +void imu660rc_callback (void); +uint8 imu660rc_init (imu660rc_quarternion_rate_config quarternion_rate); + + + +#endif diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rx.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rx.h index 45699d9..81b8b41 100644 --- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rx.h +++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_imu660rx.h @@ -97,7 +97,7 @@ //================================================ IMU660RX ȫֱ================================================ extern int16 imu660rx_gyro_x, imu660rx_gyro_y, imu660rx_gyro_z; // gyro () extern int16 imu660rx_acc_x, imu660rx_acc_y, imu660rx_acc_z; // ٶȼ acc (accelerometer ٶȼ) -extern float imu660ra_transition_factor[2]; +extern float imu660rx_transition_factor[2]; //================================================ IMU660RX ȫֱ================================================ diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips114.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips114.h index c56f310..9c4ac0d 100644 --- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips114.h +++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips114.h @@ -167,7 +167,7 @@ void ips114_init (void); // ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================= IPS114 չ================================================ #endif diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200.h index 850fb11..5bf4284 100644 --- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200.h +++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200.h @@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select); // ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================== IPS200 չ================================================ diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h index 98c5364..557e1d2 100644 --- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h +++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h @@ -86,7 +86,7 @@ // £SCC8660_PCLK_DIVԽͼԽ #define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1> #define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ -#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) +#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) #define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0 //================================================ SCC8660 ã֧ͫ֡ʰ汾=========================== diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.c index b51c600..b06e6a1 100644 --- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.c +++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.c @@ -24,7 +24,7 @@ * ļ zf_device_wifi_spi * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.9.20 +* ADS v1.10.2 * ƽ̨ TC264D * https://seekfree.taobao.com/ * @@ -63,6 +63,21 @@ #define SOCKET_CONNECT_TIME_OUT 50000 // λ #define OTHER_TIME_OUT 1000 // λ +#if ((WIFI_SPI_RECVIVE_SIZE < 32) || (WIFI_SPI_RECVIVE_SIZE > 4088)) + #error "WIFI_SPI_RECVIVE_SIZE must be >= 32 or <= 4088" +#endif + +#if (WIFI_SPI_RECVIVE_SIZE >= WIFI_SPI_RECVIVE_FIFO_SIZE) + #error "WIFI_SPI_RECVIVE_FIFO_SIZE must be > WIFI_SPI_RECVIVE_SIZE" +#endif + + +#if (WIFI_SPI_TRANSFER_SIZE != 4088) + #error "WIFI_SPI_TRANSFER_SIZE must be == 4088" +#endif + + + char wifi_spi_version[12]; // ģ̼汾Ϣ char wifi_spi_mac_addr[20]; // ģMACַϢ char wifi_spi_ip_addr_port[25]; // ģIPַ˿Ϣ @@ -271,8 +286,6 @@ static uint8 wifi_spi_get_version (void) { memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_VERSION != temp_packets.head.command) : 1; - return return_state; } @@ -293,8 +306,6 @@ static uint8 wifi_spi_get_mac_addr (void) { memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_MAC_ADDR != temp_packets.head.command) : 1; - return return_state; } @@ -316,7 +327,77 @@ static uint8 wifi_spi_get_ip_addr_port (void) { memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length); } - return_state = (return_state == 0) ? (WIFI_SPI_REPLY_IP_ADDR != temp_packets.head.command) : 1; + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ȡϵͳʱ +// ˵ time_format ʱʽ +// ز *buffer ʱַַ СҪ30ֽ +// ز buffer_size С +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ Ҫȵܻ֮ȡȷʱ䣬ڵ֮ǰҪȷWIFIģҪյѾȫ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size) +{ + uint8 return_state = 1; + wifi_spi_packets_struct temp_packets; + uint8 send_cmd, receive_cmd; + + // ʱ30ֽ + // ģ̼V2汾 + if((30 <= buffer_size) && (!strncmp(wifi_spi_version, "V2", 2))) + { + send_cmd = WIFI_SPI_GET_TIME1 + time_format - WIFI_SPI_UTC_0; + receive_cmd = WIFI_SPI_REPLY_TIME1 + time_format - WIFI_SPI_UTC_0; + + return_state = wifi_spi_get_parameter(send_cmd, &temp_packets, OTHER_TIME_OUT); + if((0 == return_state) && (receive_cmd == temp_packets.head.command)) + { + return_state = (uint8)strncmp((const char *)temp_packets.buffer, "OK", 2); + if(0 == return_state) + { + memcpy(buffer, &temp_packets.buffer[3], temp_packets.head.length - 3); + buffer[temp_packets.head.length - 3] = 0; + } + } + } + return return_state; +} + +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ɨȵ +// ˵ *buffer ɨ赽ȵϢ źǿȣÿźǿȺһз +// ˵ buffer_size ij +// ز uint8 ״̬ 0-ɹ 1- +// ʹʾ +// עϢ WIFI SPI ߰汾֧ +// עϢ ϢΪַϢֱprintfֲ鿴 +// עϢ ÿһаһwifi +//------------------------------------------------------------------------------------------------------------------- +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size) +{ + uint8 return_state; + + // ģV2汾Ĺִ̼֧˹ + if(!strncmp(wifi_spi_version, "V2", 2)) + { + return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_SCAN, NULL, 0, WIFI_CONNECT_TIME_OUT); + + if(0 == return_state) + { + #if (0 == WIFI_SPI_READ_TRANSFER) + wifi_spi_send_buffer(NULL, 0); + #endif + while(0 == wifi_spi_read_buffer((uint8 *)buffer, buffer_size)) + { + system_delay_ms(10); + } + } + } return return_state; } @@ -505,7 +586,7 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) while(length) { - send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length; + send_length = (uint16) (length > WIFI_SPI_TRANSFER_SIZE ? WIFI_SPI_TRANSFER_SIZE : length); if(wifi_spi_wait_idle(OTHER_TIME_OUT)) { @@ -555,6 +636,18 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) return length; } +//------------------------------------------------------------------------------------------------------------------- +// WIFI SPI ַͺͬ +// ˵ *string Ҫ͵ַ +// ز void +// ʹʾ wifi_spi_send_string("123"); +// עϢ +//------------------------------------------------------------------------------------------------------------------- +void wifi_spi_send_string(const char *string) +{ + wifi_spi_send_buffer((uint8*)string, strlen(string)); +} + //------------------------------------------------------------------------------------------------------------------- // WIFI SPI ȡ // ˵ *buff ջ @@ -566,32 +659,57 @@ uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length) uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) { zf_assert(NULL != buffer); - uint32 data_len = length; + uint32 fifo_read_length; + uint32 write_length = 0; + wifi_spi_packets_struct temp_packets; + + // жFIFOǷݣȴFIFOȡ + if(fifo_used(&wifi_spi_fifo)) + { + fifo_read_length = fifo_used(&wifi_spi_fifo); + fifo_read_length = length < fifo_read_length ? length : fifo_read_length; + fifo_read_buffer(&wifi_spi_fifo, buffer, &fifo_read_length, FIFO_READ_AND_CLEAN); + + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + } #if(1 == WIFI_SPI_READ_TRANSFER) - - wifi_spi_packets_struct temp_packets; - // WIFI SPI״̬жϻ߳ѾͨѶ򱾴βܷ if(WIFI_SPI_IDLE == wifi_spi_mutex) { - // ͨѶ״̬Ϊæ - wifi_spi_mutex = WIFI_SPI_BUSY; + wifi_spi_mutex = WIFI_SPI_BUSY; // ͨѶ״̬Ϊæ - // ͨѶ鿴ģǷδȡ do { - if(wifi_spi_wait_idle(OTHER_TIME_OUT)) + if( (WIFI_SPI_RECVIVE_SIZE > wifi_spi_fifo.size) || // ռ䲻ٶȡ + (wifi_spi_wait_idle(OTHER_TIME_OUT)) // ʱ˳ + ) { break; } + temp_packets.head.command = WIFI_SPI_DATA; temp_packets.head.length = 0; wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE); // յİǷ - if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) + if( ((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command)) && + (temp_packets.head.length) + ) { - // յ - if(temp_packets.head.length) + if(length) + { + fifo_read_length = length >= temp_packets.head.length ? temp_packets.head.length : length; + memcpy(buffer, temp_packets.buffer, fifo_read_length); + buffer += fifo_read_length; + length -= fifo_read_length; + write_length += fifo_read_length; + if(fifo_read_length < temp_packets.head.length) // ⲿ岻ಿдFIFO + { + fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer + fifo_read_length, temp_packets.head.length - fifo_read_length); + } + } + else // ȫдFIFO { fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length); } @@ -599,10 +717,9 @@ uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length) }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command); wifi_spi_mutex = WIFI_SPI_IDLE; } -#endif +#endif - fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN); - return data_len; + return write_length; } //------------------------------------------------------------------------------------------------------------------- @@ -644,7 +761,11 @@ uint8 wifi_spi_init (char *wifi_ssid, char *pass_word) // MACַϢַʽwifi_spi_mac_addr wifi_spi_get_mac_addr(); - + if(NULL == wifi_ssid) + { + // ʼʱҪWIFI + break; + } return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word); if(return_state) { diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.h index eea8a78..e7cec39 100644 --- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.h +++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.h @@ -73,8 +73,8 @@ #if (WIFI_SPI_AUTO_CONNECT > 2) #error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]" #else -#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP -#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿ +#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP +#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666 #endif @@ -95,10 +95,15 @@ typedef enum WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // WIFIϢ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // SOCKETϢ + WIFI_SPI_SET_WIFI_SCAN = 0x12, // ʼɨWIFI + WIFI_SPI_SET_READ_LENGTH = 0x13, // ȡ WIFI_SPI_GET_VERSION = 0x20, // ȡģ汾 WIFI_SPI_GET_MAC_ADDR = 0x21, // ȡģMACַ WIFI_SPI_GET_IP_ADDR = 0x22, // ȡģIPַ + WIFI_SPI_GET_TIME1 = 0x23, // ȡʱ ʽ1 + WIFI_SPI_GET_TIME2 = 0x24, // ȡʱ ʽ2 + WIFI_SPI_GET_TIME3 = 0x25, // ȡʱ ʽ3 // ӻش WIFI_SPI_REPLY_OK = 0x80, // ӻӦȷ @@ -110,6 +115,9 @@ typedef enum WIFI_SPI_REPLY_VERSION = 0xA0, // ӻظ̼汾 WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // ӻظMACַϢ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // ӻظIPַ˿ں + WIFI_SPI_REPLY_TIME1 = 0xA3, // ӻظʱ + WIFI_SPI_REPLY_TIME2 = 0xA4, // ӻظʱ + WIFI_SPI_REPLY_TIME3 = 0xA5, // ӻظʱ WIFI_SPI_INVALID2 = 0xFF // Чݰ }wifi_spi_packets_command_enum; @@ -134,19 +142,27 @@ typedef struct uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // }wifi_spi_packets_struct; - +typedef enum +{ + WIFI_SPI_UTC_0 = 1, // ʱ + WIFI_SPI_GMT, // ʱ תΪGMTʽ׺GMT һڶԽƶ˴ģʹ + WIFI_SPI_UTC_8, // ʱ +}wifi_spi_time_enum; + extern char wifi_spi_version[12]; // ̼汾 ַ extern char wifi_spi_mac_addr[20]; // ģMACַ ַ extern char wifi_spi_ip_addr_port[25]; // IPַ˿ں ַ -uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); -uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); -uint8 wifi_spi_socket_disconnect (void); -uint8 wifi_spi_udp_send_now (void); -uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); -uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); +uint8 wifi_spi_get_time (wifi_spi_time_enum time_format, char *buffer, uint8 buffer_size); +uint8 wifi_spi_wifi_scan (char *buffer, uint16 buffer_size); +uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port); +uint8 wifi_spi_socket_disconnect (void); +uint8 wifi_spi_udp_send_now (void); +uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); +void wifi_spi_send_string (const char *string); +uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length); -uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); +uint8 wifi_spi_init (char *wifi_ssid, char *pass_word); #endif - diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.h index 0f392ff..24b88cc 100644 --- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.h +++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.h @@ -73,7 +73,7 @@ #if (WIFI_UART_AUTO_CONNECT > 3) #error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]" #else -#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP +#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP #define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_UART_LOCAL_PORT "8080" // ˿ #endif diff --git a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_driver/zf_driver_encoder.c index 8d514b7..ad4099e 100644 --- a/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_driver/zf_driver_encoder.c +++ b/Example/Coreboard_Demo/E15_fft_demo/libraries/zf_driver/zf_driver_encoder.c @@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n) //------------------------------------------------------------------------------------------------------------------- void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin) { -// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init + zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init IfxGpt12_enableModule(&MODULE_GPT120); IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4); diff --git a/Example/Coreboard_Demo/E15_fft_demo/user/isr.c b/Example/Coreboard_Demo/E15_fft_demo/user/isr.c index e19382e..927ed43 100644 --- a/Example/Coreboard_Demo/E15_fft_demo/user/isr.c +++ b/Example/Coreboard_Demo/E15_fft_demo/user/isr.c @@ -40,14 +40,14 @@ // 򵥵˵ʵϽжϺTCϵеӲԶ interrupt_global_disable(); ܾӦκεжϣҪԼֶ interrupt_global_enable(0); жϵӦ // **************************** PITжϺ **************************** -IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) -{ - interrupt_global_enable(0); // жǶ - pit_clear_flag(CCU60_CH0); - - - -} +//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) +//{ +// interrupt_global_enable(0); // жǶ +// pit_clear_flag(CCU60_CH0); +// +// +// +//} IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) @@ -89,7 +89,8 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // ͨ0ж { exti_flag_clear(ERU_CH0_REQ0_P15_4); - + + imu660rc_callback(); // 660RC ģ INT ж } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // ͨ4ж @@ -118,7 +119,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) { exti_flag_clear(ERU_CH5_REQ1_P15_8); - } } @@ -136,7 +136,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) // exti_flag_clear(ERU_CH6_REQ9_P20_0); // } // } - IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO) { interrupt_global_enable(0); // жǶ @@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO) IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) { interrupt_global_enable(0); // жǶ - gnss_uart_callback(); // GPSڻص + gnss_uart_callback(); // GNSSڻص diff --git a/Example/Coreboard_Demo/【必读】例程功能说明.xlsx b/Example/Coreboard_Demo/【必读】例程功能说明.xlsx new file mode 100644 index 0000000..3efabc3 Binary files /dev/null and b/Example/Coreboard_Demo/【必读】例程功能说明.xlsx differ diff --git a/Example/Motherboard_Demo.7z b/Example/Motherboard_Demo.7z index 01989b0..8f4cb26 100644 Binary files a/Example/Motherboard_Demo.7z and b/Example/Motherboard_Demo.7z differ diff --git a/Example/【必读】例程功能说明.xlsx b/Example/【必读】例程功能说明.xlsx index 1f4dfd3..3efabc3 100644 Binary files a/Example/【必读】例程功能说明.xlsx and b/Example/【必读】例程功能说明.xlsx differ diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt index 5688984..8ce85ca 100644 --- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt +++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt @@ -1,3 +1,8 @@ +V3.4.4 + SCC8660ʽ + ָV2 + ޸ips200ʾscc8660ͷʽ + ޸ips114ʾscc8660ͷʽ V3.4.3 660RC V3.4.2 diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.c b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.c index 231b20d..3e9ec74 100644 --- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.c +++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,423 +24,519 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_debug.h" #include "seekfree_assistant.h" +// ͨö +typedef enum +{ + SEEKFREE_ASSISTANT_SEND_CCD_CMD = 0x01 , + SEEKFREE_ASSISTANT_SEND_CAMERA_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD , + SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD , -extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); -extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); + SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD = 0x10 , -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) + SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD = 0x20 , +}seekfree_assistant_cmd_type_enum; + +#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) // Ƭλ͵֡ͷ +#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) // λƬ͵֡ͷ + +// ݷͺָ +extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length); +seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + +// ݽպָ +extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length); +seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) #include "zf_common_fifo.h" -static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO -static fifo_struct seekfree_assistant_fifo = // FIFOṹ +static uint8 seekfree_assistant_debug_param_buffer[SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE]; +static fifo_struct seekfree_assistant_debug_param_fifo = { - .buffer = seekfree_assistant_buffer, + .buffer = seekfree_assistant_debug_param_buffer, .execution = FIFO_IDLE, .type = FIFO_DATA_8BIT, .head = 0, .end = 0, - .size = SEEKFREE_ASSISTANT_BUFFER_SIZE, - .max = SEEKFREE_ASSISTANT_BUFFER_SIZE, -}; + .size = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, + .max = SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE, +}; #endif -static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // ͼλЭ -static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // ͼλЭ -static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // ͼԼ߽绺Ϣ - -seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // ݷͺָ -seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // ݽպָ - -seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // յIJ -vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // ±־λ - //------------------------------------------------------------------------------------------------------------------- // ͺ -// ˵ *buffer ҪУݵַ -// ˵ length У鳤 -// ز uint8 ֵ +// ˵ *buffer ҪУݵַ +// ˵ length У鳤 +// ز uint8 ֵ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -static uint8 seekfree_assistant_sum (uint8 *buffer, uint32 length) +static uint8 seekfree_assistant_sum (void *buffer, uint32 length) { uint8 temp_sum = 0; + uint8 *ptr = (uint8 *)buffer; while(length--) { - temp_sum += *buffer++; + temp_sum += *ptr ++; } return temp_sum; } //------------------------------------------------------------------------------------------------------------------- -// ͼͺ -// ˵ camera_type ͷ -// ˵ *image_addr ͼ׵ַ -// ˵ boundary_num ͼа߽ -// ˵ width ͼ -// ˵ height ͼ߶ +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ // ز void -// ʹʾ +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint8 boundary_num, uint16 width, uint16 height) +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer) { - uint32 image_size = 0; + zf_assert(NULL != ccd_obj); + zf_assert(NULL != data_buffer); - seekfree_assistant_camera_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_data.function = SEEKFREE_ASSISTANT_CAMERA_FUNCTION; - seekfree_assistant_camera_data.camera_type = (camera_type << 5) | ((image_addr != NULL ? 0 : 1) << 4) | boundary_num; - // дϢЭ鲿 - seekfree_assistant_camera_data.length = sizeof(seekfree_assistant_camera_struct); - seekfree_assistant_camera_data.image_width = width; - seekfree_assistant_camera_data.image_height = height; + memset(ccd_obj, 0, sizeof(seekfree_assistant_ccd_struct)); + ccd_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CCD_CMD; + ccd_obj->config.channel_index = channel_index; - // ȷ֡ͷܡͷ͡Լȸ߶ȵϢ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct)); - - // ͷͼͼС - switch(camera_type) + uint16 data_max = 256; + uint8 loop_count = SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT; + loop_count = (2 >= loop_count) ? (loop_count) : (2); + for(uint8 i = 0; loop_count > i; i ++) { - case SEEKFREE_ASSISTANT_OV7725_BIN: - { - image_size = width * height / 8; - }break; - - case SEEKFREE_ASSISTANT_MT9V03X: - { - image_size = width * height; - }break; - - case SEEKFREE_ASSISTANT_SCC8660: - { - image_size = width * height * 2; - }break; + data_max *= 4; } - // ͼ - if(NULL != image_addr) + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 0) & 0x00FF); + #else + ccd_obj->config.data_lenght_buffer[0] = (uint8)((data_lenght >> 0) & 0x00FF); + ccd_obj->config.data_lenght_buffer[1] = (uint8)((data_lenght >> 8) & 0x00FF); + ccd_obj->config.channel_color_buffer[0] = (uint8)((channel_color >> 0) & 0x00FF); + ccd_obj->config.channel_color_buffer[1] = (uint8)((channel_color >> 8) & 0x00FF); + ccd_obj->config.channel_data_max[0] = (uint8)((data_max >> 0) & 0x00FF); + ccd_obj->config.channel_data_max[1] = (uint8)((data_max >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + ccd_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + ccd_obj->config.data_type = data_type; + } + + // ¼ʵֽ uint16 Ҫݳ + ccd_obj->buffer_byte_size = data_lenght * ((data_type) ? (2) : (1)); + // Ȼ¼Ӧݻ + ccd_obj->data_buffer = data_buffer; + + // У + ccd_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + ccd_obj->config.check_sum += seekfree_assistant_sum( + &(ccd_obj->config.cmd), + sizeof(ccd_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)ccd_obj, + sizeof(ccd_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(ccd_obj->data_buffer), + ccd_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer) +{ + zf_assert(NULL != camera_obj); + + memset(camera_obj, 0, sizeof(seekfree_assistant_camera_struct)); + camera_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_CMD; + camera_obj->config.camera_type = camera_type; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 0) & 0x00FF); + #else + camera_obj->config.image_width_buffer[0] = (uint8)((image_width >> 0) & 0x00FF); + camera_obj->config.image_width_buffer[1] = (uint8)((image_width >> 8) & 0x00FF); + camera_obj->config.image_height_buffer[0] = (uint8)((image_height >> 0) & 0x00FF); + camera_obj->config.image_height_buffer[1] = (uint8)((image_height >> 8) & 0x00FF); + #endif + + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type + && NULL != data_buffer) { - seekfree_assistant_transfer_callback(image_addr, image_size); + camera_obj->config.data_type = 0x02; + } + else + { + camera_obj->config.data_type = (NULL == data_buffer) ? (0x00) : (0x01); + } + + // RGB565 ͼ ôֽ + camera_obj->buffer_byte_size = + image_width * image_height + * ((SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 == camera_type) ? (2) : (1)); + camera_obj->buffer_byte_size = + (SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY == camera_type) + ? (camera_obj->buffer_byte_size / 8) + : (camera_obj->buffer_byte_size); + camera_obj->data_buffer = data_buffer; + + // У + camera_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_obj->config.check_sum += seekfree_assistant_sum( + &(camera_obj->config.cmd), + sizeof(camera_obj->config) - 2); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_obj, + sizeof(camera_obj->config)); + if(NULL != camera_obj->data_buffer) + { + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_obj->data_buffer), + camera_obj->buffer_byte_size); } } //------------------------------------------------------------------------------------------------------------------- -// ͼ߻ƺ -// ˵ boundary_id ID -// ˵ dot_num -// ˵ *dot_x ׵ַ -// ˵ *dot_y ׵ַ -// ˵ width ͼ -// ˵ height ͼ߶ +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 // ز void -// ʹʾ +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct *buffer) +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer) { - uint8 i; - uint16 dot_bytes = 0; // ֽ + zf_assert(NULL != camera_boundary_obj); + zf_assert(NULL != data_buffer); - dot_bytes = seekfree_assistant_camera_dot_data.dot_num; + memset(camera_boundary_obj, 0, sizeof(seekfree_assistant_camera_boundary_struct)); + camera_boundary_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_BOUNDARY_CMD; - if(seekfree_assistant_camera_dot_data.dot_type & (1 << 5)) - { - dot_bytes *= 2; + if( SEEKFREE_ASSISTANT_STC_DATA_ENABLE + && SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 == data_type) + { // uint16 STC Ƭ ô޸Ϊ 0x02 + camera_boundary_obj->config.data_type = data_type + 1; + } + else + { // Ļ uint8 ݻ uint16 + camera_boundary_obj->config.data_type = data_type; } - // ȷ֡ͷܡ߽š곤ȡ - seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct)); + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_boundary_obj->config.boundary_lenght_buffer[0] = (uint8)((boundary_lenght >> 0) & 0x00FF); + camera_boundary_obj->config.boundary_lenght_buffer[1] = (uint8)((boundary_lenght >> 8) & 0x00FF); + camera_boundary_obj->config.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_boundary_obj->config.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif - for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++) - { - // жǷͺ - if(NULL != buffer->boundary_x[i]) - { - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes); - } + camera_boundary_obj->buffer_byte_size = + boundary_lenght * 2 + * ((SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 == data_type) ? (1) : (2)); + camera_boundary_obj->data_buffer = data_buffer; - // жǷ - if(NULL != buffer->boundary_y[i]) - { - // ûݣʾÿһֻһ߽ - // ָ˺ݣַʽʵͬһж߽㷨ܹ䡣 - seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes); - } - } + // У + camera_boundary_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_boundary_obj->config.check_sum += seekfree_assistant_sum( + &(camera_boundary_obj->config.cmd), + sizeof(camera_boundary_obj->config) - 2); } //------------------------------------------------------------------------------------------------------------------- -// ʾͺ +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj) +{ + seekfree_assistant_transfer_callback( + (const uint8 *)camera_boundary_obj, + sizeof(camera_boundary_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(camera_boundary_obj->data_buffer), + camera_boundary_obj->buffer_byte_size); +} + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color) +{ + seekfree_assistant_camera_rectangular_struct camera_rectangular_obj; + memset(&camera_rectangular_obj, 0, sizeof(seekfree_assistant_camera_rectangular_struct)); + camera_rectangular_obj.head = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.cmd = SEEKFREE_ASSISTANT_SEND_CAMERA_RECTANGULAR_CMD; + + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 0) & 0x00FF); + #else + camera_rectangular_obj.x_axis_buffer[0] = (uint8)((x >> 0) & 0x00FF); + camera_rectangular_obj.x_axis_buffer[1] = (uint8)((x >> 8) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[0] = (uint8)((y >> 0) & 0x00FF); + camera_rectangular_obj.y_axis_buffer[1] = (uint8)((y >> 8) & 0x00FF); + camera_rectangular_obj.width_buffer[0] = (uint8)((width >> 0) & 0x00FF); + camera_rectangular_obj.width_buffer[1] = (uint8)((width >> 8) & 0x00FF); + camera_rectangular_obj.height_buffer[0] = (uint8)((height >> 0) & 0x00FF); + camera_rectangular_obj.height_buffer[1] = (uint8)((height >> 8) & 0x00FF); + camera_rectangular_obj.color_buffer[0] = (uint8)((color >> 0) & 0x00FF); + camera_rectangular_obj.color_buffer[1] = (uint8)((color >> 8) & 0x00FF); + #endif + + // У + camera_rectangular_obj.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + camera_rectangular_obj.check_sum += seekfree_assistant_sum( + &(camera_rectangular_obj.cmd), + sizeof(camera_rectangular_obj) - 2); + + seekfree_assistant_transfer_callback( + (const uint8 *)&camera_rectangular_obj, + sizeof(camera_rectangular_obj)); +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer) +{ + zf_assert(NULL != oscilloscope_obj); + zf_assert(NULL != data_buffer); + + memset(oscilloscope_obj, 0, sizeof(seekfree_assistant_oscilloscope_struct)); + oscilloscope_obj->config.head = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.cmd = SEEKFREE_ASSISTANT_SEND_OSCILLOSCOPE_CMD; + oscilloscope_obj->config.channel_max = + (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX <= channel_max) + ? (SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX) + : ((0 == channel_max) ? (1) : (channel_max)); + oscilloscope_obj->config.data_type = (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) ? (0x01) : (0x00); + oscilloscope_obj->buffer_byte_size = oscilloscope_obj->config.channel_max * 4; + oscilloscope_obj->data_buffer = data_buffer; +} + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ // ˵ *seekfree_assistant_oscilloscope ʾݽṹ // ز void // ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope) +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj) { - uint8 packet_size; - - // λ - seekfree_assistant_oscilloscope->channel_num &= 0x0f; - - zf_assert(SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT >= seekfree_assistant_oscilloscope->channel_num); - - // ֡ͷ - seekfree_assistant_oscilloscope->head = SEEKFREE_ASSISTANT_SEND_HEAD; - - // дϢ - packet_size = sizeof(seekfree_assistant_oscilloscope_struct) - (SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT - seekfree_assistant_oscilloscope->channel_num) * 4; - seekfree_assistant_oscilloscope->length = packet_size; - - // д빦ͨ - seekfree_assistant_oscilloscope->channel_num |= SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE; - // У - seekfree_assistant_oscilloscope->check_sum = 0; - seekfree_assistant_oscilloscope->check_sum = seekfree_assistant_sum((uint8 *)seekfree_assistant_oscilloscope, packet_size); + oscilloscope_obj->config.check_sum = SEEKFREE_ASSISTANT_SEND_HEAD; + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + &(oscilloscope_obj->config.cmd), + sizeof(oscilloscope_obj->config) - 2); + oscilloscope_obj->config.check_sum += seekfree_assistant_sum( + (oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); - // ڵñ֮ǰûҪ͵дseekfree_assistant_oscilloscope_data.data[] - - seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size); + seekfree_assistant_transfer_callback( + (const uint8 *)oscilloscope_obj, + sizeof(oscilloscope_obj->config)); + seekfree_assistant_transfer_callback( + (const uint8 *)(oscilloscope_obj->data_buffer), + oscilloscope_obj->buffer_byte_size); } +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) //------------------------------------------------------------------------------------------------------------------- -// ͼϢú -// ˵ camera_type ͼ -// ˵ image_addr ͼַ NULLʾֻͱϢλ -// ˵ width ͼ -// ˵ height ͼ߶ +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ // ز void -// ʹʾ seekfree_assistant_camera_information_config(SEEKFREE_ASSISTANT_MT9V03X, mt9v03x_image[0], MT9V03X_W, MT9V03X_H); -// עϢ +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); //------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height) +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj) { - seekfree_assistant_camera_dot_data.head = SEEKFREE_ASSISTANT_SEND_HEAD; - seekfree_assistant_camera_dot_data.function = SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION; - // дϢ - seekfree_assistant_camera_dot_data.length = sizeof(seekfree_assistant_camera_dot_struct); + zf_assert(NULL != debug_param_obj); - seekfree_assistant_camera_buffer.camera_type = camera_type; - seekfree_assistant_camera_buffer.image_addr = image_addr; - seekfree_assistant_camera_buffer.width = width; - seekfree_assistant_camera_buffer.height = height; -} + seekfree_assistant_debug_param_cmd_struct debug_param_cmd_obj; // ½һݰ + uint8 *debug_param_cmd_pointer = (uint8 *)&debug_param_cmd_obj; // һָָݰ + uint8 temp_sum = 0xFF; // Уʱ + uint32 read_length = 0; // ȡʱ -//------------------------------------------------------------------------------------------------------------------- -// ͼ߷ú -// ˵ boundary_type ߽ -// ˵ dot_num һ߽жٸ -// ˵ dot_x1 ű1ĵַ NULLʾͱ1 -// ˵ dot_x2 ű2ĵַ NULLʾͱ2 -// ˵ dot_x3 ű3ĵַ NULLʾͱ3 -// ˵ dot_y1 ű1ĵַ NULLʾͱ1 -// ˵ dot_y2 ű2ĵַ NULLʾͱ2 -// ˵ dot_y3 ű3ĵַ NULLʾͱ3 -// ز void -// ʹʾ seekfree_assistant_camera_config(X_BOUNDARY, MT9V03X_H, x1_boundary, x2_boundary, x3_boundary, NULL, NULL, NULL); // ͼʱߣֻк -// ʹʾ seekfree_assistant_camera_config(Y_BOUNDARY, MT9V03X_W, NULL, NULL, NULL, y1_boundary, y2_boundary, y3_boundary); // ͼʱߣֻ -// ʹʾ seekfree_assistant_camera_config(XY_BOUNDARY, 160, xy_x1_boundary, xy_x2_boundary, xy_x3_boundary, xy_y1_boundary, xy_y2_boundary, xy_y3_boundary); // ͼʱߣ߰ -// עϢ -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3) -{ - uint8 i = 0; - uint8 boundary_num = 0; - uint8 boundary_data_type = 0; - - // ͼͻǷ׼, ô˺֮ǰҪȵseekfree_assistant_camera_configúͼϢ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_dot_data.dot_num = dot_num; - seekfree_assistant_camera_dot_data.valid_flag = 0; - for(i = 0; i < 3; i++) - { - seekfree_assistant_camera_buffer.boundary_x[i] = NULL; - seekfree_assistant_camera_buffer.boundary_y[i] = NULL; - } - - switch(boundary_type) - { - case X_BOUNDARY: - { - if(NULL != dot_x1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x1; - } - if(NULL != dot_x2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x2; - } - if(NULL != dot_x3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i++] = dot_x3; - } - - if(255 < seekfree_assistant_camera_buffer.height) - { - boundary_data_type = 1; - } - }break; - - case Y_BOUNDARY: - { - if(NULL != dot_y1) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if(NULL != dot_y2) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if(NULL != dot_y3) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if(255 < seekfree_assistant_camera_buffer.width) - { - boundary_data_type = 1; - } - }break; - - case XY_BOUNDARY: - { - if((NULL != dot_x1) && (NULL != dot_y1)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 0; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x1; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y1; - } - if((NULL != dot_x2) && (NULL != dot_y2)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 1; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x2; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y2; - } - if((NULL != dot_x3) && (NULL != dot_y3)) - { - boundary_num++; - seekfree_assistant_camera_dot_data.valid_flag |= 1 << 2; - seekfree_assistant_camera_buffer.boundary_x[i] = dot_x3; - seekfree_assistant_camera_buffer.boundary_y[i++] = dot_y3; - } - - if((255 < seekfree_assistant_camera_buffer.width) || (255 < seekfree_assistant_camera_buffer.height)) - { - boundary_data_type = 1; - } - }break; - - case NO_BOUNDARY:break; - } - - seekfree_assistant_camera_dot_data.dot_type = (boundary_type << 6) | (boundary_data_type << 5) | boundary_num; -} - -//------------------------------------------------------------------------------------------------------------------- -// ַͷͼ -// ˵ void -// ز void -// ʹʾ -// עϢ ڵͼͺ֮ǰصһseekfree_assistant_camera_configӦIJú -//------------------------------------------------------------------------------------------------------------------- -void seekfree_assistant_camera_send (void) -{ - // ͼͻǷ׼ - zf_assert(0 != seekfree_assistant_camera_buffer.camera_type); - - seekfree_assistant_camera_data_send(seekfree_assistant_camera_buffer.camera_type, seekfree_assistant_camera_buffer.image_addr, seekfree_assistant_camera_dot_data.dot_type & 0x0f, seekfree_assistant_camera_buffer.width, seekfree_assistant_camera_buffer.height); - - if(seekfree_assistant_camera_dot_data.dot_type & 0x0f) - { - seekfree_assistant_camera_dot_send(&seekfree_assistant_camera_buffer); - } -} - - -//------------------------------------------------------------------------------------------------------------------- -// ֽյ -// ˵ void -// ز void -// ʹʾ ֻҪŵеPITжϻѭ -//------------------------------------------------------------------------------------------------------------------- -#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE) -void seekfree_assistant_data_analysis (void) -{ - uint8 temp_sum; - uint32 read_length; - seekfree_assistant_parameter_struct *receive_packet; - - // ʹuint32ж壬ĿΪ˱ֽ֤ڶ - uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4]; - - // Զȡ, ԶĴ䷽ʽӽջصжȡ - read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE); + // Զȡһݰ + // ԶĴ䷽ʽӽջصжȡ + read_length = seekfree_assistant_receive_callback( + debug_param_cmd_pointer, + sizeof(seekfree_assistant_debug_param_cmd_struct)); if(read_length) - { - // ȡдFIFO - fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length); + { // ȡдFIFO + fifo_write_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + read_length); } - while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo)) - { - read_length = sizeof(seekfree_assistant_parameter_struct); - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_ONLY); + while( sizeof(seekfree_assistant_debug_param_cmd_struct) + <= fifo_used(&seekfree_assistant_debug_param_fifo)) + { // FIFO һݰ ôͽн + // ֱӶһݰ + read_length = sizeof(seekfree_assistant_debug_param_cmd_struct); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_ONLY); - if(SEEKFREE_ASSISTANT_RECEIVE_HEAD != ((uint8 *)temp_buffer)[0]) - { - // û֡ͷFIFOȥһ - read_length = 1; - } - else - { - // ҵ֡ͷ - receive_packet = (seekfree_assistant_parameter_struct *)temp_buffer; - temp_sum = receive_packet->check_sum; - receive_packet->check_sum = 0; - if(temp_sum == seekfree_assistant_sum((uint8 *)temp_buffer, sizeof(seekfree_assistant_parameter_struct))) - { - // Уɹ - seekfree_assistant_parameter[receive_packet->channel - 1] = receive_packet->data; - seekfree_assistant_parameter_update_flag[receive_packet->channel - 1] = 1; + if( SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[0] + && SEEKFREE_ASSISTANT_RECEIVE_DEBUG_PARAM_CMD == debug_param_cmd_pointer[2]) + { // ֱƥ֡ͷ ҹҲƥ + temp_sum = debug_param_cmd_obj.check_sum; // ȡݰУ + debug_param_cmd_obj.check_sum = 0; // հУֵ У + if( temp_sum == seekfree_assistant_sum(debug_param_cmd_pointer, sizeof(seekfree_assistant_debug_param_cmd_struct))) + { // Уɹ + debug_param_obj->data[debug_param_cmd_obj.channel_index - 1] = debug_param_cmd_obj.dat.data_float; + #if (SEEKFREE_ASSISTANT_STC_DATA_ENABLE) + // STC ôС˷һ + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[3] ^= debug_param_obj->dat.data_buffer[0]; + debug_param_obj->dat.data_buffer[0] ^= debug_param_obj->dat.data_buffer[3]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + debug_param_obj->dat.data_buffer[2] ^= debug_param_obj->dat.data_buffer[1]; + debug_param_obj->dat.data_buffer[1] ^= debug_param_obj->dat.data_buffer[2]; + #endif + debug_param_obj->update_flag[debug_param_cmd_obj.channel_index - 1] = 1; + temp_sum = 0x00; } else - { - read_length = 1; + { // Уƥ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + } + else + { // ƥ䲻֡ͷ͹ λʱУΪ 0xFF ʾ + temp_sum = 0xFF; + } + + if(0xFF == temp_sum) + { // һʱУΪ 0xFF ôǽ Ѱһ֡ͷ + for(read_length = 1; sizeof(seekfree_assistant_debug_param_cmd_struct) > read_length; read_length ++) + { // Ϊȡһ һ + if(SEEKFREE_ASSISTANT_RECEIVE_HEAD == debug_param_cmd_pointer[read_length]) + { // ҵ¸֡ͷ˳ + break; + } } } // ʹõ - fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN); + fifo_read_buffer( + &seekfree_assistant_debug_param_fifo, + debug_param_cmd_pointer, + &read_length, + FIFO_READ_AND_CLEAN); } } #endif - - - diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.h index 5b7e1b5..937f784 100644 --- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.h +++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,142 +24,292 @@ * ļ seekfree_assistant * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_h_ #define _seekfree_assistant_h_ - #include "zf_common_typedef.h" +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_DATA_TYPE_UINT8 , + SEEKFREE_ASSISTANT_DATA_TYPE_UINT16 , +}seekfree_assistant_data_type_enum; -// 1ʹܲڵĹ 0رղڵĹ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 ) - - - -// FIFOС -#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 ) - -// ʾͨ -#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 ) - -// Եͨ -#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 ) - -// ͼ -#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 ) - -// Ƭλ͵֡ͷ -#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA ) - -// ͷ -#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 ) -#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 ) -#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 ) - -// λƬ͵֡ͷ -#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 ) - -// -#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 ) - +// CCD ö +typedef enum +{ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_8BIT , // 8λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_10BIT , // 10λֱ + SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT , // 12λֱ +}seekfree_assistant_ccd_resolution_enum; // ͷö typedef enum { - // ͷͺŶ - SEEKFREE_ASSISTANT_OV7725_BIN = 1, - SEEKFREE_ASSISTANT_MT9V03X, - SEEKFREE_ASSISTANT_SCC8660, - // ͼͶ - SEEKFREE_ASSISTANT_BINARY = 1, - SEEKFREE_ASSISTANT_GRAY, - SEEKFREE_ASSISTANT_RGB565, -}seekfree_assistant_image_type_enum; + SEEKFREE_ASSISTANT_CAMERA_TYPE_BINARY = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_GRAY , + SEEKFREE_ASSISTANT_CAMERA_TYPE_RGB565 , -// ͷö -typedef enum -{ - // ͷͺŶ - X_BOUNDARY, // ͵ͼб߽ϢֻXҲֻкϢͼ߶ȵõ - Y_BOUNDARY, // ͵ͼб߽ϢֻYҲֻϢͼȵõͨ - XY_BOUNDARY, // ͵ͼб߽ϢXYָλãͿԷʾЧ - NO_BOUNDARY, // ͵ͼûбϢ -}seekfree_assistant_boundary_type_enum; + // ͷͺƥ䶨 + SEEKFREE_ASSISTANT_CAMERA_TYPE_OV7725_BIN = 0x01 , + SEEKFREE_ASSISTANT_CAMERA_TYPE_MT9V03X , + SEEKFREE_ASSISTANT_CAMERA_TYPE_SCC8660 , +}seekfree_assistant_camera_type_enum; + +#define SEEKFREE_ASSISTANT_STC_DATA_ENABLE ( 0 ) // STC ƬҪʹ궨 + +#define SEEKFREE_ASSISTANT_OSCILLOSCOPE_MAX ( 16 ) // ʾͨ +#define SEEKFREE_ASSISTANT_CCD_RESOLUTION_DEFAULT ( SEEKFREE_ASSISTANT_CCD_RESOLUTION_12BIT ) // Ĭ CCD ľ ȷλ᳤ + +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE ( 1 ) // 1ʹܲڵĹ 0رղڵĹ +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX ( 8 ) // Բͨ +#define SEEKFREE_ASSISTANT_DEBUG_PARAM_BUFFER_SIZE ( 64 ) // ԲĻС +#endif typedef struct { - uint8 head; // ֡ͷ - uint8 channel_num; // λΪ λΪͨ - uint8 check_sum; // У - uint8 length; // - float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // ͨ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + uint8 data_lenght_buffer[2] ; // CCD ݳ + uint8 channel_color_buffer[2] ; // ͨɫ + uint8 channel_data_max[2] ; // ֵͨ + uint8 data_type ; // ȷϴС + uint8 reserve ; // + }config; + uint16 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_ccd_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 camera_type ; // ͷ + uint8 image_width_buffer[2] ; // ͼ + uint8 image_height_buffer[2] ; // ͼ߶ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 data_type ; // ȷϴС + uint8 boundary_lenght_buffer[2] ; // ߳ + uint8 color_buffer[2] ; // ͨɫ + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ +}seekfree_assistant_camera_boundary_struct; + +typedef struct +{ + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 reserve ; // + uint8 x_axis_buffer[2] ; // X + uint8 y_axis_buffer[2] ; // Y + uint8 width_buffer[2] ; // ο + uint8 height_buffer[2] ; // θ߶ + uint8 color_buffer[2] ; // ɫ +}seekfree_assistant_camera_rectangular_struct; + +typedef struct +{ + struct + { + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_max ; // ͨ + uint8 data_type ; // ȷϴС + uint8 reserve[3] ; // + }config; + uint32 buffer_byte_size ; // ݻ ʵֽڴС + void *data_buffer ; // ݻ }seekfree_assistant_oscilloscope_struct; +typedef union +{ + uint8 data_uint8[4] ; + float data_float ; +}seekfree_assistant_param_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 camera_type; // λʾ߽ λʾǷͼ 0x133ʾһͼ߽磨߽ͨ硢ߡұ߽磩1ʾûͼ - uint8 length; // ȣЭ鲿֣ - uint16 image_width; // ͼ - uint16 image_height; // ͼ߶ -}seekfree_assistant_camera_struct; - - -typedef struct -{ - uint8 head; // ֡ͷ - uint8 function; // - uint8 dot_type; // BIT5116λ 08λ BIT7-BIT60ֻX 1ֻY 2XY궼 BIT3-BIT0߽ - uint8 length; // ȣЭ鲿֣ - uint16 dot_num; // - uint8 valid_flag; // ͨʶ - uint8 reserve; // -}seekfree_assistant_camera_dot_struct; - -typedef struct -{ - void *image_addr; // ͷַ - uint16 width; // ͼ - uint16 height; // ͼ߶ - seekfree_assistant_image_type_enum camera_type; // ͷ - void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ - void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // ַ߽ -}seekfree_assistant_camera_buffer_struct; + uint8 head ; // ֡ͷ + uint8 check_sum ; // У + uint8 cmd ; //  + uint8 channel_index ; // ͨ + seekfree_assistant_param_struct dat ; // һ + +}seekfree_assistant_debug_param_cmd_struct; typedef struct { - uint8 head; // ֡ͷ - uint8 function; // - uint8 channel; // ͨ - uint8 check_sum; // У - float data; // -}seekfree_assistant_parameter_struct; + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint8_struct; + + +typedef struct +{ + uint8 x; + uint8 y; +}seekfree_assistant_camera_boundary_uint16_struct; + +typedef struct +{ + float data[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; + uint8 update_flag[SEEKFREE_ASSISTANT_DEBUG_PARAM_MAX] ; +}seekfree_assistant_debug_param_struct; typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length); typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length); -extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // ʾ -extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // յIJ -extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // ±־λ - - -void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope); -void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height); -void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3); -void seekfree_assistant_camera_send (void); -void seekfree_assistant_data_analysis (void); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ +// ˵ *ccd_obj CCD ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ channel_index CCD ͨ +// ˵ channel_color ͨҪʹõɫ +// ˵ data_lenght CCD ݳ +// ˵ *data_buffer CCD ݻ +// ز void +// ʹʾ seekfree_assistant_ccd_config(ccd_obj, data_type, channel_index, channel_color, data_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_config ( + seekfree_assistant_ccd_struct *ccd_obj, + seekfree_assistant_data_type_enum data_type, + uint8 channel_index, + uint16 channel_color, + uint16 data_lenght, + void *data_buffer); +//------------------------------------------------------------------------------------------------------------------- +// CCD ͼ ͺ +// ˵ *ccd_obj CCD ݽṹ +// ز void +// ʹʾ seekfree_assistant_ccd_send(ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_ccd_send (seekfree_assistant_ccd_struct *ccd_obj); +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ +// ˵ *camera_obj CAMERA ݽṹ +// ˵ camera_type CAMERA seekfree_assistant_camera_type_enum +// ˵ image_width CAMERA ͼ +// ˵ image_height CAMERA ͼ߶ +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_config(camera_obj, camera_type, image_width, image_height, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_config ( + seekfree_assistant_camera_struct *camera_obj, + seekfree_assistant_camera_type_enum camera_type, + uint16 image_width, + uint16 image_height, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͼ ͺ +// ˵ *camera_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_send(camera_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_send (seekfree_assistant_camera_struct *camera_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ˵ data_type seekfree_assistant_data_type_enum +// ˵ color Ҫʹõɫ +// ˵ boundary_lenght CAMERA +// ˵ *data_buffer CAMERA ͼ񻺳 +// ز void +// ʹʾ seekfree_assistant_camera_boundary_config(camera_boundary_obj, data_type, color, boundary_lenght, data_buffer); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_config ( + seekfree_assistant_camera_boundary_struct *camera_boundary_obj, + seekfree_assistant_data_type_enum data_type, + uint16 color, + uint16 boundary_lenght, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ͺ +// ˵ *camera_boundary_obj CAMERA ݽṹ +// ز void +// ʹʾ seekfree_assistant_camera_boundary_send(camera_boundary_obj); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_boundary_send (seekfree_assistant_camera_boundary_struct *camera_boundary_obj); + +//------------------------------------------------------------------------------------------------------------------- +// CAMERA ο ͺ +// ˵ x X +// ˵ y Y +// ˵ width ο +// ˵ height θ߶ +// ˵ color ɫ +// ز void +// ʹʾ seekfree_assistant_camera_rectangular_send(x, y, width, height, color); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_camera_rectangular_send (uint16 x, uint16 y, uint16 width, uint16 height, uint16 color); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ +// ˵ *oscilloscope_obj ʾݽṹ +// ˵ channel_max ͨ Χ [1, 16] Χ޵Χ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_config(oscilloscope_obj, 16); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_config ( + seekfree_assistant_oscilloscope_struct *oscilloscope_obj, + uint8 channel_max, + void *data_buffer); + +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *seekfree_assistant_oscilloscope ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *oscilloscope_obj); + +#if (SEEKFREE_ASSISTANT_DEBUG_PARAM_ENABLE) +//------------------------------------------------------------------------------------------------------------------- +// ʾ ͺ +// ˵ *debug_param_obj ʾݽṹ +// ز void +// ʹʾ seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data); +//------------------------------------------------------------------------------------------------------------------- +void seekfree_assistant_debug_param_analysis (seekfree_assistant_debug_param_struct *debug_param_obj); +#endif #endif diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c index d139201..23205d5 100644 --- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c +++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,23 +24,20 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #include "zf_common_typedef.h" #include "zf_common_fifo.h" #include "zf_common_debug.h" -#include "zf_driver_uart.h" + #include "zf_device_wireless_uart.h" -#include "zf_device_ble6a20.h" -#include "zf_device_bluetooth_ch9141.h" -#include "zf_device_wifi_uart.h" #include "zf_device_wifi_spi.h" #include "seekfree_assistant.h" @@ -50,7 +47,6 @@ extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // ݷͺָ extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // ݽպָ - //------------------------------------------------------------------------------------------------------------------- // ַͺ // ˵ *buff Ҫ͵ݵַ @@ -58,7 +54,7 @@ extern seekfree_assistant_receive_callback_function seekfree_assistant_receiv // ز uint32 ʣδݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) +uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݷ͹ @@ -72,7 +68,7 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length) // ز uint32 յݳ // ʹʾ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) +uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) { // ѡԶͨѶʽʱ Ҫݽչ return 0; @@ -85,54 +81,45 @@ ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length) // ʹʾ seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); ʹøWIFI SPIģշ // ע Ҫе豸ijʼʹתڽݵշҪеתڵijʼȻٵseekfree_assistant_interface_initֵĽӿڳʼ //------------------------------------------------------------------------------------------------------------------- -ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) +void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device) { switch(transfer_device) { case SEEKFREE_ASSISTANT_DEBUG_UART: { -#if DEBUG_UART_USE_INTERRUPT == 1 seekfree_assistant_transfer_callback = debug_send_buffer; seekfree_assistant_receive_callback = debug_read_ring_buffer; -#endif }break; - + case SEEKFREE_ASSISTANT_WIRELESS_UART: { seekfree_assistant_transfer_callback = wireless_uart_send_buffer; seekfree_assistant_receive_callback = wireless_uart_read_buffer; }break; - - case SEEKFREE_ASSISTANT_BLE6A20: - { - seekfree_assistant_transfer_callback = ble6a20_send_buffer; - seekfree_assistant_receive_callback = ble6a20_read_buffer; - }break; - case SEEKFREE_ASSISTANT_CH9141: - { - seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; - seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; - }break; - - case SEEKFREE_ASSISTANT_WIFI_UART: - { - seekfree_assistant_transfer_callback = wifi_uart_send_buffer; - seekfree_assistant_receive_callback = wifi_uart_read_buffer; - }break; - + // case SEEKFREE_ASSISTANT_CH9141: + // { + // seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer; + // seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer; + // }break; + + // case SEEKFREE_ASSISTANT_WIFI_UART: + // { + // seekfree_assistant_transfer_callback = wifi_uart_send_buffer; + // seekfree_assistant_receive_callback = wifi_uart_read_buffer; + // }break; + case SEEKFREE_ASSISTANT_WIFI_SPI: { seekfree_assistant_transfer_callback = wifi_spi_send_buffer; seekfree_assistant_receive_callback = wifi_spi_read_buffer; }break; - - case SEEKFREE_ASSISTANT_CUSTOM: - { + + default: + { // Լ ʵseekfree_assistant_transferseekfree_assistant_receiveݵշ - + seekfree_assistant_transfer_callback = seekfree_assistant_transfer; + seekfree_assistant_receive_callback = seekfree_assistant_receive; }break; } } - - diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.h index 2ccfd8a..0e28f49 100644 --- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.h +++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.h @@ -1,20 +1,20 @@ /********************************************************************************************************************* -* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ +* RT1064DVL6A Opensourec Library RT1064DVL6A Դ⣩һڹٷ SDK ӿڵĵԴ * Copyright (c) 2022 SEEKFREE ɿƼ -* -* ļ TC264 Դһ -* -* TC264 Դ +* +* ļ RT1064DVL6A Դһ +* +* RT1064DVL6A Դ * Ըᷢ GPLGNU General Public License GNUͨù֤ * GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸ -* +* * Դķϣܷãδκεı֤ * ûԻʺض;ı֤ * ϸμ GPL -* +* * ӦյԴͬʱյһ GPL ĸ * ûУ -* +* * ע * Դʹ GPL3.0 Դ֤Э Ϊİ汾 * Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ @@ -24,13 +24,13 @@ * ļ seekfree_assistant_interface * ˾ ɶɿƼ޹˾ * 汾Ϣ 鿴 libraries/doc ļ version ļ 汾˵ -* ADS v1.10.2 +* ADS v1.9.4 * ƽ̨ TC264D * https://seekfree.taobao.com/ -* +* * ޸ļ¼ -* ע -* 2024-01-01 pudding first version +* ע +* 2024-1-11 SeekFree first version ********************************************************************************************************************/ #ifndef _seekfree_assistant_interface_h_ @@ -43,7 +43,6 @@ typedef enum { SEEKFREE_ASSISTANT_DEBUG_UART, // Դ ʹõĴDEBUG_UART_INDEX궨ָ SEEKFREE_ASSISTANT_WIRELESS_UART, // ת - SEEKFREE_ASSISTANT_BLE6A20, // ת SEEKFREE_ASSISTANT_CH9141, // CH9141 SEEKFREE_ASSISTANT_WIFI_UART, // WIFIת SEEKFREE_ASSISTANT_WIFI_SPI, // WIFI SPI diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_absolute_encoder.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_absolute_encoder.h index 1166c84..dc091aa 100644 --- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_absolute_encoder.h +++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_absolute_encoder.h @@ -62,7 +62,7 @@ //==================================================== SPI ==================================================== #else //====================================================Ӳ SPI ==================================================== -#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ SPI +#define ABSOLUTE_ENCODER_SPI_SPEED (8*1000*1000) // Ӳ SPI #define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ SPI #define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ SPI SCK #define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ SPI MOSI @@ -70,7 +70,7 @@ //====================================================Ӳ SPI ==================================================== #endif -#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CSŶ +#define ABSOLUTE_ENCODER_CS_PIN (P00_8) // CSŶ #define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN))) #define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // Լ쳬ʱʱ diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ble6a20.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ble6a20.h index 6f4544a..6af089f 100644 --- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ble6a20.h +++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ble6a20.h @@ -76,7 +76,7 @@ // 1Զ Զʵ޸ BLE6A20_BAUD ֮Ҫģ ģԶΪӦIJ // Զʽ֧ 9600 57600 115200 230400 460800 921600 1500000 2000000 -#define BLE6A20_AUTO_BAUD_RATE ( 0 ) +#define BLE6A20_AUTO_BAUD_RATE ( 1 ) #if (1 == BLE6A20_AUTO_BAUD_RATE) typedef enum diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips114.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips114.h index c56f310..9c4ac0d 100644 --- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips114.h +++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips114.h @@ -167,7 +167,7 @@ void ips114_init (void); // ʹʾ ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================= IPS114 չ================================================ #endif diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200.h index 850fb11..5bf4284 100644 --- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200.h +++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200.h @@ -220,7 +220,7 @@ void ips200_init (ips200_type_enum type_select); // ʹʾ ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H); // עϢ չһʾĬţĻʼ㿪ʼʾ //------------------------------------------------------------------------------------------------------------------- -#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1)) +#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 0)) //================================================== IPS200 չ================================================ diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h index 98c5364..557e1d2 100644 --- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h +++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h @@ -86,7 +86,7 @@ // £SCC8660_PCLK_DIVԽͼԽ #define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭϣ0 ѡΪ[0,1] 0ź 1ź <ͨΪ0ʹSTM32DCMIӿڲɼҪΪ1> #define SCC8660_COLOR_MODE_DEF (0 ) // ͼɫģʽ Ĭϣ0 ѡΪ[0,1] 0ɫģʽ 1ģʽɫʱͶߣ -#define SCC8660_DATA_FORMAT_DEF (0 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) +#define SCC8660_DATA_FORMAT_DEF (1 ) // ݸʽ Ĭϣ0 ѡΪ[0-3] 0RGB565 1RGB565(ֽڽ) 2YUV422(YUYV) 3YUV422(UYVY) #define SCC8660_MANUAL_WB_DEF (0 ) // ֶƽ Ĭϣ0 ѡΪ[0,0x65-0xa0] 0رֶƽ⣬Զƽ ֶƽ ֶƽʱ Χ0x65-0xa0 //================================================ SCC8660 ã֧ͫ֡ʰ汾=========================== diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_spi.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_spi.h index e0913bd..e7cec39 100644 --- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_spi.h +++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_spi.h @@ -73,8 +73,8 @@ #if (WIFI_SPI_AUTO_CONNECT > 2) #error "WIFI_SPI_AUTO_CONNECT ֵֻΪ [0,1,2]" #else -#define WIFI_SPI_TARGET_IP "192.168.137.1" // Ŀ IP -#define WIFI_SPI_TARGET_PORT "8086" // ĿĶ˿ +#define WIFI_SPI_TARGET_IP "192.168.2.37" // Ŀ IP +#define WIFI_SPI_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_SPI_LOCAL_PORT "6666" // Ķ˿ 0 ÷Χ2048-65535 Ĭ 6666 #endif diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.h index 0f392ff..24b88cc 100644 --- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.h +++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.h @@ -73,7 +73,7 @@ #if (WIFI_UART_AUTO_CONNECT > 3) #error "WIFI_UART_AUTO_CONNECT ֵֻΪ [0,1,2,3]" #else -#define WIFI_UART_TARGET_IP "192.168.137.1" // Ŀ IP +#define WIFI_UART_TARGET_IP "192.168.2.37" // Ŀ IP #define WIFI_UART_TARGET_PORT "8080" // ĿĶ˿ #define WIFI_UART_LOCAL_PORT "8080" // ˿ #endif diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_encoder.c b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_encoder.c index 8d514b7..ad4099e 100644 --- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_encoder.c +++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_encoder.c @@ -171,7 +171,7 @@ void encoder_clear_count (encoder_index_enum encoder_n) //------------------------------------------------------------------------------------------------------------------- void encoder_quad_init (encoder_index_enum encoder_n, encoder_channel1_enum ch1_pin, encoder_channel2_enum ch2_pin) { -// zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init + zf_assert(encoder_n <= TIM4_ENCODER); // ȫɼ TIM2 TIM3 TIM4֧ ﱨ Գʹķʼencoder_dir_init IfxGpt12_enableModule(&MODULE_GPT120); IfxGpt12_setGpt1BlockPrescaler(&MODULE_GPT120, IfxGpt12_Gpt1BlockPrescaler_4);