初始化仓库

This commit is contained in:
2025-10-15 00:22:56 +08:00
commit a6ddc01c98
650 changed files with 438085 additions and 0 deletions

View File

@@ -0,0 +1,230 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_absolute_encoder
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-25 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* SCLK <20>鿴 zf_device_absolute_encoder.h <20><> ABSOLUTE_ENCODER_SCLK_PIN <20><EFBFBD><EAB6A8>
* MOSI <20>鿴 zf_device_absolute_encoder.h <20><> ABSOLUTE_ENCODER_MOSI_PIN <20><EFBFBD><EAB6A8>
* MISO <20>鿴 zf_device_absolute_encoder.h <20><> ABSOLUTE_ENCODER_MISO_PIN <20><EFBFBD><EAB6A8>
* CS <20>鿴 zf_device_absolute_encoder.h <20><> ABSOLUTE_ENCODER_CS_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* ------------------------------------
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "zf_common_function.h"
#include "zf_driver_delay.h"
#include "zf_driver_soft_spi.h"
#include "zf_driver_spi.h"
#include "zf_device_absolute_encoder.h"
static int16 now_location = 0; // <20><>ǰλ<C7B0>ö<EFBFBD><C3B6><EFBFBD> static:<3A><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ô˱<C3B4><CBB1><EFBFBD>
static int16 last_location = 0; // <20>ϴ<EFBFBD>λ<EFBFBD>ö<EFBFBD><C3B6><EFBFBD> static:<3A><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ô˱<C3B4><CBB1><EFBFBD>
#if ABSOLUTE_ENCODER_USE_SOFT_SPI
static soft_spi_info_struct absolute_encoder_spi; // <20><><EFBFBD><EFBFBD><EFBFBD>Ƕȱ<C7B6><C8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<50><EFBFBD><E1B9B9>
#define absolute_encoder_read() (soft_spi_read_8bit(&absolute_encoder_spi)) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
#define absolute_encoder_write(data) (soft_spi_write_8bit(&absolute_encoder_spi, (data))) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EBBAAF>
#else
#define absolute_encoder_read() (spi_read_8bit(ABSOLUTE_ENCODER_SPI)) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
#define absolute_encoder_write(data) (spi_write_8bit(ABSOLUTE_ENCODER_SPI, (data))) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EBBAAF>
#endif
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> absolute_encoder_write_register(i + 1, dat[i]);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void absolute_encoder_write_register(uint8 reg, uint8 data)
{
ABSOLUTE_ENCODER_CSN(0); // Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
absolute_encoder_write(reg | ABSOLUTE_ENCODER_SPI_W); // <20>Ĵ<EFBFBD><C4B4><EFBFBD>
absolute_encoder_write(data); // <20><><EFBFBD><EFBFBD>
ABSOLUTE_ENCODER_CSN(1); // Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>
system_delay_us(1); // <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
ABSOLUTE_ENCODER_CSN(0); // Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
absolute_encoder_read(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7B5>д<EFBFBD><D0B4><EFBFBD>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
absolute_encoder_read(); // <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
ABSOLUTE_ENCODER_CSN(1); // Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> absolute_encoder_read_register(6);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 absolute_encoder_read_register(uint8 reg)
{
uint8 data = 0;
ABSOLUTE_ENCODER_CSN(0); // Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
absolute_encoder_write(reg | ABSOLUTE_ENCODER_SPI_R); // <20>Ĵ<EFBFBD><C4B4><EFBFBD>
absolute_encoder_write(0x00); // ռλ
ABSOLUTE_ENCODER_CSN(1); // Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>
system_delay_us(1); // <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
ABSOLUTE_ENCODER_CSN(0); // Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
data = absolute_encoder_read(); // <20><>ȡ<EFBFBD><C8A1>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
absolute_encoder_read(); // <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
ABSOLUTE_ENCODER_CSN(1); // Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>
return data;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint16 λ<><CEBB>ֵ
// ʹ<><CAB9>ʾ<EFBFBD><CABE> absolute_encoder_read_data();
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint16 absolute_encoder_read_data (void)
{
uint16 data = 0;
ABSOLUTE_ENCODER_CSN(0); // Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
data = absolute_encoder_read(); // <20><>ȡ<EFBFBD>߰<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
data = (data & 0x00FF) << 8; // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
data |= absolute_encoder_read(); // <20><>ȡ<EFBFBD>Ͱ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
ABSOLUTE_ENCODER_CSN(1); // Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>
return data;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20>Լ<EFBFBD>״̬
// ʹ<><CAB9>ʾ<EFBFBD><CABE> absolute_encoder_self_check();
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 absolute_encoder_self_check (void)
{
uint8 i = 0, return_state = 0;
uint8 dat[6] = {0, 0, 0, 0xC0, 0xFF, 0x1C};
uint16 time_count = 0;
while(0x1C != absolute_encoder_read_register(6)) // <20><>ȡ״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>
{
for(i = 0; 6 > i; i ++)
{
absolute_encoder_write_register(i + 1, dat[i]); // д<><D0B4>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
system_delay_ms(1);
}
if(ABSOLUTE_ENCODER_TIMEOUT_COUNT < time_count ++) // <20>ȴ<EFBFBD><C8B4><EFBFBD>ʱ
{
return_state = 1;
break;
}
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ǰ<EFBFBD>Ƕ<EFBFBD>ֵ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> int16 <20>Ƕ<EFBFBD>ֵ
// ʹ<><CAB9>ʾ<EFBFBD><CABE> absolute_encoder_get_location();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
int16 absolute_encoder_get_location (void)
{
last_location = now_location; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ε<EFBFBD>λ<EFBFBD><CEBB>
now_location = absolute_encoder_read_data() >> 4; // <20><>ȡ<EFBFBD><C8A1>ǰλ<C7B0><CEBB>
return now_location;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>λ<EFBFBD>õ<EFBFBD>ƫ<EFBFBD><C6AB>ֵ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> int16 ƫ<><C6AB>ֵ
// ʹ<><CAB9>ʾ<EFBFBD><CABE> absolute_encoder_get_offset();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
int16 absolute_encoder_get_offset (void)
{
int16 result_data = 0;
if(2048 < func_abs(now_location - last_location))
{
result_data = (2048 < now_location ? (now_location - 4096 - last_location) : (now_location + 4096 - last_location));
}
else
{
result_data = (now_location - last_location);
}
return result_data;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><>ʼ<EFBFBD><CABC>״̬ 0-<2D>ɹ<EFBFBD> 1-ʧ<><CAA7>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> absolute_encoder_init();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 absolute_encoder_init (void)
{
uint8 return_state = 0;
uint16 zero_position = ABSOLUTE_ENCODER_DEFAULT_ZERO;
#if ABSOLUTE_ENCODER_USE_SOFT_SPI
soft_spi_init(&absolute_encoder_spi, 0, ABSOLUTE_ENCODER_SOFT_SPI_DELAY, ABSOLUTE_ENCODER_SCLK_PIN, ABSOLUTE_ENCODER_MOSI_PIN, ABSOLUTE_ENCODER_MISO_PIN, SOFT_SPI_PIN_NULL);
#else
spi_init(ABSOLUTE_ENCODER_SPI, SPI_MODE0, ABSOLUTE_ENCODER_SPI_SPEED, ABSOLUTE_ENCODER_SCLK_PIN, ABSOLUTE_ENCODER_MOSI_PIN, ABSOLUTE_ENCODER_MISO_PIN, SPI_CS_NULL);
#endif
gpio_init(ABSOLUTE_ENCODER_CS_PIN, GPO, GPIO_LOW, GPO_PUSH_PULL);
do
{
if(absolute_encoder_self_check())
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ô<EFBFBD><C3B4><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܾ<EFBFBD><DCBE>ǻ<EFBFBD><C7BB><EFBFBD>
return_state = 1;
zf_log(0, "absolute encoder init errror.");
break;
}
absolute_encoder_write_register(ABSOLUTE_ENCODER_DIR_REG, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD> <20><>ת<EFBFBD><D7AA>ֵ<EFBFBD><D6B5>С<EFBFBD><D0A1>0x00 <20><>ת<EFBFBD><D7AA>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x80
zero_position = (uint16)(4096 - zero_position);
zero_position = zero_position << 4;
absolute_encoder_write_register(ABSOLUTE_ENCODER_ZERO_L_REG, (uint8)zero_position); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
absolute_encoder_write_register(ABSOLUTE_ENCODER_ZERO_H_REG, zero_position >> 8);
}while(0);
return return_state;
}

View File

@@ -0,0 +1,94 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_absolute_encoder
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-25 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* SCLK <20>鿴 zf_device_absolute_encoder.h <20><> ABSOLUTE_ENCODER_SCLK_PIN <20><EFBFBD><EAB6A8>
* MOSI <20>鿴 zf_device_absolute_encoder.h <20><> ABSOLUTE_ENCODER_MOSI_PIN <20><EFBFBD><EAB6A8>
* MISO <20>鿴 zf_device_absolute_encoder.h <20><> ABSOLUTE_ENCODER_MISO_PIN <20><EFBFBD><EAB6A8>
* CS <20>鿴 zf_device_absolute_encoder.h <20><> ABSOLUTE_ENCODER_CS_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* ------------------------------------
********************************************************************************************************************/
#ifndef _zf_device_absolute_encoder_h_
#define _zf_device_absolute_encoder_h_
#include "zf_common_typedef.h"
//=================================================<3D><><EFBFBD><EFBFBD> <20>Ƕȴ<C7B6><C8B4><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#define ABSOLUTE_ENCODER_USE_SOFT_SPI (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
#if ABSOLUTE_ENCODER_USE_SOFT_SPI // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> SPI <20><><EFBFBD><EFBFBD>====================================================
#define ABSOLUTE_ENCODER_SOFT_SPI_DELAY (1) // <20><><EFBFBD><EFBFBD> SPI <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС SPI ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
#define ABSOLUTE_ENCODER_SCLK_PIN (P20_11) // <20><><EFBFBD><EFBFBD> SPI SCK <20><><EFBFBD><EFBFBD>
#define ABSOLUTE_ENCODER_MOSI_PIN (P20_14) // <20><><EFBFBD><EFBFBD> SPI MOSI <20><><EFBFBD><EFBFBD>
#define ABSOLUTE_ENCODER_MISO_PIN (P20_12) // <20><><EFBFBD><EFBFBD> SPI MISO <20><><EFBFBD><EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> SPI <20><><EFBFBD><EFBFBD>====================================================
#else
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
#define ABSOLUTE_ENCODER_SPI_SPEED (10*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
#define ABSOLUTE_ENCODER_SPI (SPI_0) // Ӳ<><D3B2> SPI <20><>
#define ABSOLUTE_ENCODER_SCLK_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
#define ABSOLUTE_ENCODER_MOSI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
#define ABSOLUTE_ENCODER_MISO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
#endif
#define ABSOLUTE_ENCODER_CS_PIN (P20_13) // CS<43><53><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
#define ABSOLUTE_ENCODER_CSN(x) ((x) ? (gpio_high(ABSOLUTE_ENCODER_CS_PIN)): (gpio_low(ABSOLUTE_ENCODER_CS_PIN)))
#define ABSOLUTE_ENCODER_TIMEOUT_COUNT (100) // <20>Լ쳬ʱʱ<CAB1><CAB1>
#define ABSOLUTE_ENCODER_DEFAULT_ZERO (0)
#define ABSOLUTE_ENCODER_SPI_W (0x80)
#define ABSOLUTE_ENCODER_SPI_R (0x40)
#define ABSOLUTE_ENCODER_ZERO_L_REG (0x00)
#define ABSOLUTE_ENCODER_ZERO_H_REG (0x01)
#define ABSOLUTE_ENCODER_DIR_REG (0X09)
//=================================================<3D><><EFBFBD><EFBFBD> <20>Ƕȴ<C7B6><C8B4><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//=================================================<3D><><EFBFBD><EFBFBD> <20>Ƕȴ<C7B6><C8B4><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
int16 absolute_encoder_get_location (void); // <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ǰ<EFBFBD>Ƕ<EFBFBD>ֵ
int16 absolute_encoder_get_offset (void); // <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>λ<EFBFBD>õ<EFBFBD>ƫ<EFBFBD><C6AB>ֵ
uint8 absolute_encoder_init (void); // <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
//=================================================<3D><><EFBFBD><EFBFBD> <20>Ƕȴ<C7B6><C8B4><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#endif

View File

@@ -0,0 +1,299 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_ble6a20
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2024-07-02 pudding first version
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* RX <20>鿴 zf_device_ble6a20.h <20><> BLE6A20_RX_PIN <20><EFBFBD><EAB6A8>
* TX <20>鿴 zf_device_ble6a20.h <20><> BLE6A20_TX_PIN <20><EFBFBD><EAB6A8>
* RTS <20>鿴 zf_device_ble6a20.h <20><> BLE6A20_RTS_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
*********************************************************************************************************************/
#include "zf_common_clock.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
#include "zf_driver_uart.h"
#include "zf_device_type.h"
#include "zf_device_ble6a20.h"
static fifo_struct ble6a20_fifo;
static uint8 ble6a20_buffer[BLE6A20_BUFFER_SIZE];
static uint8 ble6a20_data = 0;
#if (1 == BLE6A20_AUTO_BAUD_RATE)
static volatile ble6a20_auto_baudrate_state_enum ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT;
static volatile uint8 ble6a20_auto_baud_data[3] = {0x00, 0x01, 0x03};
#endif
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data 8bit <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD> 0-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1-δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> ble6a20_send_byte(data);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint32 ble6a20_send_byte (const uint8 data)
{
uint16 time_count = BLE6A20_TIMEOUT_COUNT;
while(time_count)
{
if(!gpio_get_level(BLE6A20_RTS_PIN))
{
uart_write_byte(BLE6A20_INDEX, data); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
time_count --;
system_delay_ms(1);
}
return (0 == time_count);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> ble6a20_send_buffer(buff, 64);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len)
{
zf_assert(NULL != buff);
uint16 time_count = 0;
while(0 != len)
{
if(!gpio_get_level(BLE6A20_RTS_PIN)) // <20><><EFBFBD><EFBFBD>RTSΪ<53>͵<EFBFBD>ƽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(30 <= len) // <20><><EFBFBD>ݷ<EFBFBD> 30byte ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
uart_write_buffer(BLE6A20_INDEX, buff, 30); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
buff += 30; // <20><>ַƫ<D6B7><C6AB>
len -= 30; // <20><><EFBFBD><EFBFBD>
time_count = 0;
}
else // <20><><EFBFBD><EFBFBD> 30byte <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
uart_write_buffer(BLE6A20_INDEX, buff, len); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
len = 0;
break;
}
}
else // <20><><EFBFBD><EFBFBD>RTSΪ<53>ߵ<EFBFBD>ƽ <20><>ģ<EFBFBD><C4A3>æ
{
if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1>
{
break; // <20>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
}
system_delay_ms(1);
}
}
return len;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> ble6a20_send_string("Believe in yourself.");
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint32 ble6a20_send_string (const char *str)
{
zf_assert(NULL != str);
uint16 time_count = 0;
uint32 len = strlen(str);
while(0 != len)
{
if(!gpio_get_level(BLE6A20_RTS_PIN)) // <20><><EFBFBD><EFBFBD>RTSΪ<53>͵<EFBFBD>ƽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(128 <= len) // <20><><EFBFBD>ݷ<EFBFBD> 128byte ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, 128); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
str += 128; // <20><>ַƫ<D6B7><C6AB>
len -= 128; // <20><><EFBFBD><EFBFBD>
time_count = 0;
}
else // <20><><EFBFBD><EFBFBD> 128byte <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
uart_write_buffer(BLE6A20_INDEX, (const uint8 *)str, len);// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
len = 0;
break;
}
}
else // <20><><EFBFBD><EFBFBD>RTSΪ<53>ߵ<EFBFBD>ƽ <20><>ģ<EFBFBD><C4A3>æ
{
if(BLE6A20_TIMEOUT_COUNT <= (++ time_count)) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1>
{
break; // <20>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
}
system_delay_ms(1);
}
}
return len;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷͼ<CDB7><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>鿴ͼ<E9BFB4><CDBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *image_addr <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> image_size ͼ<><CDBC><EFBFBD>Ĵ<EFBFBD>С
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> ble6a20_send_image(&mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void ble6a20_send_image (const uint8 *image_addr, uint32 image_size)
{
zf_assert(NULL != image_addr);
extern uint8 camera_send_image_frame_header[4];
ble6a20_send_buffer(camera_send_image_frame_header, 4);
ble6a20_send_buffer((uint8 *)image_addr, image_size);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><>ȡ<EFBFBD><C8A1><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʵ<>ʶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> ble6a20_read_buffer(buff, 32);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint32 ble6a20_read_buffer (uint8 *buff, uint32 len)
{
zf_assert(NULL != buff);
uint32 data_len = len;
fifo_read_buffer(&ble6a20_fifo, buff, &data_len, FIFO_READ_AND_CLEAN);
return data_len;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> ble6a20_callback();
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD> ISR <20>ļ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>жϳ<D0B6><CFB3>򱻵<EFBFBD><F2B1BBB5><EFBFBD>
// <20>ɴ<EFBFBD><C9B4><EFBFBD><EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> wireless_module_uart_handler() <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> wireless_module_uart_handler() <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void ble6a20_callback (void)
{
if(uart_query_byte(BLE6A20_INDEX, &ble6a20_data))
{
fifo_write_buffer(&ble6a20_fifo, &ble6a20_data, 1);
#if BLE6A20_AUTO_BAUD_RATE // <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(BLE6A20_AUTO_BAUD_RATE_START == ble6a20_auto_baud_flag && 3 == fifo_used(&ble6a20_fifo))
{
uint32 ble6a20_auto_baud_count = 3;
ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_GET_ACK;
fifo_read_buffer(&ble6a20_fifo, (uint8 *)ble6a20_auto_baud_data, (uint32 *)&ble6a20_auto_baud_count, FIFO_READ_AND_CLEAN);
}
#endif
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> ble6a20_init();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 ble6a20_init (void)
{
uint8 return_state = 0;
// <20>ȴ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
system_delay_ms(50);
set_wireless_type(BLE6A20, ble6a20_callback);
fifo_init(&ble6a20_fifo, FIFO_DATA_8BIT, ble6a20_buffer, BLE6A20_BUFFER_SIZE);
gpio_init(BLE6A20_RTS_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
#if(0 == BLE6A20_AUTO_BAUD_RATE) // <20>ر<EFBFBD><D8B1>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õIJ<C3B5><C4B2><EFBFBD><EFBFBD><EFBFBD>Ϊ115200 Ϊ<><CEAA><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>޸Ĵ<DEB8><C4B4>ڵIJ<DAB5><C4B2><EFBFBD><EFBFBD><EFBFBD>
uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uart_rx_interrupt(BLE6A20_INDEX, 1);
#elif(1 == BLE6A20_AUTO_BAUD_RATE) // <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 rts_init_status = 0;
ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_INIT;
ble6a20_auto_baud_data[0] = 0;
ble6a20_auto_baud_data[1] = 1;
ble6a20_auto_baud_data[2] = 3;
rts_init_status = gpio_get_level(BLE6A20_RTS_PIN);
gpio_init(BLE6A20_RTS_PIN, GPO, rts_init_status, GPO_PUSH_PULL); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uart_init (BLE6A20_INDEX, BLE6A20_BUAD_RATE, BLE6A20_RX_PIN, BLE6A20_TX_PIN); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uart_rx_interrupt(BLE6A20_INDEX, 1);
system_delay_ms(5); // ģ<><C4A3><EFBFBD>ϵ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ʱ<EFBFBD>ȴ<EFBFBD>
gpio_set_level(BLE6A20_RTS_PIN, !rts_init_status); // RTS<54><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
system_delay_ms(100); // RTS<54><53><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ20ms
gpio_toggle_level(BLE6A20_RTS_PIN); // RTS<54><53><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
do
{
ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_START;
uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[0]); // <20><><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>Զ<EFBFBD><D4B6>жϲ<D0B6><CFB2><EFBFBD><EFBFBD><EFBFBD>
uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[1]); // <20><><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>Զ<EFBFBD><D4B6>жϲ<D0B6><CFB2><EFBFBD><EFBFBD><EFBFBD>
uart_write_byte(BLE6A20_INDEX, ble6a20_auto_baud_data[2]); // <20><><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>Զ<EFBFBD><D4B6>жϲ<D0B6><CFB2><EFBFBD><EFBFBD><EFBFBD>
system_delay_ms(20);
if(BLE6A20_AUTO_BAUD_RATE_GET_ACK != ble6a20_auto_baud_flag) // <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
{
return_state = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ˵<><CBB5><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7><EFBFBD><EFBFBD>
break;
}
if( 0xa5 != ble6a20_auto_baud_data[0] && // <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
0xff != ble6a20_auto_baud_data[1] && // <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
0xff != ble6a20_auto_baud_data[2] ) // <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
{
return_state = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ˵<><CBB5><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7><EFBFBD><EFBFBD>
break;
}
ble6a20_auto_baud_flag = BLE6A20_AUTO_BAUD_RATE_SUCCESS;
gpio_init(BLE6A20_RTS_PIN, GPI, 0, GPI_PULL_UP); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
system_delay_ms(10); // <20><>ʱ<EFBFBD>ȴ<EFBFBD> ģ<><C4A3>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}while(0);
#endif
return return_state;
}

View File

@@ -0,0 +1,108 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_ble6a20.h
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2024-07-02 pudding first version
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* RX <20>鿴 zf_device_ble6a20.h <20><> BLE6A20_RX_PIN <20><EFBFBD><EAB6A8>
* TX <20>鿴 zf_device_ble6a20.h <20><> BLE6A20_TX_PIN <20><EFBFBD><EAB6A8>
* RTS <20>鿴 zf_device_ble6a20.h <20><> BLE6A20_RTS_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
*********************************************************************************************************************/
#ifndef _zf_device_ble6a20_h_
#define _zf_device_ble6a20_h_
#include "zf_common_typedef.h"
//=================================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#define BLE6A20_INDEX (UART_2) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD>Ӧʹ<D3A6>õĴ<C3B5><C4B4>ں<EFBFBD>
#define BLE6A20_BUAD_RATE (115200) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD>Ӧʹ<D3A6>õĴ<C3B5><C4B4>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD>֧<EFBFBD><D6A7> 9600 57600 115200 230400 460800 921600 1500000 2000000
#define BLE6A20_TX_PIN (UART2_RX_P10_6) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD>Ӧģ<D3A6><C4A3><EFBFBD><EFBFBD> TX Ҫ<>ӵ<EFBFBD><D3B5><EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD> RX
#define BLE6A20_RX_PIN (UART2_TX_P10_5) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD>Ӧģ<D3A6><C4A3><EFBFBD><EFBFBD> RX Ҫ<>ӵ<EFBFBD><D3B5><EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD> TX
#define BLE6A20_RTS_PIN (P10_2) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD>Ӧģ<D3A6><C4A3><EFBFBD><EFBFBD> RTS <20><><EFBFBD><EFBFBD>
#define BLE6A20_BUFFER_SIZE ( 64 ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
#define BLE6A20_TIMEOUT_COUNT ( 0x64 ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ<CDA8><D1B6>ʱ<EFBFBD><CAB1>Χ
// ------------------------------------ <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RTS<54><53><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1BFAA>ʧ<EFBFBD>ܡ<EFBFBD>
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32>ģ<EFBFBD><C4A3><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܵĻ<DCB5> <20><><EFBFBD>Գ<EFBFBD><D4B3>Զϵ<D4B6><CFB5><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 0<><30><EFBFBD>ر<EFBFBD><D8B1>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD> BLE6A20_BAUD ֮<><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ӧ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>
// <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD>֧<EFBFBD><D6A7> 9600 57600 115200 230400 460800 921600 1500000 2000000
#define BLE6A20_AUTO_BAUD_RATE ( 0 )
#if (1 == BLE6A20_AUTO_BAUD_RATE)
typedef enum
{
BLE6A20_AUTO_BAUD_RATE_SUCCESS,
BLE6A20_AUTO_BAUD_RATE_INIT,
BLE6A20_AUTO_BAUD_RATE_START,
BLE6A20_AUTO_BAUD_RATE_GET_ACK,
}ble6a20_auto_baudrate_state_enum;
#endif
// ------------------------------------ <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ------------------------------------
//=================================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//=================================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
uint32 ble6a20_send_byte (const uint8 data); // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint32 ble6a20_send_buffer (const uint8 *buff, uint32 len); // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
uint32 ble6a20_send_string (const char *str); // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
void ble6a20_send_image (const uint8 *image_addr, uint32 image_size); // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷͼ<CDB7><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>鿴ͼ<E9BFB4><CDBC>
uint32 ble6a20_read_buffer (uint8 *buff, uint32 len); // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ble6a20_callback (void); // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
uint8 ble6a20_init (void); // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><>ʼ<EFBFBD><CABC>
//=================================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#endif

View File

@@ -0,0 +1,235 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_bluetooth_ch9141
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-25 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD> <20><>Ƭ<EFBFBD><C6AC>
* RX <20>鿴zf_device_bluetooth_ch9141.h<>ļ<EFBFBD><C4BC>е<EFBFBD>BLUETOOTH_CH9141_TX_PIN<49><EFBFBD><EAB6A8>
* TX <20>鿴zf_device_bluetooth_ch9141.h<>ļ<EFBFBD><C4BC>е<EFBFBD>BLUETOOTH_CH9141_RX_PIN<49><EFBFBD><EAB6A8>
* RTS <20>鿴zf_device_bluetooth_ch9141.h<>ļ<EFBFBD><C4BC>е<EFBFBD>BLUETOOTH_CH9141_RTS_PIN<49><EFBFBD><EAB6A8>
* CTS <20><><EFBFBD><EFBFBD>
* CMD <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
*********************************************************************************************************************/
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
#include "zf_driver_gpio.h"
#include "zf_driver_uart.h"
#include "zf_driver_delay.h"
#include "zf_device_type.h"
#include "zf_device_camera.h"
#include "zf_device_bluetooth_ch9141.h"
static fifo_struct bluetooth_ch9141_fifo; // fifo<66><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B6A8>
static uint8 bluetooth_ch9141_buffer[BLUETOOTH_CH9141_BUFFER_SIZE]; // <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static uint8 bluetooth_ch9141_data = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data 8bit <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> bluetooth_ch9141_send_byte(0x5A);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint32 bluetooth_ch9141_send_byte (const uint8 data)
{
uint16 time_count = BLUETOOTH_CH9141_TIMEOUT_COUNT;
while(time_count)
{
if(!gpio_get_level(BLUETOOTH_CH9141_RTS_PIN))
{
uart_write_byte(BLUETOOTH_CH9141_INDEX, data); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
time_count --;
system_delay_ms(1);
}
return (0 < time_count);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> buff <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> len <20><><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> uint32 ʣ<><CAA3>δ<EFBFBD><CEB4><EFBFBD>͵<EFBFBD><CDB5>ֽ<EFBFBD><D6BD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> bluetooth_ch9141_send_buff(buff, 16);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint32 bluetooth_ch9141_send_buffer (const uint8 *buff, uint32 len)
{
zf_assert(NULL != buff);
uint16 time_count = 0;
while(0 != len)
{
if(!gpio_get_level(BLUETOOTH_CH9141_RTS_PIN)) // <20><><EFBFBD><EFBFBD>RTSΪ<53>͵<EFBFBD>ƽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(30 <= len) // <20><><EFBFBD>ݷ<EFBFBD> 30byte ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
uart_write_buffer(BLUETOOTH_CH9141_INDEX, buff, 30); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
buff += 30; // <20><>ַƫ<D6B7><C6AB>
len -= 30; // <20><><EFBFBD><EFBFBD>
time_count = 0;
}
else // <20><><EFBFBD><EFBFBD> 30byte <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
uart_write_buffer(BLUETOOTH_CH9141_INDEX, buff, len); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
len = 0;
break;
}
}
else // <20><><EFBFBD><EFBFBD>RTSΪ<53>ߵ<EFBFBD>ƽ <20><>ģ<EFBFBD><C4A3>æ
{
if(BLUETOOTH_CH9141_TIMEOUT_COUNT <= (++ time_count)) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1>
{
break; // <20>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
}
system_delay_ms(1);
}
}
return len;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> bluetooth_ch9141_send_string("Trust yourself.");
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint32 bluetooth_ch9141_send_string (const char *str)
{
zf_assert(NULL != str);
uint16 time_count = 0;
uint32 len = strlen(str);
while(0 != len)
{
if(!gpio_get_level(BLUETOOTH_CH9141_RTS_PIN)) // <20><><EFBFBD><EFBFBD>RTSΪ<53>͵<EFBFBD>ƽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(30 <= len) // <20><><EFBFBD>ݷ<EFBFBD> 30byte ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
uart_write_buffer(BLUETOOTH_CH9141_INDEX, (const uint8 *)str, 30); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
str += 30; // <20><>ַƫ<D6B7><C6AB>
len -= 30; // <20><><EFBFBD><EFBFBD>
time_count = 0;
}
else // <20><><EFBFBD><EFBFBD> 30byte <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
uart_write_buffer(BLUETOOTH_CH9141_INDEX, (const uint8 *)str, len); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
len = 0;
break;
}
}
else // <20><><EFBFBD><EFBFBD>RTSΪ<53>ߵ<EFBFBD>ƽ <20><>ģ<EFBFBD><C4A3>æ
{
if(BLUETOOTH_CH9141_TIMEOUT_COUNT <= (++ time_count)) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1>
{
break; // <20>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
}
system_delay_ms(1);
}
}
return len;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷͼ<CDB7><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>鿴ͼ<E9BFB4><CDBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *image_addr <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> image_size ͼ<><CDBC><EFBFBD>Ĵ<EFBFBD>С
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> bluetooth_ch9141_send_image(&mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void bluetooth_ch9141_send_image (const uint8 *image_addr, uint32 image_size)
{
zf_assert(NULL != image_addr);
bluetooth_ch9141_send_buffer(camera_send_image_frame_header, 4);
bluetooth_ch9141_send_buffer((uint8 *)image_addr, image_size);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> buff <20><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʵ<>ʶ<EFBFBD>ȡ<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> bluetooth_ch9141_read_buffer(buff, 16);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint32 bluetooth_ch9141_read_buffer (uint8 *buff, uint32 len)
{
zf_assert(NULL != buff);
uint32 data_len = len;
fifo_read_buffer(&bluetooth_ch9141_fifo, buff, &data_len, FIFO_READ_AND_CLEAN);
return data_len;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD> ISR <20>ļ<EFBFBD><C4BC>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>жϳ<D0B6><CFB3>򱻵<EFBFBD><F2B1BBB5><EFBFBD>
// <20>ɴ<EFBFBD><C9B4><EFBFBD><EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> wireless_module_uart_handler() <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> wireless_module_uart_handler() <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void bluetooth_ch9141_uart_callback (void)
{
uart_query_byte(BLUETOOTH_CH9141_INDEX, &bluetooth_ch9141_data); // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
fifo_write_buffer(&bluetooth_ch9141_fifo, &bluetooth_ch9141_data, 1); // <20><><EFBFBD><EFBFBD> FIFO
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><>ʼ<EFBFBD><CABC>״̬ 0-<2D>ɹ<EFBFBD> 1-ʧ<><CAA7>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> bluetooth_ch9141_init();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 bluetooth_ch9141_init (void)
{
uint8 return_state = 0;
set_wireless_type(BLUETOOTH_CH9141, bluetooth_ch9141_uart_callback);
fifo_init(&bluetooth_ch9141_fifo, FIFO_DATA_8BIT, bluetooth_ch9141_buffer, BLUETOOTH_CH9141_BUFFER_SIZE);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õIJ<C3B5><C4B2><EFBFBD><EFBFBD><EFBFBD>Ϊ115200 Ϊ<><CEAA><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>޸<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
gpio_init(BLUETOOTH_CH9141_RTS_PIN, GPI, 1, GPI_PULL_UP); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uart_init(BLUETOOTH_CH9141_INDEX, BLUETOOTH_CH9141_BUAD_RATE, BLUETOOTH_CH9141_RX_PIN, BLUETOOTH_CH9141_TX_PIN);
uart_rx_interrupt(BLUETOOTH_CH9141_INDEX, 1);
return return_state;
}

View File

@@ -0,0 +1,75 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> main
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-25 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD> <20><>Ƭ<EFBFBD><C6AC>
* RX <20>鿴zf_device_bluetooth_ch9141.h<>ļ<EFBFBD><C4BC>е<EFBFBD>BLUETOOTH_CH9141_TX_PIN<49><EFBFBD><EAB6A8>
* TX <20>鿴zf_device_bluetooth_ch9141.h<>ļ<EFBFBD><C4BC>е<EFBFBD>BLUETOOTH_CH9141_RX_PIN<49><EFBFBD><EAB6A8>
* RTS <20>鿴zf_device_bluetooth_ch9141.h<>ļ<EFBFBD><C4BC>е<EFBFBD>BLUETOOTH_CH9141_RTS_PIN<49><EFBFBD><EAB6A8>
* CTS <20><><EFBFBD><EFBFBD>
* CMD <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
*********************************************************************************************************************/
#ifndef _zf_device_bluetooth_ch9141_h_
#define _zf_device_bluetooth_ch9141_h_
#include "zf_common_typedef.h"
//=================================================<3D><><EFBFBD><EFBFBD> 9141<34><31><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#define BLUETOOTH_CH9141_INDEX (UART_2) // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ӧʹ<D3A6>õĴ<C3B5><C4B4>ں<EFBFBD>
#define BLUETOOTH_CH9141_BUAD_RATE (115200) // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ӧʹ<D3A6>õĴ<C3B5><C4B4>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
#define BLUETOOTH_CH9141_TX_PIN (UART2_RX_P10_6) // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ӧģ<D3A6><C4A3><EFBFBD><EFBFBD> TX Ҫ<>ӵ<EFBFBD><D3B5><EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD> RX
#define BLUETOOTH_CH9141_RX_PIN (UART2_TX_P10_5) // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ӧģ<D3A6><C4A3><EFBFBD><EFBFBD> RX Ҫ<>ӵ<EFBFBD><D3B5><EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD> TX
#define BLUETOOTH_CH9141_RTS_PIN (P10_2) // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ӧģ<D3A6><C4A3><EFBFBD><EFBFBD> RTS <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>λ)
#define BLUETOOTH_CH9141_BUFFER_SIZE (64) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĻ<DDB5><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
#define BLUETOOTH_CH9141_TIMEOUT_COUNT (500) // ִ<>в<EFBFBD><D0B2><EFBFBD><EFBFBD>ij<EFBFBD>ʱʱ<CAB1><CAB1>
//=================================================<3D><><EFBFBD><EFBFBD> 9141<34><31><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//=================================================<3D><><EFBFBD><EFBFBD> 9141<34><31><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
uint32 bluetooth_ch9141_send_byte (const uint8 data); // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint32 bluetooth_ch9141_send_buffer (const uint8 *buff, uint32 len); // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint32 bluetooth_ch9141_send_string (const char *str); // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
void bluetooth_ch9141_send_image (const uint8 *image_addr, uint32 image_size); // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷͼ<CDB7><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>鿴ͼ<E9BFB4><CDBC>
uint32 bluetooth_ch9141_read_buffer (uint8 *buff, uint32 len); // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
void bluetooth_ch9141_uart_callback (void); // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
uint8 bluetooth_ch9141_init (void); // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><>ʼ<EFBFBD><CABC>
//=================================================<3D><><EFBFBD><EFBFBD> 9141<34><31><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#endif

View File

@@ -0,0 +1,171 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_camera
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-25 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "zf_common_interrupt.h"
#include "zf_driver_gpio.h"
#include "zf_driver_dma.h"
#include "zf_driver_exti.h"
#include "zf_device_mt9v03x.h"
#include "zf_device_ov7725.h"
#include "zf_device_scc8660.h"
#include "zf_device_camera.h"
fifo_struct camera_receiver_fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>fifo<66><EFBFBD><E1B9B9>
uint8 camera_receiver_buffer[CAMERA_RECEIVER_BUFFER_SIZE]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
uint8 camera_send_image_frame_header[4] = {0x00, 0xFF, 0x01, 0x01}; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ݷ<EFBFBD><DDB7>͵<EFBFBD><CDB5><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>֡ͷ
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD>ѹΪʮ<CEAA><CAAE><EFBFBD><EFBFBD><EFBFBD>ư<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *data1 <20><><EFBFBD><EFBFBD>ͷͼ<CDB7><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *data2 <20><><EFBFBD>Ž<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>ݵĵ<DDB5>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> image_size ͼ<><CDBC><EFBFBD>Ĵ<EFBFBD>С
// @return void
// Sample usage: camera_binary_image_decompression(&ov7725_image_binary[0][0], &data_buffer[0][0], OV7725_SIZE);
//-------------------------------------------------------------------------------------------------------------------
void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint32 image_size)
{
zf_assert(NULL != data1);
zf_assert(NULL != data2);
uint8 i = 8;
while(image_size --)
{
i = 8;
while(i --)
{
*data2 ++ = (((*data1 >> i) & 0x01) ? 255 : 0);
}
data1 ++;
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ͷͼ<CDB7><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>鿴ͼ<E9BFB4><CDBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> uartn ʹ<>õĴ<C3B5><C4B4>ں<EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *image_addr <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> image_size ͼ<><CDBC><EFBFBD>Ĵ<EFBFBD>С
// @return void
// Sample usage: camera_send_image(DEBUG_UART_INDEX, &mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE);
//-------------------------------------------------------------------------------------------------------------------
void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size)
{
zf_assert(NULL != image_addr);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uart_write_buffer(uartn, camera_send_image_frame_header, 4);
// <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
uart_write_buffer(uartn, (uint8 *)image_addr, image_size);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD> FIFO <20><>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> camera_fifo_init();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void camera_fifo_init (void)
{
fifo_init(&camera_receiver_fifo, FIFO_DATA_8BIT, camera_receiver_buffer, CAMERA_RECEIVER_BUFFER_SIZE);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> image_size ͼ<><CDBC><EFBFBD>Ĵ<EFBFBD>С
// @return void
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> image_size ͼ<><CDBC><EFBFBD>Ĵ<EFBFBD>С
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data_addr <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> buffer_addr ͼ<>񻺳<EFBFBD><F1BBBAB3><EFBFBD><EFBFBD><EFBFBD>ַ
// @return void
// Sample usage: camera_init();
//-------------------------------------------------------------------------------------------------------------------
uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size)
{
uint8 num;
uint8 link_list_num;
switch(camera_type)
{
case CAMERA_BIN_IIC: // IIC С<><D0A1><EFBFBD><EFBFBD>
case CAMERA_BIN_UART: // UART С<><D0A1><EFBFBD><EFBFBD>
for(num = 0; num < 8; num ++)
{
gpio_init((gpio_pin_enum)(OV7725_DATA_PIN + num), GPI, GPIO_LOW, GPI_FLOATING_IN);
}
link_list_num = dma_init(OV7725_DMA_CH,
source_addr,
destination_addr,
OV7725_PCLK_PIN,
EXTI_TRIGGER_FALLING,
image_size);
exti_init(OV7725_VSYNC_PIN, EXTI_TRIGGER_FALLING); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>½<EFBFBD><C2BD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD>ж<EFBFBD>
break;
case CAMERA_GRAYSCALE: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for(num = 0; num < 8; num ++)
{
gpio_init((gpio_pin_enum)(MT9V03X_DATA_PIN + num), GPI, GPIO_LOW, GPI_FLOATING_IN);
}
link_list_num = dma_init(MT9V03X_DMA_CH,
source_addr,
destination_addr,
MT9V03X_PCLK_PIN,
EXTI_TRIGGER_RISING,
image_size); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>300M <20><><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪFALLING
exti_init(MT9V03X_VSYNC_PIN, EXTI_TRIGGER_FALLING); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>½<EFBFBD><C2BD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD>ж<EFBFBD>
break;
case CAMERA_COLOR: // <20><>ͫ
for(num=0; num<8; num++)
{
gpio_init((gpio_pin_enum)(SCC8660_DATA_PIN + num), GPI, GPIO_LOW, GPI_FLOATING_IN);
}
link_list_num = dma_init(SCC8660_DMA_CH,
source_addr,
destination_addr,
SCC8660_PCLK_PIN,
EXTI_TRIGGER_RISING,
image_size); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>300M <20><><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪFALLING
exti_init(SCC8660_VSYNC_PIN, EXTI_TRIGGER_FALLING); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>½<EFBFBD><C2BD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD>ж<EFBFBD>
break;
default:
break;
}
return link_list_num;
}

View File

@@ -0,0 +1,58 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_camera
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-25 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
#ifndef _zf_device_camera_h_
#define _zf_device_camera_h_
#include "zf_common_fifo.h"
#include "zf_common_typedef.h"
#include "zf_driver_uart.h"
#include "zf_device_type.h"
//=================================================<3D><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#define CAMERA_RECEIVER_BUFFER_SIZE (8) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
extern fifo_struct camera_receiver_fifo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>fifo<66><EFBFBD><E1B9B9>
extern uint8 camera_send_image_frame_header[4]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ݷ<EFBFBD><DDB7>͵<EFBFBD><CDB5><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>֡ͷ
//=================================================<3D><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//=================================================<3D><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint32 image_size); // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD>ѹΪʮ<CEAA><CAAE><EFBFBD><EFBFBD><EFBFBD>ư<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size); // <20><><EFBFBD><EFBFBD>ͷͼ<CDB7><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>鿴ͼ<E9BFB4><CDBC>
void camera_fifo_init (void); // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD> FIFO <20><>ʼ<EFBFBD><CABC>
uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>ʼ<EFBFBD><CABC>
//=================================================<3D><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#endif

Binary file not shown.

View File

@@ -0,0 +1,53 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_config
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2024-02-02 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͫ<EFBFBD><CDAB>̬<EFBFBD><EFBFBD><E2BAAF>
********************************************************************************************************************/
#ifndef _zf_device_config_h_
#define _zf_device_config_h_
extern const unsigned char imu660ra_config_file[8192];
extern const unsigned char dl1b_config_file[135];
unsigned char mt9v03x_set_config_sccb (void *soft_iic_obj, short int buff[10][2]);
unsigned char mt9v03x_set_exposure_time_sccb (unsigned short int light);
unsigned char mt9v03x_set_reg_sccb (unsigned char addr, unsigned short int data);
unsigned char scc8660_set_config_sccb (void *soft_iic_obj, short int buff[10][2]);
unsigned char scc8660_set_brightness_sccb (unsigned short int brightness);
unsigned char scc8660_set_manual_wb_sccb (unsigned short int manual_wb);
unsigned char scc8660_set_reg_sccb (unsigned char reg, unsigned short int data);
#endif

View File

@@ -0,0 +1,771 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_dl1a
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* SCL <20>鿴 zf_device_dl1a.h <20><> DL1A_SCL_PIN <20><EFBFBD><EAB6A8>
* SDA <20>鿴 zf_device_dl1a.h <20><> DL1A_SDA_PIN <20><EFBFBD><EAB6A8>
* VCC 5V <20><>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* ------------------------------------
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "zf_driver_delay.h"
#include "zf_driver_exti.h"
#include "zf_driver_soft_iic.h"
#include "zf_device_dl1a.h"
uint8 dl1a_finsh_flag = 0; // <20><><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
uint16 dl1a_distance_mm = 8192; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4>ű<EFBFBD><C5B1><EFBFBD>
#if DL1A_USE_SOFT_IIC
static soft_iic_info_struct dl1a_iic_struct; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IIC<49><EFBFBD><E1B9B9>
#define dl1a_write_array(data, len) (soft_iic_write_8bit_array(&dl1a_iic_struct, (data), (len)))
#define dl1a_write_register(reg, data) (soft_iic_write_8bit_register(&dl1a_iic_struct, (reg), (data)))
#define dl1a_read_register(reg) (soft_iic_read_8bit_register(&dl1a_iic_struct, (reg)))
#define dl1a_read_registers(reg, data, len) (soft_iic_read_8bit_registers(&dl1a_iic_struct, (reg), (data), (len)))
#else
#error "<22>ݲ<EFBFBD>֧<EFBFBD><D6A7>Ӳ<EFBFBD><D3B2>IICͨѶ"
#endif
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ʾ<EFBFBD><CABE>Ŀ<EFBFBD><EFBFBD><EFBFBD><E4B2A2><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><E2B5BD><EFBFBD>źŵ<C5BA><C5B5><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ֵ
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ϵ͵<CFB5><CDB5><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>Χ
// <20><><EFBFBD>ƺ<EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>Ҫ<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><E4B5BC>> <20>õ<EFBFBD><C3B5><EFBFBD>׼ȷ<D7BC><C8B7><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD>
// Ĭ<><C4AC>Ϊ 0.25 MCPS <20><>Ԥ<EFBFBD>ΧΪ 0 - 511.99
#define DL1A_DEFAULT_RATE_LIMIT (0.25)
// <20>ӼĴ<D3BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD> PCLKs <20><> VCSEL (vertical cavity surface emitting laser) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define decode_vcsel_period(reg_val) (((reg_val) + 1) << 1)
// <20><> PCLK <20>е<EFBFBD> VCSEL <20><><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> *<2A><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ)
// PLL_period_ps = 1655
// macro_period_vclks = 2304
#define calc_macro_period(vcsel_period_pclks) ((((uint32)2304 * (vcsel_period_pclks) * 1655) + 500) / 1000)
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD>豸 SPAD <20><>Ϣ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> index <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> type <20><><EFBFBD><EFBFBD>ֵ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD> 0-<2D>ɹ<EFBFBD> 1-ʧ<><CAA7>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dl1a_get_spad_info(index, type_is_aperture);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
static uint8 dl1a_get_spad_info (uint8 *index, uint8 *type_is_aperture)
{
uint8 tmp = 0;
uint8 return_state = 0;
volatile uint16 loop_count = 0;
do
{
dl1a_write_register(0x80, 0x01);
dl1a_write_register(0xFF, 0x01);
dl1a_write_register(0x00, 0x00);
dl1a_write_register(0xFF, 0x06);
dl1a_read_registers(0x83, &tmp, 1);
dl1a_write_register(0x83, tmp | 0x04);
dl1a_write_register(0xFF, 0x07);
dl1a_write_register(0x81, 0x01);
dl1a_write_register(0x80, 0x01);
dl1a_write_register(0x94, 0x6b);
dl1a_write_register(0x83, 0x00);
tmp = 0x00;
while(0x00 == tmp || 0xFF == tmp)
{
system_delay_ms(1);
dl1a_read_registers(0x83, &tmp, 1);
if(DL1A_TIMEOUT_COUNT < loop_count ++)
{
return_state = 1;
break;
}
}
if(return_state)
{
break;
}
dl1a_write_register(0x83, 0x01);
dl1a_read_registers(0x92, &tmp, 1);
*index = tmp & 0x7f;
*type_is_aperture = (tmp >> 7) & 0x01;
dl1a_write_register(0x81, 0x00);
dl1a_write_register(0xFF, 0x06);
dl1a_read_registers(0x83, &tmp, 1);
dl1a_write_register(0x83, tmp);
dl1a_write_register(0xFF, 0x01);
dl1a_write_register(0x00, 0x01);
dl1a_write_register(0xFF, 0x00);
dl1a_write_register(0x80, 0x00);
}while(0);
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ֵ<EFBFBD><D6B5> MCLKs ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6> ms
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> timeout_period_mclks <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> MCLKs
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> vcsel_period_pclks PCLK ֵ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 <20><><EFBFBD>س<EFBFBD>ʱ<EFBFBD><CAB1>ֵ
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dl1a_timeout_mclks_to_microseconds(timeout_period_mclks, vcsel_period_pclks);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2>賬ʱ<E8B3AC>Ӿ<EFBFBD><D3BE>и<EFBFBD><D0B8><EFBFBD> VCSEL <20><><EFBFBD>ڵ<EFBFBD> MCLK (<28><> PCLK Ϊ<><CEAA>λ)ת<><D7AA>Ϊ΢<CEAA><CEA2>
//-------------------------------------------------------------------------------------------------------------------
static uint32 dl1a_timeout_mclks_to_microseconds (uint16 timeout_period_mclks, uint8 vcsel_period_pclks)
{
uint32 macro_period_ns = calc_macro_period(vcsel_period_pclks);
return ((timeout_period_mclks * macro_period_ns) + (macro_period_ns / 2)) / 1000;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ֵ<EFBFBD><D6B5> ms ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6> MCLKs
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> timeout_period_us <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> ΢<>뵥λ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> vcsel_period_pclks PCLK ֵ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 <20><><EFBFBD>س<EFBFBD>ʱ<EFBFBD><CAB1>ֵ
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dl1a_timeout_microseconds_to_mclks(timeout_period_us, vcsel_period_pclks);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2>賬ʱ<E8B3AC><CAB1>΢<EFBFBD><CEA2>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD>и<EFBFBD><D0B8><EFBFBD> VCSEL <20><><EFBFBD>ڵ<EFBFBD> MCLK (<28><> PCLK Ϊ<><CEAA>λ)
//-------------------------------------------------------------------------------------------------------------------
static uint32 dl1a_timeout_microseconds_to_mclks (uint32 timeout_period_us, uint8 vcsel_period_pclks)
{
uint32 macro_period_ns = calc_macro_period(vcsel_period_pclks);
return (((timeout_period_us * 1000) + (macro_period_ns / 2)) / macro_period_ns);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Գ<EFBFBD>ʱ<EFBFBD><CAB1>ֵ<EFBFBD><D6B5><EFBFBD>н<EFBFBD><D0BD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg_val <20><>ʱʱ<CAB1><CAB1> <20>Ĵ<EFBFBD><C4B4><EFBFBD>ֵ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint16 <20><><EFBFBD>س<EFBFBD>ʱ<EFBFBD><CAB1>ֵ
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dl1a_decode_timeout(reg_val);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ӼĴ<D3BC><C4B4><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> MCLK <20>е<EFBFBD><D0B5><EFBFBD><EFBFBD>в<EFBFBD><D0B2>賬ʱ
//-------------------------------------------------------------------------------------------------------------------
static uint16 dl1a_decode_timeout (uint16 reg_val)
{
// <20><>ʽ: (LSByte * 2 ^ MSByte) + 1
return (uint16)((reg_val & 0x00FF) <<
(uint16)((reg_val & 0xFF00) >> 8)) + 1;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Գ<EFBFBD>ʱ<EFBFBD><CAB1>ֵ<EFBFBD><D6B5><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> timeout_mclks <20><>ʱʱ<CAB1><CAB1> -MCLKs ֵ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint16 <20><><EFBFBD>ر<EFBFBD><D8B1><EFBFBD>ֵ
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dl1a_encode_timeout(timeout_mclks);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><> MCLK <20>жԳ<D0B6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2>賬ʱ<E8B3AC>Ĵ<EFBFBD><C4B4><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint16 dl1a_encode_timeout (uint16 timeout_mclks)
{
uint32 ls_byte = 0;
uint16 ms_byte = 0;
uint16 return_data = 0;
if(0 < timeout_mclks)
{
// <20><>ʽ: (LSByte * 2 ^ MSByte) + 1
ls_byte = timeout_mclks - 1;
while(0 < (ls_byte & 0xFFFFFF00))
{
ls_byte >>= 1;
ms_byte++;
}
return_data = (ms_byte << 8) | ((uint16)ls_byte & 0xFF);
}
return return_data;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD><C8A1><EFBFBD>в<EFBFBD><D0B2><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> enables <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD><EFBFBD><E1B9B9>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dl1a_get_sequence_step_enables(enables);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
static void dl1a_get_sequence_step_enables(dl1a_sequence_enables_step_struct *enables)
{
uint8 sequence_config = 0;
dl1a_read_registers(DL1A_SYSTEM_SEQUENCE_CONFIG, &sequence_config, 1);
enables->tcc = (sequence_config >> 4) & 0x1;
enables->dss = (sequence_config >> 3) & 0x1;
enables->msrc = (sequence_config >> 2) & 0x1;
enables->pre_range = (sequence_config >> 6) & 0x1;
enables->final_range = (sequence_config >> 7) & 0x1;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> type Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>ֵ
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dl1a_get_vcsel_pulse_period(DL1A_VCSEL_PERIOD_PER_RANGE);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><> PCLKs <20>л<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD> VCSEL <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 dl1a_get_vcsel_pulse_period (dl1a_vcsel_period_type_enum type)
{
uint8 data_buffer = 0;
if(DL1A_VCSEL_PERIOD_PER_RANGE == type)
{
dl1a_read_registers(DL1A_PRE_RANGE_CONFIG_VCSEL_PERIOD, &data_buffer, 1);
data_buffer = decode_vcsel_period(data_buffer);
}
else if(DL1A_VCSEL_PERIOD_FINAL_RANGE == type)
{
dl1a_read_registers(DL1A_FINAL_RANGE_CONFIG_VCSEL_PERIOD, &data_buffer, 1);
data_buffer = decode_vcsel_period(data_buffer);
}
else
{
data_buffer = 255;
}
return data_buffer;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD><C8A1><EFBFBD>в<EFBFBD><D0B2>賬ʱ<E8B3AC><CAB1><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> enables <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD><EFBFBD><E1B9B9>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> timeouts <20><><EFBFBD>г<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dl1a_get_sequence_step_timeouts(enables, timeouts);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>ȡ<EFBFBD><C8A1><EFBFBD>г<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>ʱ <20><><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>м<EFBFBD>ֵ
//-------------------------------------------------------------------------------------------------------------------
static void dl1a_get_sequence_step_timeouts (dl1a_sequence_enables_step_struct const *enables, dl1a_sequence_timeout_step_struct *timeouts)
{
uint8 reg_buffer[2];
uint16 reg16_buffer = 0;
timeouts->pre_range_vcsel_period_pclks = dl1a_get_vcsel_pulse_period(DL1A_VCSEL_PERIOD_PER_RANGE);
dl1a_read_registers(DL1A_MSRC_CONFIG_TIMEOUT_MACROP, reg_buffer, 1);
timeouts->msrc_dss_tcc_mclks = reg_buffer[0] + 1;
timeouts->msrc_dss_tcc_us = dl1a_timeout_mclks_to_microseconds(timeouts->msrc_dss_tcc_mclks, (uint8)timeouts->pre_range_vcsel_period_pclks);
dl1a_read_registers(DL1A_PRE_RANGE_CONFIG_TIMEOUT_MACROP_HI, reg_buffer, 2);
reg16_buffer = ((uint16) reg_buffer[0] << 8) | reg_buffer[1];
timeouts->pre_range_mclks = dl1a_decode_timeout(reg16_buffer);
timeouts->pre_range_us = dl1a_timeout_mclks_to_microseconds(timeouts->pre_range_mclks, (uint8)timeouts->pre_range_vcsel_period_pclks);
timeouts->final_range_vcsel_period_pclks = dl1a_get_vcsel_pulse_period(DL1A_VCSEL_PERIOD_FINAL_RANGE);
dl1a_read_registers(DL1A_FINAL_RANGE_CONFIG_TIMEOUT_MACROP_HI, reg_buffer, 2);
reg16_buffer = ((uint16) reg_buffer[0] << 8) | reg_buffer[1];
timeouts->final_range_mclks = dl1a_decode_timeout(reg16_buffer);
if(enables->pre_range)
{
timeouts->final_range_mclks -= timeouts->pre_range_mclks;
}
timeouts->final_range_us = dl1a_timeout_mclks_to_microseconds(timeouts->final_range_mclks, (uint8)timeouts->final_range_vcsel_period_pclks);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ִ<>е<EFBFBD><D0B5>βο<CEB2>У׼
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> vhv_init_byte Ԥ<><D4A4>У׼ֵ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD> 0-<2D>ɹ<EFBFBD> 1-ʧ<><CAA7>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dl1a_get_vcsel_pulse_period(DL1A_VCSEL_PERIOD_PER_RANGE);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><> PCLKs <20>л<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD> VCSEL <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 dl1a_perform_single_ref_calibration (uint8 vhv_init_byte)
{
uint8 return_state = 0;
uint8 data_buffer = 0;
volatile uint16 loop_count = 0;
do
{
dl1a_write_register(DL1A_SYSRANGE_START, 0x01 | vhv_init_byte);
dl1a_read_registers(DL1A_MSRC_CONFIG_TIMEOUT_MACROP, &data_buffer, 1);
while(0 == (data_buffer & 0x07))
{
system_delay_ms(1);
dl1a_read_registers(DL1A_MSRC_CONFIG_TIMEOUT_MACROP, &data_buffer, 1);
if(DL1A_TIMEOUT_COUNT < loop_count ++)
{
return_state = 1;
break;
}
}
if(return_state)
{
break;
}
dl1a_write_register(DL1A_SYSTEM_INTERRUPT_CLEAR, 0x01);
dl1a_write_register(DL1A_SYSRANGE_START, 0x00);
}while(0);
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>ʱԤ<CAB1><D4A4> (<28><>΢<EFBFBD><CEA2>Ϊ<EFBFBD><CEAA>λ)
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> budget_us <20><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-<2D>ɹ<EFBFBD> 1-ʧ<><CAA7>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dl1a_set_measurement_timing_budget(measurement_timing_budget_us);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD>һ<EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5>Ӳ<EFBFBD><D3B2><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ԥ<EFBFBD><D4A4>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>N<EFBFBD><4E><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>һ<EFBFBD><D2BB>sqrt(N)<29><><EFBFBD>ķ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼ƫ<D7BC><C6AB>
// Ĭ<><C4AC>Ϊ33<33><33><EFBFBD><EFBFBD> <20><>СֵΪ20 ms
//-------------------------------------------------------------------------------------------------------------------
static uint8 dl1a_set_measurement_timing_budget (uint32 budget_us)
{
uint8 return_state = 0;
uint8 data_buffer[3];
uint16 data = 0;
dl1a_sequence_enables_step_struct enables;
dl1a_sequence_timeout_step_struct timeouts;
do
{
if(DL1A_MIN_TIMING_BUDGET > budget_us)
{
return_state = 1;
break;
}
uint32 used_budget_us = DL1A_SET_START_OVERHEAD + DL1A_END_OVERHEAD;
dl1a_get_sequence_step_enables(&enables);
dl1a_get_sequence_step_timeouts(&enables, &timeouts);
if (enables.tcc)
{
used_budget_us += (timeouts.msrc_dss_tcc_us + DL1A_TCC_OVERHEAD);
}
if (enables.dss)
{
used_budget_us += 2 * (timeouts.msrc_dss_tcc_us + DL1A_DSS_OVERHEAD);
}
else if (enables.msrc)
{
used_budget_us += (timeouts.msrc_dss_tcc_us + DL1A_MSRC_OVERHEAD);
}
if (enables.pre_range)
{
used_budget_us += (timeouts.pre_range_us + DL1A_PRERANGE_OVERHEAD);
}
if (enables.final_range)
{
// <20><>ע<EFBFBD><D7A2> <20><><EFBFBD>շ<EFBFBD>Χ<EFBFBD><CEA7>ʱ<EFBFBD>ɼ<EFBFBD>ʱԤ<CAB1><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ܺ;<DCBA><CDBE><EFBFBD>
// <20><><EFBFBD><EFBFBD>û<EFBFBD>пռ<D0BF><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>շ<EFBFBD>Χ<EFBFBD><CEA7>ʱ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
// <20><><EFBFBD><EFBFBD> ʣ<><CAA3>ʱ<EFBFBD>佫Ӧ<E4BDAB><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>շ<EFBFBD>Χ
used_budget_us += DL1A_FINALlRANGE_OVERHEAD;
if (used_budget_us > budget_us)
{
// <20><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>ʱ̫<CAB1><CCAB>
return_state = 1;
break;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><CAB1>Χ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD>̷<EFBFBD>Χ<EFBFBD><CEA7>ʱ
// Ϊ<><CEAA> <20><><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><CAB1>Ԥ<EFBFBD><D4A4><EFBFBD>̳<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD> MClks <20><>ʾ
// <20><>Ϊ<EFBFBD><CEAA><EFBFBD>Ǿ<EFBFBD><C7BE>в<EFBFBD>ͬ<EFBFBD><CDAC> VCSEL <20><><EFBFBD><EFBFBD>
uint32 final_range_timeout_us = budget_us - used_budget_us;
uint16 final_range_timeout_mclks =
(uint16)dl1a_timeout_microseconds_to_mclks(final_range_timeout_us,
(uint8)timeouts.final_range_vcsel_period_pclks);
if (enables.pre_range)
{
final_range_timeout_mclks += timeouts.pre_range_mclks;
}
data = dl1a_encode_timeout(final_range_timeout_mclks);
data_buffer[0] = DL1A_FINAL_RANGE_CONFIG_TIMEOUT_MACROP_HI;
data_buffer[1] = ((data >> 8) & 0xFF);
data_buffer[2] = (data & 0xFF);
dl1a_write_array(data_buffer, 3);
}
}while(0);
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱԤ<CAB1><D4A4> (<28><>΢<EFBFBD><CEA2>Ϊ<EFBFBD><CEAA>λ)
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 <20><><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dl1a_get_measurement_timing_budget();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
static uint32 dl1a_get_measurement_timing_budget (void)
{
dl1a_sequence_enables_step_struct enables;
dl1a_sequence_timeout_step_struct timeouts;
// <20><>ʼ<EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʼ<EFBFBD>մ<EFBFBD><D5B4><EFBFBD>
uint32 budget_us = DL1A_GET_START_OVERHEAD + DL1A_END_OVERHEAD;
dl1a_get_sequence_step_enables(&enables);
dl1a_get_sequence_step_timeouts(&enables, &timeouts);
if (enables.tcc)
{
budget_us += (timeouts.msrc_dss_tcc_us + DL1A_TCC_OVERHEAD);
}
if (enables.dss)
{
budget_us += 2 * (timeouts.msrc_dss_tcc_us + DL1A_DSS_OVERHEAD);
}
else if (enables.msrc)
{
budget_us += (timeouts.msrc_dss_tcc_us + DL1A_MSRC_OVERHEAD);
}
if (enables.pre_range)
{
budget_us += (timeouts.pre_range_us + DL1A_PRERANGE_OVERHEAD);
}
if (enables.final_range)
{
budget_us += (timeouts.final_range_us + DL1A_FINALlRANGE_OVERHEAD);
}
return budget_us;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ֵ<EFBFBD><D6B5>λΪ MCPS (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>)
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> limit_mcps <20><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dl1a_set_signal_rate_limit(0.25);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ʾ<EFBFBD><CABE>Ŀ<EFBFBD><EFBFBD><EFBFBD><E4B2A2><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><E2B5BD><EFBFBD>źŵ<C5BA><C5B5><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ֵ
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ϵ͵<CFB5><CDB5><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>Χ
// <20><><EFBFBD>ƺ<EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>Ҫ<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><E4B5BC>> <20>õ<EFBFBD><C3B5><EFBFBD>׼ȷ<D7BC><C8B7><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD>
// Ĭ<><C4AC>Ϊ 0.25 MCPS <20><>Ԥ<EFBFBD>ΧΪ 0 - 511.99
//-------------------------------------------------------------------------------------------------------------------
static void dl1a_set_signal_rate_limit (float limit_mcps)
{
zf_assert(limit_mcps >= 0 || limit_mcps <= 511.99);
uint8 data_buffer[3];
uint16 limit_mcps_16bit = (limit_mcps * (1 << 7));
data_buffer[0] = DL1A_FINAL_RANGE_CONFIG_MIN_COUNT_RATE_RTN_LIMIT;
data_buffer[1] = ((limit_mcps_16bit >> 8) & 0xFF);
data_buffer[2] = (limit_mcps_16bit & 0xFF);
dl1a_write_array(data_buffer, 3);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD>ķ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dl1a_get_distance();
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڿ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̲<EFBFBD><CCB2><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>ô˺<C3B4><CBBA><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void dl1a_get_distance (void)
{
uint8 reg_databuffer[3];
dl1a_read_registers(DL1A_RESULT_INTERRUPT_STATUS, reg_databuffer, 1);
if((reg_databuffer[0] & 0x07) != 0)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪĬ<CEAA><C4AC>ֵ 1000 <20><>δ<EFBFBD><CEB4><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>Χ
dl1a_read_registers(DL1A_RESULT_RANGE_STATUS + 10, reg_databuffer, 2);
dl1a_distance_mm = ((uint16_t)reg_databuffer[0] << 8);
dl1a_distance_mm |= reg_databuffer[1];
dl1a_write_register(DL1A_SYSTEM_INTERRUPT_CLEAR, 0x01);
dl1a_finsh_flag = 1;
}
if(reg_databuffer[0] & 0x10)
{
dl1a_read_registers(DL1A_RESULT_RANGE_STATUS + 10, reg_databuffer, 2);
dl1a_write_register(DL1A_SYSTEM_INTERRUPT_CLEAR, 0x01);
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DL1A INT <20>ж<EFBFBD><D0B6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dl1a_int_handler();
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA> DL1A_INT_PIN <20><>Ӧ<EFBFBD><D3A6><EFBFBD>ⲿ<EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void dl1a_int_handler (void)
{
#if DL1A_INT_ENABLE
dl1a_get_distance();
#endif
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD><CABC> DL1A
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dl1a_init();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 dl1a_init (void)
{
uint32 measurement_timing_budget_us;
uint8 stop_variable = 0;
uint8 return_state = 0;
uint8 reg_data_buffer = 0;
uint8 ref_spad_map[6];
uint8 data_buffer[7];
uint8 i = 0;
memset(ref_spad_map, 0, 6);
memset(data_buffer, 0, 7);
#if DL1A_USE_SOFT_IIC
soft_iic_init(&dl1a_iic_struct, DL1A_DEV_ADDR, DL1A_SOFT_IIC_DELAY, DL1A_SCL_PIN, DL1A_SDA_PIN);
#else
iic_init(DL1A_IIC, DL1A_DEV_ADDR, DL1A_IIC_SPEED, DL1A_SCL_PIN, DL1A_SDA_PIN);
#endif
gpio_init(DL1A_XS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
do
{
system_delay_ms(100);
gpio_low(DL1A_XS_PIN);
system_delay_ms(50);
gpio_high(DL1A_XS_PIN);
system_delay_ms(100);
// -------------------------------- DL1A <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC> --------------------------------
reg_data_buffer = dl1a_read_register(DL1A_IO_VOLTAGE_CONFIG); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC> IO Ϊ 1.8V ģʽ
dl1a_write_register(DL1A_IO_VOLTAGE_CONFIG, reg_data_buffer | 0x01); // <20><><EFBFBD><EFBFBD> IO Ϊ 2.8V ģʽ
dl1a_write_register(0x88, 0x00); // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>׼ IIC ģʽ
dl1a_write_register(0x80, 0x01);
dl1a_write_register(0xFF, 0x01);
dl1a_write_register(0x00, 0x00);
dl1a_read_registers(0x91, &stop_variable , 1);
dl1a_write_register(0x00, 0x01);
dl1a_write_register(0xFF, 0x00);
dl1a_write_register(0x80, 0x00);
// <20><><EFBFBD><EFBFBD> SIGNAL_RATE_MSRC(bit1) <20><> SIGNAL_RATE_PRE_RANGE(bit4) <20><><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD>
reg_data_buffer = dl1a_read_register(DL1A_MSRC_CONFIG);
dl1a_write_register(DL1A_MSRC_CONFIG, reg_data_buffer | 0x12);
dl1a_set_signal_rate_limit(DL1A_DEFAULT_RATE_LIMIT); // <20><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
dl1a_write_register(DL1A_SYSTEM_SEQUENCE_CONFIG, 0xFF);
// -------------------------------- DL1A <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC> --------------------------------
// -------------------------------- DL1A <20><><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><CABC> --------------------------------
if(dl1a_get_spad_info(&data_buffer[0], &data_buffer[1]))
{
return_state = 1;
zf_log(0, "DL1A self check error.");
break;
}
// <20><> GLOBAL_CONFIG_SPAD_ENABLES_REF_[0-6] <20><>ȡ SPAD map (RefGoodSpadMap) <20><><EFBFBD><EFBFBD>
dl1a_read_registers(DL1A_GLOBAL_CONFIG_SPAD_ENABLES_REF_0, ref_spad_map, 6);
dl1a_write_register(0xFF, 0x01);
dl1a_write_register(DL1A_DYNAMIC_SPAD_REF_EN_START_OFFSET, 0x00);
dl1a_write_register(DL1A_DYNAMIC_SPAD_NUM_REQUESTED_REF_SPAD, 0x2C);
dl1a_write_register(0xFF, 0x00);
dl1a_write_register(DL1A_GLOBAL_CONFIG_REF_EN_START_SELECT, 0xB4);
data_buffer[2] = data_buffer[1] ? 12 : 0; // 12 is the first aperture spad
for(i = 0; 48 > i; i ++)
{
if(i < data_buffer[2] || data_buffer[3] == data_buffer[0])
{
// <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>õĵ<C3B5>һ<EFBFBD><D2BB>λ
// <20><><EFBFBD><EFBFBD> (eference_spad_count) λ<><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>˴<EFBFBD>λΪ<CEBB><CEAA>
ref_spad_map[i / 8] &= ~(1 << (i % 8));
}
else if((ref_spad_map[i / 8] >> (i % 8)) & 0x1)
{
data_buffer[3] ++;
}
}
data_buffer[0] = DL1A_GLOBAL_CONFIG_SPAD_ENABLES_REF_0;
for(i = 1; 7 > i; i ++)
{
data_buffer[1] = ref_spad_map[i - 1];
}
dl1a_write_array(data_buffer, 7);
// Ĭ<><C4AC>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> version 02/11/2015_v36
dl1a_write_register(0xFF, 0x01);
dl1a_write_register(0x00, 0x00);
dl1a_write_register(0xFF, 0x00);
dl1a_write_register(0x09, 0x00);
dl1a_write_register(0x10, 0x00);
dl1a_write_register(0x11, 0x00);
dl1a_write_register(0x24, 0x01);
dl1a_write_register(0x25, 0xFF);
dl1a_write_register(0x75, 0x00);
dl1a_write_register(0xFF, 0x01);
dl1a_write_register(0x4E, 0x2C);
dl1a_write_register(0x48, 0x00);
dl1a_write_register(0x30, 0x20);
dl1a_write_register(0xFF, 0x00);
dl1a_write_register(0x30, 0x09);
dl1a_write_register(0x54, 0x00);
dl1a_write_register(0x31, 0x04);
dl1a_write_register(0x32, 0x03);
dl1a_write_register(0x40, 0x83);
dl1a_write_register(0x46, 0x25);
dl1a_write_register(0x60, 0x00);
dl1a_write_register(0x27, 0x00);
dl1a_write_register(0x50, 0x06);
dl1a_write_register(0x51, 0x00);
dl1a_write_register(0x52, 0x96);
dl1a_write_register(0x56, 0x08);
dl1a_write_register(0x57, 0x30);
dl1a_write_register(0x61, 0x00);
dl1a_write_register(0x62, 0x00);
dl1a_write_register(0x64, 0x00);
dl1a_write_register(0x65, 0x00);
dl1a_write_register(0x66, 0xA0);
dl1a_write_register(0xFF, 0x01);
dl1a_write_register(0x22, 0x32);
dl1a_write_register(0x47, 0x14);
dl1a_write_register(0x49, 0xFF);
dl1a_write_register(0x4A, 0x00);
dl1a_write_register(0xFF, 0x00);
dl1a_write_register(0x7A, 0x0A);
dl1a_write_register(0x7B, 0x00);
dl1a_write_register(0x78, 0x21);
dl1a_write_register(0xFF, 0x01);
dl1a_write_register(0x23, 0x34);
dl1a_write_register(0x42, 0x00);
dl1a_write_register(0x44, 0xFF);
dl1a_write_register(0x45, 0x26);
dl1a_write_register(0x46, 0x05);
dl1a_write_register(0x40, 0x40);
dl1a_write_register(0x0E, 0x06);
dl1a_write_register(0x20, 0x1A);
dl1a_write_register(0x43, 0x40);
dl1a_write_register(0xFF, 0x00);
dl1a_write_register(0x34, 0x03);
dl1a_write_register(0x35, 0x44);
dl1a_write_register(0xFF, 0x01);
dl1a_write_register(0x31, 0x04);
dl1a_write_register(0x4B, 0x09);
dl1a_write_register(0x4C, 0x05);
dl1a_write_register(0x4D, 0x04);
dl1a_write_register(0xFF, 0x00);
dl1a_write_register(0x44, 0x00);
dl1a_write_register(0x45, 0x20);
dl1a_write_register(0x47, 0x08);
dl1a_write_register(0x48, 0x28);
dl1a_write_register(0x67, 0x00);
dl1a_write_register(0x70, 0x04);
dl1a_write_register(0x71, 0x01);
dl1a_write_register(0x72, 0xFE);
dl1a_write_register(0x76, 0x00);
dl1a_write_register(0x77, 0x00);
dl1a_write_register(0xFF, 0x01);
dl1a_write_register(0x0D, 0x01);
dl1a_write_register(0xFF, 0x00);
dl1a_write_register(0x80, 0x01);
dl1a_write_register(0x01, 0xF8);
dl1a_write_register(0xFF, 0x01);
dl1a_write_register(0x8E, 0x01);
dl1a_write_register(0x00, 0x01);
dl1a_write_register(0xFF, 0x00);
dl1a_write_register(0x80, 0x00);
// <20><><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>
dl1a_write_register(DL1A_SYSTEM_INTERRUPT_GPIO_CONFIG, 0x04);
reg_data_buffer = dl1a_read_register(DL1A_GPIO_HV_MUX_ACTIVE_HIGH);
dl1a_write_register(DL1A_GPIO_HV_MUX_ACTIVE_HIGH, reg_data_buffer & ~0x10);
dl1a_write_register(DL1A_SYSTEM_INTERRUPT_CLEAR, 0x01);
measurement_timing_budget_us = dl1a_get_measurement_timing_budget();
// Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD><EFBFBD> MSRC <20><> TCC
// MSRC = Minimum Signal Rate Check
// TCC = Target CentreCheck
dl1a_write_register(DL1A_SYSTEM_SEQUENCE_CONFIG, 0xE8);
dl1a_set_measurement_timing_budget(measurement_timing_budget_us); // <20><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ʱ<EFBFBD><CAB1>Ԥ<EFBFBD><D4A4>
// -------------------------------- DL1A <20><><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><CABC> --------------------------------
dl1a_write_register(DL1A_SYSTEM_SEQUENCE_CONFIG, 0x01);
if(dl1a_perform_single_ref_calibration(0x40))
{
return_state = 1;
zf_log(0, "DL1A perform single reference calibration error.");
break;
}
dl1a_write_register(DL1A_SYSTEM_SEQUENCE_CONFIG, 0x02);
if(dl1a_perform_single_ref_calibration(0x00))
{
return_state = 1;
zf_log(0, "DL1A perform single reference calibration error.");
break;
}
dl1a_write_register(DL1A_SYSTEM_SEQUENCE_CONFIG, 0xE8); // <20>ָ<EFBFBD><D6B8><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
system_delay_ms(100);
dl1a_write_register(0x80, 0x01);
dl1a_write_register(0xFF, 0x01);
dl1a_write_register(0x00, 0x00);
dl1a_write_register(0x91, stop_variable);
dl1a_write_register(0x00, 0x01);
dl1a_write_register(0xFF, 0x00);
dl1a_write_register(0x80, 0x00);
dl1a_write_register(DL1A_SYSRANGE_START, 0x02);
}while(0);
#if DL1A_INT_ENABLE
exti_init(DL1A_INT_PIN, EXTI_TRIGGER_FALLING);
dl1a_int_handler();
dl1a_finsh_flag = 0;
#endif
return return_state;
}

View File

@@ -0,0 +1,215 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_dl1a
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* SCL <20>鿴 zf_device_dl1a.h <20><> DL1A_SCL_PIN <20><EFBFBD><EAB6A8>
* SDA <20>鿴 zf_device_dl1a.h <20><> DL1A_SDA_PIN <20><EFBFBD><EAB6A8>
* VCC 5V <20><>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* ------------------------------------
* ------------------------------------
********************************************************************************************************************/
#ifndef _ZF_DEVICE_DL1A_H_
#define _ZF_DEVICE_DL1A_H_
#include "zf_common_typedef.h"
// <20><>Ҫע<D2AA><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DL1A <20><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7> 400KHz <20><> IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>Ҫע<D2AA><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DL1A <20><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7> 400KHz <20><> IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>Ҫע<D2AA><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DL1A <20><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7> 400KHz <20><> IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//=================================================<3D><><EFBFBD><EFBFBD> DL1A<31><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#define DL1A_USE_SOFT_IIC (1) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IIC <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IIC <20><>ʽ
#if DL1A_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
#define DL1A_SOFT_IIC_DELAY (100) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
#define DL1A_SCL_PIN (P33_4) // <20><><EFBFBD><EFBFBD> IIC SCL <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> VL53L0X <20><> SCL <20><><EFBFBD><EFBFBD>
#define DL1A_SDA_PIN (P33_5) // <20><><EFBFBD><EFBFBD> IIC SDA <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> VL53L0X <20><> SDA <20><><EFBFBD><EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
#else
#error "<22>ݲ<EFBFBD>֧<EFBFBD><D6A7>Ӳ<EFBFBD><D3B2>IICͨѶ"
#endif
#define DL1A_XS_PIN (P20_10)
#define DL1A_INT_ENABLE ( 1 ) // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD> INT <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#if DL1A_INT_ENABLE
#define DL1A_INT_PIN (ERU_CH1_REQ10_P14_3)
#endif
#define DL1A_TIMEOUT_COUNT (0x00FF) // VL53L0X <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
#define DL1A_MIN_TIMING_BUDGET (20000)
#define DL1A_GET_START_OVERHEAD (1910)
#define DL1A_SET_START_OVERHEAD (1320)
#define DL1A_END_OVERHEAD (960 )
#define DL1A_TCC_OVERHEAD (590 )
#define DL1A_DSS_OVERHEAD (690 )
#define DL1A_MSRC_OVERHEAD (660 )
#define DL1A_PRERANGE_OVERHEAD (660 )
#define DL1A_FINALlRANGE_OVERHEAD (550 )
//=================================================<3D><><EFBFBD><EFBFBD> DL1A<31><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//=================================================<3D><><EFBFBD><EFBFBD> DL1A<31><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
#define DL1A_DEV_ADDR (0x52 >> 1) // 0b0101001
#define DL1A_SYSRANGE_START (0x00)
#define DL1A_SYSTEM_SEQUENCE_CONFIG (0x01)
#define DL1A_SYSTEM_INTERMEASUREMENT_PERIOD (0x04)
#define DL1A_SYSTEM_RANGE_CONFIG (0x09)
#define DL1A_SYSTEM_INTERRUPT_GPIO_CONFIG (0x0A)
#define DL1A_SYSTEM_INTERRUPT_CLEAR (0x0B)
#define DL1A_SYSTEM_THRESH_HIGH (0x0C)
#define DL1A_SYSTEM_THRESH_LOW (0x0E)
#define DL1A_SYSTEM_HISTOGRAM_BIN (0x81)
#define DL1A_RESULT_INTERRUPT_STATUS (0x13)
#define DL1A_RESULT_RANGE_STATUS (0x14)
#define DL1A_RESULT_PEAK_SIGNAL_RATE_REF (0xB6)
#define DL1A_RESULT_CORE_AMBIENT_WINDOW_EVENTS_RTN (0xBC)
#define DL1A_RESULT_CORE_RANGING_TOTAL_EVENTS_RTN (0xC0)
#define DL1A_RESULT_CORE_AMBIENT_WINDOW_EVENTS_REF (0xD0)
#define DL1A_RESULT_CORE_RANGING_TOTAL_EVENTS_REF (0xD4)
#define DL1A_PRE_RANGE_CONFIG_MIN_SNR (0x27)
#define DL1A_PRE_RANGE_CONFIG_VCSEL_PERIOD (0x50)
#define DL1A_PRE_RANGE_CONFIG_TIMEOUT_MACROP_HI (0x51)
#define DL1A_PRE_RANGE_CONFIG_TIMEOUT_MACROP_LO (0x52)
#define DL1A_PRE_RANGE_CONFIG_VALID_PHASE_LOW (0x56)
#define DL1A_PRE_RANGE_CONFIG_VALID_PHASE_HIGH (0x57)
#define DL1A_PRE_RANGE_CONFIG_SIGMA_THRESH_HI (0x61)
#define DL1A_PRE_RANGE_CONFIG_SIGMA_THRESH_LO (0x62)
#define DL1A_PRE_RANGE_MIN_COUNT_RATE_RTN_LIMIT (0x64)
#define DL1A_FINAL_RANGE_CONFIG_VALID_PHASE_LOW (0x47)
#define DL1A_FINAL_RANGE_CONFIG_VALID_PHASE_HIGH (0x48)
#define DL1A_FINAL_RANGE_CONFIG_MIN_COUNT_RATE_RTN_LIMIT (0x44)
#define DL1A_FINAL_RANGE_CONFIG_MIN_SNR (0x67)
#define DL1A_FINAL_RANGE_CONFIG_VCSEL_PERIOD (0x70)
#define DL1A_FINAL_RANGE_CONFIG_TIMEOUT_MACROP_HI (0x71)
#define DL1A_FINAL_RANGE_CONFIG_TIMEOUT_MACROP_LO (0x72)
#define DL1A_GLOBAL_CONFIG_VCSEL_WIDTH (0x32)
#define DL1A_GLOBAL_CONFIG_SPAD_ENABLES_REF_0 (0xB0)
#define DL1A_GLOBAL_CONFIG_SPAD_ENABLES_REF_1 (0xB1)
#define DL1A_GLOBAL_CONFIG_SPAD_ENABLES_REF_2 (0xB2)
#define DL1A_GLOBAL_CONFIG_SPAD_ENABLES_REF_3 (0xB3)
#define DL1A_GLOBAL_CONFIG_SPAD_ENABLES_REF_4 (0xB4)
#define DL1A_GLOBAL_CONFIG_SPAD_ENABLES_REF_5 (0xB5)
#define DL1A_GLOBAL_CONFIG_REF_EN_START_SELECT (0xB6)
#define DL1A_ALGO_PART_TO_PART_RANGE_OFFSET_MM (0x28)
#define DL1A_ALGO_PHASECAL_LIM (0x30)
#define DL1A_ALGO_PHASECAL_CONFIG_TIMEOUT (0x30)
#define DL1A_HISTOGRAM_CONFIG_INITIAL_PHASE_SELECT (0x33)
#define DL1A_HISTOGRAM_CONFIG_READOUT_CTRL (0x55)
#define DL1A_DYNAMIC_SPAD_NUM_REQUESTED_REF_SPAD (0x4E)
#define DL1A_DYNAMIC_SPAD_REF_EN_START_OFFSET (0x4F)
#define DL1A_MSRC_CONFIG_TIMEOUT_MACROP (0x46)
#define DL1A_MSRC_CONFIG (0x60)
#define DL1A_IDENTIFICATION_MODEL_ID (0xC0)
#define DL1A_IDENTIFICATION_REVISION_ID (0xC2)
#define DL1A_CROSSTALK_COMPENSATION_PEAK_RATE_MCPS (0x20)
#define DL1A_POWER_MANAGEMENT_GO1_POWER_FORCE (0x80)
#define DL1A_GPIO_HV_MUX_ACTIVE_HIGH (0x84)
#define DL1A_I2C_SLAVE_DEVICE_ADDRESS (0x8A)
#define DL1A_SOFT_RESET_GO2_SOFT_RESET_N (0xBF)
#define DL1A_OSC_CALIBRATE_VAL (0xF8)
#define DL1A_IO_VOLTAGE_CONFIG (0x89) // IO <20><>ѹ<EFBFBD><D1B9><EFBFBD>üĴ<C3BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ Ĭ<><C4AC> 1V8 ʹ<><CAB9><EFBFBD>޸<EFBFBD>Ϊ 2V8
//=================================================<3D><><EFBFBD><EFBFBD> DL1A<31><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
//================================================<3D><><EFBFBD><EFBFBD> DL1A<31><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>================================================
typedef enum
{
DL1A_VCSEL_PERIOD_PER_RANGE,
DL1A_VCSEL_PERIOD_FINAL_RANGE,
}dl1a_vcsel_period_type_enum;
typedef struct
{
uint8 tcc;
uint8 msrc;
uint8 dss;
uint8 pre_range;
uint8 final_range;
}dl1a_sequence_enables_step_struct;
typedef struct
{
uint16 pre_range_vcsel_period_pclks;
uint16 final_range_vcsel_period_pclks;
uint16 msrc_dss_tcc_mclks;
uint16 pre_range_mclks;
uint16 final_range_mclks;
uint32 msrc_dss_tcc_us;
uint32 pre_range_us;
uint32 final_range_us;
}dl1a_sequence_timeout_step_struct;
//================================================<3D><><EFBFBD><EFBFBD> DL1A<31><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>================================================
//=================================================<3D><><EFBFBD><EFBFBD> DL1A<31><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>================================================
extern uint8 dl1a_finsh_flag; // <20><><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
extern uint16 dl1a_distance_mm; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4>ű<EFBFBD><C5B1><EFBFBD>
//=================================================<3D><><EFBFBD><EFBFBD> DL1A<31><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>================================================
//=================================================<3D><><EFBFBD><EFBFBD> DL1A<31><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
void dl1a_get_distance (void); // <20><><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD>ķ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>
void dl1a_int_handler (void); // DL1A INT <20>ж<EFBFBD><D0B6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 dl1a_init (void); // <20><>ʼ<EFBFBD><CABC> DL1A
//=================================================<3D><><EFBFBD><EFBFBD> DL1A<31><41><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#endif

View File

@@ -0,0 +1,217 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_dl1b
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* SCL <20>鿴 zf_device_dl1b.h <20><> DL1B_SCL_PIN <20><EFBFBD><EAB6A8>
* SDA <20>鿴 zf_device_dl1b.h <20><> DL1B_SDA_PIN <20><EFBFBD><EAB6A8>
* XS <20>鿴 zf_device_dl1b.h <20><> DL1B_XS_PIN <20><EFBFBD><EAB6A8>
* VCC 5V <20><>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* ------------------------------------
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "zf_driver_delay.h"
#include "zf_driver_exti.h"
#include "zf_driver_soft_iic.h"
#include "zf_device_dl1b.h"
#include "zf_device_config.h"
#include "zf_device_type.h"
uint8 dl1b_init_flag = 0;
uint8 dl1b_finsh_flag = 0;
uint16 dl1b_distance_mm = 8192;
#if DL1B_USE_SOFT_IIC
static soft_iic_info_struct dl1b_iic_struct;
#define dl1b_transfer_8bit_array(tdata, tlen, rdata, rlen) (soft_iic_transfer_8bit_array(&dl1b_iic_struct, (tdata), (tlen), (rdata), (rlen)))
#else
#error "<22>ݲ<EFBFBD>֧<EFBFBD><D6A7>Ӳ<EFBFBD><D3B2>IICͨѶ"
#endif
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD>ķ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dl1b_get_distance();
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڿ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̲<EFBFBD><CCB2><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>ô˺<C3B4><CBBA><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void dl1b_get_distance (void)
{
if(dl1b_init_flag)
{
uint8 data_buffer[3] = {0};
int16 dl1b_distance_temp = 0;
data_buffer[0] = DL1B_GPIO__TIO_HV_STATUS >> 8;
data_buffer[1] = DL1B_GPIO__TIO_HV_STATUS & 0xFF;
dl1b_transfer_8bit_array(data_buffer, 2, &data_buffer[2], 1);
if(data_buffer[2])
{
data_buffer[0] = DL1B_SYSTEM__INTERRUPT_CLEAR >> 8;
data_buffer[1] = DL1B_SYSTEM__INTERRUPT_CLEAR & 0xFF;
data_buffer[2] = 0x01;
dl1b_transfer_8bit_array(data_buffer, 3, data_buffer, 0);// clear Interrupt
data_buffer[0] = DL1B_RESULT__RANGE_STATUS >> 8;
data_buffer[1] = DL1B_RESULT__RANGE_STATUS & 0xFF;
dl1b_transfer_8bit_array(data_buffer, 2, &data_buffer[2], 1);
if(0x89 == data_buffer[2])
{
data_buffer[0] = DL1B_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0 >> 8;
data_buffer[1] = DL1B_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0 & 0xFF;
dl1b_transfer_8bit_array(data_buffer, 2, data_buffer, 2);
dl1b_distance_temp = data_buffer[0];
dl1b_distance_temp = (dl1b_distance_temp << 8) | data_buffer[1];
if(dl1b_distance_temp > 4000 || dl1b_distance_temp < 0)
{
dl1b_distance_mm = 8192;
dl1b_finsh_flag = 0;
}
else
{
dl1b_distance_mm = dl1b_distance_temp;
dl1b_finsh_flag = 1;
}
}
else
{
dl1b_distance_mm = 8192;
dl1b_finsh_flag = 0;
}
}
else
{
dl1b_distance_mm = 8192;
dl1b_finsh_flag = 0;
}
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DL1B INT <20>ж<EFBFBD><D0B6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dl1b_int_handler();
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA> DL1B_INT_PIN <20><>Ӧ<EFBFBD><D3A6><EFBFBD>ⲿ<EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void dl1b_int_handler (void)
{
#if DL1B_INT_ENABLE
dl1b_get_distance();
#endif
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD><CABC> DL1B
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> dl1b_init();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 dl1b_init (void)
{
uint8 return_state = 0;
uint8 data_buffer[2 + sizeof(dl1b_config_file)];
uint16 time_out_count = 0;
#if DL1B_USE_SOFT_IIC
soft_iic_init(&dl1b_iic_struct, DL1B_DEV_ADDR, DL1B_SOFT_IIC_DELAY, DL1B_SCL_PIN, DL1B_SDA_PIN);
#else
iic_init(DL1B_IIC, DL1B_DEV_ADDR, DL1B_IIC_SPEED, DL1B_SCL_PIN, DL1B_SDA_PIN);
#endif
gpio_init(DL1B_XS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
do
{
system_delay_ms(50);
gpio_low(DL1B_XS_PIN);
system_delay_ms(10);
gpio_high(DL1B_XS_PIN);
system_delay_ms(50);
data_buffer[0] = DL1B_FIRMWARE__SYSTEM_STATUS >> 8;
data_buffer[1] = DL1B_FIRMWARE__SYSTEM_STATUS & 0xFF;
dl1b_transfer_8bit_array(data_buffer, 2, &data_buffer[2], 1);
return_state = (0x01 == (data_buffer[2] & 0x01)) ? (0) : (1);
if(1 == return_state)
{
break;
}
data_buffer[0] = DL1B_I2C_SLAVE__DEVICE_ADDRESS >> 8;
data_buffer[1] = DL1B_I2C_SLAVE__DEVICE_ADDRESS & 0xFF;
memcpy(&data_buffer[2], (uint8 *)dl1b_config_file, sizeof(dl1b_config_file));
dl1b_transfer_8bit_array(data_buffer, 2 + sizeof(dl1b_config_file), data_buffer, 0);
while(1)
{
data_buffer[0] = DL1B_GPIO__TIO_HV_STATUS >> 8;
data_buffer[1] = DL1B_GPIO__TIO_HV_STATUS & 0xFF;
dl1b_transfer_8bit_array(data_buffer, 2, &data_buffer[2], 1);
if(0x00 == (data_buffer[2] & 0x01))
{
time_out_count = 0;
break;
}
if(DL1B_TIMEOUT_COUNT < time_out_count ++)
{
return_state = 1;
break;
}
system_delay_ms(1);
}
dl1b_init_flag = 1;
}while(0);
#if DL1B_INT_ENABLE
exti_init(DL1B_INT_PIN, EXTI_TRIGGER_FALLING);
dl1b_int_handler();
dl1b_finsh_flag = 0;
#endif
set_tof_type(TOF_DL1B, dl1b_int_handler);
return return_state;
}

View File

@@ -0,0 +1,99 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_dl1b
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* SCL <20>鿴 zf_device_dl1b.h <20><> DL1B_SCL_PIN <20><EFBFBD><EAB6A8>
* SDA <20>鿴 zf_device_dl1b.h <20><> DL1B_SDA_PIN <20><EFBFBD><EAB6A8>
* XS <20>鿴 zf_device_dl1b.h <20><> DL1B_XS_PIN <20><EFBFBD><EAB6A8>
* VCC 5V <20><>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* ------------------------------------
* ------------------------------------
********************************************************************************************************************/
#ifndef _ZF_DEVICE_DL1B_H_
#define _ZF_DEVICE_DL1B_H_
#include "zf_common_typedef.h"
// <20><>Ҫע<D2AA><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DL1B <20><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7> 400KHz <20><> IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>Ҫע<D2AA><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DL1B <20><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7> 400KHz <20><> IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>Ҫע<D2AA><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DL1B <20><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7> 400KHz <20><> IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DL1B_USE_SOFT_IIC ( 1 ) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IIC <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IIC <20><>ʽ
#if DL1B_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
#define DL1B_SOFT_IIC_DELAY ( 10 ) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
#define DL1B_SCL_PIN ( P33_4 ) // <20><><EFBFBD><EFBFBD> IIC SCL <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> DL1B <20><> SCL <20><><EFBFBD><EFBFBD>
#define DL1B_SDA_PIN ( P33_5 ) // <20><><EFBFBD><EFBFBD> IIC SDA <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> DL1B <20><> SDA <20><><EFBFBD><EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
#else
#error "<22>ݲ<EFBFBD>֧<EFBFBD><D6A7>Ӳ<EFBFBD><D3B2>IICͨѶ"
#endif
#define DL1B_XS_PIN ( P20_10 )
#define DL1B_INT_ENABLE ( 0 ) // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD> INT <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#if DL1B_INT_ENABLE
#define DL1B_INT_PIN ( ERU_CH1_REQ10_P14_3 )
#endif
#define DL1B_TIMEOUT_COUNT ( 1000 ) // DL1B <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
//================================================<3D><><EFBFBD><EFBFBD> DL1B <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
#define DL1B_DEV_ADDR ( 0x52 >> 1 ) // 0b0101001
#define DL1B_I2C_SLAVE__DEVICE_ADDRESS ( 0x0001 )
#define DL1B_GPIO__TIO_HV_STATUS ( 0x0031 )
#define DL1B_SYSTEM__INTERRUPT_CLEAR ( 0x0086 )
#define DL1B_RESULT__RANGE_STATUS ( 0x0089 )
#define DL1B_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0 ( 0x0096 )
#define DL1B_FIRMWARE__SYSTEM_STATUS ( 0x00E5 )
//================================================<3D><><EFBFBD><EFBFBD> DL1B <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
extern uint8 dl1b_finsh_flag;
extern uint16 dl1b_distance_mm;
void dl1b_get_distance (void);
void dl1b_int_handler (void);
uint8 dl1b_init (void);
#endif

View File

@@ -0,0 +1,621 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_gnss
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2023-12-28 pudding first version
* 2024-01-30 pudding <20><><EFBFBD><EFBFBD>RTK "D" <20><>ͷЭ<CDB7><D0AD>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* RX <20>鿴 zf_device_gnss.h <20><> GNSS_RX <20><EFBFBD><EAB6A8>
* TX <20>鿴 zf_device_gnss.h <20><> GNSS_TX <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* ------------------------------------
********************************************************************************************************************/
#include "math.h"
#include "zf_common_function.h"
#include "zf_common_fifo.h"
#include "zf_driver_delay.h"
#include "zf_driver_uart.h"
#include "zf_device_gnss.h"
#define GNSS_BUFFER_SIZE ( 128 )
uint8 gnss_flag = 0; // 1<><31><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ɵȴ<C9B5><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<><30>û<EFBFBD>вɼ<D0B2><C9BC><EFBFBD><EFBFBD><EFBFBD>
gnss_info_struct gnss; // GPS<50><53><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static uint8 gnss_state = 0; // 1<><31>GPS<50><53>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static fifo_struct gnss_receiver_fifo; //
static uint8 gnss_receiver_buffer[GNSS_BUFFER_SIZE]; // <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static gps_state_enum gnss_gga_state = GPS_STATE_RECEIVING; // gga <20><><EFBFBD><EFBFBD>״̬
static gps_state_enum gnss_rmc_state = GPS_STATE_RECEIVING; // rmc <20><><EFBFBD><EFBFBD>״̬
static gps_state_enum gnss_ths_state = GPS_STATE_RECEIVING; // rmc <20><><EFBFBD><EFBFBD>״̬
static uint8 gps_gga_buffer[GNSS_BUFFER_SIZE];
static uint8 gps_rmc_buffer[GNSS_BUFFER_SIZE];
static uint8 gps_ths_buffer[GNSS_BUFFER_SIZE];
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡָ<C8A1><D6B8> ',' <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> num <20>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str <20>ַ<EFBFBD><D6B7><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> get_parameter_index(1, s);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9>
//-------------------------------------------------------------------------------------------------------------------
static uint8 get_parameter_index (uint8 num, char *str)
{
uint8 i = 0, j = 0;
char *temp = strchr(str, '\n');
uint8 len = 0, len1 = 0;
if(NULL != temp)
{
len = (uint8)((uint32)temp - (uint32)str + 1);
}
for(i = 0; i < len; i ++)
{
if(',' == str[i])
{
j ++;
}
if(j == num)
{
len1 = i + 1;
break;
}
}
return len1;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> ',' ֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊint
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *s <20>ַ<EFBFBD><D6B7><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> float <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
// ʹ<><CAB9>ʾ<EFBFBD><CABE> get_int_number(&buf[get_parameter_index(7, buf)]);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9>
//-------------------------------------------------------------------------------------------------------------------
static int get_int_number (char *s)
{
char buf[10];
uint8 i = 0;
int return_value = 0;
i = get_parameter_index(1, s);
i = i - 1;
strncpy(buf, s, i);
buf[i] = 0;
return_value = func_str_to_int(buf);
return return_value;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> ',' ֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊfloat
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *s <20>ַ<EFBFBD><D6B7><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> float <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
// ʹ<><CAB9>ʾ<EFBFBD><CABE> get_float_number(&buf[get_parameter_index(8, buf)]);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9>
//-------------------------------------------------------------------------------------------------------------------
static float get_float_number (char *s)
{
uint8 i = 0;
char buf[15];
float return_value = 0;
i = get_parameter_index(1, s);
i = i - 1;
strncpy(buf, s, i);
buf[i] = 0;
return_value = (float)func_str_to_double(buf);
return return_value;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> ',' ֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊdouble
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *s <20>ַ<EFBFBD><D6B7><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> double <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
// ʹ<><CAB9>ʾ<EFBFBD><CABE> get_double_number(&buf[get_parameter_index(3, buf)]);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9>
//-------------------------------------------------------------------------------------------------------------------
static double get_double_number (char *s)
{
uint8 i = 0;
char buf[15];
double return_value = 0;
i = get_parameter_index(1, s);
i = i - 1;
strncpy(buf, s, i);
buf[i] = 0;
return_value = func_str_to_double(buf);
return return_value;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *time <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> utc_to_btc(&gnss->time);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9>
//-------------------------------------------------------------------------------------------------------------------
static void utc_to_btc (gps_time_struct *time)
{
uint8 day_num = 0;
time->hour = time->hour + 8;
if(23 < time->hour)
{
time->hour -= 24;
time->day += 1;
if(2 == time->month)
{
day_num = 28;
if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
{
day_num ++; // <20><><EFBFBD><EFBFBD> 2<><32>Ϊ29<32><39>
}
}
else
{
day_num = 31; // 1 3 5 7 8 10 12<31><32>Щ<EFBFBD>·<EFBFBD>Ϊ31<33><31>
if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
{
day_num = 30;
}
}
if(time->day > day_num)
{
time->day = 1;
time->month ++;
if(12 < time->month)
{
time->month -= 12;
time->year ++;
}
}
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RMC<4D><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *line <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *gnss <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD> 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܽ<EFBFBD><DCBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> gps_gnrmc_parse((char *)data_buffer, &gnss);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9>
//-------------------------------------------------------------------------------------------------------------------
static uint8 gps_gnrmc_parse (char *line, gnss_info_struct *gnss)
{
uint8 state = 0, temp = 0;
double latitude = 0; // γ<><CEB3>
double longitude = 0; // <20><><EFBFBD><EFBFBD>
double lati_cent_tmp = 0, lati_second_tmp = 0;
double long_cent_tmp = 0, long_second_tmp = 0;
float speed_tmp = 0;
char *buf = line;
uint8 return_state = 0;
state = buf[get_parameter_index(2, buf)];
if('A' == state || 'D' == state) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
return_state = 1;
gnss->state = 1;
gnss -> ns = buf[get_parameter_index(4, buf)];
gnss -> ew = buf[get_parameter_index(6, buf)];
latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
gnss->latitude_degree = (int)latitude / 100; // γ<><CEB3>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>
lati_cent_tmp = (latitude - gnss->latitude_degree * 100);
gnss->latitude_cent = (int)lati_cent_tmp;
lati_second_tmp = (lati_cent_tmp - gnss->latitude_cent) * 6000;
gnss->latitude_second = (int)lati_second_tmp;
gnss->longitude_degree = (int)longitude / 100; // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>
long_cent_tmp = (longitude - gnss->longitude_degree * 100);
gnss->longitude_cent = (int)long_cent_tmp;
long_second_tmp = (long_cent_tmp - gnss->longitude_cent) * 6000;
gnss->longitude_second = (int)long_second_tmp;
gnss->latitude = gnss->latitude_degree + lati_cent_tmp / 60;
gnss->longitude = gnss->longitude_degree + long_cent_tmp / 60;
speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // <20>ٶ<EFBFBD>(<28><><EFBFBD><EFBFBD>/Сʱ)
gnss->speed = speed_tmp * 1.85f; // ת<><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>/Сʱ
gnss->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // <20>Ƕ<EFBFBD>
}
else
{
gnss->state = 0;
}
// <20>ڶ<EFBFBD>λû<CEBB><C3BB><EFBFBD><EFBFBD>ЧǰҲ<C7B0><D2B2><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ݵģ<DDB5><C4A3><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
gnss->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // ʱ<><CAB1>
gnss->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
gnss->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
temp = get_parameter_index(9, buf);
gnss->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // <20><><EFBFBD><EFBFBD>
gnss->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
gnss->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
utc_to_btc(&gnss->time);
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GGA<47><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *line <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *gnss <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD> 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܽ<EFBFBD><DCBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> gps_gngga_parse((char *)data_buffer, &gnss);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9>
//-------------------------------------------------------------------------------------------------------------------
static uint8 gps_gngga_parse (char *line, gnss_info_struct *gnss)
{
uint8 state = 0;
char *buf = line;
uint8 return_state = 0;
state = buf[get_parameter_index(2, buf)];
if(',' != state)
{
gnss->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
gnss->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // <20>߶<EFBFBD> = <20><><EFBFBD>θ߶<CEB8> + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ˮ׼<CBAE><D7BC><EFBFBD>ĸ߶<C4B8>
return_state = 1;
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> THS<48><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *line <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *gnss <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD> 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܽ<EFBFBD><DCBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> gps_gnths_parse((char *)data_buffer, &gnss);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9>
//-------------------------------------------------------------------------------------------------------------------
static uint8 gps_gnths_parse (char *line, gnss_info_struct *gnss)
{
uint8 state = 0;
char *buf = line;
uint8 return_state = 0;
state = buf[get_parameter_index(2, buf)];
if('A' == state)
{
gnss->antenna_direction_state = 1;
gnss->antenna_direction = get_float_number(&buf[get_parameter_index(1, buf)]);
return_state = 1;
}
else
{
gnss->antenna_direction_state = 0;
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> latitude1 <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>γ<EFBFBD><CEB3>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> longitude1 <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> latitude2 <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>γ<EFBFBD><CEB3>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> longitude2 <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> double <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
{
const double EARTH_RADIUS = 6378137; // <20><><EFBFBD><EFBFBD><EFBFBD>뾶(<28><>λ<EFBFBD><CEBB>m)
double rad_latitude1 = 0;
double rad_latitude2 = 0;
double rad_longitude1 = 0;
double rad_longitude2 = 0;
double distance = 0;
double a = 0;
double b = 0;
rad_latitude1 = ANGLE_TO_RAD(latitude1); // <20><><EFBFBD>ݽǶȼ<C7B6><C8BC><EFBFBD><E3BBA1>
rad_latitude2 = ANGLE_TO_RAD(latitude2);
rad_longitude1 = ANGLE_TO_RAD(longitude1);
rad_longitude2 = ANGLE_TO_RAD(longitude2);
a = rad_latitude1 - rad_latitude2;
b = rad_longitude1 - rad_longitude2;
distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps <20><><EFBFBD><EFBFBD>ʵ<EFBFBD>ֵ<EFBFBD><D6B5>
distance = distance * EARTH_RADIUS;
return distance;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>λ<EFBFBD><CEBB>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> latitude1 <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>γ<EFBFBD><CEB3>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> longitude1 <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> latitude2 <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>γ<EFBFBD><CEB3>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> longitude2 <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> double <20><><EFBFBD>ط<EFBFBD>λ<EFBFBD>ǣ<EFBFBD>0<EFBFBD><30>360<36><30>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
{
latitude1 = ANGLE_TO_RAD(latitude1);
latitude2 = ANGLE_TO_RAD(latitude2);
longitude1 = ANGLE_TO_RAD(longitude1);
longitude2 = ANGLE_TO_RAD(longitude2);
double x = sin(longitude2 - longitude1) * cos(latitude2);
double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
double angle = RAD_TO_ANGLE(atan2(x, y));
return ((0 < angle) ? angle : (angle + 360));
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>GPS<50><53><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0-<2D><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> gps_data_parse();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 gnss_data_parse (void)
{
uint8 return_state = 0;
uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
uint8 bbc_xor_origin = 0;
uint8 bbc_xor_calculation = 0;
uint32 data_len = 0;
do
{
if(GPS_STATE_RECEIVED == gnss_rmc_state)
{
gnss_rmc_state = GPS_STATE_PARSING;
strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
{
bbc_xor_calculation ^= gps_rmc_buffer[data_len];
}
if(bbc_xor_calculation != bbc_xor_origin)
{
// <20><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ʧ<EFBFBD><CAA7>
return_state = 1;
break;
}
gps_gnrmc_parse((char *)gps_rmc_buffer, &gnss);
}
gnss_rmc_state = GPS_STATE_RECEIVING;
if(GPS_STATE_RECEIVED == gnss_gga_state)
{
gnss_gga_state = GPS_STATE_PARSING;
strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
{
bbc_xor_calculation ^= gps_gga_buffer[data_len];
}
if(bbc_xor_calculation != bbc_xor_origin)
{
// <20><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ʧ<EFBFBD><CAA7>
return_state = 1;
break;
}
gps_gngga_parse((char *)gps_gga_buffer, &gnss);
}
gnss_gga_state = GPS_STATE_RECEIVING;
if(GPS_STATE_RECEIVED == gnss_ths_state)
{
gnss_ths_state = GPS_STATE_PARSING;
strncpy((char *)&check_buffer[2], strchr((const char *)gps_ths_buffer, '*') + 1, 2);
bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
for(bbc_xor_calculation = gps_ths_buffer[1], data_len = 2; '*' != gps_ths_buffer[data_len]; data_len ++)
{
bbc_xor_calculation ^= gps_ths_buffer[data_len];
}
if(bbc_xor_calculation != bbc_xor_origin)
{
// <20><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ʧ<EFBFBD><CAA7>
return_state = 1;
break;
}
gps_gnths_parse((char *)gps_ths_buffer, &gnss);
}
gnss_ths_state = GPS_STATE_RECEIVING;
}while(0);
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GPS<50><53><EFBFBD>ڻص<DABB><D8B5><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> gps_uart_callback();
// <20><>ע<EFBFBD><D7A2>Ϣ <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ڴ<EFBFBD><DAB4>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>ڽ<EFBFBD><DABD>е<EFBFBD><D0B5><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void gnss_uart_callback (void)
{
uint8 temp_gps[6];
uint32 temp_length = 0;
if(gnss_state)
{
uint8 dat;
while(uart_query_byte(GNSS_UART, &dat))
{
fifo_write_buffer(&gnss_receiver_fifo, &dat, 1);
}
if('\n' == dat)
{
// <20><>ȡǰ6<C7B0><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
temp_length = 6;
fifo_read_buffer(&gnss_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
// <20><><EFBFBD>ݲ<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>
if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
{
// <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(GPS_STATE_PARSING != gnss_rmc_state)
{
gnss_rmc_state = GPS_STATE_RECEIVED;
temp_length = fifo_used(&gnss_receiver_fifo);
fifo_read_buffer(&gnss_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
}
}
else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
{
// <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(GPS_STATE_PARSING != gnss_gga_state)
{
gnss_gga_state = GPS_STATE_RECEIVED;
temp_length = fifo_used(&gnss_receiver_fifo);
fifo_read_buffer(&gnss_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
}
}
else if(0 == strncmp((char *)&temp_gps[3], "THS", 3))
{
// <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD><C2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(GPS_STATE_PARSING != gnss_ths_state)
{
gnss_ths_state = GPS_STATE_RECEIVED;
temp_length = fifo_used(&gnss_receiver_fifo);
fifo_read_buffer(&gnss_receiver_fifo, gps_ths_buffer, &temp_length, FIFO_READ_AND_CLEAN);
}
}
// ͳһ<CDB3><D2BB>FIFO<46><4F><EFBFBD><EFBFBD>
fifo_clear(&gnss_receiver_fifo);
gnss_flag = 1;
}
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GPS<50><53>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> gps_init();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void gnss_init (gps_device_enum gps_device)
{
const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
if((TAU1201 == gps_device) || (GN42A == gps_device))
{
fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
system_delay_ms(500); // <20>ȴ<EFBFBD>GPS<50><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ʼ<EFBFBD><CABC>
uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
uart_write_buffer(GNSS_UART, (uint8 *)set_rate, sizeof(set_rate)); // <20><><EFBFBD><EFBFBD>GPS<50><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ10hz <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>Ϊ1hz
system_delay_ms(200);
uart_write_buffer(GNSS_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // <20><><EFBFBD><EFBFBD>rmc<6D><63><EFBFBD><EFBFBD>
system_delay_ms(50);
uart_write_buffer(GNSS_UART, (uint8 *)open_gga, sizeof(open_gga)); // <20><><EFBFBD><EFBFBD>gga<67><61><EFBFBD><EFBFBD>
system_delay_ms(50);
uart_write_buffer(GNSS_UART, (uint8 *)close_gll, sizeof(close_gll));
system_delay_ms(50);
uart_write_buffer(GNSS_UART, (uint8 *)close_gsa, sizeof(close_gsa));
system_delay_ms(50);
uart_write_buffer(GNSS_UART, (uint8 *)close_grs, sizeof(close_grs));
system_delay_ms(50);
uart_write_buffer(GNSS_UART, (uint8 *)close_gsv, sizeof(close_gsv));
system_delay_ms(50);
uart_write_buffer(GNSS_UART, (uint8 *)close_vtg, sizeof(close_vtg));
system_delay_ms(50);
uart_write_buffer(GNSS_UART, (uint8 *)close_zda, sizeof(close_zda));
system_delay_ms(50);
uart_write_buffer(GNSS_UART, (uint8 *)close_gst, sizeof(close_gst));
system_delay_ms(50);
uart_write_buffer(GNSS_UART, (uint8 *)close_txt, sizeof(close_txt));
system_delay_ms(50);
uart_write_buffer(GNSS_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
system_delay_ms(50);
gnss_state = 1;
uart_rx_interrupt(GNSS_UART, 1);
}
else if(GN43RFA == gps_device)
{
// GN43RFA RTKģ<4B><EFBFBD><E9B2BB>Ҫ<EFBFBD><D2AA><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>޸IJ<DEB8><C4B2><EFBFBD>Ӧ<EFBFBD><D3A6>ʹ<EFBFBD><CAB9>ר<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>޸IJ<DEB8><C4B2><EFBFBD>
fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
gnss_state = 1;
uart_rx_interrupt(GNSS_UART, 1);
}
}

View File

@@ -0,0 +1,125 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_gnss
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2023-12-28 pudding first version
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* RX <20>鿴 zf_device_gnss.h <20><> GNSS_RX <20><EFBFBD><EAB6A8>
* TX <20>鿴 zf_device_gnss.h <20><> GNSS_TX <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* ------------------------------------
********************************************************************************************************************/
#ifndef _zf_device_gnss_h_
#define _zf_device_gnss_h_
#include "zf_common_typedef.h"
//--------------------------------------------------------------------------------------------------
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//--------------------------------------------------------------------------------------------------
#define GNSS_UART (UART_3)
#define GNSS_RX (UART3_TX_P15_6) // GPS RX<52><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>
#define GNSS_TX (UART3_RX_P15_7) // GPS TX<54><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ANGLE_TO_RAD(x) ( (x) * PI / 180.0 ) // <20>Ƕ<EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
#define RAD_TO_ANGLE(x) ( (x) * 180.0 / PI ) // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>Ƕ<EFBFBD>
#define PI ( 3.1415926535898 )
typedef enum
{
TAU1201 = 1, // <20><><EFBFBD>ɿƼ<C9BF>˫ƵGPSģ<53><C4A3>
GN42A = 1, // <20><><EFBFBD>ɿƼ<C9BF>˫ƵGPSģ<53><C4A3> <20><>TAU1201<30><31>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
GN43RFA = 2, // <20><><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD>ƵRTKģ<4B><C4A3>
}gps_device_enum;
typedef struct
{
uint16 year;
uint8 month;
uint8 day;
uint8 hour;
uint8 minute;
uint8 second;
}gps_time_struct;
typedef struct
{
gps_time_struct time; // ʱ<><CAB1>
uint8 state; // <20><>Ч״̬ 1<><31><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ч 0<><30><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ч
uint16 latitude_degree; // <20><>
uint16 latitude_cent; // <20><>
uint16 latitude_second; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD><C7B1>Ŵ<EFBFBD><C5B4><EFBFBD>100<30><30><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>Ҫ<EFBFBD>DZ<EFBFBD><C7B1><EFBFBD>ʹ<EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD>
uint16 longitude_degree; // <20><>
uint16 longitude_cent; // <20><>
uint16 longitude_second; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD><C7B1>Ŵ<EFBFBD><C5B4><EFBFBD>100<30><30><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>Ҫ<EFBFBD>DZ<EFBFBD><C7B1><EFBFBD>ʹ<EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD>
double latitude; // γ<><CEB3>
double longitude; // <20><><EFBFBD><EFBFBD>
int8 ns; // γ<>Ȱ<EFBFBD><C8B0><EFBFBD> N<><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򣩻<EFBFBD> S<><53><EFBFBD>ϰ<EFBFBD><CFB0><EFBFBD><EFBFBD><EFBFBD>
int8 ew; // <20><><EFBFBD>Ȱ<EFBFBD><C8B0><EFBFBD> E<><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> W<><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float speed; // <20>ٶȣ<D9B6><C8A3><EFBFBD><EFBFBD><EFBFBD>/ÿСʱ<D0A1><CAB1>
float direction; // <20><><EFBFBD><EFBFBD><E6BABD><EFBFBD><EFBFBD>000.0~359.9 <20>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><E6B1B1>Ϊ<EFBFBD>ο<EFBFBD><CEBF><EFBFBD>׼<EFBFBD><D7BC>+
uint8 antenna_direction_state; // ˫<><CBAB><EFBFBD>߲<EFBFBD><DFB2><EFBFBD><EFBFBD><EFBFBD>Ч״̬ 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>Чʱantenna_direction<6F><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
float antenna_direction; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1B1><EFBFBD>ɵļнǣ<D0BD>000.0~359.9 <20>ȣ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>GNGGA<47><41><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>ȡ
uint8 satellite_used; // <20><><EFBFBD>ڶ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float height; // <20>߶<EFBFBD>
}gnss_info_struct;
typedef enum
{
GPS_STATE_RECEIVING, // <20><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GPS_STATE_RECEIVED, // <20><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GPS_STATE_PARSING, // <20><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>
}gps_state_enum;
extern gnss_info_struct gnss;
extern uint8 gnss_flag;
double get_two_points_distance (double lat1, double lng1, double lat2, double lng2);
double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2);
uint8 gnss_data_parse (void);
void gnss_uart_callback (void);
void gnss_init (gps_device_enum gps_device);
#endif

View File

@@ -0,0 +1,347 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_icm20602
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
* SCL/SPC <20>鿴 zf_device_icm20602.h <20><> ICM20602_SPC_PIN <20><EFBFBD><EAB6A8>
* SDA/DSI <20>鿴 zf_device_icm20602.h <20><> ICM20602_SDI_PIN <20><EFBFBD><EAB6A8>
* SA0/SDO <20>鿴 zf_device_icm20602.h <20><> ICM20602_SDO_PIN <20><EFBFBD><EAB6A8>
* CS <20>鿴 zf_device_icm20602.h <20><> ICM20602_CS_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
* SCL/SPC <20>鿴 zf_device_icm20602.h <20><> ICM20602_SCL_PIN <20><EFBFBD><EAB6A8>
* SDA/DSI <20>鿴 zf_device_icm20602.h <20><> ICM20602_SDA_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
********************************************************************************************************************/
#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_icm20602.h"
int16 icm20602_gyro_x = 0, icm20602_gyro_y = 0, icm20602_gyro_z = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> gyro (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int16 icm20602_acc_x = 0, icm20602_acc_y = 0, icm20602_acc_z = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> acc (accelerometer <20><><EFBFBD>ٶȼ<D9B6>)
float icm20602_transition_factor[2] = {4096, 16.4}; // ת<><D7AA>ʵ<EFBFBD><CAB5>ֵ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
#if ICM20602_USE_SOFT_IIC
static soft_iic_info_struct icm20602_iic_struct;
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ICM20602 д<>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> icm20602_write_register(ICM20602_PWR_MGMT_1, 0x80);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
#define icm20602_write_register(reg, data) (soft_iic_write_8bit_register(&icm20602_iic_struct, (reg), (data)))
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ICM20602 <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> icm20602_read_register(ICM20602_WHO_AM_I);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
#define icm20602_read_register(reg) (soft_iic_read_8bit_register(&icm20602_iic_struct, (reg)))
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ICM20602 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> icm20602_read_registers(ICM20602_ACCEL_XOUT_H, dat, 6);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
#define icm20602_read_registers(reg, data, len) (soft_iic_read_8bit_registers(&icm20602_iic_struct, (reg), (data), (len)))
#else
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ICM20602 д<>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> icm20602_write_register(ICM20602_PWR_MGMT_1, 0x80);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void icm20602_write_register(uint8 reg, uint8 data)
{
ICM20602_CS(0);
spi_write_8bit_register(ICM20602_SPI, reg | ICM20602_SPI_W, data);
ICM20602_CS(1);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ICM20602 <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> icm20602_read_register(ICM20602_WHO_AM_I);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 icm20602_read_register(uint8 reg)
{
uint8 data = 0;
ICM20602_CS(0);
data = spi_read_8bit_register(ICM20602_SPI, reg | ICM20602_SPI_R);
ICM20602_CS(1);
return data;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ICM20602 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> icm20602_read_registers(ICM20602_ACCEL_XOUT_H, dat, 6);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void icm20602_read_registers(uint8 reg, uint8 *data, uint32 len)
{
ICM20602_CS(0);
spi_read_8bit_registers(ICM20602_SPI, reg | ICM20602_SPI_R, data, len);
ICM20602_CS(1);
}
#endif
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ICM20602 <20>Լ<EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> icm20602_self_check();
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 icm20602_self_check (void)
{
uint8 dat = 0, return_state = 0;
uint16 timeout_count = 0;
while(0x12 != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
{
if(ICM20602_TIMEOUT_COUNT < timeout_count ++)
{
return_state = 1;
break;
}
dat = icm20602_read_register(ICM20602_WHO_AM_I);
system_delay_ms(10);
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ ICM20602 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> icm20602_get_acc(); // ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void icm20602_get_acc (void)
{
uint8 dat[6];
icm20602_read_registers(ICM20602_ACCEL_XOUT_H, dat, 6);
icm20602_acc_x = (int16)(((uint16)dat[0] << 8 | dat[1]));
icm20602_acc_y = (int16)(((uint16)dat[2] << 8 | dat[3]));
icm20602_acc_z = (int16)(((uint16)dat[4] << 8 | dat[5]));
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ ICM20602 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> icm20602_get_gyro(); // ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void icm20602_get_gyro (void)
{
uint8 dat[6];
icm20602_read_registers(ICM20602_GYRO_XOUT_H, dat, 6);
icm20602_gyro_x = (int16)(((uint16)dat[0] << 8 | dat[1]));
icm20602_gyro_y = (int16)(((uint16)dat[2] << 8 | dat[3]));
icm20602_gyro_z = (int16)(((uint16)dat[4] << 8 | dat[5]));
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD><CABC> ICM20602
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> icm20602_init();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 icm20602_init (void)
{
uint8 val = 0x0, return_state = 0;
uint16 timeout_count = 0;
system_delay_ms(10); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ʱ
#if ICM20602_USE_SOFT_IIC
soft_iic_init(&icm20602_iic_struct, ICM20602_DEV_ADDR, ICM20602_SOFT_IIC_DELAY, ICM20602_SCL_PIN, ICM20602_SDA_PIN);
#else
spi_init(ICM20602_SPI, SPI_MODE0, ICM20602_SPI_SPEED, ICM20602_SPC_PIN, ICM20602_SDI_PIN, ICM20602_SDO_PIN, SPI_CS_NULL);
gpio_init(ICM20602_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
#endif
do
{
if(icm20602_self_check())
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ô<EFBFBD><C3B4><EFBFBD><EFBFBD> ICM20602 <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܾ<EFBFBD><DCBE>ǻ<EFBFBD><C7BB><EFBFBD>
zf_log(0, "icm20602 self check error.");
return_state = 1;
break;
}
icm20602_write_register(ICM20602_PWR_MGMT_1, 0x80); // <20><>λ<EFBFBD>
system_delay_ms(2);
do
{ // <20>ȴ<EFBFBD><C8B4><EFBFBD>λ<EFBFBD>ɹ<EFBFBD>
val = icm20602_read_register(ICM20602_PWR_MGMT_1);
if(ICM20602_TIMEOUT_COUNT < timeout_count ++)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ô<EFBFBD><C3B4><EFBFBD><EFBFBD> ICM20602 <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܾ<EFBFBD><DCBE>ǻ<EFBFBD><C7BB><EFBFBD>
zf_log(0, "icm20602 reset error.");
return_state = 1;
break;
}
}while(0x41 != val);
if(1 == return_state)
{
break;
}
icm20602_write_register(ICM20602_PWR_MGMT_1, 0x01); // ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
icm20602_write_register(ICM20602_PWR_MGMT_2, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǻͼ<C7BA><CDBC>ٶȼ<D9B6>
icm20602_write_register(ICM20602_CONFIG, 0x01); // 176HZ 1KHZ
icm20602_write_register(ICM20602_SMPLRT_DIV, 0x07); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SAMPLE_RATE = INTERNAL_SAMPLE_RATE / (1 + SMPLRT_DIV)
// ICM20602_ACCEL_CONFIG <20>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ϊ 0x00 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ <20><>2 g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 16384 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λ g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ 0x08 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ <20><>4 g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 8192 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λ g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ 0x10 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ <20><>8 g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 4096 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λ g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ 0x18 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ <20><>16 g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 2048 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λ g(m/s^2)
switch(ICM20602_ACC_SAMPLE_DEFAULT)
{
case ICM20602_ACC_SAMPLE_SGN_2G:
{
icm20602_write_register(ICM20602_ACCEL_CONFIG, 0x00);
icm20602_transition_factor[0] = 16384;
}break;
case ICM20602_ACC_SAMPLE_SGN_4G:
{
icm20602_write_register(ICM20602_ACCEL_CONFIG, 0x08);
icm20602_transition_factor[0] = 8192;
}break;
case ICM20602_ACC_SAMPLE_SGN_8G:
{
icm20602_write_register(ICM20602_ACCEL_CONFIG, 0x10);
icm20602_transition_factor[0] = 4096;
}break;
case ICM20602_ACC_SAMPLE_SGN_16G:
{
icm20602_write_register(ICM20602_ACCEL_CONFIG, 0x18);
icm20602_transition_factor[0] = 2048;
}break;
default:
{
zf_log(0, "ICM20602_ACC_SAMPLE_DEFAULT set error.");
return_state = 1;
}break;
}
if(1 == return_state)
{
break;
}
// ICM20602_GYRO_CONFIG <20>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ϊ 0x00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ <20><>250 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 131 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λΪ <20><>/s
// <20><><EFBFBD><EFBFBD>Ϊ 0x08 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ <20><>500 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 65.5 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λΪ <20><>/s
// <20><><EFBFBD><EFBFBD>Ϊ 0x10 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ <20><>1000 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 32.8 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λΪ <20><>/s
// <20><><EFBFBD><EFBFBD>Ϊ 0x18 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ <20><>2000 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 16.4 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λΪ <20><>/s
switch(ICM20602_GYRO_SAMPLE_DEFAULT)
{
case ICM20602_GYRO_SAMPLE_SGN_250DPS:
{
icm20602_write_register(ICM20602_GYRO_CONFIG, 0x00);
icm20602_transition_factor[1] = 131.0;
}break;
case ICM20602_GYRO_SAMPLE_SGN_500DPS:
{
icm20602_write_register(ICM20602_GYRO_CONFIG, 0x08);
icm20602_transition_factor[1] = 65.5;
}break;
case ICM20602_GYRO_SAMPLE_SGN_1000DPS:
{
icm20602_write_register(ICM20602_GYRO_CONFIG, 0x10);
icm20602_transition_factor[1] = 32.8;
}break;
case ICM20602_GYRO_SAMPLE_SGN_2000DPS:
{
icm20602_write_register(ICM20602_GYRO_CONFIG, 0x18);
icm20602_transition_factor[1] = 16.4;
}break;
default:
{
zf_log(0, "ICM20602_GYRO_SAMPLE_DEFAULT set error.");
return_state = 1;
}break;
}
if(1 == return_state)
{
break;
}
icm20602_write_register(ICM20602_ACCEL_CONFIG_2, 0x03); // Average 4 samples 44.8HZ //0x23 Average 16 samples
}while(0);
return return_state;
}

View File

@@ -0,0 +1,227 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_icm20602
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
* 2024-01-30 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
* SCL/SPC <20>鿴 zf_device_icm20602.h <20><> ICM20602_SPC_PIN <20><EFBFBD><EAB6A8>
* SDA/DSI <20>鿴 zf_device_icm20602.h <20><> ICM20602_SDI_PIN <20><EFBFBD><EAB6A8>
* SA0/SDO <20>鿴 zf_device_icm20602.h <20><> ICM20602_SDO_PIN <20><EFBFBD><EAB6A8>
* CS <20>鿴 zf_device_icm20602.h <20><> ICM20602_CS_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
* SCL/SPC <20>鿴 zf_device_icm20602.h <20><> ICM20602_SCL_PIN <20><EFBFBD><EAB6A8>
* SDA/DSI <20>鿴 zf_device_icm20602.h <20><> ICM20602_SDA_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
********************************************************************************************************************/
#ifndef _zf_device_icm20602_h_
#define _zf_device_icm20602_h_
#include "zf_common_typedef.h"
//================================================<3D><><EFBFBD><EFBFBD> ICM20602 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
// ICM20602_USE_SOFT_IIC<49><43><EFBFBD><EFBFBD>Ϊ0<CEAA><30>ʾʹ<CABE><CAB9>Ӳ<EFBFBD><D3B2>SPI<50><49><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ϊ1<CEAA><31>ʾʹ<CABE><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IIC<49><43><EFBFBD><EFBFBD>
#define ICM20602_USE_SOFT_IIC (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
#if ICM20602_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
#define ICM20602_SOFT_IIC_DELAY (59 ) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
#define ICM20602_SCL_PIN (P20_11) // <20><><EFBFBD><EFBFBD> IIC SCL <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ICM20602 <20><> SCL <20><><EFBFBD><EFBFBD>
#define ICM20602_SDA_PIN (P20_14) // <20><><EFBFBD><EFBFBD> IIC SDA <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ICM20602 <20><> SDA <20><><EFBFBD><EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
#else
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
#define ICM20602_SPI_SPEED (10 * 1000 * 1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
#define ICM20602_SPI (SPI_0) // Ӳ<><D3B2> SPI <20><>
#define ICM20602_SPC_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
#define ICM20602_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
#define ICM20602_SDO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
#endif
#define ICM20602_CS_PIN (P20_13) // CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
#define ICM20602_CS(x) ((x) ? (gpio_high(ICM20602_CS_PIN)) : (gpio_low(ICM20602_CS_PIN)))
typedef enum
{
ICM20602_ACC_SAMPLE_SGN_2G , // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><>2G (ACC = Accelerometer <20><><EFBFBD>ٶȼ<D9B6>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (G = g <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD> g<><67>9.80 m/s^2)
ICM20602_ACC_SAMPLE_SGN_4G , // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><>4G (ACC = Accelerometer <20><><EFBFBD>ٶȼ<D9B6>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (G = g <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD> g<><67>9.80 m/s^2)
ICM20602_ACC_SAMPLE_SGN_8G , // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><>8G (ACC = Accelerometer <20><><EFBFBD>ٶȼ<D9B6>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (G = g <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD> g<><67>9.80 m/s^2)
ICM20602_ACC_SAMPLE_SGN_16G, // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><>16G (ACC = Accelerometer <20><><EFBFBD>ٶȼ<D9B6>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (G = g <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD> g<><67>9.80 m/s^2)
}icm20602_acc_sample_config;
typedef enum
{
ICM20602_GYRO_SAMPLE_SGN_250DPS , // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>250DPS (GYRO = Gyroscope <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (DPS = Degree Per Second <20><><EFBFBD>ٶȵ<D9B6>λ <20><>/S)
ICM20602_GYRO_SAMPLE_SGN_500DPS , // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>500DPS (GYRO = Gyroscope <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (DPS = Degree Per Second <20><><EFBFBD>ٶȵ<D9B6>λ <20><>/S)
ICM20602_GYRO_SAMPLE_SGN_1000DPS, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>1000DPS (GYRO = Gyroscope <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (DPS = Degree Per Second <20><><EFBFBD>ٶȵ<D9B6>λ <20><>/S)
ICM20602_GYRO_SAMPLE_SGN_2000DPS, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>2000DPS (GYRO = Gyroscope <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (DPS = Degree Per Second <20><><EFBFBD>ٶȵ<D9B6>λ <20><>/S)
}icm20602_gyro_sample_config;
#define ICM20602_ACC_SAMPLE_DEFAULT ( ICM20602_ACC_SAMPLE_SGN_8G ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϵ<EFBFBD> <20><><EFBFBD>ٶȼ<D9B6> <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ICM20602_GYRO_SAMPLE_DEFAULT ( ICM20602_GYRO_SAMPLE_SGN_2000DPS ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ICM20602_TIMEOUT_COUNT (0x00FF) // ICM20602 <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
//================================================<3D><><EFBFBD><EFBFBD> ICM20602 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//================================================<3D><><EFBFBD><EFBFBD> ICM20602 <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
#define ICM20602_DEV_ADDR (0x69) // SA0<41>ӵأ<D3B5>0x68 SA0<41><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x69 ģ<><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ICM20602_SPI_W (0x00)
#define ICM20602_SPI_R (0x80)
#define ICM20602_XG_OFFS_TC_H (0x04)
#define ICM20602_XG_OFFS_TC_L (0x05)
#define ICM20602_YG_OFFS_TC_H (0x07)
#define ICM20602_YG_OFFS_TC_L (0x08)
#define ICM20602_ZG_OFFS_TC_H (0x0A)
#define ICM20602_ZG_OFFS_TC_L (0x0B)
#define ICM20602_SELF_TEST_X_ACCEL (0x0D)
#define ICM20602_SELF_TEST_Y_ACCEL (0x0E)
#define ICM20602_SELF_TEST_Z_ACCEL (0x0F)
#define ICM20602_XG_OFFS_USRH (0x13)
#define ICM20602_XG_OFFS_USRL (0x14)
#define ICM20602_YG_OFFS_USRH (0x15)
#define ICM20602_YG_OFFS_USRL (0x16)
#define ICM20602_ZG_OFFS_USRH (0x17)
#define ICM20602_ZG_OFFS_USRL (0x18)
#define ICM20602_SMPLRT_DIV (0x19)
#define ICM20602_CONFIG (0x1A)
#define ICM20602_GYRO_CONFIG (0x1B)
#define ICM20602_ACCEL_CONFIG (0x1C)
#define ICM20602_ACCEL_CONFIG_2 (0x1D)
#define ICM20602_LP_MODE_CFG (0x1E)
#define ICM20602_ACCEL_WOM_X_THR (0x20)
#define ICM20602_ACCEL_WOM_Y_THR (0x21)
#define ICM20602_ACCEL_WOM_Z_THR (0x22)
#define ICM20602_FIFO_EN (0x23)
#define ICM20602_FSYNC_INT (0x36)
#define ICM20602_INT_PIN_CFG (0x37)
#define ICM20602_INT_ENABLE (0x38)
#define ICM20602_FIFO_WM_INT_STATUS (0x39)
#define ICM20602_INT_STATUS (0x3A)
#define ICM20602_ACCEL_XOUT_H (0x3B)
#define ICM20602_ACCEL_XOUT_L (0x3C)
#define ICM20602_ACCEL_YOUT_H (0x3D)
#define ICM20602_ACCEL_YOUT_L (0x3E)
#define ICM20602_ACCEL_ZOUT_H (0x3F)
#define ICM20602_ACCEL_ZOUT_L (0x40)
#define ICM20602_TEMP_OUT_H (0x41)
#define ICM20602_TEMP_OUT_L (0x42)
#define ICM20602_GYRO_XOUT_H (0x43)
#define ICM20602_GYRO_XOUT_L (0x44)
#define ICM20602_GYRO_YOUT_H (0x45)
#define ICM20602_GYRO_YOUT_L (0x46)
#define ICM20602_GYRO_ZOUT_H (0x47)
#define ICM20602_GYRO_ZOUT_L (0x48)
#define ICM20602_SELF_TEST_X_GYRO (0x50)
#define ICM20602_SELF_TEST_Y_GYRO (0x51)
#define ICM20602_SELF_TEST_Z_GYRO (0x52)
#define ICM20602_FIFO_WM_TH1 (0x60)
#define ICM20602_FIFO_WM_TH2 (0x61)
#define ICM20602_SIGNAL_PATH_RESET (0x68)
#define ICM20602_ACCEL_INTEL_CTRL (0x69)
#define ICM20602_USER_CTRL (0x6A)
#define ICM20602_PWR_MGMT_1 (0x6B)
#define ICM20602_PWR_MGMT_2 (0x6C)
#define ICM20602_I2C_IF (0x70)
#define ICM20602_FIFO_COUNTH (0x72)
#define ICM20602_FIFO_COUNTL (0x73)
#define ICM20602_FIFO_R_W (0x74)
#define ICM20602_WHO_AM_I (0x75)
#define ICM20602_XA_OFFSET_H (0x77)
#define ICM20602_XA_OFFSET_L (0x78)
#define ICM20602_YA_OFFSET_H (0x7A)
#define ICM20602_YA_OFFSET_L (0x7B)
#define ICM20602_ZA_OFFSET_H (0x7D)
#define ICM20602_ZA_OFFSET_L (0x7E)
#define ICM20602_ACC_SAMPLE (0x10) // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ϊ:0x00 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16384 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ:0x08 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8192 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ:0x10 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4096 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ:0x18 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2048 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
#define ICM20602_GYR_SAMPLE (0x18) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ϊ:0x00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>131 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x08 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>65.5 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x10 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>32.8 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x18 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>16.4 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
//================================================<3D><><EFBFBD><EFBFBD> ICM20602 <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
//================================================<3D><><EFBFBD><EFBFBD> ICM20602 ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>================================================
extern int16 icm20602_gyro_x, icm20602_gyro_y, icm20602_gyro_z; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GYRO (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
extern int16 icm20602_acc_x, icm20602_acc_y, icm20602_acc_z; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> ACC (accelerometer <20><><EFBFBD>ٶȼ<D9B6>)
extern float icm20602_transition_factor[2]; // ת<><D7AA>ʵ<EFBFBD><CAB5>ֵ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
//================================================<3D><><EFBFBD><EFBFBD> ICM20602 ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>================================================
//================================================<3D><><EFBFBD><EFBFBD> ICM20602 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
void icm20602_get_acc (void); // <20><>ȡ ICM20602 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
void icm20602_get_gyro (void); // <20><>ȡ ICM20602 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 icm20602_init (void); // <20><>ʼ<EFBFBD><CABC> ICM20602
//================================================<3D><><EFBFBD><EFBFBD> ICM20602 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//================================================<3D><><EFBFBD><EFBFBD> ICM20602 <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>================================================
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ICM20602 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> acc_value <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> float data = icm20602_acc_transition(icm20602_acc_x); // <20><>λΪ g(m/s^2)
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
#define icm20602_acc_transition(acc_value) ((float)(acc_value) / icm20602_transition_factor[0])
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ICM20602 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> gyro_value <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> float data = icm20602_gyro_transition(icm20602_gyro_x); // <20><>λΪ <20><>/s
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
#define icm20602_gyro_transition(gyro_value) ((float)(gyro_value) / icm20602_transition_factor[1])
//================================================<3D><><EFBFBD><EFBFBD> ICM20602 <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>================================================
#endif

View File

@@ -0,0 +1,339 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_imu660ra
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
* 2023-09-15 pudding ת<><D7AA>ʵ<EFBFBD><CAB5>ֵ<EFBFBD><D6B5>ϸ˵<CFB8><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
* SCL/SPC <20>鿴 zf_device_imu660ra.h <20><> IMU660RA_SPC_PIN <20><EFBFBD><EAB6A8>
* SDA/DSI <20>鿴 zf_device_imu660ra.h <20><> IMU660RA_SDI_PIN <20><EFBFBD><EAB6A8>
* SA0/SDO <20>鿴 zf_device_imu660ra.h <20><> IMU660RA_SDO_PIN <20><EFBFBD><EAB6A8>
* CS <20>鿴 zf_device_imu660ra.h <20><> IMU660RA_CS_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
* SCL/SPC <20>鿴 zf_device_imu660ra.h <20><> IMU660RA_SCL_PIN <20><EFBFBD><EAB6A8>
* SDA/DSI <20>鿴 zf_device_imu660ra.h <20><> IMU660RA_SDA_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "zf_device_config.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
#include "zf_driver_soft_iic.h"
#include "zf_driver_spi.h"
#include "zf_device_imu660ra.h"
int16 imu660ra_gyro_x = 0, imu660ra_gyro_y = 0, imu660ra_gyro_z = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GYRO (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int16 imu660ra_acc_x = 0, imu660ra_acc_y = 0, imu660ra_acc_z = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> ACC (accelerometer <20><><EFBFBD>ٶȼ<D9B6>)
float imu660ra_transition_factor[2] = {4096, 16.4}; // ת<><D7AA>ʵ<EFBFBD><CAB5>ֵ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
#if IMU660RA_USE_SOFT_IIC
static soft_iic_info_struct imu660ra_iic_struct;
#define imu660ra_write_register(reg, data) (soft_iic_write_8bit_register (&imu660ra_iic_struct, (reg), (data)))
#define imu660ra_write_registers(reg, data, len) (soft_iic_write_8bit_registers(&imu660ra_iic_struct, (reg), (data), (len)))
#define imu660ra_read_register(reg) (soft_iic_read_8bit_register (&imu660ra_iic_struct, (reg)))
#define imu660ra_read_registers(reg, data, len) (soft_iic_read_8bit_registers (&imu660ra_iic_struct, (reg), (data), (len)))
#else
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU660RA д<>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu660ra_write_register(IMU660RA_PWR_CONF, 0x00); // <20>رո߼<D5B8>ʡ<EFBFBD><CAA1>ģʽ
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void imu660ra_write_register(uint8 reg, uint8 data)
{
IMU660RA_CS(0);
spi_write_8bit_register(IMU660RA_SPI, reg | IMU660RA_SPI_W, data);
IMU660RA_CS(1);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU660RA д<><D0B4><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu660ra_write_registers(IMU660RA_INIT_DATA, imu660ra_config_file, sizeof(imu660ra_config_file));
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void imu660ra_write_registers(uint8 reg, const uint8 *data, uint32 len)
{
IMU660RA_CS(0);
spi_write_8bit_registers(IMU660RA_SPI, reg | IMU660RA_SPI_W, data, len);
IMU660RA_CS(1);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU660RA <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu660ra_read_register(IMU660RA_CHIP_ID);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 imu660ra_read_register(uint8 reg)
{
uint8 data[2];
IMU660RA_CS(0);
spi_read_8bit_registers(IMU660RA_SPI, reg | IMU660RA_SPI_R, data, 2);
IMU660RA_CS(1);
return data[1];
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU660RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu660ra_read_registers(IMU660RA_ACC_ADDRESS, dat, 6);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void imu660ra_read_registers(uint8 reg, uint8 *data, uint32 len)
{
uint8 temp_data[8];
IMU660RA_CS(0);
spi_read_8bit_registers(IMU660RA_SPI, reg | IMU660RA_SPI_R, temp_data, len + 1);
IMU660RA_CS(1);
for(int i = 0; i < len; i ++)
{
*(data ++) = temp_data[i + 1];
}
}
#endif
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU660RA <20>Լ<EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu660ra_self_check();
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 imu660ra_self_check (void)
{
uint8 dat = 0, return_state = 0;
uint16 timeout_count = 0;
do
{
if(IMU660RA_TIMEOUT_COUNT < timeout_count ++)
{
return_state = 1;
break;
}
dat = imu660ra_read_register(IMU660RA_CHIP_ID);
system_delay_ms(1);
}while(0x24 != dat); // <20><>ȡ<EFBFBD>豸ID<49>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>0X24<32><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0X24<32><34><EFBFBD><EFBFBD>Ϊû<CEAA><C3BB><EFBFBD><EFBFBD>
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ IMU660RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu660ra_get_acc(); // ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ ʹ<><CAB9> SPI <20>IJɼ<C4B2>ʱ<EFBFBD><CAB1>Ϊ69us
// ʹ<><CAB9> IIC <20>IJɼ<C4B2>ʱ<EFBFBD><CAB1>Ϊ126us <20>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ٶȼƵ<C8BC>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ʱ<EFBFBD><CAB1>һ<EFBFBD>µ<EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD>Ƕ<EFBFBD>ֻ<EFBFBD>Ƕ<EFBFBD>ȡ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void imu660ra_get_acc (void)
{
uint8 dat[6];
imu660ra_read_registers(IMU660RA_ACC_ADDRESS, dat, 6);
imu660ra_acc_x = (int16)(((uint16)dat[1]<<8 | dat[0]));
imu660ra_acc_y = (int16)(((uint16)dat[3]<<8 | dat[2]));
imu660ra_acc_z = (int16)(((uint16)dat[5]<<8 | dat[4]));
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ IMU660RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu660ra_get_gyro(); // ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ ʹ<><CAB9> SPI <20>IJɼ<C4B2>ʱ<EFBFBD><CAB1>Ϊ69us
// ʹ<><CAB9> IIC <20>IJɼ<C4B2>ʱ<EFBFBD><CAB1>Ϊ126us
//-------------------------------------------------------------------------------------------------------------------
void imu660ra_get_gyro (void)
{
uint8 dat[6];
imu660ra_read_registers(IMU660RA_GYRO_ADDRESS, dat, 6);
imu660ra_gyro_x = (int16)(((uint16)dat[1]<<8 | dat[0]));
imu660ra_gyro_y = (int16)(((uint16)dat[3]<<8 | dat[2]));
imu660ra_gyro_z = (int16)(((uint16)dat[5]<<8 | dat[4]));
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD><CABC> IMU660RA
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu660ra_init();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 imu660ra_init (void)
{
uint8 return_state = 0;
system_delay_ms(20); // <20>ȴ<EFBFBD><C8B4><EFBFBD>ϵ<EFBFBD><CFB5>ɹ<EFBFBD>
#if IMU660RA_USE_SOFT_IIC
soft_iic_init(&imu660ra_iic_struct, IMU660RA_DEV_ADDR, IMU660RA_SOFT_IIC_DELAY, IMU660RA_SCL_PIN, IMU660RA_SDA_PIN); // <20><><EFBFBD><EFBFBD> IMU660RA <20><> IIC<49>˿<EFBFBD>
#else
spi_init(IMU660RA_SPI, SPI_MODE0, IMU660RA_SPI_SPEED, IMU660RA_SPC_PIN, IMU660RA_SDI_PIN, IMU660RA_SDO_PIN, SPI_CS_NULL); // <20><><EFBFBD><EFBFBD> IMU660RA <20><> SPI<50>˿<EFBFBD>
gpio_init(IMU660RA_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // <20><><EFBFBD><EFBFBD> IMU660RA <20><> CS<43>˿<EFBFBD>
imu660ra_read_register(IMU660RA_CHIP_ID); // <20><>ȡһ<C8A1><D2BB><EFBFBD>豸ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ΪSPIģʽ
#endif
do{
if(imu660ra_self_check()) // IMU660RA<52>Լ<EFBFBD>
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ô<EFBFBD><C3B4><EFBFBD><EFBFBD> imu660ra <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܾ<EFBFBD><DCBE>ǻ<EFBFBD><C7BB><EFBFBD>
zf_log(0, "imu660ra self check error.");
return_state = 1;
break;
}
imu660ra_write_register(IMU660RA_PWR_CONF, 0x00); // <20>رո߼<D5B8>ʡ<EFBFBD><CAA1>ģʽ
system_delay_ms(1);
imu660ra_write_register(IMU660RA_INIT_CTRL, 0x00); // <20><>ʼ<EFBFBD><CABC>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
imu660ra_write_registers(IMU660RA_INIT_DATA, imu660ra_config_file, sizeof(imu660ra_config_file)); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
imu660ra_write_register(IMU660RA_INIT_CTRL, 0x01); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
system_delay_ms(20);
if(1 != imu660ra_read_register(IMU660RA_INT_STA)) // <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ô<EFBFBD><C3B4><EFBFBD><EFBFBD> imu660ra <20><><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܾ<EFBFBD><DCBE>ǻ<EFBFBD><C7BB><EFBFBD>
zf_log(0, "imu660ra init error.");
return_state = 1;
break;
}
imu660ra_write_register(IMU660RA_PWR_CTRL, 0x0E); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǡ<EFBFBD><C7A1><EFBFBD><EFBFBD>ٶȡ<D9B6><C8A1>¶ȴ<C2B6><C8B4><EFBFBD><EFBFBD><EFBFBD>
imu660ra_write_register(IMU660RA_ACC_CONF, 0xA7); // <20><><EFBFBD>ٶȲɼ<C8B2><C9BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD> 50Hz <20><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>
imu660ra_write_register(IMU660RA_GYR_CONF, 0xA9); // <20><><EFBFBD><EFBFBD><EFBFBD>Dzɼ<C7B2><C9BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD> 200Hz <20><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>
// IMU660RA_ACC_SAMPLE<4C>Ĵ<EFBFBD><C4B4><EFBFBD> <20><><EFBFBD><EFBFBD>Ϊ25<32><35><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU660RA<52>ļ<EFBFBD><C4BC>ٶ<EFBFBD><D9B6><EFBFBD>Ưϵ<C6AF><CFB5>Ϊ 0.004%/K <20><>ֵ<EFBFBD><D6B5>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>Ϊ <20><>0.25mg/K
// <20><><EFBFBD><EFBFBD>Ϊ:0x00 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16384 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ:0x01 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8192 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ:0x02 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4096 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ:0x03 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2048 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
switch(IMU660RA_ACC_SAMPLE_DEFAULT)
{
case IMU660RA_ACC_SAMPLE_SGN_2G:
{
imu660ra_write_register(IMU660RA_ACC_RANGE, 0x00);
imu660ra_transition_factor[0] = 16384;
}break;
case IMU660RA_ACC_SAMPLE_SGN_4G:
{
imu660ra_write_register(IMU660RA_ACC_RANGE, 0x01);
imu660ra_transition_factor[0] = 8192;
}break;
case IMU660RA_ACC_SAMPLE_SGN_8G:
{
imu660ra_write_register(IMU660RA_ACC_RANGE, 0x02);
imu660ra_transition_factor[0] = 4096;
}break;
case IMU660RA_ACC_SAMPLE_SGN_16G:
{
imu660ra_write_register(IMU660RA_ACC_RANGE, 0x03);
imu660ra_transition_factor[0] = 2048;
}break;
default:
{
zf_log(0, "IMU660RA_ACC_SAMPLE_DEFAULT set error.");
return_state = 1;
}break;
}
if(1 == return_state)
{
break;
}
// IMU660RA_GYR_SAMPLE<4C>Ĵ<EFBFBD><C4B4><EFBFBD> <20><><EFBFBD><EFBFBD>Ϊ25<32><35><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU660RA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ưϵ<C6AF><CFB5>Ϊ 0.02%/K <20><>ֵ<EFBFBD><D6B5>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>Ϊ <20><>0.015dps/K
// <20><><EFBFBD><EFBFBD>Ϊ:0x00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>16.384 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x01 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>32.768 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x02 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>65.536 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x03 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>131.072 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x04 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>262.144 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
switch(IMU660RA_GYRO_SAMPLE_DEFAULT)
{
case IMU660RA_GYRO_SAMPLE_SGN_125DPS:
{
imu660ra_write_register(IMU660RA_GYR_RANGE, 0x04);
imu660ra_transition_factor[1] = 262.144;
}break;
case IMU660RA_GYRO_SAMPLE_SGN_250DPS:
{
imu660ra_write_register(IMU660RA_GYR_RANGE, 0x03);
imu660ra_transition_factor[1] = 131.072;
}break;
case IMU660RA_GYRO_SAMPLE_SGN_500DPS:
{
imu660ra_write_register(IMU660RA_GYR_RANGE, 0x02);
imu660ra_transition_factor[1] = 65.536;
}break;
case IMU660RA_GYRO_SAMPLE_SGN_1000DPS:
{
imu660ra_write_register(IMU660RA_GYR_RANGE, 0x01);
imu660ra_transition_factor[1] = 32.768;
}break;
case IMU660RA_GYRO_SAMPLE_SGN_2000DPS:
{
imu660ra_write_register(IMU660RA_GYR_RANGE, 0x00);
imu660ra_transition_factor[1] = 16.384;
}break;
default:
{
zf_log(0, "IMU660RA_GYRO_SAMPLE_DEFAULT set error.");
return_state = 1;
}break;
}
if(1 == return_state)
{
break;
}
}while(0);
return return_state;
}

View File

@@ -0,0 +1,179 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_imu660ra
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
* 2023-09-15 pudding ת<><D7AA>ʵ<EFBFBD><CAB5>ֵ<EFBFBD><D6B5>ϸ˵<CFB8><CBB5>
* 2024-01-30 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
* SCL/SPC <20>鿴 zf_device_imu660ra.h <20><> IMU660RA_SPC_PIN <20><EFBFBD><EAB6A8>
* SDA/DSI <20>鿴 zf_device_imu660ra.h <20><> IMU660RA_SDI_PIN <20><EFBFBD><EAB6A8>
* SA0/SDO <20>鿴 zf_device_imu660ra.h <20><> IMU660RA_SDO_PIN <20><EFBFBD><EAB6A8>
* CS <20>鿴 zf_device_imu660ra.h <20><> IMU660RA_CS_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
* SCL/SPC <20>鿴 zf_device_imu660ra.h <20><> IMU660RA_SCL_PIN <20><EFBFBD><EAB6A8>
* SDA/DSI <20>鿴 zf_device_imu660ra.h <20><> IMU660RA_SDA_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
********************************************************************************************************************/
#ifndef _zf_device_imu660ra_h_
#define _zf_device_imu660ra_h_
#include "zf_common_typedef.h"
//================================================<3D><><EFBFBD><EFBFBD> IMU660RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
// IMU660RA_USE_SOFT_IIC<49><43><EFBFBD><EFBFBD>Ϊ0<CEAA><30>ʾʹ<CABE><CAB9>Ӳ<EFBFBD><D3B2>SPI<50><49><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ϊ1<CEAA><31>ʾʹ<CABE><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IIC<49><43><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IMU660RA_USE_SOFT_IIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD><EBB2A2><EFBFBD>س<EFBFBD><D8B3>򣬵<EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ҫ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ
#define IMU660RA_USE_SOFT_IIC (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
#if IMU660RA_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
#define IMU660RA_SOFT_IIC_DELAY (59) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
#define IMU660RA_SCL_PIN (P20_11) // <20><><EFBFBD><EFBFBD> IIC SCL <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> IMU660RA <20><> SCL <20><><EFBFBD><EFBFBD>
#define IMU660RA_SDA_PIN (P20_14) // <20><><EFBFBD><EFBFBD> IIC SDA <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> IMU660RA <20><> SDA <20><><EFBFBD><EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
#else
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
#define IMU660RA_SPI_SPEED (10 * 1000 * 1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
#define IMU660RA_SPI (SPI_0) // Ӳ<><D3B2> SPI <20><>
#define IMU660RA_SPC_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
#define IMU660RA_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
#define IMU660RA_SDO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
#endif
#define IMU660RA_CS_PIN (P20_13) // CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
#define IMU660RA_CS(x) ((x) ? (gpio_high(IMU660RA_CS_PIN)) : (gpio_low(IMU660RA_CS_PIN)))
typedef enum
{
IMU660RA_ACC_SAMPLE_SGN_2G , // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><>2G (ACC = Accelerometer <20><><EFBFBD>ٶȼ<D9B6>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (G = g <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD> g<><67>9.80 m/s^2)
IMU660RA_ACC_SAMPLE_SGN_4G , // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><>4G (ACC = Accelerometer <20><><EFBFBD>ٶȼ<D9B6>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (G = g <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD> g<><67>9.80 m/s^2)
IMU660RA_ACC_SAMPLE_SGN_8G , // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><>8G (ACC = Accelerometer <20><><EFBFBD>ٶȼ<D9B6>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (G = g <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD> g<><67>9.80 m/s^2)
IMU660RA_ACC_SAMPLE_SGN_16G, // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><>16G (ACC = Accelerometer <20><><EFBFBD>ٶȼ<D9B6>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (G = g <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD> g<><67>9.80 m/s^2)
}imu660ra_acc_sample_config;
typedef enum
{
IMU660RA_GYRO_SAMPLE_SGN_125DPS , // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>125DPS (GYRO = Gyroscope <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (DPS = Degree Per Second <20><><EFBFBD>ٶȵ<D9B6>λ <20><>/S)
IMU660RA_GYRO_SAMPLE_SGN_250DPS , // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>250DPS (GYRO = Gyroscope <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (DPS = Degree Per Second <20><><EFBFBD>ٶȵ<D9B6>λ <20><>/S)
IMU660RA_GYRO_SAMPLE_SGN_500DPS , // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>500DPS (GYRO = Gyroscope <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (DPS = Degree Per Second <20><><EFBFBD>ٶȵ<D9B6>λ <20><>/S)
IMU660RA_GYRO_SAMPLE_SGN_1000DPS, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>1000DPS (GYRO = Gyroscope <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (DPS = Degree Per Second <20><><EFBFBD>ٶȵ<D9B6>λ <20><>/S)
IMU660RA_GYRO_SAMPLE_SGN_2000DPS, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>2000DPS (GYRO = Gyroscope <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (DPS = Degree Per Second <20><><EFBFBD>ٶȵ<D9B6>λ <20><>/S)
}imu660ra_gyro_sample_config;
#define IMU660RA_ACC_SAMPLE_DEFAULT ( IMU660RA_ACC_SAMPLE_SGN_8G ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϵ<EFBFBD> <20><><EFBFBD>ٶȼ<D9B6> <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IMU660RA_GYRO_SAMPLE_DEFAULT ( IMU660RA_GYRO_SAMPLE_SGN_2000DPS ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IMU660RA_TIMEOUT_COUNT (0x00FF) // IMU660 <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
//================================================<3D><><EFBFBD><EFBFBD> IMU660RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//================================================<3D><><EFBFBD><EFBFBD> IMU660RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
#define IMU660RA_DEV_ADDR (0x69) // SA0<41>ӵأ<D3B5>0x68 SA0<41><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x69 ģ<><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IMU660RA_SPI_W (0x00)
#define IMU660RA_SPI_R (0x80)
#define IMU660RA_CHIP_ID (0x00)
#define IMU660RA_PWR_CONF (0x7C)
#define IMU660RA_PWR_CTRL (0x7D)
#define IMU660RA_INIT_CTRL (0x59)
#define IMU660RA_INIT_DATA (0x5E)
#define IMU660RA_INT_STA (0x21)
#define IMU660RA_ACC_ADDRESS (0x0C)
#define IMU660RA_GYRO_ADDRESS (0x12)
#define IMU660RA_ACC_CONF (0x40)
#define IMU660RA_ACC_RANGE (0x41)
#define IMU660RA_GYR_CONF (0x42)
#define IMU660RA_GYR_RANGE (0x43)
#define IMU660RA_ACC_SAMPLE (0x02) // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ϊ25<32><35><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU660RA<52>ļ<EFBFBD><C4BC>ٶ<EFBFBD><D9B6><EFBFBD>Ưϵ<C6AF><CFB5>Ϊ 0.004%/K <20><>ֵ<EFBFBD><D6B5>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>Ϊ <20><>0.25mg/K
// <20><><EFBFBD><EFBFBD>Ϊ:0x00 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 16384 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λ<EFBFBD><CEBB>g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ:0x01 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 8192 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λ<EFBFBD><CEBB>g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ:0x02 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 4096 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λ<EFBFBD><CEBB>g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ:0x03 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 2048 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λ<EFBFBD><CEBB>g(m/s^2)
#define IMU660RA_GYR_SAMPLE (0x00) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ϊ25<32><35><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU660RA<52><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ưϵ<C6AF><CFB5>Ϊ 0.02%/K <20><>ֵ<EFBFBD><D6B5>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>Ϊ <20><>0.015dps/K
// <20><><EFBFBD><EFBFBD>Ϊ:0x00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>16.384 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x01 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>32.768 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x02 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>65.536 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x03 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>131.072 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x04 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>262.144 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
//================================================<3D><><EFBFBD><EFBFBD> IMU660RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
//================================================<3D><><EFBFBD><EFBFBD> IMU660RA ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>================================================
extern int16 imu660ra_gyro_x, imu660ra_gyro_y, imu660ra_gyro_z; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GYRO (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
extern int16 imu660ra_acc_x, imu660ra_acc_y, imu660ra_acc_z; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> ACC (accelerometer <20><><EFBFBD>ٶȼ<D9B6>)
extern float imu660ra_transition_factor[2]; // ת<><D7AA>ʵ<EFBFBD><CAB5>ֵ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
//================================================<3D><><EFBFBD><EFBFBD> IMU660RA ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>================================================
//================================================<3D><><EFBFBD><EFBFBD> IMU660RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
void imu660ra_get_acc (void); // <20><>ȡ IMU660RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
void imu660ra_get_gyro (void); // <20><>ȡ IMU660RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 imu660ra_init (void); // <20><>ʼ<EFBFBD><CABC> IMU660RA
//================================================<3D><><EFBFBD><EFBFBD> IMU660RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//================================================<3D><><EFBFBD><EFBFBD> IMU660RA <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>================================================
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> IMU660RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> acc_value <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> float data = imu660ra_acc_transition(imu660ra_acc_x); // <20><>λΪ g(m/s^2)
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
#define imu660ra_acc_transition(acc_value) ((float)(acc_value) / imu660ra_transition_factor[0])
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> IMU660RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> gyro_value <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> float data = imu660ra_gyro_transition(imu660ra_gyro_x); // <20><>λΪ <20><>/s
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
#define imu660ra_gyro_transition(gyro_value) ((float)(gyro_value) / imu660ra_transition_factor[1])
//================================================<3D><><EFBFBD><EFBFBD> IMU660RA <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>================================================
#endif

View File

@@ -0,0 +1,530 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_imu963ra
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20><EFBFBD><EAB6A8>
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20><EFBFBD><EAB6A8>
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20><EFBFBD><EAB6A8>
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SCL_PIN <20><EFBFBD><EAB6A8>
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDA_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "zf_driver_delay.h"
#include "zf_driver_spi.h"
#include "zf_driver_soft_iic.h"
#include "zf_device_imu963ra.h"
int16 imu963ra_gyro_x = 0, imu963ra_gyro_y = 0, imu963ra_gyro_z = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GYRO (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int16 imu963ra_acc_x = 0, imu963ra_acc_y = 0, imu963ra_acc_z = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> ACC (accelerometer <20><><EFBFBD>ٶȼ<D9B6>)
int16 imu963ra_mag_x = 0, imu963ra_mag_y = 0, imu963ra_mag_z = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MAG (magnetometer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
float imu963ra_transition_factor[3] = {4098, 14.3, 3000}; // ת<><D7AA>ʵ<EFBFBD><CAB5>ֵ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
#if IMU963RA_USE_SOFT_IIC
static soft_iic_info_struct imu963ra_iic_struct;
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU963RA д<>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x00);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
#define imu963ra_write_acc_gyro_register(reg,data) (soft_iic_write_8bit_register(&imu963ra_iic_struct,reg,data))
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU963RA <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
#define imu963ra_read_acc_gyro_register(reg) (soft_iic_sccb_read_register(&imu963ra_iic_struct,reg))
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_A, dat, 6);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
#define imu963ra_read_acc_gyro_registers(reg,data,len) (soft_iic_read_8bit_registers(&imu963ra_iic_struct,reg,data,len))
#else
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU963RA д<>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x00);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void imu963ra_write_acc_gyro_register (uint8 reg, uint8 data)
{
IMU963RA_CS(0);
spi_write_8bit_register(IMU963RA_SPI, reg | IMU963RA_SPI_W, data);
IMU963RA_CS(1);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU963RA <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 imu963ra_read_acc_gyro_register (uint8 reg)
{
uint8 data = 0;
IMU963RA_CS(0);
data = spi_read_8bit_register(IMU963RA_SPI, reg | IMU963RA_SPI_R);
IMU963RA_CS(1);
return data;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_A, dat, 6);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void imu963ra_read_acc_gyro_registers (uint8 reg, uint8 *data, uint32 len)
{
IMU963RA_CS(0);
spi_read_8bit_registers(IMU963RA_SPI, reg | IMU963RA_SPI_R, data, len);
IMU963RA_CS(1);
}
#endif
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU963RA <20><>Ϊ IIC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> addr Ŀ<><C4BF><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg Ŀ<><C4BF><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-ʧ<><CAA7> 0-<2D>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x80);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 imu963ra_write_mag_register (uint8 addr, uint8 reg, uint8 data)
{
uint8 return_state = 0;
uint16 timeout_count = 0;
addr = addr << 1;
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x00); // <20>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 0); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫд<D2AA><D0B4><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
imu963ra_write_acc_gyro_register(IMU963RA_DATAWRITE_SLV0, data); // <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
// <20>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
while(0 == (0x80 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
{
if(IMU963RA_TIMEOUT_COUNT < timeout_count ++)
{
return_state = 1;
break;
}
system_delay_ms(2);
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU963RA <20><>Ϊ IIC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> addr Ŀ<><C4BF><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg Ŀ<><C4BF><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu963ra_read_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CHIP_ID);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 imu963ra_read_mag_register (uint8 addr, uint8 reg)
{
uint16 timeout_count = 0;
addr = addr << 1;
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x01);
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x4C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
// <20>ȴ<EFBFBD>ͨѶ<CDA8>ɹ<EFBFBD>
while(0 == (0x01 & imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER)))
{
if(IMU963RA_TIMEOUT_COUNT < timeout_count ++)
{
break;
}
system_delay_ms(2);
}
return (imu963ra_read_acc_gyro_register(IMU963RA_SENSOR_HUB_1)); // <20><><EFBFBD>ض<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU963RA <20><>Ϊ IIC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> addr Ŀ<><C4BF><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> reg Ŀ<><C4BF><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu963ra_connect_mag(IMU963RA_MAG_ADDR, IMU963RA_MAG_OUTX_L);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void imu963ra_connect_mag (uint8 addr, uint8 reg)
{
addr = addr << 1;
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_ADD, addr | 1); // <20><><EFBFBD>õشżƵ<C5BC>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><38><CEBB>I2C<32><43>ַ<EFBFBD><D6B7> 0x2C
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_SUBADD, reg); // <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
imu963ra_write_acc_gyro_register(IMU963RA_SLV0_CONFIG, 0x06);
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x6C); // <20><><EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> I2C<32><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu963ra_acc_gyro_self_check();
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 imu963ra_acc_gyro_self_check (void)
{
uint8 return_state = 0;
uint8 dat = 0;
uint16 timeout_count = 0;
while(0x6B != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
{
if(IMU963RA_TIMEOUT_COUNT < timeout_count ++)
{
return_state = 1;
break;
}
dat = imu963ra_read_acc_gyro_register(IMU963RA_WHO_AM_I);
system_delay_ms(10);
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu963ra_mag_self_check();
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 imu963ra_mag_self_check (void)
{
uint8 return_state = 0;
uint8 dat = 0;
uint16 timeout_count = 0;
while(0xff != dat) // <20>ж<EFBFBD> ID <20>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
{
if(IMU963RA_TIMEOUT_COUNT < timeout_count ++)
{
return_state = 1;
break;
}
dat = imu963ra_read_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CHIP_ID);
system_delay_ms(10);
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ IMU963RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu963ra_get_acc();
// <20><>ע<EFBFBD><D7A2>Ϣ ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void imu963ra_get_acc (void)
{
uint8 dat[6];
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_A, dat, 6);
imu963ra_acc_x = (int16)(((uint16)dat[1]<<8 | dat[0]));
imu963ra_acc_y = (int16)(((uint16)dat[3]<<8 | dat[2]));
imu963ra_acc_z = (int16)(((uint16)dat[5]<<8 | dat[4]));
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu963ra_get_gyro();
// <20><>ע<EFBFBD><D7A2>Ϣ ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void imu963ra_get_gyro (void)
{
uint8 dat[6];
imu963ra_read_acc_gyro_registers(IMU963RA_OUTX_L_G, dat, 6);
imu963ra_gyro_x = (int16)(((uint16)dat[1]<<8 | dat[0]));
imu963ra_gyro_y = (int16)(((uint16)dat[3]<<8 | dat[2]));
imu963ra_gyro_z = (int16)(((uint16)dat[5]<<8 | dat[4]));
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu963ra_get_mag();
// <20><>ע<EFBFBD><D7A2>Ϣ ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void imu963ra_get_mag (void)
{
uint8 temp_status;
uint8 dat[6];
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40);
temp_status = imu963ra_read_acc_gyro_register(IMU963RA_STATUS_MASTER);
if(0x01 & temp_status)
{
imu963ra_read_acc_gyro_registers(IMU963RA_SENSOR_HUB_1, dat, 6);
imu963ra_mag_x = (int16)(((uint16)dat[1]<<8 | dat[0]));
imu963ra_mag_y = (int16)(((uint16)dat[3]<<8 | dat[2]));
imu963ra_mag_z = (int16)(((uint16)dat[5]<<8 | dat[4]));
}
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD><CABC> IMU963RA
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> imu963ra_init();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 imu963ra_init (void)
{
uint8 return_state = 0;
system_delay_ms(10); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ʱ
#if IMU963RA_USE_SOFT_IIC
soft_iic_init(&imu963ra_iic_struct, IMU963RA_DEV_ADDR, IMU963RA_SOFT_IIC_DELAY, IMU963RA_SCL_PIN, IMU963RA_SDA_PIN);
#else
spi_init(IMU963RA_SPI, SPI_MODE0, IMU963RA_SPI_SPEED, IMU963RA_SPC_PIN, IMU963RA_SDI_PIN, IMU963RA_SDO_PIN, SPI_CS_NULL);
gpio_init(IMU963RA_CS_PIN, GPO, GPIO_LOW, GPO_PUSH_PULL);
#endif
do
{
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00); // <20>ر<EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
imu963ra_write_acc_gyro_register(IMU963RA_CTRL3_C, 0x01); // <20><>λ<EFBFBD>
system_delay_ms(2);
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00); // <20>ر<EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(imu963ra_acc_gyro_self_check())
{
zf_log(0, "IMU963RA acc and gyro self check error.");
return_state = 1;
break;
}
imu963ra_write_acc_gyro_register(IMU963RA_INT1_CTRL, 0x03); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD><EFBFBD>ж<EFBFBD>
// IMU963RA_CTRL1_XL <20>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ϊ 0x30 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ <20><>2 G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 16393 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λ g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ 0x38 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ <20><>4 G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 8197 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λ g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ 0x3C <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ <20><>8 G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 4098 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λ g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ 0x34 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ <20><>16 G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 2049 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λ g(m/s^2)
switch(IMU963RA_ACC_SAMPLE_DEFAULT)
{
default:
{
zf_log(0, "IMU963RA_ACC_SAMPLE_DEFAULT set error.");
return_state = 1;
}break;
case IMU963RA_ACC_SAMPLE_SGN_2G:
{
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x30);
imu963ra_transition_factor[0] = 16393;
}break;
case IMU963RA_ACC_SAMPLE_SGN_4G:
{
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x38);
imu963ra_transition_factor[0] = 8197;
}break;
case IMU963RA_ACC_SAMPLE_SGN_8G:
{
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x3C);
imu963ra_transition_factor[0] = 4098;
}break;
case IMU963RA_ACC_SAMPLE_SGN_16G:
{
imu963ra_write_acc_gyro_register(IMU963RA_CTRL1_XL, 0x34);
imu963ra_transition_factor[0] = 2049;
}break;
}
if(1 == return_state)
{
break;
}
// IMU963RA_CTRL2_G <20>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ϊ 0x52 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ <20><>125 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 228.6 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λΪ <20><>/s
// <20><><EFBFBD><EFBFBD>Ϊ 0x50 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ <20><>250 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 114.3 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λΪ <20><>/s
// <20><><EFBFBD><EFBFBD>Ϊ 0x54 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ <20><>500 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 57.1 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λΪ <20><>/s
// <20><><EFBFBD><EFBFBD>Ϊ 0x58 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ <20><>1000 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 28.6 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λΪ <20><>/s
// <20><><EFBFBD><EFBFBD>Ϊ 0x5C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ <20><>2000 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 14.3 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λΪ <20><>/s
// <20><><EFBFBD><EFBFBD>Ϊ 0x51 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ <20><>4000 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 7.1 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λΪ <20><>/s
switch(IMU963RA_GYRO_SAMPLE_DEFAULT)
{
default:
{
zf_log(0, "IMU963RA_GYRO_SAMPLE_DEFAULT set error.");
return_state = 1;
}break;
case IMU963RA_GYRO_SAMPLE_SGN_125DPS:
{
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x52);
imu963ra_transition_factor[1] = 228.6;
}break;
case IMU963RA_GYRO_SAMPLE_SGN_250DPS:
{
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x50);
imu963ra_transition_factor[1] = 114.3;
}break;
case IMU963RA_GYRO_SAMPLE_SGN_500DPS:
{
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x54);
imu963ra_transition_factor[1] = 57.1;
}break;
case IMU963RA_GYRO_SAMPLE_SGN_1000DPS:
{
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x58);
imu963ra_transition_factor[1] = 28.6;
}break;
case IMU963RA_GYRO_SAMPLE_SGN_2000DPS:
{
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x5C);
imu963ra_transition_factor[1] = 14.3;
}break;
case IMU963RA_GYRO_SAMPLE_SGN_4000DPS:
{
imu963ra_write_acc_gyro_register(IMU963RA_CTRL2_G, 0x51);
imu963ra_transition_factor[1] = 7.1;
}break;
}
if(1 == return_state)
{
break;
}
imu963ra_write_acc_gyro_register(IMU963RA_CTRL3_C, 0x44); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
imu963ra_write_acc_gyro_register(IMU963RA_CTRL4_C, 0x02); // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
imu963ra_write_acc_gyro_register(IMU963RA_CTRL5_C, 0x00); // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
imu963ra_write_acc_gyro_register(IMU963RA_CTRL6_C, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼƸ<C8BC><C6B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ͨ<EFBFBD>˲<EFBFBD> 133hz
imu963ra_write_acc_gyro_register(IMU963RA_CTRL7_G, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ģʽ <20>رո<D8B1>ͨ<EFBFBD>˲<EFBFBD>
imu963ra_write_acc_gyro_register(IMU963RA_CTRL9_XL, 0x01); // <20>ر<EFBFBD>I3C<33>ӿ<EFBFBD>
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x40); // <20><><EFBFBD><EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õشż<D8B4>
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x80); // <20><>λI2C<32><43><EFBFBD><EFBFBD>
system_delay_ms(2);
imu963ra_write_acc_gyro_register(IMU963RA_MASTER_CONFIG, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>־
system_delay_ms(2);
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x80);// <20><>λ<EFBFBD><CEBB><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
system_delay_ms(2);
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL2, 0x00);
system_delay_ms(2);
if(imu963ra_mag_self_check())
{
zf_log(0, "IMU963RA mag self check error.");
return_state = 1;
break;
}
// IMU963RA_MAG_ADDR <20>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ϊ 0x09 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ 2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 12000 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λ G(<28><>˹)
// <20><><EFBFBD><EFBFBD>Ϊ 0x19 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ 8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 3000 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λ G(<28><>˹)
switch(IMU963RA_MAG_SAMPLE_DEFAULT)
{
default:
{
zf_log(0, "IMU963RA_MAG_SAMPLE_DEFAULT set error.");
return_state = 1;
}break;
case IMU963RA_MAG_SAMPLE_2G:
{
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL1, 0x09);
imu963ra_transition_factor[2] = 12000;
}break;
case IMU963RA_MAG_SAMPLE_8G:
{
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_CONTROL1, 0x19);
imu963ra_transition_factor[2] = 3000;
}break;
}
if(1 == return_state)
{
break;
}
imu963ra_write_mag_register(IMU963RA_MAG_ADDR, IMU963RA_MAG_FBR, 0x01);
imu963ra_connect_mag(IMU963RA_MAG_ADDR, IMU963RA_MAG_OUTX_L);
imu963ra_write_acc_gyro_register(IMU963RA_FUNC_CFG_ACCESS, 0x00); // <20>ر<EFBFBD>HUB<55>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
system_delay_ms(20); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
}while(0);
return return_state;
}

View File

@@ -0,0 +1,217 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_imu963ra
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
* 2024-01-30 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
********************************************************************************************************************/
/********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SPC_PIN <20><EFBFBD><EAB6A8>
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDI_PIN <20><EFBFBD><EAB6A8>
* SA0/SDO <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDO_PIN <20><EFBFBD><EAB6A8>
* CS <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_CS_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* // <20><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>
* SCL/SPC <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SCL_PIN <20><EFBFBD><EAB6A8>
* SDA/DSI <20>鿴 zf_device_imu963ra.h <20><> IMU963RA_SDA_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
********************************************************************************************************************/
#ifndef _zf_device_imu963ra_h_
#define _zf_device_imu963ra_h_
#include "zf_common_typedef.h"
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#define IMU963RA_USE_SOFT_IIC (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
#if IMU963RA_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
#define IMU963RA_SOFT_IIC_DELAY (59 ) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
#define IMU963RA_SCL_PIN (P20_11) // <20><><EFBFBD><EFBFBD> IIC SCL <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> IMU963RA <20><> SCL <20><><EFBFBD><EFBFBD>
#define IMU963RA_SDA_PIN (P20_14) // <20><><EFBFBD><EFBFBD> IIC SDA <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> IMU963RA <20><> SDA <20><><EFBFBD><EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
#else
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
#define IMU963RA_SPI_SPEED (10 * 1000 * 1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
#define IMU963RA_SPI (SPI_0 ) // Ӳ<><D3B2> SPI <20><>
#define IMU963RA_SPC_PIN (SPI0_SCLK_P20_11) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
#define IMU963RA_SDI_PIN (SPI0_MOSI_P20_14) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
#define IMU963RA_SDO_PIN (SPI0_MISO_P20_12) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
#endif
#define IMU963RA_CS_PIN (P20_13) // CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
#define IMU963RA_CS(x) (x? (gpio_high(IMU963RA_CS_PIN)): (gpio_low(IMU963RA_CS_PIN)))
typedef enum
{
IMU963RA_ACC_SAMPLE_SGN_2G , // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><>2G (ACC = Accelerometer <20><><EFBFBD>ٶȼ<D9B6>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (G = g <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD> g<><67>9.80 m/s^2)
IMU963RA_ACC_SAMPLE_SGN_4G , // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><>4G (ACC = Accelerometer <20><><EFBFBD>ٶȼ<D9B6>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (G = g <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD> g<><67>9.80 m/s^2)
IMU963RA_ACC_SAMPLE_SGN_8G , // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><>8G (ACC = Accelerometer <20><><EFBFBD>ٶȼ<D9B6>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (G = g <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD> g<><67>9.80 m/s^2)
IMU963RA_ACC_SAMPLE_SGN_16G, // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><>16G (ACC = Accelerometer <20><><EFBFBD>ٶȼ<D9B6>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (G = g <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD> g<><67>9.80 m/s^2)
}imu963ra_acc_sample_config;
typedef enum
{
IMU963RA_GYRO_SAMPLE_SGN_125DPS , // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>125DPS (GYRO = Gyroscope <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (DPS = Degree Per Second <20><><EFBFBD>ٶȵ<D9B6>λ <20><>/S)
IMU963RA_GYRO_SAMPLE_SGN_250DPS , // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>250DPS (GYRO = Gyroscope <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (DPS = Degree Per Second <20><><EFBFBD>ٶȵ<D9B6>λ <20><>/S)
IMU963RA_GYRO_SAMPLE_SGN_500DPS , // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>500DPS (GYRO = Gyroscope <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (DPS = Degree Per Second <20><><EFBFBD>ٶȵ<D9B6>λ <20><>/S)
IMU963RA_GYRO_SAMPLE_SGN_1000DPS, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>1000DPS (GYRO = Gyroscope <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (DPS = Degree Per Second <20><><EFBFBD>ٶȵ<D9B6>λ <20><>/S)
IMU963RA_GYRO_SAMPLE_SGN_2000DPS, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>2000DPS (GYRO = Gyroscope <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (DPS = Degree Per Second <20><><EFBFBD>ٶȵ<D9B6>λ <20><>/S)
IMU963RA_GYRO_SAMPLE_SGN_4000DPS, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>4000DPS (GYRO = Gyroscope <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (SGN = signum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ) (DPS = Degree Per Second <20><><EFBFBD>ٶȵ<D9B6>λ <20><>/S)
}imu963ra_gyro_sample_config;
typedef enum
{
IMU963RA_MAG_SAMPLE_2G, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2G (MAG = Magnetometer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (G = Gs <20><>˹)
IMU963RA_MAG_SAMPLE_8G, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 8G (MAG = Magnetometer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (G = Gs <20><>˹)
}imu963ra_mag_sample_config;
#define IMU963RA_ACC_SAMPLE_DEFAULT ( IMU963RA_ACC_SAMPLE_SGN_8G ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϵ<EFBFBD> <20><><EFBFBD>ٶȼ<D9B6> <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IMU963RA_GYRO_SAMPLE_DEFAULT ( IMU963RA_GYRO_SAMPLE_SGN_2000DPS ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IMU963RA_MAG_SAMPLE_DEFAULT ( IMU963RA_MAG_SAMPLE_8G ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IMU963RA_TIMEOUT_COUNT (0x00FF) // IMU963RA <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
#define IMU963RA_DEV_ADDR (0x6B) // SA0<41>ӵأ<D3B5>0x6A SA0<41><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x6B ģ<><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IMU963RA_SPI_W (0x00)
#define IMU963RA_SPI_R (0x80)
#define IMU963RA_FUNC_CFG_ACCESS (0x01)
#define IMU963RA_INT1_CTRL (0x0D)
#define IMU963RA_WHO_AM_I (0x0F)
#define IMU963RA_CTRL1_XL (0x10)
#define IMU963RA_CTRL2_G (0x11)
#define IMU963RA_CTRL3_C (0x12)
#define IMU963RA_CTRL4_C (0x13)
#define IMU963RA_CTRL5_C (0x14)
#define IMU963RA_CTRL6_C (0x15)
#define IMU963RA_CTRL7_G (0x16)
#define IMU963RA_CTRL9_XL (0x18)
#define IMU963RA_OUTX_L_G (0x22)
#define IMU963RA_OUTX_L_A (0x28)
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD> <20><>Ҫ<EFBFBD><D2AA>FUNC_CFG_ACCESS<53><53>SHUB_REG_ACCESSλ<53><CEBB><EFBFBD><EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
#define IMU963RA_SENSOR_HUB_1 (0x02)
#define IMU963RA_MASTER_CONFIG (0x14)
#define IMU963RA_SLV0_ADD (0x15)
#define IMU963RA_SLV0_SUBADD (0x16)
#define IMU963RA_SLV0_CONFIG (0x17)
#define IMU963RA_DATAWRITE_SLV0 (0x21)
#define IMU963RA_STATUS_MASTER (0x22)
#define IMU963RA_MAG_ADDR (0x0D) // 7λIIC<49><43>ַ
#define IMU963RA_MAG_OUTX_L (0x00)
#define IMU963RA_MAG_CONTROL1 (0x09)
#define IMU963RA_MAG_CONTROL2 (0x0A)
#define IMU963RA_MAG_FBR (0x0B)
#define IMU963RA_MAG_CHIP_ID (0x0D)
#define IMU963RA_ACC_SAMPLE (0x3C) // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ϊ:0x30 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16393<39><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ:0x38 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8197<39><37> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ:0x3C <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4098<39><38> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ:0x34 <20><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2049<34><39> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
#define IMU963RA_GYR_SAMPLE (0x5C) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ϊ:0x52 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>125dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>228.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x50 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>114.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x54 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>57.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x58 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>28.6<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x5C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>14.3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x51 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>7.1<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
#define IMU963RA_MAG_SAMPLE (0x19) // <20>شż<D8B4><C5BC><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ϊ:0x19 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:8G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>3000<30><30> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
// <20><><EFBFBD><EFBFBD>Ϊ:0x09 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:2G <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>12000<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>G(<28><>˹)
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>================================================
extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GYRO (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> ACC (accelerometer <20><><EFBFBD>ٶȼ<D9B6>)
extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MAG (magnetometer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
extern float imu963ra_transition_factor[3]; // ת<><D7AA>ʵ<EFBFBD><CAB5>ֵ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>================================================
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
void imu963ra_get_acc (void); // <20><>ȡ IMU963RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
void imu963ra_get_gyro (void); // <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void imu963ra_get_mag (void); // <20><>ȡ IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 imu963ra_init (void); // <20><>ʼ<EFBFBD><CABC> IMU963RA
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>================================================
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> IMU963RA <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> acc_value <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> float data = imu963ra_acc_transition(imu963ra_acc_x); // <20><>λΪ g(m/s^2)
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
#define imu963ra_acc_transition(acc_value) ((float)(acc_value) / imu963ra_transition_factor[0])
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> gyro_value <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> float data = imu963ra_gyro_transition(imu963ra_gyro_x); // <20><>λΪ <20><>/s
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
#define imu963ra_gyro_transition(gyro_value) ((float)(gyro_value) / imu963ra_transition_factor[1])
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> mag_value <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> float data = imu963ra_mag_transition(imu963ra_mag_x); // <20><>λΪ G
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
#define imu963ra_mag_transition(mag_value) ((float)mag_value / imu963ra_transition_factor[2])
//================================================<3D><><EFBFBD><EFBFBD> IMU963RA <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>================================================
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,173 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_ips114
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* SCL <20>鿴 zf_device_ips114.h <20><> IPS114_SCL_PIN <20><EFBFBD><EAB6A8>
* SDA <20>鿴 zf_device_ips114.h <20><> IPS114_SDA_PIN <20><EFBFBD><EAB6A8>
* RST <20>鿴 zf_device_ips114.h <20><> IPS114_RST_PIN <20><EFBFBD><EAB6A8>
* DC <20>鿴 zf_device_ips114.h <20><> IPS114_DC_PIN <20><EFBFBD><EAB6A8>
* CS <20>鿴 zf_device_ips114.h <20><> IPS114_CS_PIN <20><EFBFBD><EAB6A8>
* BLK <20>鿴 zf_device_ips114.h <20><> IPS114_BLK_PIN <20><EFBFBD><EAB6A8>
* VCC 3 .3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD> 135 * 240
* ------------------------------------
********************************************************************************************************************/
#ifndef _zf_device_ips114_h_
#define _zf_device_ips114_h_
#include "zf_common_typedef.h"
//=================================================<3D><><EFBFBD><EFBFBD> IPS114 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#define IPS114_USE_SOFT_SPI (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
#if IPS114_USE_SOFT_SPI // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> SPI <20><><EFBFBD><EFBFBD>==================================================
#define IPS114_SOFT_SPI_DELAY (0 ) // <20><><EFBFBD><EFBFBD> SPI <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС SPI ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
#define IPS114_SCL_PIN (P15_3) // <20><><EFBFBD><EFBFBD> SPI SCK <20><><EFBFBD><EFBFBD>
#define IPS114_SDA_PIN (P15_5) // <20><><EFBFBD><EFBFBD> SPI MOSI <20><><EFBFBD><EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> SPI <20><><EFBFBD><EFBFBD>==================================================
#else
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>==================================================
#define IPS114_SPI_SPEED (60*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
#define IPS114_SPI (SPI_2) // Ӳ<><D3B2> SPI <20><>
#define IPS114_SCL_PIN (SPI2_SCLK_P15_3) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
#define IPS114_SDA_PIN (SPI2_MOSI_P15_5) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
#define IPS114_SDA_IN_PIN (SPI2_MISO_P15_4) // <20><><EFBFBD><EFBFBD>SPI_MISO<53><4F><EFBFBD><EFBFBD> IPSû<53><C3BB>MISO<53><4F><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><E5A3AC>spi<70>ij<EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1>Ҫʹ<D2AA><CAB9>
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>==================================================
#endif
#define IPS114_RST_PIN (P15_1) // Һ<><D2BA><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
#define IPS114_DC_PIN (P15_0 ) // Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
#define IPS114_CS_PIN (P15_2) // CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
#define IPS114_BLK_PIN (P15_4) // Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
#define IPS114_DEFAULT_DISPLAY_DIR ( IPS114_PORTAIT ) // Ĭ<>ϵ<EFBFBD><CFB5><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
#define IPS114_DEFAULT_PENCOLOR (RGB565_RED) // Ĭ<>ϵĻ<CFB5><C4BB><EFBFBD><EFBFBD><EFBFBD>ɫ
#define IPS114_DEFAULT_BGCOLOR (RGB565_WHITE) // Ĭ<>ϵı<CFB5><C4B1><EFBFBD><EFBFBD><EFBFBD>ɫ
#define IPS114_DEFAULT_DISPLAY_FONT (IPS114_8X16_FONT) // Ĭ<>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ģʽ
#define IPS114_DC(x) ((x) ? (gpio_high(IPS114_DC_PIN)) : (gpio_low(IPS114_DC_PIN)))
#define IPS114_RST(x) ((x) ? (gpio_high(IPS114_RST_PIN)) : (gpio_low(IPS114_RST_PIN)))
#define IPS114_CS(x) ((x) ? (gpio_high(IPS114_CS_PIN)) : (gpio_low(IPS114_CS_PIN)))
#define IPS114_BLK(x) ((x) ? (gpio_high(IPS114_BLK_PIN)) : (gpio_low(IPS114_BLK_PIN)))
//=================================================<3D><><EFBFBD><EFBFBD> IPS114 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//=================================================<3D><><EFBFBD><EFBFBD> IPS114 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>===============================================
typedef enum
{
IPS114_PORTAIT = 0, // <20><><EFBFBD><EFBFBD>ģʽ
IPS114_PORTAIT_180 = 1, // <20><><EFBFBD><EFBFBD>ģʽ <20><>ת180
IPS114_CROSSWISE = 2, // <20><><EFBFBD><EFBFBD>ģʽ
IPS114_CROSSWISE_180 = 3, // <20><><EFBFBD><EFBFBD>ģʽ <20><>ת180
}ips114_dir_enum;
typedef enum
{
IPS114_6X8_FONT = 0, // 6x8 <20><><EFBFBD><EFBFBD>
IPS114_8X16_FONT = 1, // 8x16 <20><><EFBFBD><EFBFBD>
IPS114_16X16_FONT = 2, // 16x16 <20><><EFBFBD><EFBFBD> Ŀǰ<C4BF><C7B0>֧<EFBFBD><D6A7>
}ips114_font_size_enum;
extern uint16 ips114_width_max ;
extern uint16 ips114_height_max;
//=================================================<3D><><EFBFBD><EFBFBD> IPS114 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>===============================================
//=================================================<3D><><EFBFBD><EFBFBD> IPS114 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
void ips114_clear (void); // IPS114 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ips114_full (const uint16 color); // IPS114 <20><>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><E4BAAF>
void ips114_set_dir (ips114_dir_enum dir); // IPS114 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
void ips114_set_font (ips114_font_size_enum font); // IPS114 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
void ips114_set_color (const uint16 pen, const uint16 bgcolor); // IPS114 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ɫ
void ips114_draw_point (uint16 x, uint16 y, const uint16 color); // IPS114 <20><><EFBFBD><EFBFBD><E3BAAF>
void ips114_draw_line (uint16 x_start, uint16 y_start, uint16 x_end, uint16 y_end, const uint16 color); // IPS114 <20><><EFBFBD>ߺ<EFBFBD><DFBA><EFBFBD>
void ips114_show_char (uint16 x, uint16 y, const char dat); // IPS114 <20><>ʾ<EFBFBD>ַ<EFBFBD>
void ips114_show_string (uint16 x, uint16 y, const char dat[]); // IPS114 <20><>ʾ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
void ips114_show_int (uint16 x,uint16 y, const int32 dat, uint8 num); // IPS114 <20><>ʾ32λ<32>з<EFBFBD><D0B7><EFBFBD><><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>0)
void ips114_show_uint (uint16 x,uint16 y, const uint32 dat, uint8 num); // IPS114 <20><>ʾ32λ<32>޷<EFBFBD><DEB7><EFBFBD><><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>0)
void ips114_show_float (uint16 x,uint16 y, const double dat, uint8 num, uint8 pointnum);
void ips114_show_binary_image (uint16 x, uint16 y, const uint8 *image, uint16 width, uint16 height, uint16 dis_width, uint16 dis_height); // IPS114 <20><>ʾ<EFBFBD><CABE>ֵͼ<D6B5><CDBC> <20><><EFBFBD><EFBFBD>ÿ<EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
void ips114_show_gray_image (uint16 x, uint16 y, const uint8 *image, uint16 width, uint16 height, uint16 dis_width, uint16 dis_height, uint8 threshold); // IPS114 <20><>ʾ 8bit <20>Ҷ<EFBFBD>ͼ<EFBFBD><CDBC> <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ֵ
void ips114_show_rgb565_image (uint16 x, uint16 y, const uint16 *image, uint16 width, uint16 height, uint16 dis_width, uint16 dis_height, uint8 color_mode); // IPS114 <20><>ʾ RGB565 <20><>ɫͼ<C9AB><CDBC>
void ips114_show_wave (uint16 x, uint16 y, const uint16 *wave, uint16 width, uint16 value_max, uint16 dis_width, uint16 dis_value_max); // IPS114 <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
void ips114_show_chinese (uint16 x, uint16 y, uint8 size, const uint8 *chinese_buffer, uint8 number, const uint16 color); // IPS114 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
void ips114_init (void); // 1.14<EFBFBD><EFBFBD> IPSҺ<53><D2BA><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
//=================================================<3D><><EFBFBD><EFBFBD> IPS114 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//=================================================<3D><><EFBFBD><EFBFBD> IPS114 <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>================================================
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IPS114 <20><>ʾС<CABE><D0A1><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> p ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> width ͼ<><CDBC>ʵ<EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> height ͼ<><CDBC>ʵ<EFBFBD>ʸ߶<CAB8>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> ips114_displayimage7725(ov7725_image_binary[0], OV7725_W, OV7725_H);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>չ<EFBFBD><D5B9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ʼ<E3BFAA><CABC>ʾ
//-------------------------------------------------------------------------------------------------------------------
#define ips114_displayimage7725(p, width, height) (ips114_show_binary_image(0, 0, (p), OV7725_W, OV7725_H, (width), (height)))
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IPS114 <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> p ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> width ͼ<><CDBC>ʵ<EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> height ͼ<><CDBC>ʵ<EFBFBD>ʸ߶<CAB8>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> ips114_displayimage03x(mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>չ<EFBFBD><D5B9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ʼ<E3BFAA><CABC>ʾ
//-------------------------------------------------------------------------------------------------------------------
#define ips114_displayimage03x(p, width, height) (ips114_show_gray_image(0, 0, (p), MT9V03X_W, MT9V03X_H, (width), (height), 0))
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IPS114 <20><>ʾ<EFBFBD><CABE>ͫͼ<CDAB><CDBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> p ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> width ͼ<><CDBC>ʵ<EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> height ͼ<><CDBC>ʵ<EFBFBD>ʸ߶<CAB8>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> ips114_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>չ<EFBFBD><D5B9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ʼ<E3BFAA><CABC>ʾ
//-------------------------------------------------------------------------------------------------------------------
#define ips114_displayimage8660(p, width, height) (ips114_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
//=================================================<3D><><EFBFBD><EFBFBD> IPS114 <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>================================================
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,228 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_ips200
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
* 2025-02-08 pudding <20>޸IJ<DEB8><C4B2><EFBFBD>ע<EFBFBD><D7A2> <20>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBA1B1>˫<EFBFBD><CBAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBA1B1><EFBFBD><EFBFBD><EFBFBD>
********************************************************************************************************************/
/********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* // <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* RD <20>鿴 zf_device_ips200.h <20><> IPS200_RD_PIN_PARALLEL8 <20><EFBFBD><EAB6A8>
* WR <20>鿴 zf_device_ips200.h <20><> IPS200_WR_PIN_PARALLEL8 <20><EFBFBD><EAB6A8>
* RS <20>鿴 zf_device_ips200.h <20><> IPS200_RS_PIN_PARALLEL8 <20><EFBFBD><EAB6A8>
* RST <20>鿴 zf_device_ips200.h <20><> IPS200_RST_PIN_PARALLEL8 <20><EFBFBD><EAB6A8>
* CS <20>鿴 zf_device_ips200.h <20><> IPS200_CS_PIN_PARALLEL8 <20><EFBFBD><EAB6A8>
* BL <20>鿴 zf_device_ips200.h <20><> IPS200_BL_PIN_PARALLEL8 <20><EFBFBD><EAB6A8>
* D0-D7 <20>鿴 zf_device_ips200.h <20><> IPS200_Dx_PIN_PARALLEL8 <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
*
* // SPI <20><><EFBFBD><EFBFBD> SPI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* SCL <20>鿴 zf_device_ips200.h <20><> IPS200_SCL_PIN_SPI <20><EFBFBD><EAB6A8>
* SDA <20>鿴 zf_device_ips200.h <20><> IPS200_SDA_PIN_SPI <20><EFBFBD><EAB6A8>
* RST <20>鿴 zf_device_ips200.h <20><> IPS200_RST_PIN_SPI <20><EFBFBD><EAB6A8>
* DC <20>鿴 zf_device_ips200.h <20><> IPS200_DC_PIN_SPI <20><EFBFBD><EAB6A8>
* CS <20>鿴 zf_device_ips200.h <20><> IPS200_CS_PIN_SPI <20><EFBFBD><EAB6A8>
* BLk <20>鿴 zf_device_ips200.h <20><> IPS200_BLk_PIN_SPI <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD> 320 * 240
* ------------------------------------
********************************************************************************************************************/
#ifndef _zf_device_ips200_h_
#define _zf_device_ips200_h_
#include "zf_common_typedef.h"
//==================================================<3D><><EFBFBD><EFBFBD> IPS200 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#define IPS200_USE_SOFT_SPI (0 ) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
#if IPS200_USE_SOFT_SPI // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> SPI <20><><EFBFBD><EFBFBD>====================================================
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>SPI <20><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ SPI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
#define IPS200_SOFT_SPI_DELAY (0 ) // <20><><EFBFBD><EFBFBD> SPI <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС SPI ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
#define IPS200_SCL_PIN (P15_3) // <20><><EFBFBD><EFBFBD> SPI SCK <20><><EFBFBD><EFBFBD>
#define IPS200_SDA_PIN (P15_5) // <20><><EFBFBD><EFBFBD> SPI MOSI <20><><EFBFBD><EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> SPI <20><><EFBFBD><EFBFBD>====================================================
#else
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>SPI <20><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ SPI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
#define IPS200_SPI_SPEED (60*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
#define IPS200_SPI (SPI_2 ) // Ӳ<><D3B2> SPI <20><>
#define IPS200_SCL_PIN_SPI (SPI2_SCLK_P15_3 ) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
#define IPS200_SDA_PIN_SPI (SPI2_MOSI_P15_5 ) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
#define IPS200_SDA_IN_PIN_SPI (SPI2_MISO_P15_4 ) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD> IPSû<53><C3BB>MISO<53><4F><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><E5A3AC>spi<70>ij<EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1>Ҫʹ<D2AA><CAB9>
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
#endif
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>SPI <20><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ SPI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
#define IPS200_RST_PIN_SPI (P15_1) // (SPI<50><49><EFBFBD><EFBFBD><><D2BA><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
#define IPS200_DC_PIN_SPI (P15_0) // (SPI<50><49><EFBFBD><EFBFBD><><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
#define IPS200_CS_PIN_SPI (P15_2) // (SPI<50><49><EFBFBD><EFBFBD><><D2BA>Ƭѡ<C6AC><D1A1><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
#define IPS200_BLk_PIN_SPI (P15_4) // (SPI<50><49><EFBFBD><EFBFBD><><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5>ǰ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
#define IPS200_RD_PIN_PARALLEL8 (P15_3) // (<28><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><><D2BA><EFBFBD><EFBFBD>ȡλ<C8A1><CEBB><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
#define IPS200_WR_PIN_PARALLEL8 (P15_5) // (<28><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><><D2BA>д<EFBFBD><D0B4>λ<EFBFBD><CEBB><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
#define IPS200_RST_PIN_PARALLEL8 (P15_0) // (<28><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><><D2BA><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
#define IPS200_RS_PIN_PARALLEL8 (P15_1) // (<28><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
#define IPS200_CS_PIN_PARALLEL8 (P15_2) // (<28><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><><D2BA>Ƭѡ<C6AC><D1A1><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
#define IPS200_BL_PIN_PARALLEL8 (P15_4) // (<28><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD>ǰ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õõ<C3B5>
//D0-D3<44>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>C0-C3,C1-C4<43>ȵȣ<C8B5>
//D4-D7<44>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>B0-B3,B1-B4<42>ȵȡ<C8B5>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>ͬ<EFBFBD>˿ڵ<CBBF><DAB5><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>D0-D3<44><33>C1-C4<43><34><EFBFBD>ӣ<EFBFBD>D4-D7<44><37>B2-B5<42><35><EFBFBD>ӡ<EFBFBD>
//<2F>л<EFBFBD><D0BB><EFBFBD><EFBFBD>ź<EFBFBD>ע<EFBFBD><D7A2><EFBFBD>޸<EFBFBD>IPS200_DATA_PORT1<54><31>IPS200_DATA_PORT2<54><EFBFBD><EAB6A8>
#define IPS200_D0_PIN_PARALLEL8 (P11_9 ) // (<28><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>D0
#define IPS200_D1_PIN_PARALLEL8 (P11_10) // (<28><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>D1
#define IPS200_D2_PIN_PARALLEL8 (P11_11) // (<28><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>D2
#define IPS200_D3_PIN_PARALLEL8 (P11_12) // (<28><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>D3
#define IPS200_D4_PIN_PARALLEL8 (P13_0 ) // (<28><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>D4
#define IPS200_D5_PIN_PARALLEL8 (P13_1 ) // (<28><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>D5
#define IPS200_D6_PIN_PARALLEL8 (P13_2 ) // (<28><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>D6
#define IPS200_D7_PIN_PARALLEL8 (P13_3 ) // (<28><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>D7
#define IPS200_DEFAULT_DISPLAY_DIR (IPS200_PORTAIT) // Ĭ<>ϵ<EFBFBD><CFB5><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
#define IPS200_DEFAULT_PENCOLOR (RGB565_RED ) // Ĭ<>ϵĻ<CFB5><C4BB><EFBFBD><EFBFBD><EFBFBD>ɫ
#define IPS200_DEFAULT_BGCOLOR (RGB565_WHITE ) // Ĭ<>ϵı<CFB5><C4B1><EFBFBD><EFBFBD><EFBFBD>ɫ
#define IPS200_DEFAULT_DISPLAY_FONT (IPS200_8X16_FONT) // Ĭ<>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ģʽ
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ˿<DDB6><CBBF><EFBFBD><EFBFBD><EFBFBD>PORT<52><54><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PORT<52><54><EFBFBD>и<EFBFBD><D0B8><EFBFBD> <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ڽ<CBBF><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
#define IPS200_DATA_PORT1 (3) //0<><30>P00<30>˿<EFBFBD> 1<><31>P02<30>˿<EFBFBD> 2<><32>P10<31>˿<EFBFBD> 3<><33>P11<31>˿<EFBFBD> 4<><34>P13<31>˿<EFBFBD> 5<><35>P14<31>˿<EFBFBD> 6<><36>P15<31>˿<EFBFBD> 7<><37>P20<32>˿<EFBFBD> 8<><38>P21<32>˿<EFBFBD> 9<><39>P22<32>˿<EFBFBD> 10<31><30>P23<32>˿<EFBFBD> 11<31><31>P32<33>˿<EFBFBD> 12<31><32>P33<33>˿<EFBFBD>
#define IPS200_DATAPORT1 (get_port_out_addr(IPS200_DATA_PORT1))
#define DATA_START_NUM1 (IPS200_D0_PIN_PARALLEL8&0x1f) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
#define IPS200_DATA_PORT2 (4) //0<><30>P00<30>˿<EFBFBD> 1<><31>P02<30>˿<EFBFBD> 2<><32>P10<31>˿<EFBFBD> 3<><33>P11<31>˿<EFBFBD> 4<><34>P13<31>˿<EFBFBD> 5<><35>P14<31>˿<EFBFBD> 6<><36>P15<31>˿<EFBFBD> 7<><37>P20<32>˿<EFBFBD> 8<><38>P21<32>˿<EFBFBD> 9<><39>P22<32>˿<EFBFBD> 10<31><30>P23<32>˿<EFBFBD> 11<31><31>P32<33>˿<EFBFBD> 12<31><32>P33<33>˿<EFBFBD>
#define IPS200_DATAPORT2 (get_port_out_addr(IPS200_DATA_PORT2))
#define DATA_START_NUM2 (IPS200_D4_PIN_PARALLEL8&0x1f) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IPS200_RD(x) ((x) ? (gpio_high(IPS200_RD_PIN_PARALLEL8)) : (gpio_low(IPS200_RD_PIN_PARALLEL8)))
#define IPS200_WR(x) ((x) ? (gpio_high(IPS200_WR_PIN_PARALLEL8)) : (gpio_low(IPS200_WR_PIN_PARALLEL8)))
#define IPS200_RST(x) ((x) ? (gpio_high(ips_rst_pin)) : (gpio_low(ips_rst_pin)))
#define IPS200_BL(x) ((x) ? (gpio_high(ips_bl_pin)) : (gpio_low(ips_bl_pin)))
#define IPS200_RS(x) ((x) ? (gpio_high(IPS200_RS_PIN_PARALLEL8)) : (gpio_low(IPS200_RS_PIN_PARALLEL8)))
#define IPS200_DC(x) ((x) ? (gpio_high(IPS200_DC_PIN_SPI)) : (gpio_low(IPS200_DC_PIN_SPI)))
#define IPS200_CS(x) ((x) ? (gpio_high(IPS200_CS_PIN_SPI)) : (gpio_low(IPS200_CS_PIN_SPI)))
//==================================================<3D><><EFBFBD><EFBFBD> IPS200 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//==================================================<3D><><EFBFBD><EFBFBD> IPS200 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>===============================================
typedef enum
{
IPS200_TYPE_SPI, // SPI <20><><EFBFBD><EFBFBD>
IPS200_TYPE_PARALLEL8, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}ips200_type_enum;
typedef enum
{
IPS200_PORTAIT = 0, // <20><><EFBFBD><EFBFBD>ģʽ
IPS200_PORTAIT_180 = 1, // <20><><EFBFBD><EFBFBD>ģʽ <20><>ת180
IPS200_CROSSWISE = 2, // <20><><EFBFBD><EFBFBD>ģʽ
IPS200_CROSSWISE_180 = 3, // <20><><EFBFBD><EFBFBD>ģʽ <20><>ת180
}ips200_dir_enum;
typedef enum
{
IPS200_6X8_FONT = 0, // 6x8 <20><><EFBFBD><EFBFBD>
IPS200_8X16_FONT = 1, // 8x16 <20><><EFBFBD><EFBFBD>
IPS200_16X16_FONT = 2, // 16x16 <20><><EFBFBD><EFBFBD> Ŀǰ<C4BF><C7B0>֧<EFBFBD><D6A7>
}ips200_font_size_enum;
extern uint16 ips200_width_max;
extern uint16 ips200_height_max;
//==================================================<3D><><EFBFBD><EFBFBD> IPS200 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>===============================================
//==================================================<3D><><EFBFBD><EFBFBD> IPS200 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
void ips200_clear (void); // IPS200 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ips200_full (const uint16 color); // IPS200 <20><>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><E4BAAF>
void ips200_set_dir (ips200_dir_enum dir); // IPS200 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
void ips200_set_font (ips200_font_size_enum font); // IPS200 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
void ips200_set_color (const uint16 pen, const uint16 bgcolor); // IPS200 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ɫ
void ips200_draw_point (uint16 x, uint16 y, const uint16 color); // IPS200 <20><><EFBFBD><EFBFBD><E3BAAF>
void ips200_draw_line (uint16 x_start, uint16 y_start, uint16 x_end, uint16 y_end, const uint16 color); // IPS200 <20><><EFBFBD>ߺ<EFBFBD><DFBA><EFBFBD>
void ips200_show_char (uint16 x, uint16 y, const char dat);
void ips200_show_string (uint16 x, uint16 y, const char dat[]);
void ips200_show_int (uint16 x, uint16 y, const int32 dat, uint8 num);
void ips200_show_uint (uint16 x, uint16 y, const uint32 dat, uint8 num);
void ips200_show_float (uint16 x, uint16 y, const double dat, uint8 num, uint8 pointnum);
void ips200_show_binary_image (uint16 x, uint16 y, const uint8 *image, uint16 width, uint16 height, uint16 dis_width, uint16 dis_height); // IPS200 <20><>ʾ<EFBFBD><CABE>ֵͼ<D6B5><CDBC> <20><><EFBFBD><EFBFBD>ÿ<EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
void ips200_show_gray_image (uint16 x, uint16 y, const uint8 *image, uint16 width, uint16 height, uint16 dis_width, uint16 dis_height, uint8 threshold); // IPS200 <20><>ʾ 8bit <20>Ҷ<EFBFBD>ͼ<EFBFBD><CDBC> <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ֵ
void ips200_show_rgb565_image (uint16 x, uint16 y, const uint16 *image, uint16 width, uint16 height, uint16 dis_width, uint16 dis_height, uint8 color_mode); // IPS200 <20><>ʾ RGB565 <20><>ɫͼ<C9AB><CDBC>
void ips200_show_wave (uint16 x, uint16 y, const uint16 *wave, uint16 width, uint16 value_max, uint16 dis_width, uint16 dis_value_max); // IPS200 <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
void ips200_show_chinese (uint16 x, uint16 y, uint8 size, const uint8 *chinese_buffer, uint8 number, const uint16 color); // IPS200 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
void ips200_init (ips200_type_enum type_select); // 2<><32> IPSҺ<53><D2BA><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
//==================================================<3D><><EFBFBD><EFBFBD> IPS200 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//==================================================<3D><><EFBFBD><EFBFBD> IPS200 <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>================================================
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IPS200 <20><>ʾС<CABE><D0A1><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> p ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> width ͼ<><CDBC>ʵ<EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> height ͼ<><CDBC>ʵ<EFBFBD>ʸ߶<CAB8>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> ips200_displayimage7725(ov7725_image_binary[0], OV7725_W, OV7725_H);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>չ<EFBFBD><D5B9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ʼ<E3BFAA><CABC>ʾ
//-------------------------------------------------------------------------------------------------------------------
#define ips200_displayimage7725(p, width, height) (ips200_show_binary_image(0, 0, (p), OV7725_W, OV7725_H, (width), (height)))
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IPS200 <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> p ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> width ͼ<><CDBC>ʵ<EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> height ͼ<><CDBC>ʵ<EFBFBD>ʸ߶<CAB8>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> ips200_displayimage03x(mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>չ<EFBFBD><D5B9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ʼ<E3BFAA><CABC>ʾ
//-------------------------------------------------------------------------------------------------------------------
#define ips200_displayimage03x(p, width, height) (ips200_show_gray_image(0, 0, (p), MT9V03X_W, MT9V03X_H, (width), (height), 0))
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IPS200 <20><>ʾ<EFBFBD><CABE>ͫͼ<CDAB><CDBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> p ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> width ͼ<><CDBC>ʵ<EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> height ͼ<><CDBC>ʵ<EFBFBD>ʸ߶<CAB8>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> ips200_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>չ<EFBFBD><D5B9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ʼ<E3BFAA><CABC>ʾ
//-------------------------------------------------------------------------------------------------------------------
#define ips200_displayimage8660(p, width, height) (ips200_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
//==================================================<3D><><EFBFBD><EFBFBD> IPS200 <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>================================================
#endif

View File

@@ -0,0 +1,149 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_key
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* // һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B0B4><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* KEY1/S1 <20>鿴 zf_device_key.h <20><> KEY_LIST[0]
* KEY2/S2 <20>鿴 zf_device_key.h <20><> KEY_LIST[1]
* KEY3/S3 <20>鿴 zf_device_key.h <20><> KEY_LIST[2]
* KEY4/S4 <20>鿴 zf_device_key.h <20><> KEY_LIST[3]
* ------------------------------------
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "zf_device_key.h"
static uint32 scanner_period = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static uint32 key_press_time[KEY_NUMBER]; // <20><><EFBFBD><EFBFBD><EFBFBD>źų<C5BA><C5B3><EFBFBD>ʱ<EFBFBD><CAB1>
static key_state_enum key_state[KEY_NUMBER]; // <20><><EFBFBD><EFBFBD>״̬
static const gpio_pin_enum key_index[KEY_NUMBER] = KEY_LIST; // <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>״̬ɨ<CCAC><C9A8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> key_scanner();
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PIT <20>ж<EFBFBD><D0B6><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void key_scanner (void)
{
uint8 i = 0;
for(i = 0; KEY_NUMBER > i; i ++)
{
if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
key_press_time[i] ++;
if(KEY_LONG_PRESS_PERIOD / scanner_period <= key_press_time[i])
{
key_state[i] = KEY_LONG_PRESS;
}
}
else // <20><><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>
{
if((KEY_LONG_PRESS != key_state[i]) && (KEY_MAX_SHOCK_PERIOD / scanner_period <= key_press_time[i]))
{
key_state[i] = KEY_SHORT_PRESS;
}
else
{
key_state[i] = KEY_RELEASE;
}
key_press_time[i] = 0;
}
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>״̬
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> key_n <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> key_state_enum <20><><EFBFBD><EFBFBD>״̬
// ʹ<><CAB9>ʾ<EFBFBD><CABE> key_get_state(KEY_1);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
key_state_enum key_get_state (key_index_enum key_n)
{
return key_state[key_n];
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> key_n <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void <20><>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> key_clear_state(KEY_1);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void key_clear_state (key_index_enum key_n)
{
key_state[key_n] = KEY_RELEASE;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD>״̬
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void <20><>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void <20><>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> key_clear_all_state();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void key_clear_all_state (void)
{
key_state[0] = KEY_RELEASE;
key_state[1] = KEY_RELEASE;
key_state[2] = KEY_RELEASE;
key_state[3] = KEY_RELEASE;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> period <20><><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ժ<EFBFBD><D4BA><EFBFBD>Ϊ<EFBFBD><CEAA>λ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> key_init(10);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void key_init (uint32 period)
{
zf_assert(0 < period);
uint8 loop_temp = 0;
for(loop_temp = 0; KEY_NUMBER > loop_temp; loop_temp ++)
{
gpio_init(key_index[loop_temp], GPI, GPIO_HIGH, GPI_PULL_UP);
key_state[loop_temp] = KEY_RELEASE;
}
scanner_period = period;
}

View File

@@ -0,0 +1,93 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_key
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* // һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B0B4><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* KEY1/S1 <20>鿴 zf_device_key.h <20><> KEY_LIST[0]
* KEY2/S2 <20>鿴 zf_device_key.h <20><> KEY_LIST[1]
* KEY3/S3 <20>鿴 zf_device_key.h <20><> KEY_LIST[2]
* KEY4/S4 <20>鿴 zf_device_key.h <20><> KEY_LIST[3]
* ------------------------------------
********************************************************************************************************************/
#ifndef _zf_device_key_h_
#define _zf_device_key_h_
#include "zf_common_debug.h"
#include "zf_driver_gpio.h"
//==================================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
// <20><><EFBFBD><EFBFBD><E5B0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD> Ĭ<>϶<EFBFBD><CFB6><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><E5B0B4>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>Ӧ<EFBFBD>·<EFBFBD> key_index_enum ö<><C3B6><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>
// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ô<EFBFBD><C3B4>Ҫͬ<D2AA><CDAC><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD> key_index_enum ö<><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define KEY_LIST {P20_6, P20_7, P11_2, P11_3}
#define KEY_RELEASE_LEVEL (GPIO_HIGH) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>״̬ Ҳ<><D2B2><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ͷ<EFBFBD>״̬<D7B4>ĵ<EFBFBD>ƽ
#define KEY_MAX_SHOCK_PERIOD (10 ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>źŻᱻ<C5BB><E1B1BB>Ϊ<EFBFBD><CEAA><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD>
#define KEY_LONG_PRESS_PERIOD (1000 ) // <20><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>źŻᱻ<C5BB><E1B1BB>Ϊ<EFBFBD>dz<EFBFBD><C7B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//==================================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//==================================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>===============================================
typedef enum
{
KEY_1,
KEY_2,
KEY_3,
KEY_4,
KEY_NUMBER,
}key_index_enum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ӧ<EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD><C4B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD> Ĭ<>϶<EFBFBD><CFB6><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>
typedef enum
{
KEY_RELEASE, // <20><><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>״̬
KEY_SHORT_PRESS, // <20><><EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD>״̬
KEY_LONG_PRESS, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
}key_state_enum;
//==================================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>===============================================
//==================================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===============================================
void key_scanner (void); // <20><><EFBFBD><EFBFBD>״̬ɨ<CCAC><C9A8>
key_state_enum key_get_state (key_index_enum key_n); // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>״̬
void key_clear_state (key_index_enum key_n); // <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
void key_clear_all_state (void); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD>״̬
void key_init (uint32 period); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
//==================================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===============================================
#endif

View File

@@ -0,0 +1,185 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_menc15a
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2024-11-19 pudding first version
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
* SCL/SPC <20>鿴 zf_device_menc15a.h <20><> MENC15A_SPC_PIN <20><EFBFBD><EAB6A8>
* SDA/DSI <20>鿴 zf_device_menc15a.h <20><> MENC15A_SDI_PIN <20><EFBFBD><EAB6A8>
* SA0/SDO <20>鿴 zf_device_menc15a.h <20><> MENC15A_SDO_PIN <20><EFBFBD><EAB6A8>
* CS <20>鿴 zf_device_menc15a.h <20><> MENC15A_CS_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "zf_common_function.h"
#include "zf_device_config.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
#include "zf_driver_spi.h"
#include "zf_device_menc15a.h"
uint16 menc15a_absolute_data[2] = {0};
int16 menc15a_absolute_offset_data[2] = {0};
int16 menc15a_speed_data[2] = {0};
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>תƫ<D7AA><C6AB>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> encoder_max <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>дʮ<D0B4><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> now_location <20><>ǰλ<C7B0><CEBB><EFBFBD><EFBFBD>Ϣ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> last_location <20><>һ<EFBFBD>ε<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ϣ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> int32 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>ֵ
// ʹ<><CAB9>ʾ<EFBFBD><CABE> magnetic_encoder_get_offset();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
static int32 magnetic_encoder_get_offset (int32 encoder_max, int32 now_location, int32 last_location)
{
int32 result_data = 0;
if((encoder_max / 2) < func_abs(now_location - last_location))
{
result_data = ((encoder_max / 2) < now_location ? (now_location - encoder_max - last_location) : (now_location + encoder_max - last_location));
}
else
{
result_data = (now_location - last_location);
}
return result_data;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ MENC15A <20>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>ֵ <20>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> menc15a_module <20>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD> ģ<><C4A3><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint16 <20><><EFBFBD><EFBFBD>ֵ <20>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> menc15a_1_get_absolute_data();
// <20><>ע<EFBFBD><D7A2>Ϣ ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD>󣬿<EFBFBD>ֱ<EFBFBD><D6B1>ʹ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD>ֵ Ҳ<><D2B2><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module)
{
uint16 read_data = 0;
uint16 data_last = menc15a_absolute_data[menc15a_module];
if(menc15a_module == menc15a_1_module)
{
MENC15A_1_CS(0);
read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8021);
MENC15A_1_CS(1);
}
else
{
MENC15A_2_CS(0);
read_data = spi_read_16bit_register(MENC15A_2_SPI, 0x8021);
MENC15A_2_CS(1);
}
menc15a_absolute_data[menc15a_module] = (read_data & 0x7fff);
menc15a_absolute_offset_data[menc15a_module] = (int16)magnetic_encoder_get_offset(32768, menc15a_absolute_data[menc15a_module], data_last);
return menc15a_absolute_data[menc15a_module];
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ MENC15A <20>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD> <20><> ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> menc15a_module <20>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD> ģ<><C4A3><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> int16 ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ÿ<><C3BF><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD> rad/s)
// ʹ<><CAB9>ʾ<EFBFBD><CABE> menc15a_1_get_speed_data();
// <20><>ע<EFBFBD><D7A2>Ϣ ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD>󣬿<EFBFBD>ֱ<EFBFBD><D6B1>ʹ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD>ֵ Ҳ<><D2B2><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module)
{
int16 read_data = 0;
if(menc15a_module == menc15a_1_module)
{
MENC15A_1_CS(0);
read_data = spi_read_16bit_register(MENC15A_1_SPI, 0x8032);
MENC15A_1_CS(1);
}
else
{
MENC15A_2_CS(0);
read_data = spi_read_16bit_register(MENC15A_2_SPI, 0x8032);
MENC15A_2_CS(1);
}
read_data = (read_data & 0x7fff);
if(read_data > 16384)
{
read_data = read_data - 32768;
}
menc15a_speed_data[menc15a_module] = (int16)((float)read_data * 1.917476f);
return menc15a_speed_data[menc15a_module];
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD><CABC> MENC15A
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> menc15a_init();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 menc15a_init(void)
{
spi_init(MENC15A_1_SPI, SPI_MODE1, MENC15A_1_SPI_SPEED, MENC15A_1_CLK_PIN, MENC15A_1_MOSI_PIN, MENC15A_1_MISO_PIN, SPI_CS_NULL); // <20><><EFBFBD><EFBFBD> MENC15A-1 <20><> SPI<50>˿<EFBFBD>
gpio_init(MENC15A_1_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // <20><><EFBFBD><EFBFBD> MENC15A-1 <20><> CS<43>˿<EFBFBD>
spi_init(MENC15A_2_SPI, SPI_MODE1, MENC15A_2_SPI_SPEED, MENC15A_2_CLK_PIN, MENC15A_2_MOSI_PIN, MENC15A_2_MISO_PIN, SPI_CS_NULL); // <20><><EFBFBD><EFBFBD> MENC15A-2 <20><> SPI<50>˿<EFBFBD>
gpio_init(MENC15A_2_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // <20><><EFBFBD><EFBFBD> MENC15A-2 <20><> CS<43>˿<EFBFBD>
return 0;
}

View File

@@ -0,0 +1,102 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_menc15a
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2024-11-19 pudding first version
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
* CLK <20>鿴 zf_device_menc15a.h <20><> MENC15A_CLK_PIN <20><EFBFBD><EAB6A8>
* MOSI <20>鿴 zf_device_menc15a.h <20><> MENC15A_MOSI_PIN <20><EFBFBD><EAB6A8>
* MISO <20>鿴 zf_device_menc15a.h <20><> MENC15A_MISO_PIN <20><EFBFBD><EAB6A8>
* CS <20>鿴 zf_device_menc15a.h <20><> MENC15A_CS_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
********************************************************************************************************************/
#ifndef _zf_device_menc15a_h_
#define _zf_device_menc15a_h_
#include "zf_common_typedef.h"
//================================================<3D><><EFBFBD><EFBFBD> MENC15A <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
#define MENC15A_1_SPI_SPEED (20 * 1000 * 1000) // <20>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>1 Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
#define MENC15A_1_SPI (SPI_0 ) // <20>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>1 Ӳ<><D3B2> SPI <20><>
#define MENC15A_1_CLK_PIN (SPI0_SCLK_P20_11) // <20>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>1 Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
#define MENC15A_1_MOSI_PIN (SPI0_MOSI_P20_14) // <20>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>1 Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
#define MENC15A_1_MISO_PIN (SPI0_MISO_P20_12) // <20>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>1 Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
#define MENC15A_1_CS_PIN (P20_13) // <20>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>1 CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
#define MENC15A_1_CS(x) ((x) ? (gpio_high(MENC15A_1_CS_PIN)) : (gpio_low(MENC15A_1_CS_PIN)))
#define MENC15A_2_SPI_SPEED (20 * 1000 * 1000) // <20>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>2 Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
#define MENC15A_2_SPI (SPI_0 ) // <20>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>2 Ӳ<><D3B2> SPI <20><>
#define MENC15A_2_CLK_PIN (SPI0_SCLK_P20_11 ) // <20>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>2 Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
#define MENC15A_2_MOSI_PIN (SPI0_MOSI_P20_14 ) // <20>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>2 Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
#define MENC15A_2_MISO_PIN (SPI0_MISO_P20_12 ) // <20>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>2 Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD>
#define MENC15A_2_CS_PIN (P20_15) // <20>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>2 CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
#define MENC15A_2_CS(x) ((x) ? (gpio_high(MENC15A_2_CS_PIN)) : (gpio_low(MENC15A_2_CS_PIN)))
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
// ö<>ٴű<D9B4><C5B1><EFBFBD>ģ<EFBFBD><C4A3>
typedef enum
{
menc15a_1_module,
menc15a_2_module,
}menc15a_module_enum;
//================================================<3D><><EFBFBD><EFBFBD> MENC15A <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
extern uint16 menc15a_absolute_data[2];
extern int16 menc15a_absolute_offset_data[2];
extern int16 menc15a_speed_data[2];
uint16 menc15a_get_absolute_data(menc15a_module_enum menc15a_module);
int16 menc15a_get_speed_data(menc15a_module_enum menc15a_module);
uint8 menc15a_init(void);
#endif

View File

@@ -0,0 +1,227 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_mpu6050
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* <20><><EFBFBD><EFBFBD> IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD>Ӧ<EFBFBD><D3A6>ϵ
* SCL <20>鿴 zf_device_mpu6050.h <20><> MPU6050_SOFT_IIC_SCL <20><EFBFBD><EAB6A8>
* SDA <20>鿴 zf_device_mpu6050.h <20><> MPU6050_SOFT_IIC_SDA <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* Ӳ<><D3B2> IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ϵ
* SCL <20>鿴 zf_device_mpu6050.h <20><> MPU6050_IIC_SCL <20><EFBFBD><EAB6A8>
* SDA <20>鿴 zf_device_mpu6050.h <20><> MPU6050_IIC_SDA <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "zf_driver_delay.h"
#include "zf_driver_soft_iic.h"
#include "zf_device_mpu6050.h"
int16 mpu6050_gyro_x = 0, mpu6050_gyro_y = 0, mpu6050_gyro_z = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GYRO (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int16 mpu6050_acc_x = 0, mpu6050_acc_y = 0, mpu6050_acc_z = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> ACC (accelerometer <20><><EFBFBD>ٶȼ<D9B6>)
#if MPU6050_USE_SOFT_IIC
static soft_iic_info_struct mpu6050_iic_struct; // <20><><EFBFBD><EFBFBD> mpu6050 IICͨѶ<CDA8><EFBFBD><E1B9B9>
#define mpu6050_write_register(reg, data) (soft_iic_write_8bit_register(&mpu6050_iic_struct, (reg), (data)))
#define mpu6050_read_register(reg) (soft_iic_read_8bit_register(&mpu6050_iic_struct, (reg)))
#define mpu6050_read_registers(reg, data, len) (soft_iic_read_8bit_registers(&mpu6050_iic_struct, (reg), (data), (len)))
#else
#error "<22>ݲ<EFBFBD>֧<EFBFBD><D6A7>Ӳ<EFBFBD><D3B2>IICͨѶ"
#endif
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MPU6050 <20>Լ<EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-<2D>Լ<EFBFBD>ʧ<EFBFBD><CAA7> 0-<2D>Լ<EFBFBD><D4BC>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> if(mpu6050_self1_check())
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 mpu6050_self1_check (void)
{
uint8 dat = 0, return_state = 0;
uint16 timeout_count = 0;
mpu6050_write_register(MPU6050_PWR_MGMT_1, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
mpu6050_write_register(MPU6050_SMPLRT_DIV, 0x07); // 125HZ<48><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while(0x07 != dat)
{
if(MPU6050_TIMEOUT_COUNT < timeout_count ++)
{
return_state = 1;
break;
}
dat = mpu6050_read_register(MPU6050_SMPLRT_DIV);
system_delay_ms(10);
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ MPU6050 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> mpu6050_get_acc(); // ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void mpu6050_get_acc (void)
{
uint8 dat[6];
mpu6050_read_registers(MPU6050_ACCEL_XOUT_H, dat, 6);
mpu6050_acc_x = (int16)(((uint16)dat[0] << 8 | dat[1]));
mpu6050_acc_y = (int16)(((uint16)dat[2] << 8 | dat[3]));
mpu6050_acc_z = (int16)(((uint16)dat[4] << 8 | dat[5]));
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ MPU6050 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> mpu6050_get_gyro(); // ִ<>иú<D0B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ鿴<D3B2><E9BFB4>Ӧ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void mpu6050_get_gyro (void)
{
uint8 dat[6];
mpu6050_read_registers(MPU6050_GYRO_XOUT_H, dat, 6);
mpu6050_gyro_x = (int16)(((uint16)dat[0] << 8 | dat[1]));
mpu6050_gyro_y = (int16)(((uint16)dat[2] << 8 | dat[3]));
mpu6050_gyro_z = (int16)(((uint16)dat[4] << 8 | dat[5]));
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> MPU6050 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> gyro_value // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> float data = mpu6050_acc_transition(imu660ra_acc_x); //<2F><>λΪ g(m/s^2)
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
float mpu6050_acc_transition (int16 acc_value)
{
float acc_data = 0;
switch(MPU6050_ACC_SAMPLE)
{
case 0x00: acc_data = (float)acc_value / 16384; break; // 0x00 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16384 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
case 0x08: acc_data = (float)acc_value / 8192; break; // 0x08 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8192 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
case 0x10: acc_data = (float)acc_value / 4096; break; // 0x10 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4096 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
case 0x18: acc_data = (float)acc_value / 2048; break; // 0x18 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2048 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
default: break;
}
return acc_data;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> MPU6050 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> gyro_value // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> float data = mpu6050_gyro_transition(imu660ra_gyro_x); // <20><>λΪ<CEBB><CEAA>/s
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
float mpu6050_gyro_transition (int16 gyro_value)
{
float gyro_data = 0;
switch(MPU6050_GYR_SAMPLE)
{
case 0x00: gyro_data = (float)gyro_value / 131.0f; break; // 0x00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 131 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
case 0x08: gyro_data = (float)gyro_value / 65.5f; break; // 0x08 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 65.5 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
case 0x10: gyro_data = (float)gyro_value / 32.8f; break; // 0x10 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>32.8 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
case 0x18: gyro_data = (float)gyro_value / 16.4f; break; // 0x18 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>16.4 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
default: break;
}
return gyro_data;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD><CABC> MPU6050
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-<2D><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7> 0-<2D><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> mpu6050_init();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 mpu6050_init (void)
{
uint8 return_state = 0;
#if MPU6050_USE_SOFT_IIC
soft_iic_init(&mpu6050_iic_struct, MPU6050_DEV_ADDR, MPU6050_SOFT_IIC_DELAY, MPU6050_SCL_PIN, MPU6050_SDA_PIN);
#else
iic_init(MPU6050_IIC, MPU6050_DEV_ADDR, MPU6050_IIC_SPEED, MPU6050_SCL_PIN, MPU6050_SDA_PIN);
#endif
system_delay_ms(100); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ʱ
do
{
if(mpu6050_self1_check())
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ô<EFBFBD><C3B4><EFBFBD><EFBFBD> MPU6050 <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܾ<EFBFBD><DCBE>ǻ<EFBFBD><C7BB><EFBFBD>
zf_log(0, "MPU6050 self check error.");
return_state = 1;
break;
}
mpu6050_write_register(MPU6050_PWR_MGMT_1, 0x00); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
mpu6050_write_register(MPU6050_SMPLRT_DIV, 0x07); // 125HZ<48><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mpu6050_write_register(MPU6050_CONFIG, 0x04);
mpu6050_write_register(MPU6050_GYRO_CONFIG, MPU6050_GYR_SAMPLE); // 2000
// GYRO_CONFIG<49>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ϊ:0x00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>131.2 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x08 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>65.6 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x10 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>32.8 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x18 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>16.4 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
mpu6050_write_register(MPU6050_ACCEL_CONFIG, MPU6050_ACC_SAMPLE); // 8g
// ACCEL_CONFIG<49>Ĵ<EFBFBD><C4B4><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ϊ:0x00 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>16384 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ:0x08 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>4g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>8192 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ:0x10 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>8g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>4096 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
// <20><><EFBFBD><EFBFBD>Ϊ:0x18 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>16g <20><>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>2048 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB>g(m/s^2)
mpu6050_write_register(MPU6050_USER_CONTROL, 0x00);
mpu6050_write_register(MPU6050_INT_PIN_CFG, 0x02);
}while(0);
return return_state;
}

View File

@@ -0,0 +1,120 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_mpu6050
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* <20><><EFBFBD><EFBFBD> IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD>Ӧ<EFBFBD><D3A6>ϵ
* SCL <20>鿴 zf_device_mpu6050.h <20><> MPU6050_SOFT_IIC_SCL <20><EFBFBD><EAB6A8>
* SDA <20>鿴 zf_device_mpu6050.h <20><> MPU6050_SOFT_IIC_SDA <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* Ӳ<><D3B2> IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ϵ
* SCL <20>鿴 zf_device_mpu6050.h <20><> MPU6050_IIC_SCL <20><EFBFBD><EAB6A8>
* SDA <20>鿴 zf_device_mpu6050.h <20><> MPU6050_IIC_SDA <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
********************************************************************************************************************/
#ifndef _zf_device_mpu6050_h_
#define _zf_device_mpu6050_h_
#include "zf_common_typedef.h"
//================================================<3D><><EFBFBD><EFBFBD> MPU6050 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#define MPU6050_USE_SOFT_IIC (1) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IIC <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IIC <20><>ʽ
#if MPU6050_USE_SOFT_IIC // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
#define MPU6050_SOFT_IIC_DELAY (59 ) // <20><><EFBFBD><EFBFBD> IIC <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС IIC ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
#define MPU6050_SCL_PIN (P20_11) // <20><><EFBFBD><EFBFBD> IIC SCL <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> MPU6050 <20><> SCL <20><><EFBFBD><EFBFBD>
#define MPU6050_SDA_PIN (P20_14) // <20><><EFBFBD><EFBFBD> IIC SDA <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> MPU6050 <20><> SDA <20><><EFBFBD><EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> IIC <20><><EFBFBD><EFBFBD>====================================================
#else
#error "<22>ݲ<EFBFBD>֧<EFBFBD><D6A7>Ӳ<EFBFBD><D3B2>IICͨѶ"
#endif
#define MPU6050_TIMEOUT_COUNT (0x00FF) // MPU6050 <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
//================================================<3D><><EFBFBD><EFBFBD> MPU6050 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//================================================<3D><><EFBFBD><EFBFBD> MPU6050 <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
#define MPU6050_DEV_ADDR (0xD0>>1) // IICд<43><D0B4>ʱ<EFBFBD>ĵ<EFBFBD>ַ<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݣ<EFBFBD>+1Ϊ<31><CEAA>ȡ
#define MPU6050_SMPLRT_DIV (0x19) // <20><><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>0x07(125Hz)
#define MPU6050_CONFIG (0x1A) // <20><>ͨ<EFBFBD>˲<EFBFBD>Ƶ<EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>0x06(5Hz)
#define MPU6050_GYRO_CONFIG (0x1B) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ켰<D4BC><ECBCB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>0x18(<28><><EFBFBD>Լ죬2000deg/s)
#define MPU6050_ACCEL_CONFIG (0x1C) // <20><><EFBFBD>ټ<EFBFBD><D9BC>Լ졢<D4BC><ECA1A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>ͨ<EFBFBD>˲<EFBFBD>Ƶ<EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>0x01(<28><><EFBFBD>Լ죬2G<32><47>5Hz)
#define MPU6050_INT_PIN_CFG (0x37) // <20><><EFBFBD><EFBFBD>6050<35><30><EFBFBD><EFBFBD>I2CΪֱͨģʽ<C4A3>Ĵ<EFBFBD><C4B4><EFBFBD>
#define MPU6050_ACCEL_XOUT_H (0x3B)
#define MPU6050_GYRO_XOUT_H (0x43)
#define MPU6050_USER_CONTROL (0x6A) // <20>ر<EFBFBD>6050<35>Ը<EFBFBD><D4B8><EFBFBD>I2C<32><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>
#define MPU6050_PWR_MGMT_1 (0x6B) // <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>0x00(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
#define MPU6050_WHO_AM_I (0x75) // IIC<49><43>ַ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><><C4AC><EFBFBD><EFBFBD>ֵ0x68<36><38>ֻ<EFBFBD><D6BB>)
#define MPU6050_ACC_SAMPLE (0x10) // <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ϊ:0x00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>131.2 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x08 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>65.6 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x10 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>32.8 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x18 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>16.4 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
#define MPU6050_GYR_SAMPLE (0x18) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ϊ:0x00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>250 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>131.2 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x08 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>500 dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>65.6 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x10 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>1000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>32.8 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
// <20><><EFBFBD><EFBFBD>Ϊ:0x18 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ:<3A><>2000dps <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>16.4 <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>/s
//================================================<3D><><EFBFBD><EFBFBD> MPU6050 <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ================================================
//================================================<3D><><EFBFBD><EFBFBD> MPU6050 ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>================================================
extern int16 mpu6050_gyro_x, mpu6050_gyro_y, mpu6050_gyro_z; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> gyro (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
extern int16 mpu6050_acc_x, mpu6050_acc_y, mpu6050_acc_z; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD> acc (accelerometer <20><><EFBFBD>ٶȼ<D9B6>)
//================================================<3D><><EFBFBD><EFBFBD> MPU6050 ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>================================================
//================================================<3D><><EFBFBD><EFBFBD> MPU6050 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
void mpu6050_get_acc (void); // <20><>ȡ MPU6050 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>
void mpu6050_get_gyro (void); // <20><>ȡ MPU6050 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float mpu6050_acc_transition (int16 acc_value); // <20><> MPU6050 <20><><EFBFBD>ٶȼ<D9B6><C8BC><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float mpu6050_gyro_transition (int16 gyro_value); // <20><> MPU6050 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 mpu6050_init (void); // <20><>ʼ<EFBFBD><CABC> MPU6050
//================================================<3D><><EFBFBD><EFBFBD> MPU6050 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#endif

View File

@@ -0,0 +1,518 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_mt9v03x
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* TXD <20>鿴 zf_device_mt9v03x.h <20><> MT9V03X_COF_UART_TX <20><EFBFBD><EAB6A8>
* RXD <20>鿴 zf_device_mt9v03x.h <20><> MT9V03X_COF_UART_RX <20><EFBFBD><EAB6A8>
* PCLK <20>鿴 zf_device_mt9v03x.h <20><> MT9V03X_PCLK_PIN <20><EFBFBD><EAB6A8>
* VSY <20>鿴 zf_device_mt9v03x.h <20><> MT9V03X_VSYNC_PIN <20><EFBFBD><EAB6A8>
* D0-D7 <20>鿴 zf_device_mt9v03x.h <20><> MT9V03X_DATA_PIN <20><EFBFBD><EAB6A8> <20>Ӹö<D3B8><C3B6>ʼ<E5BFAA><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
********************************************************************************************************************/
#include "zf_common_interrupt.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
#include "zf_driver_soft_iic.h"
#include "zf_driver_delay.h"
#include "zf_driver_dma.h"
#include "zf_driver_exti.h"
#include "zf_driver_gpio.h"
#include "zf_driver_uart.h"
#include "zf_device_camera.h"
#include "zf_device_config.h"
#include "zf_device_mt9v03x.h"
vuint8 mt9v03x_finish_flag = 0; // һ<><D2BB>ͼ<EFBFBD><CDBC><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
IFX_ALIGN(4) uint8 mt9v03x_image[MT9V03X_H][MT9V03X_W]; // <20><><EFBFBD><EFBFBD>4<EFBFBD>ֽڶ<D6BD><DAB6><EFBFBD>
static m9v03x_type_enum mt9v03x_type; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
static uint16 mt9v03x_version = 0x00; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><E6B1BE>
int16 timeout = MT9V03X_INIT_TIMEOUT; // <20><><EFBFBD>峬ʱ<E5B3AC><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
uint8 mt9v03x_lost_flag = 1; // ͼ<><CDBC><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>־λ
uint8 mt9v03x_dma_int_num; // <20><>ǰDMA<4D>жϴ<D0B6><CFB4><EFBFBD>
uint8 mt9v03x_dma_init_flag; // <20>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC>
uint8 mt9v03x_link_list_num;
// <20><>Ҫ<EFBFBD><D2AA><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸IJ<DEB8><C4B2><EFBFBD>
static int16 mt9v03x_set_confing_buffer[MT9V03X_CONFIG_FINISH][2]=
{
{MT9V03X_INIT, 0}, // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC>ʼ<EFBFBD><CABC>
{MT9V03X_AUTO_EXP, MT9V03X_AUTO_EXP_DEF}, // <20>Զ<EFBFBD><D4B6>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD> <20><>Χ1-63 0Ϊ<30>ر<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ع⿪<D8B9><E2BFAA> EXP_TIME<4D><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD>䣬Ҳ<E4A3AC><D2B2><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ع<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{MT9V03X_EXP_TIME, MT9V03X_EXP_TIME_DEF}, // <20>ع<EFBFBD>ʱ<EFBFBD><CAB1> <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ֵ
{MT9V03X_FPS, MT9V03X_FPS_DEF}, // ͼ<><CDBC>֡<EFBFBD><D6A1> <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FPS<50><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FPS
{MT9V03X_SET_COL, MT9V03X_W}, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Χ1-752
{MT9V03X_SET_ROW, MT9V03X_H}, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Χ1-480
{MT9V03X_LR_OFFSET, MT9V03X_LR_OFFSET_DEF}, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD> <20><>ֵ <20><>ƫ<EFBFBD><C6AB> <20><>ֵ <20><>ƫ<EFBFBD><C6AB> <20><>Ϊ188 376 752ʱ<32>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB> <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
{MT9V03X_UD_OFFSET, MT9V03X_UD_OFFSET_DEF}, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD> <20><>ֵ <20><>ƫ<EFBFBD><C6AB> <20><>ֵ <20><>ƫ<EFBFBD><C6AB> <20><>Ϊ120 240 480ʱ<30>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB> <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
{MT9V03X_GAIN, MT9V03X_GAIN_DEF}, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Χ16-64 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸ı<C2B8>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>
{MT9V03X_PCLK_MODE, MT9V03X_PCLK_MODE_DEF}, // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MT9V034 V2.0<EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϰ汾֧<EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸IJ<DEB8><C4B2><EFBFBD>
static int16 mt9v03x_get_confing_buffer[MT9V03X_CONFIG_FINISH - 1][2]=
{
{MT9V03X_AUTO_EXP, 0}, // <20>Զ<EFBFBD><D4B6>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD>
{MT9V03X_EXP_TIME, 0}, // <20>ع<EFBFBD>ʱ<EFBFBD><CAB1>
{MT9V03X_FPS, 0}, // ͼ<><CDBC>֡<EFBFBD><D6A1>
{MT9V03X_SET_COL, 0}, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{MT9V03X_SET_ROW, 0}, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{MT9V03X_LR_OFFSET, 0}, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
{MT9V03X_UD_OFFSET, 0}, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
{MT9V03X_GAIN, 0}, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{MT9V03X_PCLK_MODE, 0}, // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ģʽ<C4A3><CABD><EFBFBD><EFBFBD> PCLKģʽ < <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MT9V034 V1.5 <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ϰ汾֧<E6B1BE>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD> >
};
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> buff <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ĵ<EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-ʧ<><CAA7> 0-<2D>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> mt9v03x_set_config(mt9v03x_set_confing_buffer);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 mt9v03x_set_config (int16 buff[MT9V03X_CONFIG_FINISH][2])
{
uint8 return_state = 1;
uint8 uart_buffer[4];
uint16 temp = 0;
uint16 timeout_count = 0;
uint32 loop_count = 0;
uint32 uart_buffer_index = 0;
switch(mt9v03x_version)
{
case 0x0230: loop_count = MT9V03X_PCLK_MODE; break;
default: loop_count = MT9V03X_GAIN; break;
}
// <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD>
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC>
for(; MT9V03X_SET_DATA > loop_count; loop_count --)
{
uart_buffer[0] = 0xA5;
uart_buffer[1] = (uint8)buff[loop_count][0];
temp = buff[loop_count][1];
uart_buffer[2] = temp >> 8;
uart_buffer[3] = (uint8)temp;
uart_write_buffer(MT9V03X_COF_UART, uart_buffer, 4);
system_delay_ms(2);
}
do
{
if(3 <= fifo_used(&camera_receiver_fifo))
{
uart_buffer_index = 3;
fifo_read_buffer(&camera_receiver_fifo, uart_buffer, &uart_buffer_index, FIFO_READ_AND_CLEAN);
if((0xff == uart_buffer[1]) || (0xff == uart_buffer[2]))
{
return_state = 0;
break;
}
}
system_delay_ms(1);
}while(MT9V03X_INIT_TIMEOUT > timeout_count ++);
// <20><><EFBFBD>ϲ<EFBFBD><CFB2>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>51<35><31>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>eeprom<6F><6D>
// <20><><EFBFBD><EFBFBD>set_exposure_time<6D><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>ع<EFBFBD><D8B9><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><E6B4A2>eeprom<6F><6D>
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͷ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> buff <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ĵ<EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-ʧ<><CAA7> 0-<2D>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> mt9v03x_get_config(mt9v03x_get_confing_buffer);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 mt9v03x_get_config (int16 buff[MT9V03X_CONFIG_FINISH - 1][2])
{
uint8 return_state = 0;
uint8 uart_buffer[4];
uint16 temp = 0;
uint16 timeout_count = 0;
uint32 loop_count = 0;
uint32 uart_buffer_index = 0;
switch(mt9v03x_version)
{
case 0x0230: loop_count = MT9V03X_PCLK_MODE; break;
default: loop_count = MT9V03X_GAIN; break;
}
for(loop_count = loop_count - 1; 1 <= loop_count; loop_count --)
{
if((0x0230 > mt9v03x_version) && (MT9V03X_PCLK_MODE == buff[loop_count][0]))
{
continue;
}
uart_buffer[0] = 0xA5;
uart_buffer[1] = MT9V03X_GET_STATUS;
temp = buff[loop_count][0];
uart_buffer[2] = temp >> 8;
uart_buffer[3] = (uint8)temp;
uart_write_buffer(MT9V03X_COF_UART, uart_buffer, 4);
timeout_count = 0;
do
{
if(3 <= fifo_used(&camera_receiver_fifo))
{
uart_buffer_index = 3;
fifo_read_buffer(&camera_receiver_fifo, uart_buffer, &uart_buffer_index, FIFO_READ_AND_CLEAN);
buff[loop_count][1] = uart_buffer[1] << 8 | uart_buffer[2];
break;
}
system_delay_ms(1);
}while(MT9V03X_INIT_TIMEOUT > timeout_count ++);
if(MT9V03X_INIT_TIMEOUT < timeout_count) // <20><>ʱ
{
return_state = 1;
break;
}
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MT9V03X<33><58><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ͨ<EFBFBD>Żص<C5BB>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> mt9v03x_uart_callback();
//-------------------------------------------------------------------------------------------------------------------
static void mt9v03x_uart_handler (void)
{
uint8 data = 0;
uart_query_byte(MT9V03X_COF_UART, &data);
if(0xA5 == data)
{
fifo_clear(&camera_receiver_fifo);
}
fifo_write_element(&camera_receiver_fifo, data);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MT9V03X<33><58><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ж<EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> mt9v03x_vsync_handler();
//-------------------------------------------------------------------------------------------------------------------
static void mt9v03x_vsync_handler(void)
{
exti_flag_clear(MT9V03X_VSYNC_PIN);
mt9v03x_dma_int_num = 0;
if(mt9v03x_dma_init_flag )
{
mt9v03x_dma_init_flag = 0;
IfxDma_resetChannel(&MODULE_DMA, MT9V03X_DMA_CH);
mt9v03x_link_list_num = dma_init(MT9V03X_DMA_CH,
MT9V03X_DATA_ADD,
mt9v03x_image[0],
MT9V03X_PCLK_PIN,
EXTI_TRIGGER_RISING,
MT9V03X_IMAGE_SIZE); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>300M <20><><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪFALLING
dma_enable(MT9V03X_DMA_CH);
}
else
{
if(1 == mt9v03x_link_list_num)
{
dma_set_destination(MT9V03X_DMA_CH, mt9v03x_image[0]); // û<>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>ĵ<EFBFBD>ַ
}
dma_enable(MT9V03X_DMA_CH);
}
mt9v03x_lost_flag = 1;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MT9V03X<33><58><EFBFBD><EFBFBD>ͷDMA<4D><41><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> mt9v03x_dma_handler();
//-------------------------------------------------------------------------------------------------------------------
static void mt9v03x_dma_handler(void)
{
clear_dma_flag(MT9V03X_DMA_CH);
if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH)) // ͼ<><CDBC><EFBFBD><EFBFBD>λ<EFBFBD>ж<EFBFBD>
{
mt9v03x_finish_flag = 0;
dma_disable(MT9V03X_DMA_CH);
IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, MT9V03X_DMA_CH);
mt9v03x_dma_init_flag = 1;
}
else
{
mt9v03x_dma_int_num++;
if(mt9v03x_dma_int_num >= mt9v03x_link_list_num)
{
// <20>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
// һ<><D2BB>ͼ<EFBFBD><CDBC><EFBFBD>Ӳɼ<D3B2><C9BC><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ3.8MS<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(50FPS<50><53>188*120<32>ֱ<EFBFBD><D6B1><EFBFBD>)
mt9v03x_dma_int_num = 0;
mt9v03x_lost_flag = 0;
mt9v03x_finish_flag = 1;
dma_disable(MT9V03X_DMA_CH);
}
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͷ<EFBFBD>̼<EFBFBD><CCBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint16 0-<2D><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> N-<2D><EFBFBD><E6B1BE>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> mt9v03x_get_version(); // <20><><EFBFBD>øú<C3B8><C3BA><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ȳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint16 mt9v03x_get_version (void)
{
uint16 temp;
uint8 uart_buffer[4];
uint16 timeout_count = 0;
uint16 return_value = 0;
uint32 uart_buffer_index = 0;
uart_buffer[0] = 0xA5;
uart_buffer[1] = MT9V03X_GET_STATUS;
temp = MT9V03X_GET_VERSION;
uart_buffer[2] = temp >> 8;
uart_buffer[3] = (uint8)temp;
uart_write_buffer(MT9V03X_COF_UART, uart_buffer, 4);
do
{
if(3 <= fifo_used(&camera_receiver_fifo))
{
uart_buffer_index = 3;
fifo_read_buffer(&camera_receiver_fifo, uart_buffer, &uart_buffer_index, FIFO_READ_AND_CLEAN);
return_value = uart_buffer[1] << 8 | uart_buffer[2];
break;
}
system_delay_ms(1);
}while(MT9V03X_INIT_TIMEOUT > timeout_count ++);
return return_value;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ع<EFBFBD>ʱ<EFBFBD><CAB1>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> light <20><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><CAB1>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-ʧ<><CAA7> 0-<2D>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> mt9v03x_set_exposure_time(100); // <20><><EFBFBD>øú<C3B8><C3BA><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ȳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><CAB1>Խ<EFBFBD><D4BD>ͼ<EFBFBD><CDBC>Խ<EFBFBD><D4BD>
// <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷֱ<DDB7><D6B1>ʼ<EFBFBD>FPS<50><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD>
// <20><>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
//-------------------------------------------------------------------------------------------------------------------
uint8 mt9v03x_set_exposure_time (uint16 light)
{
uint8 return_state = 0;
if(MT9V03X_UART == mt9v03x_type)
{
set_camera_type(CAMERA_GRAYSCALE, mt9v03x_vsync_handler, mt9v03x_dma_handler, mt9v03x_uart_handler);
uint8 uart_buffer[4];
uint16 temp = 0;
uint16 timeout_count = 0;
uint32 uart_buffer_index = 0;
uart_buffer[0] = 0xA5;
uart_buffer[1] = MT9V03X_SET_EXP_TIME;
temp = light;
uart_buffer[2] = temp >> 8;
uart_buffer[3] = (uint8)temp;
uart_write_buffer(MT9V03X_COF_UART, uart_buffer, 4);
do
{
if(3 <= fifo_used(&camera_receiver_fifo))
{
uart_buffer_index = 3;
fifo_read_buffer(&camera_receiver_fifo, uart_buffer, &uart_buffer_index, FIFO_READ_AND_CLEAN);
temp = uart_buffer[1] << 8 | uart_buffer[2];
break;
}
system_delay_ms(1);
}while(MT9V03X_INIT_TIMEOUT > timeout_count ++);
if((temp != light) || (MT9V03X_INIT_TIMEOUT <= timeout_count))
{
return_state = 1;
}
set_camera_type(CAMERA_GRAYSCALE, mt9v03x_vsync_handler, mt9v03x_dma_handler, NULL);
}
else
{
return_state = mt9v03x_set_exposure_time_sccb(light);
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ڲ<EFBFBD><DAB2>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> addr <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>ڲ<EFBFBD><DAB2>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-ʧ<><CAA7> 0-<2D>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> mt9v03x_set_reg(addr, data); // <20><><EFBFBD>øú<C3B8><C3BA><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ȳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 mt9v03x_set_reg (uint8 addr, uint16 data)
{
uint8 return_state = 0;
if(MT9V03X_UART == mt9v03x_type)
{
set_camera_type(CAMERA_GRAYSCALE, mt9v03x_vsync_handler, mt9v03x_dma_handler, mt9v03x_uart_handler);
uint8 uart_buffer[4];
uint16 temp = 0;
uint16 timeout_count = 0;
uint32 uart_buffer_index = 0;
uart_buffer[0] = 0xA5;
uart_buffer[1] = MT9V03X_SET_ADDR;
temp = addr;
uart_buffer[2] = temp >> 8;
uart_buffer[3] = (uint8)temp;
uart_write_buffer(MT9V03X_COF_UART, uart_buffer, 4);
system_delay_ms(10);
uart_buffer[0] = 0xA5;
uart_buffer[1] = MT9V03X_SET_DATA;
temp = data;
uart_buffer[2] = temp >> 8;
uart_buffer[3] = (uint8)temp;
uart_write_buffer(MT9V03X_COF_UART, uart_buffer, 4);
do
{
if(3 <= fifo_used(&camera_receiver_fifo))
{
uart_buffer_index = 3;
fifo_read_buffer(&camera_receiver_fifo, uart_buffer, &uart_buffer_index, FIFO_READ_AND_CLEAN);
temp = uart_buffer[1] << 8 | uart_buffer[2];
break;
}
system_delay_ms(1);
}while(MT9V03X_INIT_TIMEOUT > timeout_count ++);
if((temp != data) || (MT9V03X_INIT_TIMEOUT <= timeout_count))
{
return_state = 1;
}
set_camera_type(CAMERA_GRAYSCALE, mt9v03x_vsync_handler, mt9v03x_dma_handler, NULL);
}
else
{
return_state = mt9v03x_set_reg_sccb(addr, data);
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MT9V03X <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-ʧ<><CAA7> 0-<2D>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> zf_log(mt9v03x_init(), "mt9v03x init error");
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 mt9v03x_init (void)
{
uint8 return_state = 0;
soft_iic_info_struct mt9v03x_iic_struct;
do
{
system_delay_ms(200);
// <20><><EFBFBD>ȳ<EFBFBD><C8B3><EFBFBD>SCCBͨѶ
mt9v03x_type = MT9V03X_SCCB;
set_camera_type(CAMERA_GRAYSCALE, mt9v03x_vsync_handler, mt9v03x_dma_handler, NULL);
soft_iic_init(&mt9v03x_iic_struct, 0, MT9V03X_COF_IIC_DELAY, MT9V03X_COF_IIC_SCL, MT9V03X_COF_IIC_SDA);
if(mt9v03x_set_config_sccb(&mt9v03x_iic_struct, mt9v03x_set_confing_buffer))
{
// SCCBͨѶʧ<D1B6>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ͨѶ
mt9v03x_type = MT9V03X_UART;
set_camera_type(CAMERA_GRAYSCALE, mt9v03x_vsync_handler, mt9v03x_dma_handler, mt9v03x_uart_handler);
camera_fifo_init();
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
uart_init(MT9V03X_COF_UART, MT9V03X_COF_BAUR, MT9V03X_COF_UART_RX, MT9V03X_COF_UART_TX);
uart_rx_interrupt(MT9V03X_COF_UART, 1);
fifo_clear(&camera_receiver_fifo);
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD> <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><D6A3><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>õķ<C3B5>ʽ <20><>ѡһ
// system_delay_ms(1000); // <20><>ʱ<EFBFBD><CAB1>ʽ
// if(mt9v03x_get_config(mt9v03x_get_confing_buffer))
// {
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// // <20><>ô<EFBFBD><C3B4><EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD>ͨ<EFBFBD>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD>
// // <20><><EFBFBD><EFBFBD>һ<EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܾ<EFBFBD><DCBE>ǻ<EFBFBD><C7BB><EFBFBD>
// zf_log(0, "MT9V03X get config error.");
// set_camera_type(NO_CAMERE, NULL, NULL, NULL);
// return_state = 1;
// break;
// }
mt9v03x_version = mt9v03x_get_version(); // <20><>ȡ<EFBFBD><C8A1><EFBFBD>õķ<C3B5>ʽ
if(mt9v03x_set_config(mt9v03x_set_confing_buffer))
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ô<EFBFBD><C3B4><EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD>ͨ<EFBFBD>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܾ<EFBFBD><DCBE>ǻ<EFBFBD><C7BB><EFBFBD>
zf_log(0, "MT9V03X set config error.");
uart_rx_interrupt(MT9V03X_COF_UART, 0);
set_camera_type(NO_CAMERE, NULL, NULL, NULL);
return_state = 1;
break;
}
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ñ<EFBFBD><C3B1>ڲ鿴<DAB2><E9BFB4><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
if(mt9v03x_get_config(mt9v03x_get_confing_buffer))
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ô<EFBFBD><C3B4><EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD>ͨ<EFBFBD>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܾ<EFBFBD><DCBE>ǻ<EFBFBD><C7BB><EFBFBD>
zf_log(0, "MT9V03X get config error.");
uart_rx_interrupt(MT9V03X_COF_UART, 0);
set_camera_type(NO_CAMERE, NULL, NULL, NULL);
return_state = 1;
break;
}
}
mt9v03x_link_list_num = camera_init(MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_IMAGE_SIZE);
}while(0);
return return_state;
}

View File

@@ -0,0 +1,148 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_mt9v03x
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* TXD <20>鿴 zf_device_mt9v03x.h <20><> MT9V03X_COF_UART_TX <20><EFBFBD><EAB6A8>
* RXD <20>鿴 zf_device_mt9v03x.h <20><> MT9V03X_COF_UART_RX <20><EFBFBD><EAB6A8>
* PCLK <20>鿴 zf_device_mt9v03x.h <20><> MT9V03X_PCLK_PIN <20><EFBFBD><EAB6A8>
* VSY <20>鿴 zf_device_mt9v03x.h <20><> MT9V03X_VSYNC_PIN <20><EFBFBD><EAB6A8>
* D0-D7 <20>鿴 zf_device_mt9v03x.h <20><> MT9V03X_DATA_PIN <20><EFBFBD><EAB6A8> <20>Ӹö<D3B8><C3B6>ʼ<E5BFAA><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
********************************************************************************************************************/
#ifndef _zf_device_mt9v03x_h_
#define _zf_device_mt9v03x_h_
#include "zf_common_typedef.h"
#include "zf_device_type.h"
//================================================<3D><><EFBFBD><EFBFBD> MT9V03X <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#define MT9V03X_COF_UART (UART_1) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʹ<EFBFBD>õ<EFBFBD><C3B5>Ĵ<EFBFBD><C4B4><EFBFBD>
#define MT9V03X_COF_BAUR (9600) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
#define MT9V03X_COF_UART_TX (UART1_RX_P02_3) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART-TX <20><><EFBFBD><EFBFBD> Ҫ<><D2AA><EFBFBD>ڵ<EFBFBD>Ƭ<EFBFBD><C6AC> RX <20><>
#define MT9V03X_COF_UART_RX (UART1_TX_P02_2) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART-RX <20><><EFBFBD><EFBFBD> Ҫ<><D2AA><EFBFBD>ڵ<EFBFBD>Ƭ<EFBFBD><C6AC> TX <20><>
#define MT9V03X_COF_IIC_DELAY (800) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IIC <20><>ʱ
#define MT9V03X_COF_IIC_SCL (P02_3) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IIC-SCL <20><><EFBFBD><EFBFBD>
#define MT9V03X_COF_IIC_SDA (P02_2) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IIC-SDA <20><><EFBFBD><EFBFBD>
#define MT9V03X_DMA_CH (IfxDma_ChannelId_5)
#define MT9V03X_PCLK_PIN (ERU_CH2_REQ14_P02_1) // PCLK <20><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD> TIM_ETR <20><><EFBFBD>Ž<EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
#define MT9V03X_VSYNC_PIN (ERU_CH3_REQ6_P02_0) // <20><><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
#define MT9V03X_DATA_PIN (P00_0) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֻ<><D6BB><EFBFBD><EFBFBD> GPIOx0 <20><><EFBFBD><EFBFBD> GPIOx8 <20><>ʼ <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> P00_0-P00_7
#define MT9V03X_DATA_ADD (get_port_in_addr(MT9V03X_DATA_PIN))
#define MT9V03X_INIT_TIMEOUT (0x0080) // Ĭ<>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1> <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ
//================================================<3D><><EFBFBD><EFBFBD> MT9V03X <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//================================================<3D><><EFBFBD><EFBFBD> MT9V03X <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#define MT9V03X_W (188) // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Χ [1-752]
#define MT9V03X_H (120) // ͼ<><CDBC><EFBFBD>߶<EFBFBD> <20><>Χ [1-480]
#define MT9V03X_IMAGE_SIZE (MT9V03X_W * MT9V03X_H) // <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD> 65535
#define MT9V03X_AUTO_EXP_DEF ( 0 ) // <20>Զ<EFBFBD><D4B6>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD> Ĭ<>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD> <20><>Χ [0-63] 0Ϊ<30>ر<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ع⿪<D8B9><E2BFAA> EXP_TIME<4D><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ع<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߷dz<DFB7><C7B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Գ<EFBFBD><D4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ع⣬<D8B9><E2A3AC><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ȶ<EFBFBD><C8B6><EFBFBD>
#define MT9V03X_EXP_TIME_DEF ( 512 ) // <20>ع<EFBFBD>ʱ<EFBFBD><CAB1> <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ֵ
#define MT9V03X_FPS_DEF ( 50 ) // ͼ<><CDBC>֡<EFBFBD><D6A1> <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FPS<50><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FPS
#define MT9V03X_LR_OFFSET_DEF ( 0 ) // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD> <20><>ֵ <20><>ƫ<EFBFBD><C6AB> <20><>ֵ <20><>ƫ<EFBFBD><C6AB> <20><>Ϊ188 376 752ʱ<32>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
// <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
#define MT9V03X_UD_OFFSET_DEF ( 0 ) // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD> <20><>ֵ <20><>ƫ<EFBFBD><C6AB> <20><>ֵ <20><>ƫ<EFBFBD><C6AB> <20><>Ϊ120 240 480ʱ<30>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
// <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
#define MT9V03X_GAIN_DEF ( 32 ) // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Χ [16-64] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸ı<C2B8>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>
#define MT9V03X_PCLK_MODE_DEF ( 0 ) // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ģʽ <20><>Χ [0-1] Ĭ<>ϣ<EFBFBD>0 <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>[0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>,1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>]
// ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>CH32V307<30><37>DVP<56>ӿڻ<D3BF>STM32<33><32>DCMI<4D>ӿڲɼ<DAB2><C9BC><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>Ϊ1
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MT9V034 V1.5 <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ϰ汾֧<E6B1BE>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
//================================================<3D><><EFBFBD><EFBFBD> MT9V03X <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//================================================<3D><><EFBFBD><EFBFBD> MT9V03X <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>===============================================
typedef enum
{
MT9V03X_INIT = 0, // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MT9V03X_AUTO_EXP, // <20>Զ<EFBFBD><D4B6>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD>
MT9V03X_EXP_TIME, // <20>ع<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MT9V03X_FPS, // <20><><EFBFBD><EFBFBD>ͷ֡<CDB7><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MT9V03X_SET_COL, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MT9V03X_SET_ROW, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MT9V03X_LR_OFFSET, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MT9V03X_UD_OFFSET, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MT9V03X_GAIN, // ͼ<><CDBC>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MT9V03X_PCLK_MODE, // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MT9V034 V1.5<EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϰ汾֧<EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
MT9V03X_CONFIG_FINISH, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ռλ<D5BC><CEBB><EFBFBD><EFBFBD>
MT9V03X_COLOR_GET_WHO_AM_I = 0xEF,
MT9V03X_SET_EXP_TIME = 0XF0, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MT9V03X_GET_STATUS, // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MT9V03X_GET_VERSION, // <20>̼<EFBFBD><CCBC><EFBFBD><E6B1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MT9V03X_SET_ADDR = 0XFE, // <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
MT9V03X_SET_DATA // <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}m9v03x_cmd_enum;
// <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6>
typedef enum
{
MT9V03X_UART, // ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
MT9V03X_SCCB, // ͨ<><CDA8>SCCB<43><42><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
}m9v03x_type_enum;
//================================================<3D><><EFBFBD><EFBFBD> MT9V03X <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>===============================================
//================================================<3D><><EFBFBD><EFBFBD> MT9V03X ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>================================================
extern vuint8 mt9v03x_finish_flag; // һ<><D2BB>ͼ<EFBFBD><CDBC><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
extern uint8 mt9v03x_image[MT9V03X_H][MT9V03X_W]; // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD>ݴ洢<DDB4><E6B4A2><EFBFBD><EFBFBD>
//================================================<3D><><EFBFBD><EFBFBD> MT9V03X ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>================================================
//================================================<3D><><EFBFBD><EFBFBD> MT9V03X <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
uint16 mt9v03x_get_version (void); // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͷ<EFBFBD>̼<EFBFBD><CCBC>
uint8 mt9v03x_set_exposure_time (uint16 light); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ع<EFBFBD>ʱ<EFBFBD><CAB1>
uint8 mt9v03x_set_reg (uint8 addr, uint16 data); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ڲ<EFBFBD><DAB2>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
uint8 mt9v03x_init (void); // MT9V03X <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC>
//================================================<3D><><EFBFBD><EFBFBD> MT9V03X <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#endif

View File

@@ -0,0 +1,764 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_oled
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* D0 <20>鿴 zf_device_oled.h <20><> OLED_D0_PIN <20><EFBFBD><EAB6A8>
* D1 <20>鿴 zf_device_oled.h <20><> OLED_D1_PIN <20><EFBFBD><EAB6A8>
* RES <20>鿴 zf_device_oled.h <20><> OLED_RES_PIN <20><EFBFBD><EAB6A8>
* DC <20>鿴 zf_device_oled.h <20><> OLED_DC_PIN <20><EFBFBD><EAB6A8>
* CS <20>鿴 zf_device_oled.h <20><> OLED_CS_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* ------------------------------------
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "zf_common_font.h"
#include "zf_common_function.h"
#include "zf_driver_delay.h"
#include "zf_driver_soft_spi.h"
#include "zf_driver_spi.h"
#include "zf_device_oled.h"
#if OLED_USE_SOFT_SPI
static soft_spi_info_struct oled_spi;
#define oled_spi_write_8bit(data) (soft_spi_write_8bit(&oled_spi, (data)))
#else
#define oled_spi_write_8bit(data) (spi_write_8bit(OLED_SPI, (data)))
#endif
static oled_dir_enum oled_display_dir = OLED_DEFAULT_DISPLAY_DIR; // <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
static oled_font_size_enum oled_display_font = OLED_DEFAULT_DISPLAY_FONT; // <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> д8λ<38><CEBB><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_write_data(color);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void oled_write_data (const uint8 data)
{
OLED_DC(1);
oled_spi_write_8bit(data);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> д<><D0B4><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> cmd <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_write_command(0xb0 + y);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void oled_write_command (const uint8 command)
{
OLED_DC(0);
oled_spi_write_8bit(command);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OLED<45><44>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> x x<><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0-127
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> y y<><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0-7
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_set_coordinate(x, y);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void oled_set_coordinate (uint8 x, uint8 y)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ôһ<C3B4><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>ʱ<EFBFBD>򳬹<EFBFBD><F2B3ACB9><EFBFBD>Ļ<EFBFBD>ֱ<EFBFBD><D6B1>ʷ<EFBFBD>Χ<EFBFBD><CEA7>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>õĺ<C3B5><C4BA><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>Χ
zf_assert(128 > x);
zf_assert(8 > y);
oled_write_command(0xb0 + y);
oled_write_command(((x & 0xf0) >> 4) | 0x10);
oled_write_command((x & 0x0f) | 0x00);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OLED<45><44>ʾDEBUG<55><47>Ϣ<EFBFBD><CFA2>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_debug_init();
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void oled_debug_init (void)
{
debug_output_struct info;
debug_output_struct_init(&info);
info.type_index = 1;
info.display_x_max = OLED_X_MAX;
info.display_y_max = OLED_Y_MAX;
switch(oled_display_font)
{
case OLED_6X8_FONT:
{
info.font_x_size = 6;
info.font_y_size = 1;
}break;
case OLED_8X16_FONT:
{
info.font_x_size = 8;
info.font_y_size = 2;
}break;
case OLED_16X16_FONT:
{
// <20>ݲ<EFBFBD>֧<EFBFBD><D6A7>
}break;
}
info.output_screen = oled_show_string;
info.output_screen_clear = oled_clear;
debug_output_init(&info);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OLED <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_clear();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void oled_clear (void)
{
uint8 y = 0, x = 0;
OLED_CS(0);
for(y = 0; 8 > y; y ++)
{
oled_write_command(0xb0 + y);
oled_write_command(0x01);
oled_write_command(0x10);
for(x = 0; OLED_X_MAX > x; x ++)
{
oled_write_data(0x00);
}
}
OLED_CS(1);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OLED <20><>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><E4BAAF>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> color <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫѡ<C9AB><D1A1>(0x00 or 0xff)
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_full(0x00);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void oled_full (const uint8 color)
{
uint8 y = 0, x = 0;
OLED_CS(0);
for(y = 0; 8 > y; y ++)
{
oled_write_command(0xb0 + y);
oled_write_command(0x01);
oled_write_command(0x10);
for(x = 0; OLED_X_MAX > x; x ++)
{
oled_write_data(color);
}
}
OLED_CS(1);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dir <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> zf_device_oled.h <20><> oled_dir_enum ö<><C3B6><EFBFBD><EFBFBD><E5B6A8>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_set_dir(OLED_CROSSWISE);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ļ֮ǰ<D6AE><C7B0><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>Ч
//-------------------------------------------------------------------------------------------------------------------
void oled_set_dir (oled_dir_enum dir)
{
oled_display_dir = dir;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dir <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> zf_device_oled.h <20><> oled_font_size_enum ö<><C3B6><EFBFBD><EFBFBD><E5B6A8>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_set_font(OLED_8x16_FONT);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>Ч <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
//-------------------------------------------------------------------------------------------------------------------
void oled_set_font (oled_font_size_enum font)
{
oled_display_font = font;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E3BAAF>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> x x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-127
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> y y <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-7
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> color 8 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_draw_point(0, 0, 1);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void oled_draw_point (uint16 x, uint16 y, const uint8 color)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ôһ<C3B4><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>ʱ<EFBFBD>򳬹<EFBFBD><F2B3ACB9><EFBFBD>Ļ<EFBFBD>ֱ<EFBFBD><D6B1>ʷ<EFBFBD>Χ<EFBFBD><CEA7>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>õĺ<C3B5><C4BA><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>Χ
zf_assert(x < 128);
zf_assert(y < 8);
OLED_CS(0);
oled_set_coordinate((uint8)x, (uint8)y);
oled_write_command(0xb0 + y);
oled_write_command(((x & 0xf0) >> 4) | 0x10);
oled_write_command((x & 0x0f) | 0x00);
oled_write_data(color);
OLED_CS(1);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OLED <20><>ʾ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> x x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-127
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> y y <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-7
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> ch[] <20>ַ<EFBFBD><D6B7><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_show_string(0, 0, "SEEKFREE");
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void oled_show_string (uint16 x, uint16 y, const char ch[])
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ôһ<C3B4><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>ʱ<EFBFBD>򳬹<EFBFBD><F2B3ACB9><EFBFBD>Ļ<EFBFBD>ֱ<EFBFBD><D6B1>ʷ<EFBFBD>Χ<EFBFBD><CEA7>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>õĺ<C3B5><C4BA><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>Χ
zf_assert(128 > x);
zf_assert(8 > y);
OLED_CS(0);
uint8 c = 0, i = 0, j = 0;
while ('\0' != ch[j])
{
switch(oled_display_font)
{
case OLED_6X8_FONT:
{
c = ch[j] - 32;
if(x > 126)
{
x = 0;
y ++;
}
oled_set_coordinate((uint8)x, (uint8)y);
for(i = 0; 6 > i; i ++)
{
oled_write_data(ascii_font_6x8[c][i]);
}
x += 6;
j ++;
}break;
case OLED_8X16_FONT:
{
c = ch[j] - 32;
if(x > 120)
{
x = 0;
y ++;
}
oled_set_coordinate((uint8)x, (uint8)y);
for(i = 0; 8 > i; i ++)
{
oled_write_data(ascii_font_8x16[c][i]);
}
oled_set_coordinate((uint8)x, (uint8)(y + 1));
for(i = 0; 8 > i; i ++)
{
oled_write_data(ascii_font_8x16[c][i + 8]);
}
x += 8;
j ++;
}break;
case OLED_16X16_FONT:
{
// <20>ݲ<EFBFBD>֧<EFBFBD><D6A7>
}break;
}
}
OLED_CS(1);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OLED <20><>ʾ32λ<32>з<EFBFBD><D0B7><EFBFBD><><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>0)
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> x x<><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-127
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> y y<><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-7
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dat <20><>Ҫ<EFBFBD><D2AA>ʾ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> int32
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> num <20><>Ҫ<EFBFBD><D2AA>ʾ<EFBFBD><CABE>λ<EFBFBD><CEBB> <20><><EFBFBD><EFBFBD>10λ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_show_int(0, 0, x, 3); // x <20><><EFBFBD><EFBFBD>Ϊ int32 int16 int8 <20><><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾһ<CABE><D2BB> <20><>-<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾһ<CABE><D2BB><EFBFBD>ո<EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void oled_show_int (uint16 x, uint16 y, const int32 dat, uint8 num)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ôһ<C3B4><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>ʱ<EFBFBD>򳬹<EFBFBD><F2B3ACB9><EFBFBD>Ļ<EFBFBD>ֱ<EFBFBD><D6B1>ʷ<EFBFBD>Χ<EFBFBD><CEA7>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>õĺ<C3B5><C4BA><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>Χ
zf_assert(128 > x);
zf_assert(8 > y);
zf_assert(0 < num);
zf_assert(10 >= num);
int32 dat_temp = dat;
int32 offset = 1;
char data_buffer[12];
memset(data_buffer, 0, 12);
memset(data_buffer, ' ', num + 1);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ 123 <20><>ʾ 2 λ<><CEBB>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>ʾ 23
if(10 > num)
{
for(; 0 < num; num --)
{
offset *= 10;
}
dat_temp %= offset;
}
func_int_to_str(data_buffer, dat_temp);
oled_show_string(x, y, (const char *)&data_buffer);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OLED <20><>ʾ32λ<32>޷<EFBFBD><DEB7><EFBFBD><><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>0)
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> x x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-127
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> y y <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-7
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dat <20><>Ҫ<EFBFBD><D2AA>ʾ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> uint32
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> num <20><>Ҫ<EFBFBD><D2AA>ʾ<EFBFBD><CABE>λ<EFBFBD><CEBB> <20><><EFBFBD><EFBFBD>10λ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_show_uint(0, 0, x, 3); // x <20><><EFBFBD><EFBFBD>Ϊ uint32 uint16 uint8 <20><><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void oled_show_uint (uint16 x,uint16 y,const uint32 dat,uint8 num)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ôһ<C3B4><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>ʱ<EFBFBD>򳬹<EFBFBD><F2B3ACB9><EFBFBD>Ļ<EFBFBD>ֱ<EFBFBD><D6B1>ʷ<EFBFBD>Χ<EFBFBD><CEA7>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>õĺ<C3B5><C4BA><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>Χ
zf_assert(128 > x);
zf_assert(8 > y);
zf_assert(0 < num);
zf_assert(10 >= num);
uint32 dat_temp = dat;
int32 offset = 1;
char data_buffer[12];
memset(data_buffer, 0, 12);
memset(data_buffer, ' ', num);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ 123 <20><>ʾ 2 λ<><CEBB>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>ʾ 23
if(10 > num)
{
for(; 0 < num; num --)
{
offset *= 10;
}
dat_temp %= offset;
}
func_uint_to_str(data_buffer, dat_temp);
oled_show_string(x, y, (const char *)&data_buffer);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OLED <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>0)
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> x x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-127
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> y y <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-7
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dat <20><>Ҫ<EFBFBD><D2AA>ʾ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> double
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> num <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> pointnum С<><D0A1>λ<EFBFBD><CEBB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_show_float(0, 0, x, 2, 3); // <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾС<><D0A1><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>λ
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ر<EFBFBD>ע<EFBFBD><EFBFBD><E2B5B1><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ʧ<EFBFBD><CAA7><EFBFBD><EFBFBD>µģ<C2B5><C4A3><EFBFBD><E2B2A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD><EFBFBD>аٶ<D0B0>ѧϰ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ʧ<EFBFBD><CAA7><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾһ<CABE><D2BB> <20><>-<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾһ<CABE><D2BB><EFBFBD>ո<EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void oled_show_float (uint16 x,uint16 y,const double dat,uint8 num,uint8 pointnum)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ôһ<C3B4><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>ʱ<EFBFBD>򳬹<EFBFBD><F2B3ACB9><EFBFBD>Ļ<EFBFBD>ֱ<EFBFBD><D6B1>ʷ<EFBFBD>Χ<EFBFBD><CEA7>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>õĺ<C3B5><C4BA><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>Χ
zf_assert(128 > x);
zf_assert(8 > y);
zf_assert(0 < num);
zf_assert(8 >= num);
zf_assert(0 < pointnum);
zf_assert(6 >= pointnum);
double dat_temp = dat;
double offset = 1.0;
char data_buffer[17];
memset(data_buffer, 0, 17);
memset(data_buffer, ' ', num + pointnum + 2);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ 123 <20><>ʾ 2 λ<><CEBB>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>ʾ 23
for(; 0 < num; num --)
{
offset *= 10;
}
dat_temp = dat_temp - ((int)dat_temp / (int)offset) * offset;
func_double_to_str(data_buffer, dat_temp, pointnum);
oled_show_string(x, y, data_buffer);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OLED <20><>ʾ<EFBFBD><CABE>ֵͼ<D6B5><CDBC> <20><><EFBFBD><EFBFBD>ÿ<EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> x x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-127
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> y y <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-7
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *image ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> width ͼ<><CDBC>ʵ<EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> height ͼ<><CDBC>ʵ<EFBFBD>ʸ߶<CAB8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dis_width ͼ<><CDBC><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ [0, 128]
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dis_height ͼ<><CDBC><EFBFBD><EFBFBD>ʾ<EFBFBD>߶<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ [0, 64]
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_show_binary_image(0, 0, ov7725_image_binary[0], OV7725_W, OV7725_H, OV7725_W, OV7725_H);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾС<CABE><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ѹ<EFBFBD><D1B9>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ͼ<EFBFBD><CDBC>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δѹ<CEB4><D1B9><EFBFBD>Ķ<EFBFBD>ֵ<EFBFBD><D6B5>ͼ<EFBFBD><CDBC>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δѹ<CEB4><D1B9><EFBFBD>Ķ<EFBFBD>ֵ<EFBFBD><D6B5>ͼ<EFBFBD><CDBC>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δѹ<CEB4><D1B9><EFBFBD>Ķ<EFBFBD>ֵ<EFBFBD><D6B5>ͼ<EFBFBD><CDBC>
//-------------------------------------------------------------------------------------------------------------------
void oled_show_binary_image (uint16 x, uint16 y, const uint8 *image, uint16 width, uint16 height, uint16 dis_width, uint16 dis_height)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ôһ<C3B4><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>ʱ<EFBFBD>򳬹<EFBFBD><F2B3ACB9><EFBFBD>Ļ<EFBFBD>ֱ<EFBFBD><D6B1>ʷ<EFBFBD>Χ<EFBFBD><CEA7>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>õĺ<C3B5><C4BA><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>Χ
zf_assert(128 > x);
zf_assert(8 > y);
zf_assert(NULL != image);
uint32 i = 0, j = 0, z = 0;
uint8 dat = 0;
uint32 width_index = 0, height_index = 0;
OLED_CS(0);
dis_height = dis_height - dis_height % 8;
dis_width = dis_width - dis_width % 8;
for(j = 0; j < dis_height; j += 8)
{
oled_set_coordinate(x + 0, (uint16)(y + j / 8));
height_index = j * height / dis_height;
for(i = 0; i < dis_width; i += 8)
{
width_index = i * width / dis_width / 8;
for(z = 0; 8 > z; z ++)
{
dat = 0;
if(*(image + height_index * width / 8 + width_index + width / 8 * 0) & (0x80 >> z))
{
dat |= 0x01;
}
if(*(image + height_index * width / 8 + width_index + width / 8 * 1) & (0x80 >> z))
{
dat |= 0x02;
}
if(*(image + height_index * width / 8 + width_index + width / 8 * 2) & (0x80 >> z))
{
dat |= 0x04;
}
if(*(image + height_index * width / 8 + width_index + width / 8 * 3) & (0x80 >> z))
{
dat |= 0x08;
}
if(*(image + height_index * width / 8 + width_index + width / 8 * 4) & (0x80 >> z))
{
dat |= 0x10;
}
if(*(image + height_index * width / 8 + width_index + width / 8 * 5) & (0x80 >> z))
{
dat |= 0x20;
}
if(*(image + height_index * width / 8 + width_index + width / 8 * 6) & (0x80 >> z))
{
dat |= 0x40;
}
if(*(image + height_index * width / 8 + width_index + width / 8 * 7) & (0x80 >> z))
{
dat |= 0x80;
}
oled_write_data(dat);
}
}
}
OLED_CS(1);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OLED <20><>ʾ 8bit <20>Ҷ<EFBFBD>ͼ<EFBFBD><CDBC> <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ֵ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> x x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-127
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> y y <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-7
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *image ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> width ͼ<><CDBC>ʵ<EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> height ͼ<><CDBC>ʵ<EFBFBD>ʸ߶<CAB8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dis_width ͼ<><CDBC><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ [0, 128]
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dis_height ͼ<><CDBC><EFBFBD><EFBFBD>ʾ<EFBFBD>߶<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ [0, 64]
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> threshold <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ֵ 0-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_show_gray_image(0, 0, mt9v03x_image[0], width, height, 128, 64, x);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
// <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ʾ<EFBFBD><CABE>ֵ<EFBFBD><D6B5>ͼ<EFBFBD><CDBC> ֱ<><D6B1><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ҫ<EFBFBD>Ķ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ʾ<EFBFBD><CABE>ֵ<EFBFBD><D6B5>ͼ<EFBFBD><CDBC> ֱ<><D6B1><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ҫ<EFBFBD>Ķ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ʾ<EFBFBD><CABE>ֵ<EFBFBD><D6B5>ͼ<EFBFBD><CDBC> ֱ<><D6B1><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ҫ<EFBFBD>Ķ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void oled_show_gray_image (uint16 x, uint16 y, const uint8 *image, uint16 width, uint16 height, uint16 dis_width, uint16 dis_height, uint8 threshold)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ôһ<C3B4><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>ʱ<EFBFBD>򳬹<EFBFBD><F2B3ACB9><EFBFBD>Ļ<EFBFBD>ֱ<EFBFBD><D6B1>ʷ<EFBFBD>Χ<EFBFBD><CEA7>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>õĺ<C3B5><C4BA><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>Χ
zf_assert(128 > x);
zf_assert(8 > y);
zf_assert(NULL != image);
int16 i = 0, j = 0;
uint8 dat = 0;
uint32 width_index = 0, height_index = 0;
OLED_CS(0);
dis_height = dis_height - dis_height % 8;
for(j = 0; j < dis_height; j += 8)
{
oled_set_coordinate(x + 0, y + j / 8);
height_index = j * height / dis_height;
for(i = 0; i < dis_width; i ++)
{
width_index = i * width / dis_width;
dat = 0;
if(*(image + height_index * width + width_index + width * 0) > threshold)
{
dat |= 0x01;
}
if(*(image + height_index * width + width_index + width * 1) > threshold)
{
dat |= 0x02;
}
if(*(image + height_index * width + width_index + width * 2) > threshold)
{
dat |= 0x04;
}
if(*(image + height_index * width + width_index + width * 3) > threshold)
{
dat |= 0x08;
}
if(*(image + height_index * width + width_index + width * 4) > threshold)
{
dat |= 0x10;
}
if(*(image + height_index * width + width_index + width * 5) > threshold)
{
dat |= 0x20;
}
if(*(image + height_index * width + width_index + width * 6) > threshold)
{
dat |= 0x40;
}
if(*(image + height_index * width + width_index + width * 7) > threshold)
{
dat |= 0x80;
}
oled_write_data(dat);
}
}
OLED_CS(1);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OLED <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> x x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-127
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> y y <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-7
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *wave <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> width <20><><EFBFBD><EFBFBD>ʵ<EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> value_max <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dis_width <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ [0, 128]
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dis_value_max <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ֵ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ [0, 64]
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_show_wave(0, 0, data, 128, 64, 128, 64);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void oled_show_wave (uint16 x, uint16 y, const uint16 *wave, uint16 width, uint16 value_max, uint16 dis_width, uint16 dis_value_max)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ôһ<C3B4><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>ʱ<EFBFBD>򳬹<EFBFBD><F2B3ACB9><EFBFBD>Ļ<EFBFBD>ֱ<EFBFBD><D6B1>ʷ<EFBFBD>Χ<EFBFBD><CEA7>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>õĺ<C3B5><C4BA><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>Χ
zf_assert(128 > x);
zf_assert(8 > y);
zf_assert(NULL != wave);
uint32 i = 0;
uint32 width_index = 0, value_max_index = 0;
uint8 dis_h = 0;
uint32 x_temp = 0;
uint32 y_temp = 0;
OLED_CS(0);
for(y_temp = 0; y_temp < dis_value_max; y_temp += 8)
{
oled_set_coordinate(x + 0, (uint16)(y + y_temp / 8));
for(x_temp = 0; x_temp < dis_width; x_temp ++)
{
oled_write_data(0x00);
}
}
for(i = 0; i < dis_width; i ++)
{
width_index = i * width / dis_width;
value_max_index = *(wave + width_index) * (dis_value_max - 1) / value_max;
dis_h = (uint8)((dis_value_max - 1) - value_max_index);
oled_set_coordinate((uint16)(i + x), dis_h / 8 + y);
dis_h = (0x01 << dis_h % 8);
oled_write_data(dis_h);
}
OLED_CS(1);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-127
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> y <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-7
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> size ȡģ<C8A1><C4A3>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>õĺ<C3B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>õĵ<C3B5><C4B5>󳤿<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ٸ<EFBFBD><D9B8>㣬ȡģ<C8A1><C4A3>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ġ<EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *chinese_buffer <20><>Ҫ<EFBFBD><D2AA>ʾ<EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> number <20><>Ҫ<EFBFBD><D2AA>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_show_chinese(0, 6, 16, (const uint8 *)oled_16x16_chinese, 4);
// <20><>ע<EFBFBD><D7A2>Ϣ ʹ<><CAB9>PCtoLCD2002<30><32><EFBFBD><EFBFBD>ȡģ <20><><EFBFBD><EFBFBD><EBA1A2><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>˳<EFBFBD><CBB3> 16*16
//-------------------------------------------------------------------------------------------------------------------
void oled_show_chinese (uint16 x, uint16 y, uint8 size, const uint8 *chinese_buffer, uint8 number)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ôһ<C3B4><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>ʱ<EFBFBD>򳬹<EFBFBD><F2B3ACB9><EFBFBD>Ļ<EFBFBD>ֱ<EFBFBD><D6B1>ʷ<EFBFBD>Χ<EFBFBD><CEA7>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>õĺ<C3B5><C4BA><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>ʾ<EFBFBD><CABE>Χ
zf_assert(128 > x);
zf_assert(8 > y);
zf_assert(NULL != chinese_buffer);
int16 i = 0, j = 0, k = 0;
OLED_CS(0);
for(i = 0; i < number; i ++)
{
for(j = 0; j < (size / 8); j ++)
{
oled_set_coordinate(x + i * size, y + j);
for(k = 0; 16 > k; k ++)
{
oled_write_data(*chinese_buffer);
chinese_buffer ++;
}
}
}
OLED_CS(1);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OLED<45><44>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_init();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void oled_init (void)
{
#if OLED_USE_SOFT_SPI
soft_spi_init(&oled_spi, 0, OLED_SOFT_SPI_DELAY, OLED_D0_PIN, OLED_D1_PIN, SOFT_SPI_PIN_NULL, SOFT_SPI_PIN_NULL);
#else
spi_init(OLED_SPI, SPI_MODE0, OLED_SPI_SPEED, OLED_D0_PIN, OLED_D1_PIN, OLED_D1_PIN_IN, SPI_CS_NULL);
#endif
gpio_init(OLED_RES_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
gpio_init(OLED_DC_PIN , GPO, GPIO_HIGH, GPO_PUSH_PULL);
gpio_init(OLED_CS_PIN , GPO, GPIO_HIGH, GPO_PUSH_PULL);
oled_set_dir(oled_display_dir);
OLED_CS(0);
OLED_RES(0);
system_delay_ms(50);
OLED_RES(1);
oled_write_command(0xae); // <20>ر<EFBFBD>oled<65><64><EFBFBD><EFBFBD>
oled_write_command(0x00); // <20><><EFBFBD>õ<EFBFBD><C3B5>е<EFBFBD>ַ
oled_write_command(0x10); // <20><><EFBFBD>ø<EFBFBD><C3B8>е<EFBFBD>ַ
oled_write_command(0x40); // --set start line address Set Mapping RAM Display Start Line (0x00~0x3F)
oled_write_command(0x81); // <20><><EFBFBD>öԱȶȿ<C8B6><C8BF>ƼĴ<C6BC><C4B4><EFBFBD>
oled_write_command(OLED_BRIGHTNESS); // <20><><EFBFBD><EFBFBD>SEG<45><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(OLED_PORTAIT == oled_display_dir)
{
oled_write_command(0xa1); // <20><><EFBFBD><EFBFBD> SEG/<2F><> ӳ<><D3B3> 0xa0<61><30><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD> 0xa1<61><31><EFBFBD><EFBFBD>
oled_write_command(0xc8); // <20><><EFBFBD><EFBFBD> COM/<2F><>ɨ<EFBFBD><EFBFBD><E8B7BD> 0xc0<63><30><EFBFBD>·<EFBFBD><C2B7><EFBFBD> 0xc8<63><38><EFBFBD><EFBFBD>
}
else
{
oled_write_command(0xa0); // <20><><EFBFBD><EFBFBD> SEG/<2F><> ӳ<><D3B3> 0xa0<61><30><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD> 0xa1<61><31><EFBFBD><EFBFBD>
oled_write_command(0xc0); // <20><><EFBFBD><EFBFBD> COM/<2F><>ɨ<EFBFBD><EFBFBD><E8B7BD> 0xc0<63><30><EFBFBD>·<EFBFBD><C2B7><EFBFBD> 0xc8<63><38><EFBFBD><EFBFBD>
}
oled_write_command(0xa6); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
oled_write_command(0xa8); // <20><><EFBFBD>ø<EFBFBD><C3B8>ñ<EFBFBD>(1 ~ 64)
oled_write_command(0x3f); // 1/64 ռ<><D5BC>
oled_write_command(0xd3); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾƫ<CABE><C6AB><EFBFBD><EFBFBD>λӳ<CEBB><D3B3>RAM<41><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x00~0x3F<33><46>
oled_write_command(0x00); // <20><>ƫ<EFBFBD><C6AB>
oled_write_command(0xd5); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾʱ<CABE>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>
oled_write_command(0x80); // <20><><EFBFBD>÷ָ<C3B7><D6B8><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ100֡/<2F><>
oled_write_command(0xd9); // <20>趨Ԥ<E8B6A8><D4A4><EFBFBD><EFBFBD>
oled_write_command(0xf1); // <20><><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>Ϊ15<31><35>ʱ<EFBFBD>ӣ<EFBFBD><D3A3>ŵ<EFBFBD>Ϊ1<CEAA><31>ʱ<EFBFBD><CAB1>
oled_write_command(0xda); // <20><><EFBFBD><EFBFBD>com<6F><6D><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
oled_write_command(0x12);
oled_write_command(0xdb); // <20><><EFBFBD><EFBFBD> vcomh
oled_write_command(0x40); // <20><><EFBFBD><EFBFBD>VCOMȡ<4D><C8A1>ѡ<EFBFBD>񼶱<EFBFBD>
oled_write_command(0x20); // <20><><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>Ѱַģʽ(0x00/0x01/0x02)
oled_write_command(0x02); //
oled_write_command(0x8d); // <20><><EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>
oled_write_command(0x14); // <20><><EFBFBD><EFBFBD>(0 x10)<29><><EFBFBD><EFBFBD>
oled_write_command(0xa4); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>(0xa4/0xa5)
oled_write_command(0xa6); // <20><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>ʾ(0xa6/a7)
oled_write_command(0xaf); // <20><><EFBFBD><EFBFBD>oled<65><64><EFBFBD><EFBFBD>
OLED_CS(1);
oled_clear(); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
oled_set_coordinate(0, 0); // OLED<45><44>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
oled_debug_init(); // OLED<45><44>ʾDEBUG<55><47>Ϣ<EFBFBD><CFA2>ʼ<EFBFBD><CABC>
}

View File

@@ -0,0 +1,148 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_oled
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* D0 <20>鿴 zf_device_oled.h <20><> OLED_D0_PIN <20><EFBFBD><EAB6A8>
* D1 <20>鿴 zf_device_oled.h <20><> OLED_D1_PIN <20><EFBFBD><EAB6A8>
* RES <20>鿴 zf_device_oled.h <20><> OLED_RES_PIN <20><EFBFBD><EAB6A8>
* DC <20>鿴 zf_device_oled.h <20><> OLED_DC_PIN <20><EFBFBD><EAB6A8>
* CS <20>鿴 zf_device_oled.h <20><> OLED_CS_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* ------------------------------------
********************************************************************************************************************/
#ifndef _zf_device_oled_h_
#define _zf_device_oled_h_
#include "zf_common_typedef.h"
//===================================================<3D><><EFBFBD><EFBFBD> OLED <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=================================================
#define OLED_USE_SOFT_SPI (0 ) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
#if OLED_USE_SOFT_SPI // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> SPI <20><><EFBFBD><EFBFBD>====================================================
#define OLED_SOFT_SPI_DELAY (0 ) // <20><><EFBFBD><EFBFBD> SPI <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС SPI ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
#define OLED_D0_PIN (P15_3) // <20><><EFBFBD><EFBFBD> SPI SCK <20><><EFBFBD><EFBFBD>
#define OLED_D1_PIN (P15_5) // <20><><EFBFBD><EFBFBD> SPI MOSI <20><><EFBFBD><EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> SPI <20><><EFBFBD><EFBFBD>====================================================
#else
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
#define OLED_SPI_SPEED (30*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
#define OLED_SPI (SPI_2) // Ӳ<><D3B2> SPI <20><>
#define OLED_D0_PIN (SPI2_SCLK_P15_3 ) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
#define OLED_D1_PIN (SPI2_MOSI_P15_5) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
#define OLED_D1_PIN_IN (SPI2_MISO_P15_4) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD> OLEDû<44><C3BB>MISO<53><4F><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><E5A3AC>spi<70>ij<EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1>Ҫʹ<D2AA><CAB9>
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
#endif
#define OLED_RES_PIN (P15_1) // Һ<><D2BA><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
#define OLED_DC_PIN (P15_0 ) // Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
#define OLED_CS_PIN (P15_2 ) // CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
#define OLED_BRIGHTNESS (0x7f) // <20><><EFBFBD><EFBFBD>OLED<45><44><EFBFBD><EFBFBD> Խ<><D4BD>Խ<EFBFBD><D4BD> <20><>Χ0-0XFF
#define OLED_DEFAULT_DISPLAY_DIR ( OLED_PORTAIT ) // Ĭ<>ϵ<EFBFBD><CFB5><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
#define OLED_DEFAULT_DISPLAY_FONT (OLED_6X8_FONT ) // Ĭ<>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ģʽ
#define OLED_X_MAX (128) // <20><>ĻX<C4BB><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
#define OLED_Y_MAX (64 ) // <20><>ĻY<C4BB><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
#define OLED_RES(x) ((x) ? (gpio_high(OLED_RES_PIN)) : (gpio_low(OLED_RES_PIN)))
#define OLED_DC(x) ((x) ? (gpio_high(OLED_DC_PIN)) : (gpio_low(OLED_DC_PIN)))
#define OLED_CS(x) ((x) ? (gpio_high(OLED_CS_PIN)) : (gpio_low(OLED_CS_PIN)))
//===================================================<3D><><EFBFBD><EFBFBD> OLED <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=================================================
//===================================================<3D><><EFBFBD><EFBFBD> OLED <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>=================================================
typedef enum
{
OLED_PORTAIT = 0, // <20><><EFBFBD><EFBFBD>ģʽ
OLED_PORTAIT_180 = 1, // <20><><EFBFBD><EFBFBD>ģʽ <20><>ת180
}oled_dir_enum;
typedef enum
{
OLED_6X8_FONT = 0, // 6x8 <20><><EFBFBD><EFBFBD>
OLED_8X16_FONT = 1, // 8x16 <20><><EFBFBD><EFBFBD>
OLED_16X16_FONT = 2, // 16x16 <20><><EFBFBD><EFBFBD> Ŀǰ<C4BF><C7B0>֧<EFBFBD><D6A7>
}oled_font_size_enum;
//===================================================<3D><><EFBFBD><EFBFBD> OLED <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=================================================
//===================================================<3D><><EFBFBD><EFBFBD> OLED <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=================================================
void oled_clear (void); // OLED <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void oled_full (const uint8 color); // OLED <20><>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><E4BAAF>
void oled_set_dir (oled_dir_enum dir); // OLED <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
void oled_set_font (oled_font_size_enum font); // OLED <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
void oled_draw_point (uint16 x, uint16 y, const uint8 color); // OLED <20><><EFBFBD><EFBFBD><E3BAAF>
void oled_show_string (uint16 x, uint16 y, const char ch[]); // OLED <20><>ʾ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
void oled_show_int (uint16 x, uint16 y, const int32 dat, uint8 num); // OLED <20><>ʾ32λ<32>з<EFBFBD><D0B7><EFBFBD><><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>0)
void oled_show_uint (uint16 x, uint16 y, const uint32 dat, uint8 num); // OLED <20><>ʾ32λ<32>޷<EFBFBD><DEB7><EFBFBD><><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>0)
void oled_show_float (uint16 x, uint16 y, const double dat, uint8 num, uint8 pointnum);
void oled_show_binary_image (uint16 x, uint16 y, const uint8 *image, uint16 width, uint16 height, uint16 dis_width, uint16 dis_height); // OLED <20><>ʾ<EFBFBD><CABE>ֵͼ<D6B5><CDBC> <20><><EFBFBD><EFBFBD>ÿ<EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
void oled_show_gray_image (uint16 x, uint16 y, const uint8 *image, uint16 width, uint16 height, uint16 dis_width, uint16 dis_height, uint8 threshold); // OLED <20><>ʾ 8bit <20>Ҷ<EFBFBD>ͼ<EFBFBD><CDBC> <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ֵ
void oled_show_wave (uint16 x, uint16 y, const uint16 *image, uint16 width, uint16 value_max, uint16 dis_width, uint16 dis_value_max); // OLED <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
void oled_show_chinese (uint16 x, uint16 y, uint8 size, const uint8 *chinese_buffer, uint8 number); // OLED <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
void oled_init (void); // OLED <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//===================================================<3D><><EFBFBD><EFBFBD> OLED <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=================================================
//===================================================<3D><><EFBFBD><EFBFBD> OLED <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>=================================================
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OLED 128*64 <20><>ʾС<CABE><D0A1><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> p ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_displayimage7725(ov7725_image_binary[0]);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
#define oled_displayimage7725(p) (oled_show_binary_image(0, 0, (p), OV7725_W, OV7725_H, 128, 64))
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OLED 128*64 <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC> <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> p ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> x <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ֵ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> oled_displayimage03x(mt9v03x_image[0], 127);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
#define oled_displayimage03x(p,x) (oled_show_gray_image(0, 0, (p), MT9V03X_W, MT9V03X_H, 128, 64, (x)))
//===================================================<3D><><EFBFBD><EFBFBD> OLED <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>=================================================
#endif

View File

@@ -0,0 +1,550 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_ov7725
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* TXD/SCL <20>鿴 zf_device_ov7725.h <20><> OV7725_COF_UART_TX <20><> OV7725_COF_IIC_SCL <20><EFBFBD><EAB6A8>
* RXD/SDA <20>鿴 zf_device_ov7725.h <20><> OV7725_COF_UART_RX <20><> OV7725_COF_IIC_SDA <20><EFBFBD><EAB6A8>
* PCLK <20>鿴 zf_device_ov7725.h <20><> OV7725_PCLK_PIN <20><EFBFBD><EAB6A8>
* VSY <20>鿴 zf_device_ov7725.h <20><> OV7725_VSYNC_PIN <20><EFBFBD><EAB6A8>
* D0-D7 <20>鿴 zf_device_ov7725.h <20><> OV7725_DATA_PIN <20><EFBFBD><EAB6A8> <20>Ӹö<D3B8><C3B6>ʼ<E5BFAA><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
********************************************************************************************************************/
#include "zf_common_interrupt.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
#include "zf_driver_delay.h"
#include "zf_driver_dma.h"
#include "zf_driver_exti.h"
#include "zf_driver_gpio.h"
#include "zf_driver_soft_iic.h"
#include "zf_driver_uart.h"
#include "zf_device_camera.h"
#include "zf_device_type.h"
#include "zf_device_ov7725.h"
vuint8 ov7725_finish_flag = 0;
uint8 ov7725_image_binary [OV7725_H][OV7725_W / 8]; // ͼ<>񱣴<EFBFBD><F1B1A3B4><EFBFBD><EFBFBD><EFBFBD>
uint8 ov7725_uart_dma_init_flag; // <20><><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC>DMA<4D>ı<EFBFBD>־λ
uint8 ov7725_dma_int_num = 0;
uint8 ov7725_lost_flag = 1;
uint8 ov7725_link_list_num = 0;
// <20><>Ҫ<EFBFBD><D2AA><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸IJ<DEB8><C4B2><EFBFBD>
static uint16 ov7725_set_confing_buffer [OV7725_CONFIG_FINISH][2]=
{
{OV7725_INIT, 0}, // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{OV7725_RESERVE, 0}, // <20><><EFBFBD><EFBFBD>
{OV7725_CONTRAST, OV7725_CONTRAST_DEF}, // <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
{OV7725_FPS, OV7725_FPS_DEF}, // ֡<><D6A1>
{OV7725_COL, OV7725_W}, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{OV7725_ROW, OV7725_H} // ͼ<><CDBC><EFBFBD>߶<EFBFBD>
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸IJ<DEB8><C4B2><EFBFBD>
static uint16 ov7725_get_confing_buffer [OV7725_CONFIG_FINISH - 1][2]=
{
{OV7725_RESERVE, 0}, // <20><><EFBFBD><EFBFBD>
{OV7725_CONTRAST, 0}, // <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
{OV7725_FPS, 0}, // ֡<><D6A1>
{OV7725_COL, 0}, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{OV7725_ROW, 0} // ͼ<><CDBC><EFBFBD>߶<EFBFBD>
};
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> buff <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ĵ<EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-ʧ<><CAA7> 0-<2D>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> if(ov7725_set_config(ov7725_set_confing_buffer)){}
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 ov7725_set_config (uint16 buff[OV7725_CONFIG_FINISH][2])
{
uint8 return_state = 1;
uint8 uart_buffer[4];
uint16 temp = 0;
uint16 timeout_count = 0;
uint32 loop_count = 0;
uint32 uart_buffer_index = 0;
for(loop_count = OV7725_ROW; OV7725_SET_DATA > loop_count; loop_count --)
{
uart_buffer[0] = 0xA5;
uart_buffer[1] = (uint8)buff[loop_count][0];
temp = buff[loop_count][1];
uart_buffer[2] = temp >> 8;
uart_buffer[3] = (uint8)temp;
uart_write_buffer(OV7725_COF_UART, uart_buffer, 4);
system_delay_ms(10);
}
do
{
if(3 <= fifo_used(&camera_receiver_fifo))
{
uart_buffer_index = 3;
fifo_read_buffer(&camera_receiver_fifo, uart_buffer, &uart_buffer_index, FIFO_READ_AND_CLEAN);
if((0xff == uart_buffer[1]) || (0xff == uart_buffer[2]))
{
return_state = 0;
break;
}
}
system_delay_ms(1);
}while(OV7725_INIT_TIMEOUT > timeout_count ++);
// <20><><EFBFBD>ϲ<EFBFBD><CFB2>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>51<35><31>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>eeprom<6F><6D>
// <20><><EFBFBD><EFBFBD>set_exposure_time<6D><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>ع<EFBFBD><D8B9><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><E6B4A2>eeprom<6F><6D>
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͷ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> buff <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ĵ<EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-ʧ<><CAA7> 0-<2D>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> if(ov7725_get_config(ov7725_get_confing_buffer)){}
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 ov7725_get_config (uint16 buff[OV7725_CONFIG_FINISH - 1][2])
{
uint8 return_state = 0;
uint8 uart_buffer[4];
uint16 temp = 0;
uint16 timeout_count = 0;
uint32 loop_count = 0;
uint32 uart_buffer_index = 0;
for(loop_count = OV7725_ROW - 1; 1 <= loop_count; loop_count --)
{
uart_buffer[0] = 0xA5;
uart_buffer[1] = OV7725_GET_STATUS;
temp = buff[loop_count][0];
uart_buffer[2] = temp >> 8;
uart_buffer[3] = (uint8)temp;
uart_write_buffer(OV7725_COF_UART, uart_buffer, 4);
system_delay_ms(10);
timeout_count = 0;
do
{
if(3 <= fifo_used(&camera_receiver_fifo))
{
uart_buffer_index = 3;
fifo_read_buffer(&camera_receiver_fifo, uart_buffer, &uart_buffer_index, FIFO_READ_AND_CLEAN);
buff[loop_count][1] = uart_buffer[1] << 8 | uart_buffer[2];
break;
}
system_delay_ms(1);
}while(OV7725_INIT_TIMEOUT > timeout_count ++);
if(OV7725_INIT_TIMEOUT < timeout_count) // <20><>ʱ
{
return_state = 1;
break;
}
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ڲ<EFBFBD><DAB2>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-ʧ<><CAA7> 0-<2D>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> if(ov7725_iic_init()){}
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9> <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 ov7725_iic_init (void)
{
soft_iic_info_struct ov7725_iic_struct;
uint8 ov7725_idcode = 0;
uint8 return_state = 0;
uart_rx_interrupt(OV7725_COF_UART, 0);
soft_iic_init(&ov7725_iic_struct, OV7725_DEV_ADD, OV7725_COF_IIC_DELAY, OV7725_COF_IIC_SCL, OV7725_COF_IIC_SDA);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_COM7, 0x80); // <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ͷ
system_delay_ms(50);
do
{
ov7725_idcode = soft_iic_sccb_read_register(&ov7725_iic_struct, OV7725_VER);
if(OV7725_ID != ov7725_idcode)
{
return_state = 1; // У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷID<49><44>
break;
}
// ID<49><44>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȼ<><C8BB><EFBFBD><EFBFBD><EFBFBD>üĴ<C3BC><C4B4><EFBFBD>
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_COM4 , 0xC1);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_CLKRC , 0x01);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_COM2 , 0x03);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_COM3 , 0xD0);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_COM7 , 0x40);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_COM8 , 0xCE); // 0xCE:<3A>ر<EFBFBD><D8B1>Զ<EFBFBD><D4B6>ع<EFBFBD> 0xCF<43><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ع<EFBFBD>
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_HSTART , 0x3F);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_HSIZE , 0x50);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_VSTRT , 0x03);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_VSIZE , 0x78);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_HREF , 0x00);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_SCAL0 , 0x0A);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_AWB_Ctrl0 , 0xE0);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_DSPAuto , 0xff);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_DSP_Ctrl2 , 0x0C);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_DSP_Ctrl3 , 0x00);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_DSP_Ctrl4 , 0x00);
if(OV7725_W == 80)
{
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_HOutSize, 0x14);
}
else if(OV7725_W == 160)
{
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_HOutSize, 0x28);
}
else if(OV7725_W == 240)
{
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_HOutSize, 0x3c);
}
else if(OV7725_W == 320)
{
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_HOutSize, 0x50);
}
if(OV7725_H == 60)
{
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_VOutSize, 0x1E);
}
else if(OV7725_H == 120)
{
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_VOutSize, 0x3c);
}
else if(OV7725_H == 180)
{
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_VOutSize, 0x5a);
}
else if(OV7725_H == 240)
{
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_VOutSize, 0x78);
}
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_REG28 , 0x01);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_EXHCH , 0x10);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_EXHCL , 0x1F);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_GAM1 , 0x0c);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_GAM2 , 0x16);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_GAM3 , 0x2a);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_GAM4 , 0x4e);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_GAM5 , 0x61);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_GAM6 , 0x6f);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_GAM7 , 0x7b);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_GAM8 , 0x86);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_GAM9 , 0x8e);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_GAM10 , 0x97);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_GAM11 , 0xa4);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_GAM12 , 0xaf);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_GAM13 , 0xc5);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_GAM14 , 0xd7);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_GAM15 , 0xe8);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_SLOP , 0x20);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_LC_RADI , 0x00);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_LC_COEF , 0x13);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_LC_XC , 0x08);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_LC_COEFB , 0x14);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_LC_COEFR , 0x17);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_LC_CTR , 0x05);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_BDBase , 0x99);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_BDMStep , 0x03);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_SDE , 0x04);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_BRIGHT , 0x00);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_CNST , 0x40);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_SIGN , 0x06);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_UVADJ0 , 0x11);
soft_iic_sccb_write_register(&ov7725_iic_struct, OV7725_UVADJ1 , 0x02);
}while(0);
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ͨ<EFBFBD>Żص<C5BB>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> ov7725_uart_callback();
//-------------------------------------------------------------------------------------------------------------------
static void ov7725_uart_handler (void)
{
uint8 data = 0;
uart_query_byte(OV7725_COF_UART, &data);
if(0xA5 == data)
{
fifo_clear(&camera_receiver_fifo);
}
fifo_write_element(&camera_receiver_fifo, data);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ж<EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> ov7725_vsync_handler();
//-------------------------------------------------------------------------------------------------------------------
static void ov7725_vsync_handler(void)
{
exti_flag_clear(OV7725_VSYNC_PIN);
ov7725_dma_int_num = 0;
if((ov7725_uart_dma_init_flag || ov7725_lost_flag) && camera_type == CAMERA_BIN_UART)
{
ov7725_uart_dma_init_flag = 0;
IfxDma_resetChannel(&MODULE_DMA, OV7725_DMA_CH);
ov7725_link_list_num = dma_init(OV7725_DMA_CH,
OV7725_DATA_ADD,
ov7725_image_binary[0],
OV7725_PCLK_PIN,
EXTI_TRIGGER_RISING,
OV7725_IMAGE_SIZE);
dma_enable(OV7725_DMA_CH);
}
else
{
if(ov7725_link_list_num == 1)
{
dma_set_destination(OV7725_DMA_CH, ov7725_image_binary[0]);
}
dma_enable(OV7725_DMA_CH);
}
ov7725_lost_flag = 1;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷDMA<4D><41><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> ov7725_dma_handler();
//-------------------------------------------------------------------------------------------------------------------
static void ov7725_dma_handler(void)
{
clear_dma_flag(OV7725_DMA_CH);
if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, OV7725_DMA_CH))
{//ͼ<><CDBC><EFBFBD>д<EFBFBD>λ
ov7725_finish_flag = 0;
dma_disable(OV7725_DMA_CH);
IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, OV7725_DMA_CH);
ov7725_uart_dma_init_flag = 1;
}
else
{
ov7725_dma_int_num++;
if(ov7725_dma_int_num >= ov7725_link_list_num)
{
ov7725_dma_int_num = 0;
ov7725_lost_flag = 0;
ov7725_finish_flag = 1;
dma_disable(OV7725_DMA_CH);
}
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͷ<EFBFBD>̼<EFBFBD> ID
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> ov7725_uart_get_id(); // <20><><EFBFBD>øú<C3B8><C3BA><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ȳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint16 ov7725_uart_get_id (void)
{
uint16 temp = 0;
uint8 uart_buffer[4];
uint16 timeout_count = 0;
uint16 return_value = 0;
uint32 uart_buffer_index = 0;
uart_buffer[0] = 0xA5;
uart_buffer[1] = OV7725_GET_WHO_AM_I;
temp = 0;
uart_buffer[2] = temp >> 8;
uart_buffer[3] = (uint8)temp;
uart_write_buffer(OV7725_COF_UART, uart_buffer, 4);
temp = 0;
do
{
if(3 <= fifo_used(&camera_receiver_fifo))
{
uart_buffer_index = 3;
fifo_read_buffer(&camera_receiver_fifo, uart_buffer, &uart_buffer_index, FIFO_READ_AND_CLEAN);
return_value = uart_buffer[1] << 8 | uart_buffer[2];
break;
}
system_delay_ms(1);
}while(OV7725_INIT_TIMEOUT > timeout_count ++);
return return_value;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͷ<EFBFBD>̼<EFBFBD><CCBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> ov7725_get_version(); // <20><><EFBFBD>øú<C3B8><C3BA><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ȳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint16 ov7725_get_version (void)
{
uint16 temp = 0;
uint8 uart_buffer[4];
uint16 timeout_count = 0;
uint16 return_value = 0;
uint32 uart_buffer_index = 0;
uart_buffer[0] = 0xA5;
uart_buffer[1] = OV7725_GET_STATUS;
temp = OV7725_GET_VERSION;
uart_buffer[2] = temp >> 8;
uart_buffer[3] = (uint8)temp;
uart_write_buffer(OV7725_COF_UART, uart_buffer, 4);
do
{
if(3 <= fifo_used(&camera_receiver_fifo))
{
uart_buffer_index = 3;
fifo_read_buffer(&camera_receiver_fifo, uart_buffer, &uart_buffer_index, FIFO_READ_AND_CLEAN);
return_value = uart_buffer[1] << 8 | uart_buffer[2];
break;
}
system_delay_ms(1);
}while(OV7725_INIT_TIMEOUT > timeout_count ++);
return return_value;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OV7725 <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> NULL
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> ov7725_init();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 ov7725_init (void)
{
uint16 out_time = 0;
uint8 return_state = 0;
gpio_init(OV7725_VSYNC_PORT_PIN, GPI, GPIO_LOW, GPI_FLOATING_IN);
do
{
while(0 == gpio_get_level(OV7725_VSYNC_PORT_PIN))
{
system_delay_ms(1);
out_time ++;
if(OV7725_INIT_TIMEOUT < out_time)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
// <20><><EFBFBD><EFBFBD>һ<EFBFBD>½<EFBFBD><C2BD>ߺ͹<DFBA><CDB9><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܾ<EFBFBD><DCBE>ǻ<EFBFBD><C7BB><EFBFBD>
zf_log(0, "OV7725 check error.");
return_state = 1;
break;
}
}
set_camera_type(CAMERA_BIN_UART, ov7725_vsync_handler, ov7725_dma_handler, ov7725_uart_handler);
camera_fifo_init();
uart_init(OV7725_COF_UART, OV7725_COF_BAUR, OV7725_COF_UART_RX, OV7725_COF_UART_TX);
uart_rx_interrupt(OV7725_COF_UART, 1);
system_delay_ms(200);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>в<EFBFBD><D0B2><EFBFBD>
if(ov7725_get_config(ov7725_get_confing_buffer))
{
uart_rx_interrupt(OV7725_COF_UART, 0);
system_delay_ms(200);
set_camera_type(CAMERA_BIN_IIC, ov7725_vsync_handler, ov7725_dma_handler, NULL); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
if(ov7725_iic_init())
{
zf_log(0, "OV7725 IIC error.");
set_camera_type(NO_CAMERE, NULL, NULL, NULL);
return_state = 1;
zf_log(0, "ov7725 set config error.");
break;
}
}
else
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD>
if(ov7725_set_config(ov7725_set_confing_buffer))
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ô<EFBFBD><C3B4><EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD>ͨ<EFBFBD>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܾ<EFBFBD><DCBE>ǻ<EFBFBD><C7BB><EFBFBD>
zf_log(0, "OV7725 set confing error.");
uart_rx_interrupt(OV7725_COF_UART, 0);
set_camera_type(NO_CAMERE, NULL, NULL, NULL);
return_state = 1;
break;
}
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>в<EFBFBD><D0B2><EFBFBD>
if(ov7725_get_config(ov7725_get_confing_buffer))
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ô<EFBFBD><C3B4><EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD>ͨ<EFBFBD>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܾ<EFBFBD><DCBE>ǻ<EFBFBD><C7BB><EFBFBD>
zf_log(0, "OV7725 get confing error.");
uart_rx_interrupt(OV7725_COF_UART, 0);
set_camera_type(NO_CAMERE, NULL, NULL, NULL);
return_state = 1;
break;
}
}
ov7725_link_list_num = camera_init(OV7725_DATA_ADD, ov7725_image_binary[0], OV7725_IMAGE_SIZE);
}while(0);
return return_state;
}

View File

@@ -0,0 +1,278 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_ov7725
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* TXD/SCL <20>鿴 zf_device_ov7725.h <20><> OV7725_COF_UART_TX <20><> OV7725_COF_IIC_SCL <20><EFBFBD><EAB6A8>
* RXD/SDA <20>鿴 zf_device_ov7725.h <20><> OV7725_COF_UART_RX <20><> OV7725_COF_IIC_SDA <20><EFBFBD><EAB6A8>
* PCLK <20>鿴 zf_device_ov7725.h <20><> OV7725_PCLK_PIN <20><EFBFBD><EAB6A8>
* VSY <20>鿴 zf_device_ov7725.h <20><> OV7725_VSYNC_PIN <20><EFBFBD><EAB6A8>
* D0-D7 <20>鿴 zf_device_ov7725.h <20><> OV7725_DATA_PIN <20><EFBFBD><EAB6A8> <20>Ӹö<D3B8><C3B6>ʼ<E5BFAA><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
********************************************************************************************************************/
#ifndef _zf_device_ov7725_h_
#define _zf_device_ov7725_h_
#include "zf_device_type.h"
//================================================<3D><><EFBFBD><EFBFBD> OV7725 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#define OV7725_COF_UART (UART_1) // С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
#define OV7725_COF_BAUR (9600) // С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
#define OV7725_COF_UART_TX (UART1_RX_P02_3) // С<><D0A1><EFBFBD><EFBFBD> UART-TX <20><><EFBFBD><EFBFBD> Ҫ<><D2AA><EFBFBD>ڵ<EFBFBD>Ƭ<EFBFBD><C6AC> RX <20><>
#define OV7725_COF_UART_RX (UART1_TX_P02_2) // С<><D0A1><EFBFBD><EFBFBD> UART-RX <20><><EFBFBD><EFBFBD> Ҫ<><D2AA><EFBFBD>ڵ<EFBFBD>Ƭ<EFBFBD><C6AC> TX <20><>
#define OV7725_COF_IIC_DELAY (640 ) // С<><D0A1><EFBFBD><EFBFBD> IIC <20><>ʱ
#define OV7725_COF_IIC_SCL (P02_3) // С<><D0A1><EFBFBD><EFBFBD> IIC-SCL <20><><EFBFBD><EFBFBD>
#define OV7725_COF_IIC_SDA (P02_2) // С<><D0A1><EFBFBD><EFBFBD> IIC-SDA <20><><EFBFBD><EFBFBD>
#define OV7725_DMA_CH (IfxDma_ChannelId_5) // ERU<52><55><EFBFBD><EFBFBD>DMAͨ<41><CDA8><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
#define OV7725_PCLK_PIN (ERU_CH2_REQ14_P02_1) // GPIO<49><4F><EFBFBD><EFBFBD>TIM<49><4D><EFBFBD>Ž<EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
#define OV7725_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // <20><><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
#define OV7725_VSYNC_PORT_PIN (P02_0 ) // <20><><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
#define OV7725_DATA_PIN (P00_0 ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֻ<><D6BB><EFBFBD><EFBFBD> GPIOx0 <20><><EFBFBD><EFBFBD> GPIOx8 <20><>ʼ <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> F0-F7
#define OV7725_DATA_ADD get_port_in_addr(OV7725_DATA_PIN)
#define OV7725_INIT_TIMEOUT (0x0080) // Ĭ<>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1> <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ
//================================================<3D><><EFBFBD><EFBFBD> OV7725 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//================================================<3D><><EFBFBD><EFBFBD> OV7725 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#define OV7725_W (160) // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 80/160/240/320
#define OV7725_H (120) // ͼ<><CDBC><EFBFBD>߶<EFBFBD> 60/120/180/240
#define OV7725_IMAGE_SIZE (OV7725_W * OV7725_H / 8) // <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>С OV7725_IMAGE_SIZE <20><><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD> 65535
#define OV7725_CONTRAST_DEF (0x30) // <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ֵ <20><><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><E1B1BB><EFBFBD><EFBFBD>ͷ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
#define OV7725_FPS_DEF (50 ) // ֡<><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 150 ֡ <20><><EFBFBD><EFBFBD>С<EFBFBD>ֱ<EFBFBD><D6B1>ʲ<EFBFBD><CAB2>ܴﵽ<DCB4><EFB5BD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>
//================================================<3D><><EFBFBD><EFBFBD> OV7725 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//==============================================<3D><><EFBFBD><EFBFBD> OV7725 IIC <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ==============================================
#define OV7725_ID (0x21) // <20><><EFBFBD><EFBFBD>ͷID<49><44>
#define OV7725_GAIN (0x00) // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ͷ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
#define OV7725_BLUE (0x01)
#define OV7725_RED (0x02)
#define OV7725_GREEN (0x03)
#define OV7725_BAVG (0x05)
#define OV7725_GAVG (0x06)
#define OV7725_RAVG (0x07)
#define OV7725_AECH (0x08)
#define OV7725_COM2 (0x09)
#define OV7725_PID (0x0A)
#define OV7725_VER (0x0B)
#define OV7725_COM3 (0x0C)
#define OV7725_COM4 (0x0D)
#define OV7725_COM5 (0x0E)
#define OV7725_COM6 (0x0F)
#define OV7725_AEC (0x10)
#define OV7725_CLKRC (0x11)
#define OV7725_COM7 (0x12)
#define OV7725_COM8 (0x13)
#define OV7725_COM9 (0x14)
#define OV7725_COM10 (0x15)
#define OV7725_REG16 (0x16)
#define OV7725_HSTART (0x17)
#define OV7725_HSIZE (0x18)
#define OV7725_VSTRT (0x19)
#define OV7725_VSIZE (0x1A)
#define OV7725_PSHFT (0x1B)
#define OV7725_MIDH (0x1C)
#define OV7725_MIDL (0x1D)
#define OV7725_LAEC (0x1F)
#define OV7725_COM11 (0x20)
#define OV7725_BDBase (0x22)
#define OV7725_BDMStep (0x23)
#define OV7725_AEW (0x24)
#define OV7725_AEB (0x25)
#define OV7725_VPT (0x26)
#define OV7725_REG28 (0x28)
#define OV7725_HOutSize (0x29)
#define OV7725_EXHCH (0x2A)
#define OV7725_EXHCL (0x2B)
#define OV7725_VOutSize (0x2C)
#define OV7725_ADVFL (0x2D)
#define OV7725_ADVFH (0x2E)
#define OV7725_YAVE (0x2F)
#define OV7725_LumHTh (0x30)
#define OV7725_LumLTh (0x31)
#define OV7725_HREF (0x32)
#define OV7725_DM_LNL (0x33)
#define OV7725_DM_LNH (0x34)
#define OV7725_ADoff_B (0x35)
#define OV7725_ADoff_R (0x36)
#define OV7725_ADoff_Gb (0x37)
#define OV7725_ADoff_Gr (0x38)
#define OV7725_Off_B (0x39)
#define OV7725_Off_R (0x3A)
#define OV7725_Off_Gb (0x3B)
#define OV7725_Off_Gr (0x3C)
#define OV7725_COM12 (0x3D)
#define OV7725_COM13 (0x3E)
#define OV7725_COM14 (0x3F)
#define OV7725_COM16 (0x41)
#define OV7725_TGT_B (0x42)
#define OV7725_TGT_R (0x43)
#define OV7725_TGT_Gb (0x44)
#define OV7725_TGT_Gr (0x45)
#define OV7725_LC_CTR (0x46)
#define OV7725_LC_XC (0x47)
#define OV7725_LC_YC (0x48)
#define OV7725_LC_COEF (0x49)
#define OV7725_LC_RADI (0x4A)
#define OV7725_LC_COEFB (0x4B)
#define OV7725_LC_COEFR (0x4C)
#define OV7725_FixGain (0x4D)
#define OV7725_AREF1 (0x4F)
#define OV7725_AREF6 (0x54)
#define OV7725_UFix (0x60)
#define OV7725_VFix (0x61)
#define OV7725_AWBb_blk (0x62)
#define OV7725_AWB_Ctrl0 (0x63)
#define OV7725_DSP_Ctrl1 (0x64)
#define OV7725_DSP_Ctrl2 (0x65)
#define OV7725_DSP_Ctrl3 (0x66)
#define OV7725_DSP_Ctrl4 (0x67)
#define OV7725_AWB_bias (0x68)
#define OV7725_AWBCtrl1 (0x69)
#define OV7725_AWBCtrl2 (0x6A)
#define OV7725_AWBCtrl3 (0x6B)
#define OV7725_AWBCtrl4 (0x6C)
#define OV7725_AWBCtrl5 (0x6D)
#define OV7725_AWBCtrl6 (0x6E)
#define OV7725_AWBCtrl7 (0x6F)
#define OV7725_AWBCtrl8 (0x70)
#define OV7725_AWBCtrl9 (0x71)
#define OV7725_AWBCtrl10 (0x72)
#define OV7725_AWBCtrl11 (0x73)
#define OV7725_AWBCtrl12 (0x74)
#define OV7725_AWBCtrl13 (0x75)
#define OV7725_AWBCtrl14 (0x76)
#define OV7725_AWBCtrl15 (0x77)
#define OV7725_AWBCtrl16 (0x78)
#define OV7725_AWBCtrl17 (0x79)
#define OV7725_AWBCtrl18 (0x7A)
#define OV7725_AWBCtrl19 (0x7B)
#define OV7725_AWBCtrl20 (0x7C)
#define OV7725_AWBCtrl21 (0x7D)
#define OV7725_GAM1 (0x7E)
#define OV7725_GAM2 (0x7F)
#define OV7725_GAM3 (0x80)
#define OV7725_GAM4 (0x81)
#define OV7725_GAM5 (0x82)
#define OV7725_GAM6 (0x83)
#define OV7725_GAM7 (0x84)
#define OV7725_GAM8 (0x85)
#define OV7725_GAM9 (0x86)
#define OV7725_GAM10 (0x87)
#define OV7725_GAM11 (0x88)
#define OV7725_GAM12 (0x89)
#define OV7725_GAM13 (0x8A)
#define OV7725_GAM14 (0x8B)
#define OV7725_GAM15 (0x8C)
#define OV7725_SLOP (0x8D)
#define OV7725_DNSTh (0x8E)
#define OV7725_EDGE0 (0x8F)
#define OV7725_EDGE1 (0x90)
#define OV7725_DNSOff (0x91)
#define OV7725_EDGE2 (0x92)
#define OV7725_EDGE3 (0x93)
#define OV7725_MTX1 (0x94)
#define OV7725_MTX2 (0x95)
#define OV7725_MTX3 (0x96)
#define OV7725_MTX4 (0x97)
#define OV7725_MTX5 (0x98)
#define OV7725_MTX6 (0x99)
#define OV7725_MTX_Ctrl (0x9A)
#define OV7725_BRIGHT (0x9B)
#define OV7725_CNST (0x9C)
#define OV7725_UVADJ0 (0x9E)
#define OV7725_UVADJ1 (0x9F)
#define OV7725_SCAL0 (0xA0)
#define OV7725_SCAL1 (0xA1)
#define OV7725_SCAL2 (0xA2)
#define OV7725_SDE (0xA6)
#define OV7725_USAT (0xA7)
#define OV7725_VSAT (0xA8)
#define OV7725_HUECOS (0xA9)
#define OV7725_HUESIN (0xAA)
#define OV7725_SIGN (0xAB)
#define OV7725_DSPAuto (0xAC)
#define OV7725_DEV_ADD (0x42 >> 1)
//==============================================<3D><><EFBFBD><EFBFBD> OV7725 IIC <20>ڲ<EFBFBD><DAB2><EFBFBD>ַ==============================================
//===============================================<3D><><EFBFBD><EFBFBD> OV7725 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>================================================
typedef enum
{
OV7725_INIT = 0x00,
OV7725_RESERVE,
OV7725_CONTRAST,
OV7725_FPS,
OV7725_COL,
OV7725_ROW,
OV7725_CONFIG_FINISH,
OV7725_GET_WHO_AM_I = 0xEF,
OV7725_GET_STATUS = 0xF1,
OV7725_GET_VERSION = 0xF2,
OV7725_SET_ADDR = 0xFE,
OV7725_SET_DATA = 0xFF,
}ov7725_cmd_enum;
//===============================================<3D><><EFBFBD><EFBFBD> OV7725 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>================================================
//===============================================<3D><><EFBFBD><EFBFBD> OV7725 ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>=================================================
extern vuint8 ov7725_finish_flag; // һ<><D2BB>ͼ<EFBFBD><CDBC><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
extern uint8 ov7725_image_binary[OV7725_H][OV7725_W / 8]; // ͼ<>񱣴<EFBFBD><F1B1A3B4><EFBFBD><EFBFBD><EFBFBD>
//===============================================<3D><><EFBFBD><EFBFBD> OV7725 ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>=================================================
//===============================================<3D><><EFBFBD><EFBFBD> OV7725 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=================================================
uint16 ov7725_uart_get_id (void); // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͷ<EFBFBD>̼<EFBFBD> ID
uint16 ov7725_get_version (void); // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͷ<EFBFBD>̼<EFBFBD><CCBC>
uint8 ov7725_init (void); // OV7725 <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC>
//===============================================<3D><><EFBFBD><EFBFBD> OV7725 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=================================================
#endif

View File

@@ -0,0 +1,609 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_scc8660
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2024-02-02 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MCU<43><55>ͫ<EFBFBD><CDAB><EFBFBD><EFBFBD>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* TXD <20>鿴 zf_device_scc8660.h <20><> SCC8660_COF_UART_TX <20><EFBFBD><EAB6A8>
* RXD <20>鿴 zf_device_scc8660.h <20><> SCC8660_COF_UART_RX <20><EFBFBD><EAB6A8>
* PCLK <20>鿴 zf_device_scc8660.h <20><> SCC8660_PCLK_PIN <20><EFBFBD><EAB6A8>
* VSY <20>鿴 zf_device_scc8660.h <20><> SCC8660_VSYNC_PIN <20><EFBFBD><EAB6A8>
* D0-D7 <20>鿴 zf_device_scc8660.h <20><> SCC8660_DATA_PIN <20><EFBFBD><EAB6A8> <20>Ӹö<D3B8><C3B6>ʼ<E5BFAA><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
********************************************************************************************************************/
#include "zf_common_interrupt.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
#include "zf_driver_delay.h"
#include "zf_driver_dma.h"
#include "zf_driver_exti.h"
#include "zf_driver_gpio.h"
#include "zf_driver_uart.h"
#include "zf_driver_soft_iic.h"
#include "zf_device_camera.h"
#include "zf_device_type.h"
#include "zf_device_config.h"
#include "zf_device_scc8660.h"
vuint8 scc8660_finish_flag = 0; // һ<><D2BB>ͼ<EFBFBD><CDBC><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
IFX_ALIGN(4) uint16 scc8660_image[SCC8660_H][SCC8660_W];
uint8 scc8660_link_list_num;
uint8 scc8660_lost_flag = 1; // ͼ<><CDBC><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>־λ
uint8 scc8660_dma_int_num; // <20><>ǰDMA<4D>жϴ<D0B6><CFB4><EFBFBD>
uint8 scc8660_dma_init_flag; // <20>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC>
static scc8660_type_enum scc8660_type;
// <20><>Ҫ<EFBFBD><D2AA><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸IJ<DEB8><C4B2><EFBFBD>
static int16 scc8660_set_confing_buffer[SCC8660_CONFIG_FINISH][2]=
{
{SCC8660_INIT, 0}, // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC>ʼ<EFBFBD><CABC>
{SCC8660_AUTO_EXP, SCC8660_AUTO_EXP_DEF}, // <20>Զ<EFBFBD><D4B6>ع<EFBFBD>
{SCC8660_BRIGHT, SCC8660_BRIGHT_DEF}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{SCC8660_FPS, SCC8660_FPS_DEF}, // ͼ<><CDBC>֡<EFBFBD><D6A1>
{SCC8660_SET_COL, SCC8660_W * 4}, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{SCC8660_SET_ROW, SCC8660_H}, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{SCC8660_PCLK_DIV, SCC8660_PCLK_DIV_DEF}, // PCLK<4C><4B>Ƶϵ<C6B5><CFB5>
{SCC8660_PCLK_MODE, SCC8660_PCLK_MODE_DEF}, // PCLKģʽ
{SCC8660_COLOR_MODE, SCC8660_COLOR_MODE_DEF}, // ͼ<><CDBC>ɫ<EFBFBD><C9AB>ģʽ
{SCC8660_DATA_FORMAT, SCC8660_DATA_FORMAT_DEF}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ʽ
{SCC8660_MANUAL_WB, SCC8660_MANUAL_WB_DEF} // <20>ֶ<EFBFBD><D6B6><EFBFBD>ƽ<EFBFBD><C6BD>
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸IJ<DEB8><C4B2><EFBFBD>
static int16 scc8660_get_confing_buffer[SCC8660_CONFIG_FINISH - 1][2]=
{
{SCC8660_AUTO_EXP, 0},
{SCC8660_BRIGHT, 0}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{SCC8660_FPS, 0}, // ͼ<><CDBC>֡<EFBFBD><D6A1>
{SCC8660_SET_COL, 0}, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{SCC8660_SET_ROW, 0}, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{SCC8660_PCLK_DIV, 0}, // PCLK<4C><4B>Ƶϵ<C6B5><CFB5>
{SCC8660_PCLK_MODE, 0}, // PCLKģʽ
{SCC8660_COLOR_MODE, 0}, // ͼ<><CDBC>ɫ<EFBFBD><C9AB>ģʽ
{SCC8660_DATA_FORMAT, 0}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ʽ
{SCC8660_MANUAL_WB, 0}, // <20><>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> buff <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ĵ<EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-ʧ<><CAA7> 0-<2D>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> if(scc8660_set_config(scc8660_set_confing_buffer)){}
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD>øú<C3B8><C3BA><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ȳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 scc8660_set_config (int16 buff[SCC8660_CONFIG_FINISH][2])
{
uint8 return_state = 1;
uint8 uart_buffer[4];
uint16 temp;
uint16 timeout_count = 0;
uint32 loop_count = 0;
uint32 uart_buffer_index = 0;
// <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD>
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC>
for(loop_count = SCC8660_MANUAL_WB; loop_count < SCC8660_SET_REG_DATA; loop_count --)
{
uart_buffer[0] = 0xA5;
uart_buffer[1] = (uint8)buff[loop_count][0];
temp = buff[loop_count][1];
uart_buffer[2] = temp >> 8;
uart_buffer[3] = (uint8)temp;
uart_write_buffer(SCC8660_COF_UART, uart_buffer, 4);
system_delay_ms(2);
}
do
{
if(3 <= fifo_used(&camera_receiver_fifo))
{
uart_buffer_index = 3;
fifo_read_buffer(&camera_receiver_fifo, uart_buffer, &uart_buffer_index, FIFO_READ_AND_CLEAN);
if((0xff == uart_buffer[1]) || (0xff == uart_buffer[2]))
{
return_state = 0;
break;
}
}
system_delay_ms(1);
}while(SCC8660_INIT_TIMEOUT > timeout_count ++);
// <20><><EFBFBD>ϲ<EFBFBD><CFB2>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>51<35><31>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>eeprom<6F><6D>
// <20><><EFBFBD><EFBFBD>set_exposure_time<6D><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>ع<EFBFBD><D8B9><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><E6B4A2>eeprom<6F><6D>
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͷ<EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> buff <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ĵ<EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-ʧ<><CAA7> 0-<2D>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> if(scc8660_get_config(scc8660_get_confing_buffer)){}
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD>øú<C3B8><C3BA><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ȳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 scc8660_get_config (int16 buff[SCC8660_CONFIG_FINISH-1][2])
{
uint8 return_state = 0;
uint8 uart_buffer[4];
uint16 temp;
uint16 timeout_count = 0;
uint32 loop_count = 0;
uint32 uart_buffer_index = 0;
for(loop_count = SCC8660_MANUAL_WB - 1; loop_count >= 1; loop_count --)
{
uart_buffer[0] = 0xA5;
uart_buffer[1] = SCC8660_GET_STATUS;
temp = buff[loop_count][0];
uart_buffer[2] = temp >> 8;
uart_buffer[3] = (uint8)temp;
uart_write_buffer(SCC8660_COF_UART, uart_buffer, 4);
timeout_count = 0;
do
{
if(3 <= fifo_used(&camera_receiver_fifo))
{
uart_buffer_index = 3;
fifo_read_buffer(&camera_receiver_fifo, uart_buffer, &uart_buffer_index, FIFO_READ_AND_CLEAN);
buff[loop_count][1] = uart_buffer[1] << 8 | uart_buffer[2];
break;
}
system_delay_ms(1);
}while(SCC8660_INIT_TIMEOUT > timeout_count ++);
if(timeout_count > SCC8660_INIT_TIMEOUT) // <20><>ʱ
{
return_state = 1;
break;
}
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SCC8660<36><30><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ͨ<EFBFBD>Żص<C5BB>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> scc8660_uart_callback();
//-------------------------------------------------------------------------------------------------------------------
static void scc8660_uart_callback (void)
{
uint8 data = 0;
uart_query_byte(SCC8660_COF_UART, &data);
if(0xA5 == data)
{
fifo_clear(&camera_receiver_fifo);
}
fifo_write_element(&camera_receiver_fifo, data);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͷ ID
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint16 0-<2D><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> N-<2D><EFBFBD><E6B1BE>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> scc8660_get_id();
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD>øú<C3B8><C3BA><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ȳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
uint16 scc8660_get_id (void)
{
uint16 temp;
uint8 uart_buffer[4];
uint16 timeout_count = 0;
uint16 return_value = 0;
uint32 uart_buffer_index = 0;
uart_buffer[0] = 0xA5;
uart_buffer[1] = SCC8660_GET_WHO_AM_I;
temp = 0;
uart_buffer[2] = temp >> 8;
uart_buffer[3] = (uint8)temp;
uart_write_buffer(SCC8660_COF_UART, uart_buffer, 4);
do
{
if(3 <= fifo_used(&camera_receiver_fifo))
{
uart_buffer_index = 3;
fifo_read_buffer(&camera_receiver_fifo, uart_buffer, &uart_buffer_index, FIFO_READ_AND_CLEAN);
return_value = uart_buffer[1] << 8 | uart_buffer[2];
break;
}
system_delay_ms(1);
}while(SCC8660_INIT_TIMEOUT > timeout_count ++);
return return_value;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ع<EFBFBD>ʱ<EFBFBD><CAB1>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> light <20><><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><CAB1>Խ<EFBFBD><D4BD>ͼ<EFBFBD><CDBC>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷֱ<DDB7><D6B1>ʼ<EFBFBD>FPS<50><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint16 <20><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> scc8660_get_parameter();
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD>øú<C3B8><C3BA><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ȳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
uint16 scc8660_get_parameter (uint16 config)
{
uint8 uart_buffer[4];
uint16 timeout_count = 0;
uint16 return_value = 0;
uint32 uart_buffer_index = 0;
uart_buffer[0] = 0xA5;
uart_buffer[1] = SCC8660_GET_WHO_AM_I;
uart_buffer[2] = 0x00;
uart_buffer[3] = (uint8)config;
uart_write_buffer(SCC8660_COF_UART, uart_buffer, 4);
do
{
if(3 <= fifo_used(&camera_receiver_fifo))
{
uart_buffer_index = 3;
fifo_read_buffer(&camera_receiver_fifo, uart_buffer, &uart_buffer_index, FIFO_READ_AND_CLEAN);
return_value = uart_buffer[1] << 8 | uart_buffer[2];
break;
}
system_delay_ms(1);
}while(SCC8660_INIT_TIMEOUT > timeout_count ++);
return return_value;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD><C8A1>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ͷ<EFBFBD>̼<EFBFBD><CCBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint16 <20><EFBFBD><E6B1BE>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> scc8660_get_version();
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD>øú<C3B8><C3BA><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ȳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
uint16 scc8660_get_version (void)
{
uint16 temp;
uint8 uart_buffer[4];
uint16 timeout_count = 0;
uint16 return_value = 0;
uint32 uart_buffer_index = 0;
uart_buffer[0] = 0xA5;
uart_buffer[1] = SCC8660_GET_STATUS;
temp = SCC8660_GET_VERSION;
uart_buffer[2] = temp >> 8;
uart_buffer[3] = (uint8)temp;
uart_write_buffer(SCC8660_COF_UART, uart_buffer, 4);
do
{
if(3 <= fifo_used(&camera_receiver_fifo))
{
uart_buffer_index = 3;
fifo_read_buffer(&camera_receiver_fifo, uart_buffer, &uart_buffer_index, FIFO_READ_AND_CLEAN);
return_value = uart_buffer[1] << 8 | uart_buffer[2];
break;
}
system_delay_ms(1);
}while(SCC8660_INIT_TIMEOUT > timeout_count ++);
return return_value;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><>Ҫ<EFBFBD><D2AA><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ֵ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-ʧ<><CAA7> 0-<2D>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> scc8660_set_brightness(data);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD>øú<C3B8><C3BA><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ȳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ô<EFBFBD><C3B4><EFBFBD> ͨ<><CDA8><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õIJ<C3B5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᱻ51<35><31>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
uint8 scc8660_set_brightness (uint16 data)
{
uint8 return_state = 0;
if(SCC8660_UART == scc8660_type)
{
uint8 uart_buffer[4];
uint16 temp;
uint16 timeout_count = 0;
uint32 uart_buffer_index = 0;
uart_buffer[0] = 0xA5;
uart_buffer[1] = SCC8660_SET_BRIGHT;
uart_buffer[2] = data >> 8;
uart_buffer[3] = (uint8)data;
uart_write_buffer(SCC8660_COF_UART, uart_buffer, 4);
do
{
if(3 <= fifo_used(&camera_receiver_fifo))
{
uart_buffer_index = 3;
fifo_read_buffer(&camera_receiver_fifo, uart_buffer, &uart_buffer_index, FIFO_READ_AND_CLEAN);
temp = uart_buffer[1] << 8 | uart_buffer[2];
break;
}
system_delay_ms(1);
}while(SCC8660_INIT_TIMEOUT > timeout_count ++);
if((temp != data) || (SCC8660_INIT_TIMEOUT <= timeout_count))
{
return_state = 1;
}
}
else
{
return_state = scc8660_set_brightness_sccb(data);
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ð<EFBFBD>ƽ<EFBFBD><C6BD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><>Ҫ<EFBFBD><D2AA><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ֵ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-ʧ<><CAA7> 0-<2D>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> scc8660_set_white_balance(data);
// <20><>ע<EFBFBD><D7A2>Ϣ ͨ<><CDA8><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õIJ<C3B5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᱻ51<35><31>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>øú<C3B8><C3BA><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ȳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
uint8 scc8660_set_white_balance (uint16 data)
{
uint8 return_state = 0;
if(SCC8660_UART == scc8660_type)
{
uint8 uart_buffer[4];
uint16 temp;
uint16 timeout_count = 0;
uint32 uart_buffer_index = 0;
uart_buffer[0] = 0xA5;
uart_buffer[1] = SCC8660_SET_MANUAL_WB;
uart_buffer[2] = data >> 8;
uart_buffer[3] = (uint8)data;
uart_write_buffer(SCC8660_COF_UART, uart_buffer, 4);
do
{
if(3 <= fifo_used(&camera_receiver_fifo))
{
uart_buffer_index = 3;
fifo_read_buffer(&camera_receiver_fifo, uart_buffer, &uart_buffer_index, FIFO_READ_AND_CLEAN);
temp = uart_buffer[1] << 8 | uart_buffer[2];
break;
}
system_delay_ms(1);
}while(SCC8660_INIT_TIMEOUT > timeout_count ++);
if((temp != data) || (SCC8660_INIT_TIMEOUT <= timeout_count))
{
return_state = 1;
}
}
else
{
return_state = scc8660_set_manual_wb_sccb(data);
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ڲ<EFBFBD><DAB2>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> addr <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>ڲ<EFBFBD><DAB2>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-ʧ<><CAA7> 0-<2D>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> scc8660_set_reg(addr, data);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD>øú<C3B8><C3BA><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ȳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
uint8 scc8660_set_reg (uint8 addr, uint16 data)
{
uint8 return_state = 0;
if(SCC8660_UART == scc8660_type)
{
uint8 uart_buffer[4];
uint16 temp;
uint16 timeout_count = 0;
uint32 uart_buffer_index = 0;
uart_buffer[0] = 0xA5;
uart_buffer[1] = SCC8660_SET_REG_ADDR;
uart_buffer[2] = 0x00;
uart_buffer[3] = (uint8)addr;
uart_write_buffer(SCC8660_COF_UART, uart_buffer, 4);
system_delay_ms(10);
uart_buffer[0] = 0xA5;
uart_buffer[1] = SCC8660_SET_REG_DATA;
temp = data;
uart_buffer[2] = temp >> 8;
uart_buffer[3] = (uint8)temp;
uart_write_buffer(SCC8660_COF_UART, uart_buffer, 4);
do
{
if(3 <= fifo_used(&camera_receiver_fifo))
{
uart_buffer_index = 3;
fifo_read_buffer(&camera_receiver_fifo, uart_buffer, &uart_buffer_index, FIFO_READ_AND_CLEAN);
temp = uart_buffer[1] << 8 | uart_buffer[2];
break;
}
system_delay_ms(1);
}while(SCC8660_INIT_TIMEOUT > timeout_count ++);
if((temp != data) || (SCC8660_INIT_TIMEOUT <= timeout_count))
{
return_state = 1;
}
}
else
{
return_state = scc8660_set_reg_sccb(addr, data);
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SCC8660<36><30><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ж<EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> scc8660_vsync_handler();
//-------------------------------------------------------------------------------------------------------------------
static void scc8660_vsync_handler(void)
{
exti_flag_clear(SCC8660_VSYNC_PIN);
scc8660_dma_int_num = 0;
if(scc8660_dma_init_flag || scc8660_lost_flag)
{
scc8660_dma_init_flag = 0;
IfxDma_resetChannel(&MODULE_DMA, SCC8660_DMA_CH);
scc8660_link_list_num = dma_init(SCC8660_DMA_CH,
SCC8660_DATA_ADD,
(uint8 *)scc8660_image[0],
SCC8660_PCLK_PIN,
EXTI_TRIGGER_RISING,
SCC8660_IMAGE_SIZE);
dma_enable(SCC8660_DMA_CH);
}
else
{
if(1 == scc8660_link_list_num)
{
dma_set_destination(SCC8660_DMA_CH, (uint8 *)scc8660_image[0]); // û<>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>ĵ<EFBFBD>ַ
}
dma_enable(SCC8660_DMA_CH);
}
scc8660_lost_flag = 1;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SCC8660<36><30><EFBFBD><EFBFBD>ͷDMA<4D><41><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> scc8660_dma_handler();
//-------------------------------------------------------------------------------------------------------------------
static void scc8660_dma_handler(void)
{
clear_dma_flag(SCC8660_DMA_CH);
if(IfxDma_getChannelTransactionRequestLost(&MODULE_DMA, SCC8660_DMA_CH)) // ͼ<><CDBC><EFBFBD><EFBFBD>λ<EFBFBD>ж<EFBFBD>
{
scc8660_finish_flag = 0;
dma_disable(SCC8660_DMA_CH);
IfxDma_clearChannelTransactionRequestLost(&MODULE_DMA, SCC8660_DMA_CH);
scc8660_dma_init_flag = 1;
}
else
{
scc8660_dma_int_num++;
if(scc8660_dma_int_num >= scc8660_link_list_num)
{
// <20>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
// һ<><D2BB>ͼ<EFBFBD><CDBC><EFBFBD>Ӳɼ<D3B2><C9BC><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ3.8MS<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(50FPS<50><53>188*120<32>ֱ<EFBFBD><D6B1><EFBFBD>)
scc8660_dma_int_num = 0;
scc8660_lost_flag = 0;
scc8660_finish_flag = 1;
dma_disable(SCC8660_DMA_CH);
}
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SCC8660 <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 1-ʧ<><CAA7> 0-<2D>ɹ<EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> scc8660_init();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 scc8660_init (void)
{
uint8 return_state = 0;
soft_iic_info_struct scc8660_iic_struct;
// <20><>ʼ<EFBFBD><CABC>֮ǰ<D6AE><C7B0><EFBFBD>߳<EFBFBD><DFB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
gpio_init(P02_0, GPO, GPIO_HIGH, GPO_PUSH_PULL);
gpio_init(P02_1, GPO, GPIO_HIGH, GPO_PUSH_PULL);
do
{
system_delay_ms(200);
set_camera_type(CAMERA_COLOR, scc8660_vsync_handler, scc8660_dma_handler, NULL); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
// <20><><EFBFBD>ȳ<EFBFBD><C8B3><EFBFBD>SCCBͨѶ
scc8660_type = SCC8660_SCCB;
soft_iic_init(&scc8660_iic_struct, 0, SCC8660_COF_IIC_DELAY, SCC8660_COF_IIC_SCL, SCC8660_COF_IIC_SDA);
if(scc8660_set_config_sccb(&scc8660_iic_struct, scc8660_set_confing_buffer))
{
// SCCBͨѶʧ<D1B6>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ͨѶ
scc8660_type = SCC8660_UART;
camera_fifo_init();
set_camera_type(CAMERA_COLOR, scc8660_vsync_handler, scc8660_dma_handler, &scc8660_uart_callback); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
uart_init (SCC8660_COF_UART, SCC8660_COF_BAUR, SCC8660_COF_UART_RX, SCC8660_COF_UART_TX); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
uart_rx_interrupt(SCC8660_COF_UART, 1);
fifo_clear(&camera_receiver_fifo);
if(scc8660_set_config(scc8660_set_confing_buffer))
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>ͨ<EFBFBD>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܾ<EFBFBD><DCBE>ǻ<EFBFBD><C7BB><EFBFBD>
zf_log(0, "SCC8660 set config error.");
set_camera_type(NO_CAMERE, NULL, NULL, NULL);
return_state = 1;
break;
}
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ñ<EFBFBD><C3B1>ڲ鿴<DAB2><E9BFB4><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
if(scc8660_get_config(scc8660_get_confing_buffer))
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ô<EFBFBD><C3B4><EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD>ͨ<EFBFBD>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD>
// <20><><EFBFBD><EFBFBD>һ<EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܾ<EFBFBD><DCBE>ǻ<EFBFBD><C7BB><EFBFBD>
zf_log(0, "SCC8660 get config error.");
set_camera_type(NO_CAMERE, NULL, NULL, NULL);
return_state = 1;
break;
}
}
scc8660_link_list_num = camera_init(SCC8660_DATA_ADD, (uint8 *)scc8660_image[0], SCC8660_IMAGE_SIZE);
}while(0);
return return_state;
}

View File

@@ -0,0 +1,143 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_scc8660
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2024-02-02 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MCU<43><55>ͫ<EFBFBD><CDAB><EFBFBD><EFBFBD>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* TXD <20>鿴 zf_device_scc8660.h <20><> SCC8660_COF_UART_TX <20><EFBFBD><EAB6A8>
* RXD <20>鿴 zf_device_scc8660.h <20><> SCC8660_COF_UART_RX <20><EFBFBD><EAB6A8>
* PCLK <20>鿴 zf_device_scc8660.h <20><> SCC8660_PCLK_PIN <20><EFBFBD><EAB6A8>
* VSY <20>鿴 zf_device_scc8660.h <20><> SCC8660_VSYNC_PIN <20><EFBFBD><EAB6A8>
* D0-D7 <20>鿴 zf_device_scc8660.h <20><> SCC8660_DATA_PIN <20><EFBFBD><EAB6A8> <20>Ӹö<D3B8><C3B6>ʼ<E5BFAA><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
********************************************************************************************************************/
#ifndef _zf_device_scc8660_h_
#define _zf_device_scc8660_h_
#include "zf_device_type.h"
//================================================<3D><><EFBFBD><EFBFBD> SCC8660 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#define SCC8660_COF_UART (UART_1) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʹ<EFBFBD>õ<EFBFBD><C3B5>Ĵ<EFBFBD><C4B4><EFBFBD>
#define SCC8660_COF_BAUR (9600 ) // <20><>ͫ <20><><EFBFBD>ô<EFBFBD><C3B4>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
#define SCC8660_COF_UART_TX (UART1_RX_P02_3) // <20><>ͫ UART-TX <20><><EFBFBD><EFBFBD> Ҫ<><D2AA><EFBFBD>ڵ<EFBFBD>Ƭ<EFBFBD><C6AC> RX <20><>
#define SCC8660_COF_UART_RX (UART1_TX_P02_2) // <20><>ͫ UART-RX <20><><EFBFBD><EFBFBD> Ҫ<><D2AA><EFBFBD>ڵ<EFBFBD>Ƭ<EFBFBD><C6AC> TX <20><>
#define SCC8660_COF_IIC_DELAY (800) // <20><>ͫ IIC <20><>ʱ
#define SCC8660_COF_IIC_SCL (P02_3) // <20><>ͫ IIC-SCL <20><><EFBFBD><EFBFBD>
#define SCC8660_COF_IIC_SDA (P02_2) // <20><>ͫ IIC-SDA <20><><EFBFBD><EFBFBD>
#define SCC8660_DMA_CH (IfxDma_ChannelId_5)
#define SCC8660_PCLK_PIN (ERU_CH2_REQ14_P02_1) // PCLK <20><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD> TIM_ETR <20><><EFBFBD>Ž<EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
#define SCC8660_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // <20><><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
#define SCC8660_DATA_PIN (P00_0) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֻ<><D6BB><EFBFBD><EFBFBD> GPIOx0 <20><><EFBFBD><EFBFBD> GPIOx8 <20><>ʼ <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> F0-F7
#define SCC8660_DATA_ADD (get_port_in_addr(SCC8660_DATA_PIN))
#define SCC8660_INIT_TIMEOUT (0x00F0) // Ĭ<>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1> <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ
//================================================<3D><><EFBFBD><EFBFBD> SCC8660 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//================================================<3D><><EFBFBD><EFBFBD> SCC8660 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD>֧<EFBFBD><D6A7><EFBFBD><EFBFBD>ͫ<EFBFBD><CDAB>֡<EFBFBD>ʰ汾<CAB0><E6B1BE>===========================
#define SCC8660_W (160) // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>160 80 40
#define SCC8660_H (120) // ͼ<><CDBC><EFBFBD>߶<EFBFBD> <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>120 160 240
#define SCC8660_IMAGE_SIZE (SCC8660_W * 2 * SCC8660_H) // <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>С SCC8660_W*2*SCC8660_H <20><><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD> 65535
#define SCC8660_AUTO_EXP_DEF (0 ) // <20>Զ<EFBFBD><D4B6>ع<EFBFBD> Ĭ<>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD> <20><>Χ [0-1] 0Ϊ<30>ر<EFBFBD>
#define SCC8660_BRIGHT_DEF (500) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֶ<EFBFBD><D6B6>ع<EFBFBD>Ĭ<EFBFBD>ϣ<EFBFBD>300 <20>ֶ<EFBFBD><D6B6>ع<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ0-65535 <20>Զ<EFBFBD><D4B6>ع<EFBFBD><D8B9>Ƽ<EFBFBD>ֵ<EFBFBD><D6B5>100 <20>Զ<EFBFBD><D4B6>ع<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD>Χ0-255
#define SCC8660_FPS_DEF (60 ) // ͼ<><CDBC>֡<EFBFBD><D6A1> Ĭ<>ϣ<EFBFBD>50 <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>60 50 30 25<32><35> ʵ<><CAB5>֡<EFBFBD>ʻ<EFBFBD><CABB><EFBFBD>Ҫ<EFBFBD><D2AA>SCC8660_PCLK_DIV<49><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SCC8660_PCLK_DIV_DEF (2 ) // PCLK<4C><4B>Ƶϵ<C6B5><CFB5> Ĭ<>ϣ<EFBFBD>5 <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><0:1/1> <1:2/3> <2:1/2> <3:1/3> <4:1/4> <5:1/8>
// <20><>Ƶϵ<C6B5><CFB5>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>PCLKƵ<4B><C6B5>Խ<EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>PCLK<4C><4B><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>DVP<56>ӿڵĸ<DAB5><C4B8>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PCLKƵ<4B><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0>֡<EFBFBD>ʡ<EFBFBD><CAA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB1A3>Ĭ<EFBFBD>ϡ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FPSΪ50֡<30><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pclk<6C><6B>Ƶϵ<C6B5><CFB5>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ϊ5<CEAA><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>Ϊ50*<2A><>1/8<><38>=6.25֡
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>SCC8660_PCLK_DIV<49><56><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
#define SCC8660_PCLK_MODE_DEF (0 ) // PCLKģʽ Ĭ<>ϣ<EFBFBD>0 <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>[0,1] 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD> 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>STM32<33><32>DCMI<4D>ӿڲɼ<DAB2><C9BC><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>Ϊ1>
#define SCC8660_COLOR_MODE_DEF (0 ) // ͼ<><CDBC>ɫ<EFBFBD><C9AB>ģʽ Ĭ<>ϣ<EFBFBD>0 <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>[0,1] 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫģʽ 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ɫ<EFBFBD>ʱ<EFBFBD><CAB1>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD>ߣ<EFBFBD>
#define SCC8660_DATA_FORMAT_DEF (0 ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ʽ Ĭ<>ϣ<EFBFBD>0 <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>[0-3] 0<><30>RGB565 1<><31>RGB565(<28>ֽڽ<D6BD><DABD><EFBFBD>) 2<><32>YUV422(YUYV) 3<><33>YUV422(UYVY)
#define SCC8660_MANUAL_WB_DEF (0 ) // <20>ֶ<EFBFBD><D6B6><EFBFBD>ƽ<EFBFBD><C6BD> Ĭ<>ϣ<EFBFBD>0 <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>[0,0x65-0xa0] 0<><30><EFBFBD>ر<EFBFBD><D8B1>ֶ<EFBFBD><D6B6><EFBFBD>ƽ<EFBFBD><EFBFBD><E2A3AC><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>ƽ<EFBFBD><C6BD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD>ƽ<EFBFBD><C6BD> <20>ֶ<EFBFBD><D6B6><EFBFBD>ƽ<EFBFBD><C6BD>ʱ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ0x65-0xa0
//================================================<3D><><EFBFBD><EFBFBD> SCC8660 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD>֧<EFBFBD><D6A7><EFBFBD><EFBFBD>ͫ<EFBFBD><CDAB>֡<EFBFBD>ʰ汾<CAB0><E6B1BE>===========================
//===============================================<3D><><EFBFBD><EFBFBD> SCC8660 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>================================================
typedef enum
{
SCC8660_INIT = 0x00, // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SCC8660_AUTO_EXP, // <20>Զ<EFBFBD><D4B6>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD>
SCC8660_BRIGHT, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SCC8660_FPS, // <20><><EFBFBD><EFBFBD>ͷ֡<CDB7><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SCC8660_SET_COL, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SCC8660_SET_ROW, // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SCC8660_PCLK_DIV, // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
SCC8660_PCLK_MODE, // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>
SCC8660_COLOR_MODE, // ɫ<><C9AB>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>
SCC8660_DATA_FORMAT, // <20><><EFBFBD>ݸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
SCC8660_MANUAL_WB, // <20>ֶ<EFBFBD><D6B6><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SCC8660_CONFIG_FINISH, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ռλ<D5BC><CEBB><EFBFBD><EFBFBD>
SCC8660_GET_WHO_AM_I = 0xEF, // <20><><EFBFBD><EFBFBD>˭<EFBFBD><CBAD><EFBFBD><EFBFBD><EEA3AC><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ͺ<EFBFBD>
SCC8660_SET_BRIGHT = 0xF0, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SCC8660_GET_STATUS = 0XF1, // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SCC8660_GET_VERSION = 0xF2, // <20>̼<EFBFBD><CCBC><EFBFBD><E6B1BE>
SCC8660_SET_MANUAL_WB = 0xF3, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD>ƽ<EFBFBD><C6BD>
SCC8660_SET_REG_ADDR = 0xFE,
SCC8660_SET_REG_DATA = 0xFF,
}scc8660_cmd_enum;
//===============================================<3D><><EFBFBD><EFBFBD> SCC8660 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>================================================
//===============================================<3D><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD>=======================================================
typedef enum
{
SCC8660_UART,
SCC8660_SCCB,
}scc8660_type_enum;
//===============================================<3D><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD>=======================================================
//===============================================<3D><><EFBFBD><EFBFBD> SCC8660 ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>=================================================
extern vuint8 scc8660_finish_flag; // һ<><D2BB>ͼ<EFBFBD><CDBC><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
extern uint16 scc8660_image[SCC8660_H][SCC8660_W]; // ͼ<>񱣴<EFBFBD><F1B1A3B4><EFBFBD><EFBFBD><EFBFBD>
//===============================================<3D><><EFBFBD><EFBFBD> SCC8660 ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>=================================================
//===============================================<3D><><EFBFBD><EFBFBD> SCC8660 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=================================================
uint16 scc8660_get_id (void); // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ͷ ID
uint16 scc8660_get_parameter (uint16 config); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ع<EFBFBD>ʱ<EFBFBD><CAB1>
uint16 scc8660_get_version (void); // <20><>ȡ<EFBFBD><C8A1>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ͷ<EFBFBD>̼<EFBFBD><CCBC>
uint8 scc8660_set_brightness (uint16 data); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 scc8660_set_white_balance (uint16 data); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ð<EFBFBD>ƽ<EFBFBD><C6BD>
uint8 scc8660_set_reg (uint8 addr, uint16 data); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ڲ<EFBFBD><DAB2>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
uint8 scc8660_init (void); // SCC8660 <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC>
//===============================================<3D><><EFBFBD><EFBFBD> SCC8660 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=================================================
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,173 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_tft180
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* SCL <20>鿴 zf_device_tft180.h <20><> TFT180_SCL_PIN <20><EFBFBD><EAB6A8>
* SDA <20>鿴 zf_device_tft180.h <20><> TFT180_SDA_PIN <20><EFBFBD><EAB6A8>
* RES <20>鿴 zf_device_tft180.h <20><> TFT180_RES_PIN <20><EFBFBD><EAB6A8>
* DC <20>鿴 zf_device_tft180.h <20><> TFT180_DC_PIN <20><EFBFBD><EAB6A8>
* CS <20>鿴 zf_device_tft180.h <20><> TFT180_CS_PIN <20><EFBFBD><EAB6A8>
* BL <20>鿴 zf_device_tft180.h <20><> TFT180_BL_PIN <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>160*128
* ------------------------------------
********************************************************************************************************************/
#ifndef _zf_device_tft180_h_
#define _zf_device_tft180_h_
#include "zf_common_typedef.h"
//=================================================<3D><><EFBFBD><EFBFBD> TFT180 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#define TFT180_USE_SOFT_SPI (0) // Ĭ<><C4AC>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2> SPI <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
#if TFT180_USE_SOFT_SPI // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> <20><>ɫ<EFBFBD>ҵľ<D2B5><C4BE><EFBFBD>û<EFBFBD><C3BB><EFBFBD>õ<EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> SPI <20><><EFBFBD><EFBFBD>====================================================
#define TFT180_SOFT_SPI_DELAY (0 ) // <20><><EFBFBD><EFBFBD> SPI <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><>ֵԽС SPI ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
#define TFT180_SCL_PIN (P15_3) // <20><><EFBFBD><EFBFBD> SPI SCK <20><><EFBFBD><EFBFBD>
#define TFT180_SDA_PIN (P15_5) // <20><><EFBFBD><EFBFBD> SPI MOSI <20><><EFBFBD><EFBFBD>
//====================================================<3D><><EFBFBD><EFBFBD> SPI <20><><EFBFBD><EFBFBD>====================================================
#else
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
#define TFT180_SPI_SPEED (60*1000*1000) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
#define TFT180_SPI (SPI_2) // Ӳ<><D3B2> SPI <20><>
#define TFT180_SCL_PIN (SPI2_SCLK_P15_3) // Ӳ<><D3B2> SPI SCK <20><><EFBFBD><EFBFBD>
#define TFT180_SDA_PIN (SPI2_MOSI_P15_5) // Ӳ<><D3B2> SPI MOSI <20><><EFBFBD><EFBFBD>
#define TFT180_SDA_PIN_IN (SPI2_MISO_P15_4) // Ӳ<><D3B2> SPI MISO <20><><EFBFBD><EFBFBD> TFTû<54><C3BB>MISO<53><4F><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><E5A3AC>spi<70>ij<EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1>Ҫʹ<D2AA><CAB9>
//====================================================Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>====================================================
#endif
#define TFT180_RES_PIN (P15_1) // Һ<><D2BA><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
#define TFT180_DC_PIN (P15_0) // Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
#define TFT180_CS_PIN (P15_2) // CS Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
#define TFT180_BL_PIN (P15_4) // Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
#define TFT180_DEFAULT_DISPLAY_DIR (TFT180_PORTAIT) // Ĭ<>ϵ<EFBFBD><CFB5><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
#define TFT180_DEFAULT_PENCOLOR (RGB565_RED) // Ĭ<>ϵĻ<CFB5><C4BB><EFBFBD><EFBFBD><EFBFBD>ɫ
#define TFT180_DEFAULT_BGCOLOR (RGB565_WHITE) // Ĭ<>ϵı<CFB5><C4B1><EFBFBD><EFBFBD><EFBFBD>ɫ
#define TFT180_DEFAULT_DISPLAY_FONT (TFT180_8X16_FONT) // Ĭ<>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ģʽ
#define TFT180_DC(x) ((x) ? (gpio_high(TFT180_DC_PIN)) : (gpio_low(TFT180_DC_PIN)))
#define TFT180_RST(x) ((x) ? (gpio_high(TFT180_RES_PIN)) : (gpio_low(TFT180_RES_PIN)))
#define TFT180_CS(x) ((x) ? (gpio_high(TFT180_CS_PIN)) : (gpio_low(TFT180_CS_PIN)))
#define TFT180_BLK(x) ((x) ? (gpio_high(TFT180_BL_PIN)) : (gpio_low(TFT180_BL_PIN)))
//=================================================<3D><><EFBFBD><EFBFBD> TFT180 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//=================================================<3D><><EFBFBD><EFBFBD> TFT180 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>===============================================
typedef enum
{
TFT180_PORTAIT = 0, // <20><><EFBFBD><EFBFBD>ģʽ
TFT180_PORTAIT_180 = 1, // <20><><EFBFBD><EFBFBD>ģʽ <20><>ת180
TFT180_CROSSWISE = 2, // <20><><EFBFBD><EFBFBD>ģʽ
TFT180_CROSSWISE_180 = 3, // <20><><EFBFBD><EFBFBD>ģʽ <20><>ת180
}tft180_dir_enum;
typedef enum
{
TFT180_6X8_FONT = 0, // 6x8 <20><><EFBFBD><EFBFBD>
TFT180_8X16_FONT = 1, // 8x16 <20><><EFBFBD><EFBFBD>
TFT180_16X16_FONT = 2, // 16x16 <20><><EFBFBD><EFBFBD> Ŀǰ<C4BF><C7B0>֧<EFBFBD><D6A7>
}tft180_font_size_enum;
extern uint16 tft180_width_max ;
extern uint16 tft180_height_max;
//=================================================<3D><><EFBFBD><EFBFBD> TFT180 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>===============================================
//=================================================<3D><><EFBFBD><EFBFBD> TFT180 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
void tft180_clear (void); // TFT180 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void tft180_full (const uint16 color); // TFT180 <20><>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><E4BAAF>
void tft180_set_dir (tft180_dir_enum dir); // TFT180 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
void tft180_set_font (tft180_font_size_enum font); // TFT180 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
void tft180_set_color (const uint16 pen, const uint16 bgcolor); // TFT180 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ɫ
void tft180_draw_point (uint16 x, uint16 y, const uint16 color); // TFT180 <20><><EFBFBD><EFBFBD><E3BAAF>
void tft180_draw_line (uint16 x_start, uint16 y_start, uint16 x_end, uint16 y_end, const uint16 color); // TFT180 <20><><EFBFBD>ߺ<EFBFBD><DFBA><EFBFBD>
void tft180_show_char (uint16 x, uint16 y, const char dat); // TFT180 <20><>ʾ<EFBFBD>ַ<EFBFBD>
void tft180_show_string (uint16 x, uint16 y, const char dat[]); // TFT180 <20><>ʾ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
void tft180_show_int (uint16 x,uint16 y, const int32 dat, uint8 num); // TFT180 <20><>ʾ32λ<32>з<EFBFBD><D0B7><EFBFBD><><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>0)
void tft180_show_uint (uint16 x,uint16 y, const uint32 dat, uint8 num); // TFT180 <20><>ʾ32λ<32>޷<EFBFBD><DEB7><EFBFBD><><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>0)
void tft180_show_float (uint16 x, uint16 y, const double dat, uint8 num, uint8 pointnum);
void tft180_show_binary_image (uint16 x, uint16 y, const uint8 *image, uint16 width, uint16 height, uint16 dis_width, uint16 dis_height); // TFT180 <20><>ʾ<EFBFBD><CABE>ֵͼ<D6B5><CDBC> <20><><EFBFBD><EFBFBD>ÿ<EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
void tft180_show_gray_image (uint16 x, uint16 y, const uint8 *image, uint16 width, uint16 height, uint16 dis_width, uint16 dis_height, uint8 threshold); // TFT180 <20><>ʾ 8bit <20>Ҷ<EFBFBD>ͼ<EFBFBD><CDBC> <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ֵ
void tft180_show_rgb565_image (uint16 x, uint16 y, const uint16 *image, uint16 width, uint16 height, uint16 dis_width, uint16 dis_height, uint8 color_mode); // TFT180 <20><>ʾ RGB565 <20><>ɫͼ<C9AB><CDBC>
void tft180_show_wave (uint16 x, uint16 y, const uint16 *wave, uint16 width, uint16 value_max, uint16 dis_width, uint16 dis_value_max); // TFT180 <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
void tft180_show_chinese (uint16 x, uint16 y, uint8 size, const uint8 *chinese_buffer, uint8 number, const uint16 color); // TFT180 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
// 1.8<EFBFBD><EFBFBD>TFT<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
void tft180_init (void);
//=================================================<3D><><EFBFBD><EFBFBD> TFT180 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//=================================================<3D><><EFBFBD><EFBFBD> TFT180 <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>================================================
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TFT180 <20><>ʾС<CABE><D0A1><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> p ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> width ͼ<><CDBC>ʵ<EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> height ͼ<><CDBC>ʵ<EFBFBD>ʸ߶<CAB8>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> tft180_displayimage7725(ov7725_image_binary[0], OV7725_W, OV7725_H);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>չ<EFBFBD><D5B9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ʼ<E3BFAA><CABC>ʾ
//-------------------------------------------------------------------------------------------------------------------
#define tft180_displayimage7725(p, width, height) (tft180_show_binary_image(0, 0, (p), OV7725_W, OV7725_H, (width), (height)))
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TFT180 <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> p ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> width ͼ<><CDBC>ʵ<EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> height ͼ<><CDBC>ʵ<EFBFBD>ʸ߶<CAB8>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> tft180_displayimage03x(mt9v03x_image[0], MT9V03X_W, MT9V03X_H);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>չ<EFBFBD><D5B9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ʼ<E3BFAA><CABC>ʾ
//-------------------------------------------------------------------------------------------------------------------
#define tft180_displayimage03x(p, width, height) (tft180_show_gray_image(0, 0, (p), MT9V03X_W, MT9V03X_H, (width), (height), 0))
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TFT180 <20><>ʾ<EFBFBD><CABE>ͫͼ<CDAB><CDBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> p ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> width ͼ<><CDBC>ʵ<EFBFBD>ʿ<EFBFBD><CABF><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> height ͼ<><CDBC>ʵ<EFBFBD>ʸ߶<CAB8>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> tft180_displayimage8660(scc8660_image[0], SCC8660_W, SCC8660_H);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>չ<EFBFBD><D5B9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ʼ<E3BFAA><CABC>ʾ
//-------------------------------------------------------------------------------------------------------------------
#define tft180_displayimage8660(p, width, height) (tft180_show_rgb565_image(0, 0, (p), SCC8660_W, SCC8660_H, (width), (height), 1))
//=================================================<3D><><EFBFBD><EFBFBD> TFT180 <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>================================================
#endif

View File

@@ -0,0 +1,134 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_tsl1401
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* CLK <20>鿴 zf_device_tsl1401.h <20><> TSL1401_CLK_PIN <20><EFBFBD><EAB6A8>
* SI <20>鿴 zf_device_tsl1401.h <20><> TSL1401_SI_PIN <20><EFBFBD><EAB6A8>
* AO[x] <20>鿴 zf_device_tsl1401.h <20><> TSL1401_AO_PIN_BUFFER <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* ------------------------------------
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "zf_driver_adc.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
#include "zf_driver_pit.h"
#include "zf_driver_uart.h"
#include "zf_device_tsl1401.h"
uint16 tsl1401_data[2][TSL1401_DATA_LEN]; // TSL1401 <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static uint8 tsl1401_init_state = 0; // TSL1401 <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>־λ
vuint8 tsl1401_finish_flag; // TSL1401 <20><><EFBFBD><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TSL1401 <20><><EFBFBD><EFBFBD> CCD <20><><EFBFBD>ݲɼ<DDB2>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> tsl1401_collect_pit_handler();
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD> isr.c <20>ж<EFBFBD>Ӧ TSL1401_PIT_INDEX <20><><EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void tsl1401_collect_pit_handler (void)
{
if(!tsl1401_init_state) return;
uint8 i = 0;
TSL1401_CLK(1);
TSL1401_SI (0);
TSL1401_CLK(0);
TSL1401_SI (1);
TSL1401_CLK(1);
TSL1401_SI (0);
for(i = 0; i < TSL1401_DATA_LEN; i ++)
{
TSL1401_CLK(0);
tsl1401_data[0][i] = adc_convert(TSL1401_AO_PIN);
tsl1401_data[1][i] = adc_convert(TSL1401_AO_PIN1);
TSL1401_CLK(1);
}
tsl1401_finish_flag = 1; // <20>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ<D6BE><CEBB>1
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TSL1401 <20><><EFBFBD><EFBFBD> CCD ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>鿴ͼ<E9BFB4><CDBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> uart_n <20><><EFBFBD>ں<EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> index <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD> TSL1401 [0-1]
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> tsl1401_send_data(DEBUG_UART_INDEX, 1);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD>øú<C3B8><C3BA><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ȳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void tsl1401_send_data (uart_index_enum uart_n, uint8 index)
{
uint8 i;
uart_write_byte(uart_n, 0x00);
uart_write_byte(uart_n, 0xff);
uart_write_byte(uart_n, 0x01);
uart_write_byte(uart_n, 0x00);
for(i=0; i<TSL1401_DATA_LEN; i++)
{
switch(TSL1401_AD_RESOLUTION)
{
case ADC_8BIT: uart_write_byte(uart_n, (uint8)(tsl1401_data[index][i])); break;
case ADC_10BIT: uart_write_byte(uart_n, (uint8)(tsl1401_data[index][i] >> 2)); break;
case ADC_12BIT: uart_write_byte(uart_n, (uint8)(tsl1401_data[index][i] >> 4)); break;
}
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TSL1401 <20><><EFBFBD><EFBFBD> CCD <20><>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> tsl1401_init();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void tsl1401_init (void)
{
adc_init(TSL1401_AO_PIN, TSL1401_AD_RESOLUTION);
adc_init(TSL1401_AO_PIN1, TSL1401_AD_RESOLUTION);
gpio_init(TSL1401_CLK_PIN, GPO, GPIO_LOW, GPO_PUSH_PULL);
gpio_init(TSL1401_SI_PIN, GPO, GPIO_LOW, GPO_PUSH_PULL);
pit_ms_init(TSL1401_PIT_INDEX, TSL1401_EXPOSURE_TIME);
tsl1401_init_state = 1;
}

View File

@@ -0,0 +1,83 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_tsl1401
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* CLK <20>鿴 zf_device_tsl1401.h <20><> TSL1401_CLK_PIN <20><EFBFBD><EAB6A8>
* SI <20>鿴 zf_device_tsl1401.h <20><> TSL1401_SI_PIN <20><EFBFBD><EAB6A8>
* AO[x] <20>鿴 zf_device_tsl1401.h <20><> TSL1401_AO_PIN_BUFFER <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* ------------------------------------
********************************************************************************************************************/
#ifndef _zf_device_tsl1401_h_
#define _zf_device_tsl1401_h_
#include "zf_device_type.h"
//=================================================<3D><><EFBFBD><EFBFBD> TSL1401 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#define TSL1401_AO_PIN (ADC0_CH4_A4) // <20><>Ӧ<EFBFBD><D3A6>һ<EFBFBD><D2BB> TSL1401 <20><> AO <20><><EFBFBD><EFBFBD>
#define TSL1401_AO_PIN1 (ADC0_CH5_A5) // <20><>Ӧ<EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD> TSL1401 <20><> AO <20><><EFBFBD><EFBFBD>
// TSL1401 <20>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD> <20><><EFBFBD><EFBFBD> TSL1401 <20><><EFBFBD><EFBFBD><E9BDAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>
#define TSL1401_CLK_PIN (P00_0) // TSL1401 <20><> CLK <20><><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
#define TSL1401_SI_PIN (P00_1) // TSL1401 <20><> SI <20><><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
#define TSL1401_CLK(x) ((x) ? (gpio_high(TSL1401_CLK_PIN)) : (gpio_low(TSL1401_CLK_PIN)))
#define TSL1401_SI(x) ((x) ? (gpio_high(TSL1401_SI_PIN)) : (gpio_low(TSL1401_SI_PIN)))
// TSL1401 <20><><EFBFBD><EFBFBD><EFBFBD>ڲɼ<DAB2><C9BC><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD> ʹ<>õ<EFBFBD><C3B5>ĸ<EFBFBD> PIT <20><>Ҫ<EFBFBD><D2AA> <20><><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD> PIT <20><><EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define TSL1401_EXPOSURE_TIME (10 ) // <20><><EFBFBD><EFBFBD> TSL1401 <20>ع<EFBFBD>ʱ<EFBFBD><CAB1> <20><>λ MS
#define TSL1401_PIT_INDEX (CCU61_CH1) // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
#define TSL1401_AD_RESOLUTION (ADC_8BIT) // ADC <20><><EFBFBD><EFBFBD> 8bit
#define TSL1401_DATA_LEN (128 ) // TSL1401 <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
//=================================================<3D><><EFBFBD><EFBFBD> TSL1401 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
//=================================================<3D><><EFBFBD><EFBFBD> TSL1401 ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>=================================================
extern uint16 tsl1401_data[2][TSL1401_DATA_LEN]; // TSL1401 <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
extern vuint8 tsl1401_finish_flag; // TSL1401 <20><><EFBFBD>ݲɼ<DDB2><C9BC><EFBFBD><EFBFBD>ɱ<EFBFBD>־
//=================================================<3D><><EFBFBD><EFBFBD> TSL1401 ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>=================================================
//=================================================<3D><><EFBFBD><EFBFBD> TSL1401 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=================================================
void tsl1401_collect_pit_handler (void); // TSL1401 <20><><EFBFBD><EFBFBD> CCD <20><><EFBFBD>ݲɼ<DDB2>
void tsl1401_send_data (uart_index_enum uart_n, uint8 index); // TSL1401 <20><><EFBFBD><EFBFBD> CCD ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>鿴ͼ<E9BFB4><CDBC>
void tsl1401_init (void); // TSL1401 <20><><EFBFBD><EFBFBD> CCD <20><>ʼ<EFBFBD><CABC>
//=================================================<3D><><EFBFBD><EFBFBD> TSL1401 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=================================================
#endif

View File

@@ -0,0 +1,109 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_type
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-05-26 pudding <20><><EFBFBD><EFBFBD>SPI WIFI <20>жϻص<CFBB>ָ<EFBFBD><D6B8>
* 2024-01-16 pudding <20>Ƴ<EFBFBD>SPI WIFI <20>жϻص<CFBB>ָ<EFBFBD><D6B8> SPI WIFI<46><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ⲿ
********************************************************************************************************************/
#include "zf_device_type.h"
static void type_default_callback(void);
camera_type_enum camera_type = NO_CAMERE; // <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>
callback_function camera_uart_handler = type_default_callback; // <20><><EFBFBD><EFBFBD>ͨѶ<CDA8>жϺ<D0B6><CFBA><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD>ݳ<EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD>õĺ<C3B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
callback_function camera_vsync_handler = type_default_callback; // <20><><EFBFBD>жϺ<D0B6><CFBA><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD>ݳ<EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD>õĺ<C3B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
callback_function camera_dma_handler = type_default_callback; // DMA<4D><41><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD>ݳ<EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD>õĺ<C3B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
wireless_type_enum wireless_type = NO_WIRELESS;
callback_function wireless_module_uart_handler = type_default_callback; // <20><><EFBFBD>ߴ<EFBFBD><DFB4>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD>ݳ<EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD>õĺ<C3B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
tof_type_enum tof_type = NO_TOF;
callback_function tof_module_exti_handler = type_default_callback; // ToF ģ<><C4A3> INT <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ĭ<>ϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ֹ<EFBFBD><D6B9>û<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><E8B1B8>ʱ<EFBFBD><CAB1><EFBFBD>ܷ<EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void type_default_callback (void)
{
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> type_set ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> vsync_callback <20><EFBFBD>ij<EFBFBD><C4B3>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> dma_callback <20><EFBFBD><E8B1B8> DMA <20><><EFBFBD><EFBFBD><EFBFBD>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> uart_callback <20><EFBFBD>Ĵ<EFBFBD><C4B4>ڻص<DABB><D8B5><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> set_camera_type(CAMERA_GRAYSCALE);
// <20><>ע<EFBFBD><D7A2>Ϣ һ<><D2BB><EFBFBD>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void set_camera_type (camera_type_enum type_set, callback_function vsync_callback, callback_function dma_callback, callback_function uart_callback)
{
camera_type = type_set;
camera_uart_handler = ((uart_callback == NULL) ? (type_default_callback) : (uart_callback));
camera_vsync_handler = ((vsync_callback == NULL) ? (type_default_callback) : (vsync_callback));
camera_dma_handler = ((dma_callback == NULL) ? (type_default_callback) : (dma_callback));
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> type_set ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> uart_callback <20><EFBFBD>Ĵ<EFBFBD><C4B4>ڻص<DABB><D8B5><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> set_wireless_type(WIRELESS_UART, uart_callback);
// <20><>ע<EFBFBD><D7A2>Ϣ һ<><D2BB><EFBFBD>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void set_wireless_type (wireless_type_enum type_set, callback_function wireless_callback)
{
wireless_type = type_set;
wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ToF ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> type_set ѡ<><D1A1><EFBFBD><EFBFBD> ToF ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> exti_callback <20><EFBFBD><E8B1B8><EFBFBD>ⲿ<EFBFBD>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> set_tof_type(TOF_DL1A, dl1a_int_handler);
// <20><>ע<EFBFBD><D7A2>Ϣ һ<><D2BB><EFBFBD>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ʼ<EFBFBD><CABC><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void set_tof_type (tof_type_enum type_set, callback_function exti_callback)
{
tof_type = type_set;
tof_module_exti_handler = ((exti_callback == NULL) ? (type_default_callback) : (exti_callback));
}

View File

@@ -0,0 +1,95 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_type
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
* 2023-05-26 pudding <20><><EFBFBD><EFBFBD>SPI WIFI <20>жϻص<CFBB>ָ<EFBFBD><D6B8>
********************************************************************************************************************/
#ifndef _zf_device_type_h_
#define _zf_device_type_h_
#include "zf_common_debug.h"
//==============================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>==================================================
typedef enum
{
NO_CAMERE = 0, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
CAMERA_BIN_IIC, // С<><D0A1><EFBFBD><EFBFBD> IIC <20>
CAMERA_BIN_UART, // С<><D0A1><EFBFBD><EFBFBD> UART <20>
CAMERA_GRAYSCALE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CAMERA_COLOR, // <20><>ͫ
}camera_type_enum;
typedef enum
{
NO_WIRELESS = 0, // <20><><EFBFBD>
WIRELESS_UART, // <20><><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD>
BLE6A20, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BLUETOOTH_CH9141, // <20><><EFBFBD><EFBFBD> CH9141
WIFI_UART, // <20><><EFBFBD><EFBFBD> WiFi
RECEIVER_UART, // ǹʽң<CABD><D2A3><EFBFBD><EFBFBD>
}wireless_type_enum;
typedef enum
{
NO_TOF = 0, // <20><><EFBFBD>
TOF_DL1A, // DL1A
TOF_DL1B, // DL1B
}tof_type_enum;
//==============================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>==================================================
//===========================================<3D><><EFBFBD><EFBFBD> <20>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBBCB0><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>==============================================
typedef void (*callback_function)(void);
extern wireless_type_enum wireless_type;
extern callback_function wireless_module_uart_handler; // <20><><EFBFBD>ߴ<EFBFBD><DFB4>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD>ݳ<EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD>õĺ<C3B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
extern camera_type_enum camera_type;
extern callback_function camera_dma_handler; // <20><><EFBFBD><EFBFBD>ͨѶ<CDA8>жϺ<D0B6><CFBA><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD>ݳ<EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD>õĺ<C3B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
extern callback_function camera_vsync_handler; // <20><><EFBFBD><EFBFBD>ͨѶ<CDA8>жϺ<D0B6><CFBA><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD>ݳ<EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD>õĺ<C3B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
extern callback_function camera_uart_handler; // <20><><EFBFBD><EFBFBD>ͨѶ<CDA8>жϺ<D0B6><CFBA><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD>ݳ<EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD>õĺ<C3B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
extern callback_function wireless_module_spi_handler; // WIFI SPI GPIO<49>жϺ<D0B6><CFBA><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD>ݳ<EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD>õĺ<C3B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
extern tof_type_enum tof_type; // ToF ģ<><C4A3> <20><><EFBFBD><EFBFBD>
extern callback_function tof_module_exti_handler; // ToF ģ<><C4A3> INT <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
//===========================================<3D><><EFBFBD><EFBFBD> <20>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBBCB0><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>==============================================
//=============================================<3D><><EFBFBD><EFBFBD> <20>жϻص<CFBB> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
void set_camera_type (camera_type_enum type_set, callback_function vsync_callback, callback_function dma_callback, callback_function uart_callback);
void set_wireless_type (wireless_type_enum type_set, callback_function wireless_callback);
void set_tof_type (tof_type_enum type_set, callback_function exti_callback);
//=============================================<3D><><EFBFBD><EFBFBD> <20>жϻص<CFBB> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>================================================
#endif

View File

@@ -0,0 +1,135 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_uart_receiver
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-11-04 JKS first version
* 2025-02-07 pudding <20>޸IJ<DEB8><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* TXD <20>鿴 zf_device_uart_receiver.h <20><> UART_RECEVIER_RX_PIN <20><EFBFBD><EAB6A8>
* GND <20><>Դ<EFBFBD><D4B4>
* 5V 5V<35><56>Դ
* ------------------------------------
********************************************************************************************************************/
#include "zf_device_type.h"
#include "zf_driver_uart.h"
#include "zf_driver_timer.h"
#include "zf_device_uart_receiver.h"
uart_receiver_struct uart_receiver ; // <20><><EFBFBD>ڽ<EFBFBD><DABD>ջ<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
uint8 uart_receiver_data[REV_DATA_LEN] = {0}; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD><C8A1><EFBFBD>ε<EFBFBD><CEB5><EFBFBD>uart_receiver_interval_time<6D><65><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 <20><><EFBFBD>شӿ<D8B4>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ʱ<EFBFBD><CAB1>(<28><>λ1us)
// ʹ<><CAB9>ʾ<EFBFBD><CABE> uint32 time = uart_receiver_interval_time();
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint32 uart_receiver_interval_time (void)
{
static uint32 time_last = 0;
uint32 time, interval_time;
uint32 stm_clk;
stm_clk = IfxStm_getFrequency(IfxStm_getAddress((IfxStm_Index)(IfxCpu_getCoreId())));
time = IfxStm_getLower(IfxStm_getAddress((IfxStm_Index)(IfxCpu_getCoreId())));
interval_time = time - time_last;
time_last = time;
interval_time = (uint32)((uint64)interval_time * 1000000 / stm_clk);
return interval_time;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SBUS<55><53><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *remote_data <20><><EFBFBD><EFBFBD>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĵ<DDB5>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *bufer ԭʼ<D4AD><CABC><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>sbus<75><73><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static void uart_receiver_analysis (uart_receiver_struct *remote_data,uint8 * buffer)
{
uint8 num = 0;
remote_data->channel[num++] = (buffer[1] |buffer[ 2] << 8 ) & 0x07FF;
remote_data->channel[num++] = (buffer[2] >> 3 | buffer[3] << 5 ) & 0x07FF;
remote_data->channel[num++] = (buffer[3] >> 6 | buffer[4] << 2 | buffer[5] << 10 ) & 0x07FF;
remote_data->channel[num++] = (buffer[5] >> 1 | buffer[6] << 7 ) & 0x07FF;
remote_data->channel[num++] = (buffer[6] >> 4 | buffer[7] << 4 ) & 0x07FF;
remote_data->channel[num++] = (buffer[7] >> 7 | buffer[8] << 1 | buffer[9] << 9 ) & 0x07FF;
remote_data->state = (SBUS_ABNORMAL_STATE == (buffer[23] & SBUS_ABNORMAL_STATE)) ? 0 : 1;
uart_receiver.finsh_flag = 1;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڽ<EFBFBD><DABD>ջ<EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> uart_receiver_callback();
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD> ISR <20>ļ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>жϳ<D0B6><CFB3><EFBFBD>ͨ<EFBFBD><CDA8>uart_receiver_uart_handler<65><72><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBB1BB><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void uart_receiver_callback(void)
{
static vuint8 length = 0;
if (uart_receiver_interval_time() > 3000)
{
length = 0;
}
uart_receiver_data[length++] = uart_read_byte(UART_RECEVIER_UART_INDEX);
if ( (REV_DATA_LEN == length) // <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD>֡ͷ<D6A1><CDB7>֡β<D6A1><CEB2><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>
&& (FRAME_STAR == uart_receiver_data[0])
&& (FRAME_END == uart_receiver_data[24]))
{
uart_receiver_analysis(&uart_receiver, uart_receiver_data);
}
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڽ<EFBFBD><DABD>ջ<EFBFBD><D5BB><EFBFBD>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> uart_receiver_init();
//-------------------------------------------------------------------------------------------------------------------
void uart_receiver_init(void)
{
uart_sbus_init(UART_RECEVIER_UART_INDEX, SBUS_UART_BAUDRATE, UART_RECEVIER_TX_PIN, UART_RECEVIER_RX_PIN);
// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
set_wireless_type(RECEIVER_UART, uart_receiver_callback);
}

View File

@@ -0,0 +1,72 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_uart_receiver
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-11-04 JKS first version
* 2025-02-07 pudding <20>޸IJ<DEB8><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* TXD <20>鿴 zf_device_uart_receiver.h <20><> UART_RECEVIER_RX_PIN <20><EFBFBD><EAB6A8>
* GND <20><>Դ<EFBFBD><D4B4>
* 5V 5V<35><56>Դ
* ------------------------------------
********************************************************************************************************************/
#ifndef _zf_device_uart_receiver_h
#define _zf_device_uart_receiver_h
#include "zf_common_typedef.h"
#define UART_RECEVIER_UART_INDEX UART_2 // <20><><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD>ջ<EFBFBD>ʹ<EFBFBD>õĴ<C3B5><C4B4><EFBFBD>
#define UART_RECEVIER_TX_PIN UART2_TX_P10_5 // ң<><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ڳ<EFBFBD>ʼ<EFBFBD><CABC>ʱռλʹ<CEBB><CAB9>
#define UART_RECEVIER_RX_PIN UART2_RX_P10_6 // <20><><EFBFBD>ڽ<EFBFBD><DABD>ջ<EFBFBD><D5BB><EFBFBD>TX<54><58><EFBFBD><EFBFBD> <20><><EFBFBD>ӵ<EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>RX<52><58><EFBFBD><EFBFBD>
#define SBUS_UART_BAUDRATE (100000) // ָ<><D6B8> SBUS <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õĵĴ<C4B5><C4B4>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> (<28>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>)
#define UART_RECEVIER_CHANNEL_NUM ( 6 ) // <20><><EFBFBD><EFBFBD>ң<EFBFBD><D2A3><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>)
#define REV_DATA_LEN ( 25 ) // SBUS֡<53><D6A1>
#define FRAME_STAR ( 0X0F ) // ֡ͷ<D6A1><CDB7>Ϣ
#define FRAME_END ( 0X00 ) // ֡β<D6A1><CEB2>Ϣ
#define SBUS_ABNORMAL_STATE ( 0X04 ) // ʧ<><CAA7>״̬
typedef struct
{
uint16 channel[UART_RECEVIER_CHANNEL_NUM]; // CH1-CH6ͨ<36><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 state; // ң<><D2A3><EFBFBD><EFBFBD>״̬(1<><31>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾʧ<CABE><CAA7>)
uint8 finsh_flag; // 1<><31><EFBFBD><EFBFBD>ʾ<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD>յ<EFBFBD>һ֡ң<D6A1><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}uart_receiver_struct;
extern uart_receiver_struct uart_receiver; // <20><><EFBFBD>ڽ<EFBFBD><DABD>ջ<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
void uart_receiver_init(void);
#endif

View File

@@ -0,0 +1,103 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_virtual_oscilloscope
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
********************************************************************************************************************/
#include "zf_device_virtual_oscilloscope.h"
uint8 virtual_oscilloscope_data[10];
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CRC У<><D0A3>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> buff <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> CRC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> crc_cnt <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> CRC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint16 CRC У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> crc_16 = crc_check(virtual_oscilloscope_data, 8);
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD>ʹ<EFBFBD><CAB9> <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint16 crc_check (uint8 *buff, uint8 crc_cnt)
{
uint16 crc_temp;
uint8 i, j;
crc_temp = 0xffff;
for(i = 0; i < crc_cnt; i ++)
{
crc_temp ^= buff[i];
for(j = 0; 8 > j; j ++)
{
if (crc_temp & 0x01)
{
crc_temp = (crc_temp >> 1) ^ 0xa001;
}
else
{
crc_temp = crc_temp >> 1;
}
}
}
return(crc_temp);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data1 Ҫ<><D2AA><EFBFBD>͵ĵ<CDB5>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data2 Ҫ<><D2AA><EFBFBD>͵ĵڶ<C4B5><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data3 Ҫ<><D2AA><EFBFBD>͵ĵ<CDB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data4 Ҫ<><D2AA><EFBFBD>͵ĵ<CDB5><C4B5>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> uint8 data_buffer[10];
// virtual_oscilloscope_data_conversion(100, 200, 300, 400, data_buffer);
// wireless_uart_send_buff(data_buffer, 10);
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ֻ<EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void virtual_oscilloscope_data_conversion (const int16 data1, const int16 data2, const int16 data3, const int16 data4)
{
uint16 crc_16 = 0;
virtual_oscilloscope_data[0] = (uint8)((uint16)data1 & 0xff);
virtual_oscilloscope_data[1] = (uint8)((uint16)data1 >> 8);
virtual_oscilloscope_data[2] = (uint8)((uint16)data2 & 0xff);
virtual_oscilloscope_data[3] = (uint8)((uint16)data2 >> 8);
virtual_oscilloscope_data[4] = (uint8)((uint16)data3 & 0xff);
virtual_oscilloscope_data[5] = (uint8)((uint16)data3>>8);
virtual_oscilloscope_data[6] = (uint8)((uint16)data4 & 0xff);
virtual_oscilloscope_data[7] = (uint8)((uint16)data4 >> 8);
crc_16 = crc_check(virtual_oscilloscope_data, 8);
virtual_oscilloscope_data[8] = (uint8)(crc_16 & 0xff);
virtual_oscilloscope_data[9] = (uint8)(crc_16 >> 8);
}

View File

@@ -0,0 +1,51 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_virtual_oscilloscope
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
#ifndef _zf_device_virtual_oscilloscope_h_
#define _zf_device_virtual_oscilloscope_h_
#include "zf_common_typedef.h"
//=================================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD> ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>=================================================
extern uint8 virtual_oscilloscope_data[10];
//=================================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD> ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>=================================================
//=================================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=================================================
void virtual_oscilloscope_data_conversion (const int16 data1, const int16 data2, const int16 data3, const int16 data4);
//=================================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=================================================
#endif

View File

@@ -0,0 +1,666 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_wifi_spi
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-21 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* RST <20>鿴 zf_device_wifi_spi.h <20><> WIFI_SPI_RST_PIN <20><EFBFBD><EAB6A8>
* INT <20>鿴 zf_device_wifi_spi.h <20><> WIFI_SPI_INT_PIN <20><EFBFBD><EAB6A8>
* CS <20>鿴 zf_device_wifi_spi.h <20><> WIFI_SPI_CS_PIN <20><EFBFBD><EAB6A8>
* MISO <20>鿴 zf_device_wifi_spi.h <20><> WIFI_SPI_MISO_PIN <20><EFBFBD><EAB6A8>
* SCK <20>鿴 zf_device_wifi_spi.h <20><> WIFI_SPI_SCK_PIN <20><EFBFBD><EAB6A8>
* MOSI <20>鿴 zf_device_wifi_spi.h <20><> WIFI_SPI_MOSI_PIN <20><EFBFBD><EAB6A8>
* 5V 5V <20><>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
*********************************************************************************************************************/
#include "stdio.h"
#include "zf_common_clock.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
#include "zf_driver_spi.h"
#include "zf_device_type.h"
#include "zf_device_wifi_spi.h"
#define WIFI_CONNECT_TIME_OUT 10000 // <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
#define SOCKET_CONNECT_TIME_OUT 50000 // <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
#define OTHER_TIME_OUT 1000 // <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
char wifi_spi_version[12]; // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>̼<EFBFBD><CCBC><EFBFBD><E6B1BE>Ϣ
char wifi_spi_mac_addr[20]; // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>MAC<41><43>ַ<EFBFBD><D6B7>Ϣ
char wifi_spi_ip_addr_port[25]; // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>IP<49><50>ַ<EFBFBD><D6B7><EFBFBD>˿<EFBFBD><CBBF><EFBFBD>Ϣ
static fifo_struct wifi_spi_fifo;
static uint8 wifi_spi_buffer[WIFI_SPI_RECVIVE_FIFO_SIZE];
static volatile wifi_spi_state_enum wifi_spi_mutex;
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȴ<EFBFBD>WIFI SPI<50><49><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> wait_time <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1> <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> <20>ڲ<EFBFBD>ʹ<EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_wait_idle (uint32 wait_time)
{
uint32 time = 0;
wait_time = wait_time*100;
while(0 == gpio_get_level(WIFI_SPI_INT_PIN))
{
system_delay_us(10);
time++;
if(wait_time <= time)
{
break;
}
}
return (wait_time <= time);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> д<><D0B4><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>WIFI SPI
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buffer1 <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length1 <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buffer2 <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length2 <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> <20>ڲ<EFBFBD>ʹ<EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
static void wifi_spi_write (const uint8 *buffer1, uint16 length1, const uint8 *buffer2, uint16 length2)
{
gpio_low(WIFI_SPI_CS_PIN);
if(NULL != buffer1)
{
spi_write_8bit_array(WIFI_SPI_INDEX, buffer1, length1);
}
if(NULL != buffer2)
{
spi_write_8bit_array(WIFI_SPI_INDEX, buffer2, length2);
}
gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>շ<EFBFBD><D5B7><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *packets <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յĵ<D5B5>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length <20><>Ҫ<EFBFBD><D2AA><EFBFBD>յij<D5B5><C4B3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> <20>ڲ<EFBFBD>ʹ<EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
static void wifi_spi_transfer_command (wifi_spi_packets_struct *packets, uint16 length)
{
gpio_low(WIFI_SPI_CS_PIN);
spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(packets->head), (uint8 *)&(packets->head), sizeof(wifi_spi_head_struct));
if(length)
{
spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)(packets->buffer), packets->buffer, length);
}
gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>շ<EFBFBD>)
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *write_data <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *read_data <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĴ洢<C4B4><E6B4A2>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length <20><>Ҫ<EFBFBD><D2AA><EFBFBD>յij<D5B5><C4B3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> <20>ڲ<EFBFBD>ʹ<EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
static void wifi_spi_transfer_data (const uint8 *write_data, wifi_spi_packets_struct *read_data, uint16 length)
{
gpio_low(WIFI_SPI_CS_PIN);
read_data->head.command = WIFI_SPI_DATA;
read_data->head.length = length;
spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(read_data->head), (uint8 *)&(read_data->head), sizeof(wifi_spi_head_struct));
if(WIFI_SPI_RECVIVE_SIZE < length)
{
spi_transfer_8bit(WIFI_SPI_INDEX, write_data, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
spi_write_8bit_array(WIFI_SPI_INDEX, &write_data[WIFI_SPI_RECVIVE_SIZE], length - WIFI_SPI_RECVIVE_SIZE);
}
else
{
// <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>write_dataԽ<61><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(read_data->buffer, write_data, length);
spi_transfer_8bit(WIFI_SPI_INDEX, read_data->buffer, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
}
gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> command <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buffer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> wait_time <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1> <20><>λ100΢<30><CEA2>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> <20>ڲ<EFBFBD>ʹ<EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_set_parameter (wifi_spi_packets_command_enum command, uint8 *buffer, uint16 length, uint32 wait_time)
{
uint8 return_state;
wifi_spi_head_struct head;
return_state = 1;
do
{
head.command = command;
head.length = length;
// <20>ȴ<EFBFBD><C8B4>ӻ<EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(wifi_spi_wait_idle(wait_time))
{
break;
}
wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), buffer, length);
if(wifi_spi_wait_idle(wait_time))
{
break;
}
// <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ź<EFBFBD>
head.command = WIFI_SPI_DATA;
head.length = 0;
wifi_spi_transfer_command((wifi_spi_packets_struct *)&head, head.length);
system_delay_us(20);
if(WIFI_SPI_REPLY_OK == head.command)
{
return_state = 0;
}
}while(0);
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI ģ<><C4A3><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ȡ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> command <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buffer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> wait_time <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1> <20><>λ100΢<30><CEA2>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> <20>ڲ<EFBFBD>ʹ<EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_parameter (wifi_spi_packets_command_enum command, wifi_spi_packets_struct *read_data, uint32 wait_time)
{
uint8 return_state;
return_state = 1;
do
{
// <20>ȴ<EFBFBD><C8B4>ӻ<EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(wifi_spi_wait_idle(wait_time))
{
break;
}
read_data->head.command = command;
wifi_spi_write(&(read_data->head.command), WIFI_SPI_RECVIVE_SIZE, NULL, 0);
if(wifi_spi_wait_idle(wait_time))
{
break;
}
read_data->head.command = WIFI_SPI_DATA;
read_data->head.length = 0;
wifi_spi_transfer_command(read_data, WIFI_SPI_RECVIVE_SIZE);
return_state = 0;
}while(0);
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20>̼<EFBFBD><CCBC><EFBFBD><E6B1BE>ȡ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void <20>˿ں<CBBF>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>֮<EFBFBD>󣬹̼<F3A3ACB9><CCBC><EFBFBD><E6B1BE>Ϣ<EFBFBD><CFA2><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi_spi_version<6F><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_version (void)
{
uint8 return_state;
wifi_spi_packets_struct temp_packets;
return_state = wifi_spi_get_parameter(WIFI_SPI_GET_VERSION, &temp_packets, OTHER_TIME_OUT);
if((0 == return_state) && (WIFI_SPI_REPLY_VERSION == temp_packets.head.command))
{
memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI MAC<41><43>ַ<EFBFBD><D6B7>ȡ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void <20>˿ں<CBBF>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>MAC<41><43>ַ<EFBFBD><D6B7>Ϣ<EFBFBD><CFA2><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi_spi_mac_addr<64><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_mac_addr (void)
{
uint8 return_state;
wifi_spi_packets_struct temp_packets;
return_state = wifi_spi_get_parameter(WIFI_SPI_GET_MAC_ADDR, &temp_packets, OTHER_TIME_OUT);
if((0 == return_state) && (WIFI_SPI_REPLY_MAC_ADDR == temp_packets.head.command))
{
memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI IP<49><50>ַ<EFBFBD><D6B7><EFBFBD>˿ںŻ<DABA>ȡ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void <20>˿ں<CBBF>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>IP<49><50>ַ<EFBFBD><D6B7><EFBFBD>˿ں<CBBF><DABA><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi_spi_ip_addr_port<72><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Socket֮<74><D6AE><EFBFBD><EFBFBD><EFBFBD>ô˺<C3B4><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ϣ
//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_ip_addr_port (void)
{
uint8 return_state;
wifi_spi_packets_struct temp_packets;
return_state = wifi_spi_get_parameter(WIFI_SPI_GET_IP_ADDR, &temp_packets, OTHER_TIME_OUT);
if((0 == return_state) && (WIFI_SPI_REPLY_IP_ADDR == temp_packets.head.command))
{
memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>WiFi<46><69>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WiFi
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *wifi_ssid WIFI<46><49><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *pass_word WIFI<46><49><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_wifi_connect("SEEKFREE", "SEEKFREE123");
// <20><>ע<EFBFBD><D7A2>Ϣ wifi_spi_wifi_connect("SEEKFREE", NULL); // <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WIFI<46>ȵ<EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word)
{
uint8 return_state;
uint8 temp_buffer[64];
uint16 length;
if(NULL != pass_word)
{
// WIFI<46>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB7A2><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n", wifi_ssid, pass_word);
}
else
{
// WIFI<46>ȵ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>
length = (uint16)sprintf((char *)temp_buffer, "%s\r\n", wifi_ssid);
}
return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_INFORMATION, temp_buffer, length, WIFI_CONNECT_TIME_OUT);
// <20><><EFBFBD><EFBFBD>IP<49><50>ַ<EFBFBD><D6B7><EFBFBD>˿ں<CBBF><DABA><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi_spi_ip_addr_port<72><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
wifi_spi_get_ip_addr_port();
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>Socket<65><74>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Socket
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *transport_type <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *ip_addr IP<49><50>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *port Ŀ<><C4BF><EFBFBD>˿ں<CBBF>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *local_port <20><><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_socket_connect("TCP", "192.168.2.5", "8080", "6060");
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port)
{
uint8 return_state;
uint8 temp_buffer[41];
uint16 length;
length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n%s\r\n%s\r\n", transport_type, ip_addr, port, local_port);
return_state = wifi_spi_set_parameter(WIFI_SPI_SET_SOCKET_INFORMATION, temp_buffer, length, SOCKET_CONNECT_TIME_OUT);
// <20><><EFBFBD><EFBFBD>IP<49><50>ַ<EFBFBD><D6B7><EFBFBD>˿ں<CBBF><DABA><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi_spi_ip_addr_port<72><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
wifi_spi_get_ip_addr_port();
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20>Ͽ<EFBFBD>Socket<65><74><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_socket_disconnect();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 wifi_spi_socket_disconnect (void)
{
wifi_spi_packets_struct temp_packets;
return wifi_spi_get_parameter(WIFI_SPI_CLOSE_SOCKET, &temp_packets, OTHER_TIME_OUT);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20><><EFBFBD><EFBFBD>λ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 wifi_spi_reset (void)
{
uint8 return_state;
wifi_spi_head_struct head;
return_state = 1;
do
{
head.command = WIFI_SPI_RESET;
head.length = 0xA5A5;
return_state = wifi_spi_wait_idle(OTHER_TIME_OUT);
if(return_state)
{
break;
}
wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), NULL, 0);
}while(0);
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI UDPģʽʱ<CABD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>UDPģʽ<C4A3><CABD>ģ<EFBFBD><C4A3><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD>ȴ<EFBFBD>2<EFBFBD><32><EFBFBD>룬2<EBA3AC><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>socket<65><74><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><E7A3AC><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϻ<EFBFBD><CFBA><EFBFBD><EFBFBD>ô˺<C3B4><CBBA><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
uint8 wifi_spi_udp_send_now (void)
{
uint8 return_state = 1;
wifi_spi_packets_struct temp_packets;
if(WIFI_SPI_IDLE == wifi_spi_mutex)
{
// <20><>ͨѶ״̬<D7B4><CCAC><EFBFBD><EFBFBD>Ϊæ
wifi_spi_mutex = WIFI_SPI_BUSY;
do
{
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
break;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼsocket<65><74><EFBFBD><EFBFBD>
temp_packets.head.command = WIFI_SPI_UDP_SEND;
temp_packets.head.length = 0;
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
// <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>İ<EFBFBD><C4B0><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(temp_packets.head.length)
{
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
}
}
// <20>ȴ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ź<EFBFBD>
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
break;
}
// <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ź<EFBFBD>
temp_packets.head.command = WIFI_SPI_DATA;
temp_packets.head.length = 0;
wifi_spi_transfer_command(&temp_packets, temp_packets.head.length);
if(WIFI_SPI_REPLY_OK == temp_packets.head.command)
{
return_state = 0;
}
}while(0);
// <20><>ͨѶ״̬<D7B4><CCAC><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
wifi_spi_mutex = WIFI_SPI_IDLE;
}
return return_state;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20><><EFBFBD>ݿ鷢<DDBF>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length <20><><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><CAA3>δ<EFBFBD><CEB4><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_send_buffer(buffer, 100);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
{
uint16 send_length;
wifi_spi_packets_struct temp_packets;
// <20><><EFBFBD><EFBFBD>WIFI SPI״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϻ<D0B6><CFBB><EFBFBD><EFBFBD>߳<EFBFBD><DFB3><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ<CDA8><D1B6><EFBFBD>򱾴β<F2B1BEB4><CEB2>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(WIFI_SPI_IDLE == wifi_spi_mutex)
{
// <20><>ͨѶ״̬<D7B4><CCAC><EFBFBD><EFBFBD>Ϊæ
wifi_spi_mutex = WIFI_SPI_BUSY;
while(length)
{
send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
break;
}
wifi_spi_transfer_data(buffer, &temp_packets, send_length);
// <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>İ<EFBFBD><C4B0><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(temp_packets.head.length)
{
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
}
}
length -= send_length;
buffer += send_length;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>εĽ<CEB5><C4BD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command)
{
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
break;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡģ<C8A1><C4A3>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
temp_packets.head.command = WIFI_SPI_DATA;
temp_packets.head.length = 0;
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
// <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>İ<EFBFBD><C4B0><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(temp_packets.head.length)
{
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
}
}
}
wifi_spi_mutex = WIFI_SPI_IDLE;
}
return length;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length <20><>ȡ<EFBFBD><C8A1><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʵ<>ʶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_read_buffer(buffer, 100);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
zf_assert(NULL != buffer);
uint32 data_len = length;
#if(1 == WIFI_SPI_READ_TRANSFER)
wifi_spi_packets_struct temp_packets;
// <20><><EFBFBD><EFBFBD>WIFI SPI״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϻ<D0B6><CFBB><EFBFBD><EFBFBD>߳<EFBFBD><DFB3><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ<CDA8><D1B6><EFBFBD>򱾴β<F2B1BEB4><CEB2>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(WIFI_SPI_IDLE == wifi_spi_mutex)
{
// <20><>ͨѶ״̬<D7B4><CCAC><EFBFBD><EFBFBD>Ϊæ
wifi_spi_mutex = WIFI_SPI_BUSY;
// <20><><EFBFBD><EFBFBD>ͨѶ<CDA8>鿴ģ<E9BFB4><C4A3><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ȡ
do
{
if(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);
// <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>İ<EFBFBD><C4B0><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(temp_packets.head.length)
{
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
}
}
}while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
wifi_spi_mutex = WIFI_SPI_IDLE;
}
#endif
fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
return data_len;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WiFi ģ<><C4A3><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *wifi_ssid Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD> WiFi <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *pass_word Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD> WiFi <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ģ<><C4A3><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_init("SEEKFREE", "SEEKFREE123");
// <20><>ע<EFBFBD><D7A2>Ϣ wifi_spi_init("SEEKFREE", NULL); // <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WIFI<46>ȵ<EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
{
uint8 return_state = 0;
fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_RECVIVE_FIFO_SIZE);
spi_init(WIFI_SPI_INDEX, SPI_MODE0, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//Ӳ<><D3B2>SPI<50><49>ʼ<EFBFBD><CABC>
gpio_init(WIFI_SPI_CS_PIN, GPO, 1, GPO_PUSH_PULL);
gpio_init(WIFI_SPI_RST_PIN, GPO, 1, GPO_PUSH_PULL);
gpio_init(WIFI_SPI_INT_PIN, GPI, 0, GPI_PULL_DOWN);
// <20><>λ
gpio_set_level(WIFI_SPI_RST_PIN, 0);
system_delay_ms(10);
gpio_set_level(WIFI_SPI_RST_PIN, 1);
// <20>ȴ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
system_delay_ms(100);
wifi_spi_mutex = WIFI_SPI_IDLE;
do
{
// <20>̼<EFBFBD><CCBC><EFBFBD><E6B1BE>Ϣ<EFBFBD><CFA2><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi_spi_version<6F><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return_state = wifi_spi_get_version();
if(return_state)
{
break;
}
// MAC<41><43>ַ<EFBFBD><D6B7>Ϣ<EFBFBD><CFA2><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi_spi_mac_addr<64><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
wifi_spi_get_mac_addr();
return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
if(return_state)
{
break;
}
#if(1 == WIFI_SPI_AUTO_CONNECT)
return_state = wifi_spi_socket_connect("TCP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
if(return_state)
{
break;
}
#endif
#if(2 == WIFI_SPI_AUTO_CONNECT)
return_state = wifi_spi_socket_connect("UDP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
if(return_state)
{
break;
}
#endif
}while(0);
return return_state;
}

View File

@@ -0,0 +1,152 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_wifi_spi
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2024-01-18 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* RST <20>鿴 zf_device_wifi_spi.h <20><> WIFI_SPI_RST_PIN <20><EFBFBD><EAB6A8>
* INT <20>鿴 zf_device_wifi_spi.h <20><> WIFI_SPI_INT_PIN <20><EFBFBD><EAB6A8>
* CS <20>鿴 zf_device_wifi_spi.h <20><> WIFI_SPI_CS_PIN <20><EFBFBD><EAB6A8>
* MISO <20>鿴 zf_device_wifi_spi.h <20><> WIFI_SPI_MISO_PIN <20><EFBFBD><EAB6A8>
* SCK <20>鿴 zf_device_wifi_spi.h <20><> WIFI_SPI_SCK_PIN <20><EFBFBD><EAB6A8>
* MOSI <20>鿴 zf_device_wifi_spi.h <20><> WIFI_SPI_MOSI_PIN <20><EFBFBD><EAB6A8>
* 5V 5V <20><>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
*********************************************************************************************************************/
#ifndef _zf_device_wifi_spi_h
#define _zf_device_wifi_spi_h
#include "zf_common_typedef.h"
#define WIFI_SPI_INDEX (SPI_3 ) // <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD>SPI<50><49>
#define WIFI_SPI_SPEED (30 * 1000 * 1000 ) // Ӳ<><D3B2> SPI <20><><EFBFBD><EFBFBD>
#define WIFI_SPI_SCK_PIN (SPI3_SCLK_P22_3 ) // <20><><EFBFBD><EFBFBD>SPI_SCK<43><4B><EFBFBD><EFBFBD>
#define WIFI_SPI_MOSI_PIN (SPI3_MOSI_P22_0 ) // <20><><EFBFBD><EFBFBD>SPI_MOSI<53><49><EFBFBD><EFBFBD>
#define WIFI_SPI_MISO_PIN (SPI3_MISO_P22_1 ) // <20><><EFBFBD><EFBFBD>SPI_MISO<53><4F><EFBFBD><EFBFBD> IPSû<53><C3BB>MISO<53><4F><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><E5A3AC>spi<70>ij<EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1>Ҫʹ<D2AA><CAB9>
#define WIFI_SPI_CS_PIN (P22_2 ) // <20><><EFBFBD><EFBFBD>SPI_CS<43><53><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CS<43><53><EFBFBD><EFBFBD>
#define WIFI_SPI_INT_PIN (P15_8 ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define WIFI_SPI_RST_PIN (P23_1 ) // <20><><EFBFBD>帴λ<E5B8B4><CEBB><EFBFBD><EFBFBD>
#define WIFI_SPI_RECVIVE_FIFO_SIZE (1024) // <20><><EFBFBD><EFBFBD>FIFO<46><4F>С
#define WIFI_SPI_READ_TRANSFER (1) // <20>ڵ<EFBFBD><DAB5><EFBFBD>wifi_spi_read_buffer <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD>SPIͨѶ<CDA8><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ȡ 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPIͨѶ 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPIͨѶ<CDA8><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡFIFO
// <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>κεĵط<C4B5><D8B7><EFBFBD><EFBFBD>÷<EFBFBD><C3B7>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WIFI_SPI_READ_TRANSFER<45><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1
#define WIFI_SPI_AUTO_CONNECT (0) // <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>TCP<43><50><EFBFBD><EFBFBD>UDP<44><50><EFBFBD><EFBFBD> 0-<2D><><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD> 1-<2D>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>TCP<43><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2-<2D>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>UDP
#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT <20><>ֵֻ<D6B5><D6BB>Ϊ [0,1,2]"
#else
#define WIFI_SPI_TARGET_IP "192.168.137.1" // <20><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD> IP
#define WIFI_SPI_TARGET_PORT "8086" // <20><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>Ķ˿<C4B6>
#define WIFI_SPI_LOCAL_PORT "6666" // <20><><EFBFBD><EFBFBD><EFBFBD>Ķ˿<C4B6> 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD>Χ2048-65535 Ĭ<><C4AC> 6666
#endif
#define WIFI_SPI_RECVIVE_SIZE (32) // ÿ<><C3BF>SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>ֽ<EFBFBD><D6BD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
#define WIFI_SPI_TRANSFER_SIZE (4088) // <20><><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>ֽ<EFBFBD><D6BD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
typedef enum
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
WIFI_SPI_INVALID1 = 0x00, // <20><>Ч<EFBFBD><D0A7><EFBFBD>ݰ<EFBFBD>
WIFI_SPI_RESET = 0x01, // <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
WIFI_SPI_DATA = 0x02, // ͸<><CDB8><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
WIFI_SPI_UDP_SEND = 0x03, // UDP<44><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><C4AC>SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD>2MSδ<53>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WIFI_SPI_CLOSE_SOCKET = 0x04, // <20>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD>
WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // <20><><EFBFBD><EFBFBD>WIFI<46><49>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // <20><><EFBFBD><EFBFBD>SOCKET<45><54>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
WIFI_SPI_GET_VERSION = 0x20, // <20><>ȡģ<C8A1><C4A3><EFBFBD>
WIFI_SPI_GET_MAC_ADDR = 0x21, // <20><>ȡģ<C8A1><C4A3>MAC<41><43>ַ
WIFI_SPI_GET_IP_ADDR = 0x22, // <20><>ȡģ<C8A1><C4A3>IP<49><50>ַ
// <20>ӻ<EFBFBD><D3BB>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WIFI_SPI_REPLY_OK = 0x80, // <20>ӻ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
WIFI_SPI_REPLY_ERROR = 0x81, // <20>ӻ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WIFI_SPI_REPLY_DATA_START = 0x90, // <20>ӻ<EFBFBD><D3BB>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ
WIFI_SPI_REPLY_DATA_END = 0x91, // <20>ӻ<EFBFBD><D3BB>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѷ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
WIFI_SPI_REPLY_VERSION = 0xA0, // <20>ӻ<EFBFBD><D3BB>ظ<EFBFBD><D8B8>̼<EFBFBD><CCBC>
WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // <20>ӻ<EFBFBD><D3BB>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>MAC<41><43>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ϣ
WIFI_SPI_REPLY_IP_ADDR = 0xA2, // <20>ӻ<EFBFBD><D3BB>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ<EFBFBD><D6B7><EFBFBD>˿ں<CBBF>
WIFI_SPI_INVALID2 = 0xFF // <20><>Ч<EFBFBD><D0A7><EFBFBD>ݰ<EFBFBD>
}wifi_spi_packets_command_enum;
typedef enum
{
WIFI_SPI_IDLE, // ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD>SPIͨѶ
WIFI_SPI_BUSY, // ģ<><C4A3><EFBFBD><EFBFBD>æ<EFBFBD><C3A6><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><C9BD><EFBFBD>SPIͨѶ
}wifi_spi_state_enum;
typedef struct
{
uint8 command; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 reserve; // <20><><EFBFBD><EFBFBD>
uint16 length; // <20><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
}wifi_spi_head_struct;
typedef struct
{
wifi_spi_head_struct head; // ֡ͷ
uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}wifi_spi_packets_struct;
extern char wifi_spi_version[12]; // <20>̼<EFBFBD><CCBC><20>ַ<EFBFBD><D6B7><EFBFBD>
extern char wifi_spi_mac_addr[20]; // ģ<><C4A3>MAC<41><43>ַ <20>ַ<EFBFBD><D6B7><EFBFBD>
extern char wifi_spi_ip_addr_port[25]; // IP<49><50>ַ<EFBFBD><D6B7><EFBFBD>˿ں<CBBF> <20>ַ<EFBFBD><D6B7><EFBFBD>
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_init (char *wifi_ssid, char *pass_word);
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,159 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_wifi_uart
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* RX <20>鿴 zf_device_wifi_uart.h <20><> WIFI_UART_RX_PIN <20><EFBFBD><EAB6A8>
* TX <20>鿴 zf_device_wifi_uart.h <20><> WIFI_UART_TX_PIN <20><EFBFBD><EAB6A8>
* RTS <20>鿴 zf_device_wifi_uart.h <20><> WIFI_UART_RTS_PIN <20><EFBFBD><EAB6A8>
* RST <20>鿴 zf_device_wifi_uart.h <20><> WIFI_UART_RST_PIN <20><EFBFBD><EAB6A8>
* VCC 5V <20><>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
*********************************************************************************************************************/
#ifndef _zf_device_wifi_uart_h_
#define _zf_device_wifi_uart_h_
#include "zf_common_typedef.h"
//==============================================<3D><><EFBFBD><EFBFBD> WIFI_UART <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
#define WIFI_UART_INDEX (UART_2) // WIFI ģ<><C4A3> <20><>ʹ<EFBFBD>õ<EFBFBD><C3B5>Ĵ<EFBFBD><C4B4><EFBFBD>
#define WIFI_UART_TX_PIN (UART2_RX_P10_6) // <20><><EFBFBD><EFBFBD> WIFI ģ<><C4A3> TX
#define WIFI_UART_RX_PIN (UART2_TX_P10_5) // <20><><EFBFBD><EFBFBD> WIFI ģ<><C4A3> RX
#define WIFI_UART_BAUD (115200) // ģ<><EFBFBD><E9B9A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define WIFI_UART_RTS_PIN (P10_2) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> ָʾ<D6B8><CABE>ǰģ<C7B0><C4A3><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-<2D><><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1-<2D><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define WIFI_UART_HARDWARE_RST (1) // <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> 0-ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ 1-ʹ<><CAB9>Ӳ<EFBFBD><D3B2> RST
#if WIFI_UART_HARDWARE_RST // <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3>ֵ<EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ģ<EFBFBD><C4A3>
#define WIFI_UART_RST_PIN (P11_6) // <20><><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
#endif
//==============================================<3D><><EFBFBD><EFBFBD> WIFI_UART <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
//==============================================<3D><><EFBFBD><EFBFBD> WIFI_UART <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
#define WIFI_UART_BUFFER_SIZE (256) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
#define WIFI_UART_AUTO_CONNECT (0) // <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>TCP<43><50><EFBFBD><EFBFBD>UDP<44><50><EFBFBD><EFBFBD> 0-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1-<2D>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>TCP<43><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2-<2D>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>UDP<44><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3<><33><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>TCP<43><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#if (WIFI_UART_AUTO_CONNECT > 3)
#error "WIFI_UART_AUTO_CONNECT <20><>ֵֻ<D6B5><D6BB>Ϊ [0,1,2,3]"
#else
#define WIFI_UART_TARGET_IP "192.168.137.1" // <20><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD> IP
#define WIFI_UART_TARGET_PORT "8080" // <20><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>Ķ˿<C4B6>
#define WIFI_UART_LOCAL_PORT "8080" // <20><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
#endif
//==============================================<3D><><EFBFBD><EFBFBD> WIFI_UART <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
//==============================================<3D><><EFBFBD><EFBFBD> WIFI_UART <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>==================================================
typedef enum
{
WIFI_UART_STATION, // <20>豸ģʽ
WIFI_UART_SOFTAP, // APģʽ
}wifi_uart_mode_enum;
typedef enum
{
WIFI_UART_COMMAND, // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WIFI_UART_SERIANET, // ʹ<><CAB9>͸<EFBFBD><CDB8><EFBFBD>ķ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}wifi_uart_transfer_mode_enum;
typedef enum
{
WIFI_UART_TCP_CLIENT, // ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TCP<43><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WIFI_UART_TCP_SERVER, // ģ<><C4A3><EFBFBD><EFBFBD>ΪTCP<43><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WIFI_UART_UDP_CLIENT, // ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UDP<44><50><EFBFBD><EFBFBD>
}wifi_uart_connect_mode_enum;
typedef enum
{
WIFI_UART_SERVER_OFF, // ģ<><C4A3>δ<EFBFBD><CEB4><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>
WIFI_UART_SERVER_ON, // ģ<><C4A3><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>
}wifi_uart_connect_state_enum;
typedef enum
{
WIFI_UART_LINK_0, // ģ<>鵱ǰ<E9B5B1><C7B0><EFBFBD><EFBFBD> 0
WIFI_UART_LINK_1, // ģ<>鵱ǰ<E9B5B1><C7B0><EFBFBD><EFBFBD> 1
WIFI_UART_LINK_2, // ģ<>鵱ǰ<E9B5B1><C7B0><EFBFBD><EFBFBD> 2
WIFI_UART_LINK_3, // ģ<>鵱ǰ<E9B5B1><C7B0><EFBFBD><EFBFBD> 3
WIFI_UART_LINK_4, // ģ<>鵱ǰ<E9B5B1><C7B0><EFBFBD><EFBFBD> 4
}wifi_uart_link_id_enum;
typedef struct
{
uint8 wifi_uart_version[12]; // <20>̼<EFBFBD><CCBC><20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ
uint8 wifi_uart_mac[20]; // <20><><EFBFBD><EFBFBD> MAC <20><>ַ <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ
uint8 wifi_uart_local_ip[17]; // <20><><EFBFBD><EFBFBD> IP <20><>ַ <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ
uint8 wifi_uart_local_port[10]; // <20><><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF> <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ
uint8 wifi_uart_remote_ip[5][17]; // Զ<><D4B6> IP <20><>ַ <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ
wifi_uart_mode_enum wifi_uart_mode; // WIFI ģʽ
wifi_uart_transfer_mode_enum wifi_uart_transfer_mode; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ģʽ
wifi_uart_connect_mode_enum wifi_uart_connect_mode; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
wifi_uart_connect_state_enum wifi_uart_connect_state; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}wifi_uart_information_struct;
//==============================================<3D><><EFBFBD><EFBFBD> WIFI_UART <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>==================================================
//==============================================<3D><><EFBFBD><EFBFBD> WIFI_UART ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>===================================================
extern wifi_uart_information_struct wifi_uart_information;
//==============================================<3D><><EFBFBD><EFBFBD> WIFI_UART ȫ<>ֱ<EFBFBD><D6B1><EFBFBD>===================================================
//==============================================<3D><><EFBFBD><EFBFBD> WIFI_UART <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
uint8 wifi_uart_disconnected_wifi (void); // <20>Ͽ<EFBFBD> WIFI <20><><EFBFBD><EFBFBD>
uint8 wifi_uart_entry_serianet (void); // <20><><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>ģʽ
uint8 wifi_uart_exit_serianet (void); // <20>ر<EFBFBD>͸<EFBFBD><CDB8>ģʽ
uint8 wifi_uart_connect_tcp_servers (char *ip, char *port, wifi_uart_transfer_mode_enum mode); // <20><><EFBFBD><EFBFBD> TCP <20><><EFBFBD><EFBFBD>
uint8 wifi_uart_connect_udp_client (char *ip, char *port, char *local_port, wifi_uart_transfer_mode_enum mode); // <20><><EFBFBD><EFBFBD> UDP <20><><EFBFBD><EFBFBD>
uint8 wifi_uart_disconnect_link (void); // <20>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD> TCP Server ʹ<>ñ<EFBFBD><C3B1>ӿڽ<D3BF><DABD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 wifi_uart_disconnect_link_with_id (wifi_uart_link_id_enum link_id); // TCP Server <20>Ͽ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TCP/UDP Client <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD>Ӧ
uint8 wifi_uart_entry_tcp_servers (char *port); // <20><><EFBFBD><EFBFBD> TCP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 wifi_uart_exit_tcp_servers (void); // <20>ر<EFBFBD> TCP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 wifi_uart_tcp_servers_check_link (void); // TCP Server ģʽ<C4A3>¼<EFBFBD><C2BC>鵱ǰ<E9B5B1><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȡ IP
uint32 wifi_uart_send_buffer (const uint8 *buff, uint32 len); // WIFI ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͺ<EFBFBD><CDBA><EFBFBD>
uint32 wifi_uart_tcp_servers_send_buffer (const uint8 *buff, uint32 len, wifi_uart_link_id_enum id); // WIFI ģ<><C4A3><EFBFBD><EFBFBD>Ϊ TCP Server ָ<><D6B8>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
uint32 wifi_uart_read_buffer (uint8 *buff, uint32 len); // WIFI ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>պ<EFBFBD><D5BA><EFBFBD>
void wifi_uart_callback (void); // WIFI ģ<><EFBFBD>ڻص<DABB><D8B5><EFBFBD><EFBFBD><EFBFBD>
uint8 wifi_uart_init (char *wifi_ssid, char *pass_word, wifi_uart_mode_enum wifi_mode); // WIFI ģ<><C4A3><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//==============================================<3D><><EFBFBD><EFBFBD> WIFI_UART <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
#endif

View File

@@ -0,0 +1,294 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_wireless_uart
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* RX <20>鿴 zf_device_wireless_uart.h <20><> WIRELESS_UART_RX_PINx <20><EFBFBD><EAB6A8>
* TX <20>鿴 zf_device_wireless_uart.h <20><> WIRELESS_UART_TX_PINx <20><EFBFBD><EAB6A8>
* RTS <20>鿴 zf_device_wireless_uart.h <20><> WIRELESS_UART_RTS_PINx <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
#include "zf_driver_uart.h"
#include "zf_device_type.h"
#include "zf_device_wireless_uart.h"
static fifo_struct wireless_uart_fifo;
static uint8 wireless_uart_buffer[WIRELESS_UART_BUFFER_SIZE];
static uint8 wireless_uart_data = 0;
#if (1 == WIRELESS_UART_AUTO_BAUD_RATE)
static volatile wireless_uart_auto_baudrate_state_enum wireless_auto_baud_flag = WIRELESS_UART_AUTO_BAUD_RATE_INIT;
static volatile uint8 wireless_auto_baud_data[3] = {0x00, 0x01, 0x03};
#endif
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data 8bit <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD> 0-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1-δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wireless_uart_send_byte(data);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint32 wireless_uart_send_byte (const uint8 data)
{
uint16 time_count = WIRELESS_UART_TIMEOUT_COUNT;
while(time_count)
{
if(!gpio_get_level(WIRELESS_UART_RTS_PIN))
{
uart_write_byte(WIRELESS_UART_INDEX, data); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
time_count --;
system_delay_ms(1);
}
return (0 == time_count);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wireless_uart_send_buffer(buff, 64);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint32 wireless_uart_send_buffer (const uint8 *buff, uint32 len)
{
zf_assert(NULL != buff);
uint16 time_count = 0;
while(0 != len)
{
if(!gpio_get_level(WIRELESS_UART_RTS_PIN)) // <20><><EFBFBD><EFBFBD>RTSΪ<53>͵<EFBFBD>ƽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(30 <= len) // <20><><EFBFBD>ݷ<EFBFBD> 30byte ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
uart_write_buffer(WIRELESS_UART_INDEX, buff, 30); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
buff += 30; // <20><>ַƫ<D6B7><C6AB>
len -= 30; // <20><><EFBFBD><EFBFBD>
time_count = 0;
}
else // <20><><EFBFBD><EFBFBD> 30byte <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
uart_write_buffer(WIRELESS_UART_INDEX, buff, len); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
len = 0;
break;
}
}
else // <20><><EFBFBD><EFBFBD>RTSΪ<53>ߵ<EFBFBD>ƽ <20><>ģ<EFBFBD><C4A3>æ
{
if(WIRELESS_UART_TIMEOUT_COUNT <= (++ time_count)) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1>
{
break; // <20>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
}
system_delay_ms(1);
}
}
return len;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wireless_uart_send_string("Believe in yourself.");
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint32 wireless_uart_send_string (const char *str)
{
zf_assert(NULL != str);
uint16 time_count = 0;
uint32 len = strlen(str);
while(0 != len)
{
if(!gpio_get_level(WIRELESS_UART_RTS_PIN)) // <20><><EFBFBD><EFBFBD>RTSΪ<53>͵<EFBFBD>ƽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(30 <= len) // <20><><EFBFBD>ݷ<EFBFBD> 30byte ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
uart_write_buffer(WIRELESS_UART_INDEX, (const uint8 *)str, 30); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
str += 30; // <20><>ַƫ<D6B7><C6AB>
len -= 30; // <20><><EFBFBD><EFBFBD>
time_count = 0;
}
else // <20><><EFBFBD><EFBFBD> 30byte <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
uart_write_buffer(WIRELESS_UART_INDEX, (const uint8 *)str, len);// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
len = 0;
break;
}
}
else // <20><><EFBFBD><EFBFBD>RTSΪ<53>ߵ<EFBFBD>ƽ <20><>ģ<EFBFBD><C4A3>æ
{
if(WIRELESS_UART_TIMEOUT_COUNT <= (++ time_count)) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1>
{
break; // <20>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>
}
system_delay_ms(1);
}
}
return len;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷͼ<CDB7><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>鿴ͼ<E9BFB4><CDBC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *image_addr <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ַ
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> image_size ͼ<><CDBC><EFBFBD>Ĵ<EFBFBD>С
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wireless_uart_send_image(&mt9v03x_image[0][0], MT9V03X_IMAGE_SIZE);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
void wireless_uart_send_image (const uint8 *image_addr, uint32 image_size)
{
zf_assert(NULL != image_addr);
extern uint8 camera_send_image_frame_header[4];
wireless_uart_send_buffer(camera_send_image_frame_header, 4);
wireless_uart_send_buffer((uint8 *)image_addr, image_size);
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><>ȡ<EFBFBD><C8A1><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʵ<>ʶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wireless_uart_read_buffer(buff, 32);
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint32 wireless_uart_read_buffer (uint8 *buff, uint32 len)
{
zf_assert(NULL != buff);
uint32 data_len = len;
fifo_read_buffer(&wireless_uart_fifo, buff, &data_len, FIFO_READ_AND_CLEAN);
return data_len;
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wireless_uart_callback();
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD> ISR <20>ļ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>жϳ<D0B6><CFB3>򱻵<EFBFBD><F2B1BBB5><EFBFBD>
// <20>ɴ<EFBFBD><C9B4><EFBFBD><EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> wireless_module_uart_handler() <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> wireless_module_uart_handler() <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------------------------------------------
void wireless_uart_callback (void)
{
uart_query_byte(WIRELESS_UART_INDEX, &wireless_uart_data);
fifo_write_buffer(&wireless_uart_fifo, &wireless_uart_data, 1);
#if WIRELESS_UART_AUTO_BAUD_RATE // <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(WIRELESS_UART_AUTO_BAUD_RATE_START == wireless_auto_baud_flag && 3 == fifo_used(&wireless_uart_fifo))
{
uint32 wireless_auto_baud_count = 3;
wireless_auto_baud_flag = WIRELESS_UART_AUTO_BAUD_RATE_GET_ACK;
fifo_read_buffer(&wireless_uart_fifo, (uint8 *)wireless_auto_baud_data, (uint32 *)&wireless_auto_baud_count, FIFO_READ_AND_CLEAN);
}
#endif
}
//-------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wireless_uart_init();
// <20><>ע<EFBFBD><D7A2>Ϣ
//-------------------------------------------------------------------------------------------------------------------
uint8 wireless_uart_init (void)
{
uint8 return_state = 0;
set_wireless_type(WIRELESS_UART, wireless_uart_callback);
fifo_init(&wireless_uart_fifo, FIFO_DATA_8BIT, wireless_uart_buffer, WIRELESS_UART_BUFFER_SIZE);
gpio_init(WIRELESS_UART_RTS_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
#if(0 == WIRELESS_UART_AUTO_BAUD_RATE) // <20>ر<EFBFBD><D8B1>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õIJ<C3B5><C4B2><EFBFBD><EFBFBD><EFBFBD>Ϊ115200 Ϊ<><CEAA><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>޸Ĵ<DEB8><C4B4>ڵIJ<DAB5><C4B2><EFBFBD><EFBFBD><EFBFBD>
uart_init (WIRELESS_UART_INDEX, WIRELESS_UART_BUAD_RATE, WIRELESS_UART_RX_PIN, WIRELESS_UART_TX_PIN); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uart_rx_interrupt(WIRELESS_UART_INDEX, 1);
#elif(1 == WIRELESS_UART_AUTO_BAUD_RATE) // <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 rts_init_status = 0;
uint16 time_count = 0;
wireless_auto_baud_flag = WIRELESS_UART_AUTO_BAUD_RATE_INIT;
wireless_auto_baud_data[0] = 0;
wireless_auto_baud_data[1] = 1;
wireless_auto_baud_data[2] = 3;
rts_init_status = gpio_get_level(WIRELESS_UART_RTS_PIN);
gpio_init(WIRELESS_UART_RTS_PIN, GPO, rts_init_status, GPO_PUSH_PULL); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uart_init (WIRELESS_UART_INDEX, WIRELESS_UART_BUAD_RATE, WIRELESS_UART_RX_PIN, WIRELESS_UART_TX_PIN); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uart_rx_interrupt(WIRELESS_UART_INDEX, 1);
system_delay_ms(5); // ģ<><C4A3><EFBFBD>ϵ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ʱ<EFBFBD>ȴ<EFBFBD>
gpio_set_level(WIRELESS_UART_RTS_PIN, !rts_init_status); // RTS<54><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
system_delay_ms(100); // RTS<54><53><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ20ms
gpio_toggle_level(WIRELESS_UART_RTS_PIN); // RTS<54><53><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
do
{
wireless_auto_baud_flag = WIRELESS_UART_AUTO_BAUD_RATE_START;
uart_write_byte(WIRELESS_UART_INDEX, wireless_auto_baud_data[0]); // <20><><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>Զ<EFBFBD><D4B6>жϲ<D0B6><CFB2><EFBFBD><EFBFBD><EFBFBD>
uart_write_byte(WIRELESS_UART_INDEX, wireless_auto_baud_data[1]); // <20><><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>Զ<EFBFBD><D4B6>жϲ<D0B6><CFB2><EFBFBD><EFBFBD><EFBFBD>
uart_write_byte(WIRELESS_UART_INDEX, wireless_auto_baud_data[2]); // <20><><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>Զ<EFBFBD><D4B6>жϲ<D0B6><CFB2><EFBFBD><EFBFBD><EFBFBD>
system_delay_ms(20);
if(WIRELESS_UART_AUTO_BAUD_RATE_GET_ACK != wireless_auto_baud_flag) // <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
{
return_state = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ˵<><CBB5><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7><EFBFBD><EFBFBD>
break;
}
time_count = 0;
if( 0xa5 != wireless_auto_baud_data[0] && // <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
0xff != wireless_auto_baud_data[1] && // <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
0xff != wireless_auto_baud_data[2] ) // <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
{
return_state = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ˵<><CBB5><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7><EFBFBD><EFBFBD>
break;
}
wireless_auto_baud_flag = WIRELESS_UART_AUTO_BAUD_RATE_SUCCESS;
gpio_init(WIRELESS_UART_RTS_PIN, GPI, 0, GPI_PULL_UP); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
system_delay_ms(10); // <20><>ʱ<EFBFBD>ȴ<EFBFBD> ģ<><C4A3>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}while(0);
#endif
return return_state;
}

View File

@@ -0,0 +1,103 @@
/*********************************************************************************************************************
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD><EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
*
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
*
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD><EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD>
*
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
*
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
*
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_wireless_uart
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾
* <20><EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
*
* <20>޸ļ<DEB8>¼
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
* 2022-09-15 pudding first version
* 2023-04-28 pudding <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>˵<EFBFBD><CBB5>
********************************************************************************************************************/
/*********************************************************************************************************************
* <20><><EFBFBD>߶<EFBFBD><DFB6>
* ------------------------------------
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
* RX <20>鿴 zf_device_wireless_uart.h <20><> WIRELESS_UART_RX_PINx <20><EFBFBD><EAB6A8>
* TX <20>鿴 zf_device_wireless_uart.h <20><> WIRELESS_UART_TX_PINx <20><EFBFBD><EAB6A8>
* RTS <20>鿴 zf_device_wireless_uart.h <20><> WIRELESS_UART_RTS_PINx <20><EFBFBD><EAB6A8>
* VCC 3.3V<EFBFBD><EFBFBD>Դ
* GND <20><>Դ<EFBFBD><D4B4>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ------------------------------------
********************************************************************************************************************/
#ifndef _zf_device_wireless_uart_h_
#define _zf_device_wireless_uart_h_
#include "zf_common_typedef.h"
//================================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
#define WIRELESS_UART_INDEX (UART_2) // <20><><EFBFBD>ߴ<EFBFBD><DFB4>ڶ<EFBFBD>Ӧʹ<D3A6>õĴ<C3B5><C4B4>ں<EFBFBD>
#define WIRELESS_UART_BUAD_RATE (115200) // <20><><EFBFBD>ߴ<EFBFBD><DFB4>ڶ<EFBFBD>Ӧʹ<D3A6>õĴ<C3B5><C4B4>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
#define WIRELESS_UART_TX_PIN (UART2_RX_P10_6) // <20><><EFBFBD>ߴ<EFBFBD><DFB4>ڶ<EFBFBD>Ӧģ<D3A6><C4A3><EFBFBD><EFBFBD> TX Ҫ<>ӵ<EFBFBD><D3B5><EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD> RX
#define WIRELESS_UART_RX_PIN (UART2_TX_P10_5) // <20><><EFBFBD>ߴ<EFBFBD><DFB4>ڶ<EFBFBD>Ӧģ<D3A6><C4A3><EFBFBD><EFBFBD> RX Ҫ<>ӵ<EFBFBD><D3B5><EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD> TX
#define WIRELESS_UART_RTS_PIN (P10_2) // <20><><EFBFBD>ߴ<EFBFBD><DFB4>ڶ<EFBFBD>Ӧģ<D3A6><C4A3><EFBFBD><EFBFBD> RTS <20><><EFBFBD><EFBFBD>
//====================================================<3D>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>====================================================
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><E6B1BE>V2.0<EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵġ<EFBFBD>
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RTS<54><53><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1BFAA>ʧ<EFBFBD>ܡ<EFBFBD>
// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33>ģ<EFBFBD><C4A3><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܵĻ<DCB5> <20><><EFBFBD>Գ<EFBFBD><D4B3>Զϵ<D4B6><CFB5><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 0<><30><EFBFBD>ر<EFBFBD><D8B1>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD> WIRELESS_UART_BAUD ֮<><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ӧ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>
#define WIRELESS_UART_AUTO_BAUD_RATE ( 1 )
//====================================================<3D>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>====================================================
#if (1 == WIRELESS_UART_AUTO_BAUD_RATE)
typedef enum
{
WIRELESS_UART_AUTO_BAUD_RATE_SUCCESS,
WIRELESS_UART_AUTO_BAUD_RATE_INIT,
WIRELESS_UART_AUTO_BAUD_RATE_START,
WIRELESS_UART_AUTO_BAUD_RATE_GET_ACK,
}wireless_uart_auto_baudrate_state_enum;
#endif
#define WIRELESS_UART_BUFFER_SIZE ( 64 )
#define WIRELESS_UART_TIMEOUT_COUNT ( 0x64 )
//================================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
//================================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
uint32 wireless_uart_send_byte (const uint8 data);
uint32 wireless_uart_send_buffer (const uint8 *buff, uint32 len);
uint32 wireless_uart_send_string (const char *str);
void wireless_uart_send_image (const uint8 *image_addr, uint32 image_size);
uint32 wireless_uart_read_buffer (uint8 *buff, uint32 len);
void wireless_uart_callback (void);
uint8 wireless_uart_init (void);
//================================================<3D><><EFBFBD><EFBFBD> <20><><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
#endif

View File

@@ -0,0 +1,99 @@
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ϸ<EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̿ͷ<EFBFBD><EFBFBD><EFBFBD>https://seekfree.taobao.com/
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ϸ<EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̿ͷ<EFBFBD><EFBFBD><EFBFBD>https://seekfree.taobao.com/
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ϸ<EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̿ͷ<EFBFBD><EFBFBD><EFBFBD>https://seekfree.taobao.com/
<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD> zf_device Ŀ¼<C4BF>¸<EFBFBD><C2B8><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD> zf_device Ŀ¼<C4BF>¸<EFBFBD><C2B8><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD> zf_device Ŀ¼<C4BF>¸<EFBFBD><C2B8><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
=================================================== <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> ===================================================
zf_device_dl1a.h TOF <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> DL1A Ƶ<>ʣ<EFBFBD>33hz <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룺1.2 <20><>
zf_device_dl1b.h TOF <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> DL1B Ƶ<>ʣ<EFBFBD>100hz <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룺1.4 <20><>
=================================================== <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> ===================================================
==================================================== <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ====================================================
zf_device_mpu6050.h MPU6050 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ͳ IIC ͨѶ
zf_device_icm20602.h ICM20602 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֧<><D6A7> SPI <20><>ֵ
zf_device_imu660ra.h IMU660RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߾<EFBFBD><DFBE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
zf_device_imu963ra.h IMU963RA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֧<>ֵشżƲɼ<C6B2>
==================================================== <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ====================================================
=================================================== <20><>Ļ<EFBFBD><C4BB>ʾ ===================================================
zf_device_ips114.h IPS114 Һ<><D2BA><EFBFBD><EFBFBD>Ļ 1.14 <20><> <20>ֱ<EFBFBD><D6B1>ʣ<EFBFBD>240 * 135
zf_device_ips200.h IPS200 Һ<><D2BA><EFBFBD><EFBFBD>Ļ 2.0 <20><> <20>ֱ<EFBFBD><D6B1>ʣ<EFBFBD>240 * 320
zf_device_tft180.h TFT180 <20><>Ļ 1.8<EFBFBD><EFBFBD> <20>ֱ<EFBFBD><D6B1>ʣ<EFBFBD>160 * 128
zf_device_oled.h OLED Һ<><D2BA><EFBFBD><EFBFBD>Ļ 0.96 <20><> <20>ֱ<EFBFBD><D6B1>ʣ<EFBFBD>128 * 64
=================================================== <20><>Ļ<EFBFBD><C4BB>ʾ ===================================================
================================================== ͼ<>񴫸<EFBFBD><F1B4ABB8><EFBFBD> ==================================================
zf_device_mt9v03x.h MT9V03X <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD><D2B6><EFBFBD><EFBFBD><EFBFBD>ͷ
zf_device_ov7725.h OV7725 С<><D0A1><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
zf_device_scc8660.h SCC8660 <20><>ͫ<EFBFBD><CDAB>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ͷ
zf_device_tsl1401.h TSL1401 <20><EFBFBD><ECBAA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CCD
================================================== ͼ<>񴫸<EFBFBD><F1B4ABB8><EFBFBD> ==================================================
=================================================== <20><><EFBFBD><EFBFBD>ͨѶ ===================================================
zf_device_ble6a20.h <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3> <20><><EFBFBD><EFBFBD>ͨѶ
zf_device_bluetooth_ch9141.h CH9141 <20><><EFBFBD><EFBFBD>ͨѶģ<D1B6><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ
zf_device_wifi_spi.h WIFI-SPI <20><><EFBFBD><EFBFBD>WIFI<46><49><EFBFBD><EFBFBD>ͨѶģ<D1B6><C4A3>
zf_device_wifi_uart.h WIFI-UART <20><><EFBFBD><EFBFBD>WIFI<46><49><EFBFBD><EFBFBD>ͨѶģ<D1B6><C4A3>
zf_device_wireless_uart.h <20><><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD>ģ<EFBFBD><C4A3>
=================================================== <20><><EFBFBD><EFBFBD>ͨѶ ===================================================
=================================================== Զ<><D4B6>ң<EFBFBD><D2A3> ===================================================
zf_device_uart_receiver.h SUBS <20><><EFBFBD><EFBFBD>ң<EFBFBD><D2A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ͨѶ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><D2A3> 2.4GƵ<EFBFBD><EFBFBD>
=================================================== Զ<><D4B6>ң<EFBFBD><D2A3> ===================================================
================================================== <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ==================================================
zf_device_absolute_encoder.h 360<36><30> λ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD> mini <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֱ<EFBFBD><D6B1>ʣ<EFBFBD>0.088<EFBFBD><EFBFBD>
zf_device_menc15a.h 15λ<35>߾<EFBFBD><DFBE>ȴű<C8B4><C5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> λ<><CEBB>ʽ
zf_device_gnss.h GPS <20><> RTK <20><>λģ<CEBB><C4A3> ˫Ƶ<CBAB>߾<EFBFBD><DFBE>ȶ<EFBFBD>λģ<CEBB><C4A3> <20><><EFBFBD>׼<EFBFBD><D7BC><EFBFBD>λ
zf_device_key.h GPIO <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B0B4>״̬
zf_device_virtual_oscilloscope.h VisualScope <20><><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
================================================== <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ==================================================