296 lines
14 KiB
C
296 lines
14 KiB
C
|
|
/*********************************************************************************************************************
|
|||
|
|
* CH32V307VCT6 Opensourec Library <EFBFBD><EFBFBD><EFBFBD><EFBFBD>CH32V307VCT6 <EFBFBD><EFBFBD>Դ<EFBFBD>⣩<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹٷ<EFBFBD> SDK <EFBFBD>ӿڵĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>
|
|||
|
|
* Copyright (c) 2022 SEEKFREE <EFBFBD><EFBFBD><EFBFBD>ɿƼ<EFBFBD>
|
|||
|
|
*
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>CH32V307VCT6 <EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* CH32V307VCT6 <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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᷢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> GPL<EFBFBD><EFBFBD>GNU General Public License<EFBFBD><EFBFBD><EFBFBD><EFBFBD> GNUͨ<EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD> GPL <EFBFBD>ĵ<EFBFBD>3<EFBFBD>棨<EFBFBD><EFBFBD> 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>/<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><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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><EFBFBD>ʺ<EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
|
|||
|
|
*
|
|||
|
|
* <EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<EFBFBD>յ<EFBFBD>һ<EFBFBD><EFBFBD> GPL <EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
|
|||
|
|
*
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD> 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><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><EFBFBD><EFBFBD> libraries/doc <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <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><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>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> zf_device_wireless_uart
|
|||
|
|
* <EFBFBD><EFBFBD>˾<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ɶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˾
|
|||
|
|
* <EFBFBD>汾<EFBFBD><EFBFBD>Ϣ <EFBFBD>鿴 libraries/doc <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> version <EFBFBD>ļ<EFBFBD> <EFBFBD>汾˵<EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
|
|||
|
|
*
|
|||
|
|
* <EFBFBD>ļ<EFBFBD>¼
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ע
|
|||
|
|
* 2022-09-15 <EFBFBD><EFBFBD>W first version
|
|||
|
|
********************************************************************************************************************/
|
|||
|
|
/*********************************************************************************************************************
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD><EFBFBD>壺
|
|||
|
|
* ------------------------------------
|
|||
|
|
* ģ<EFBFBD><EFBFBD><EFBFBD>ܽ<EFBFBD> <EFBFBD><EFBFBD>Ƭ<EFBFBD><EFBFBD><EFBFBD>ܽ<EFBFBD>
|
|||
|
|
* RX <EFBFBD>鿴 zf_device_wireless_uart.h <EFBFBD><EFBFBD> WIRELESS_UART_RX_PIN <EFBFBD>궨<EFBFBD><EFBFBD>
|
|||
|
|
* TX <EFBFBD>鿴 zf_device_wireless_uart.h <EFBFBD><EFBFBD> WIRELESS_UART_TX_PIN <EFBFBD>궨<EFBFBD><EFBFBD>
|
|||
|
|
* RTS <EFBFBD>鿴 zf_device_wireless_uart.h <EFBFBD><EFBFBD> WIRELESS_UART_RTS_PIN <EFBFBD>궨<EFBFBD><EFBFBD>
|
|||
|
|
* VCC 3.3V<EFBFBD><EFBFBD>Դ
|
|||
|
|
* GND <EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><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_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;
|
|||
|
|
}
|