377 lines
10 KiB
C
377 lines
10 KiB
C
|
/****
|
|||
|
*****<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>
|
|||
|
*****<EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*****<EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD>Ż<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*****<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*****<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϽ<EFBFBD><EFBFBD>պ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*****<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><EFBFBD>ͺ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
****/
|
|||
|
|
|||
|
#include "Usart.h"
|
|||
|
#include "ptz_struct.h"
|
|||
|
#include "gd32f4xx_it.h"
|
|||
|
device_handle uart_485_handle = 0;
|
|||
|
device_handle uart_422_handle = 0;
|
|||
|
BSP_OS_SEM ser_mutex;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽں<D6BD><DABA><EFBFBD>
|
|||
|
uart_device_info uart_devices[6]={
|
|||
|
// init index
|
|||
|
{ 0, 0,},
|
|||
|
{ 0, 1,},
|
|||
|
{ 0, 2,},
|
|||
|
{ 0, 3,},
|
|||
|
{ 0, 4,},
|
|||
|
{ 0, 5,}
|
|||
|
};
|
|||
|
|
|||
|
RingQueue ring_que;
|
|||
|
u_int8_t ptz_uart_buff[10];
|
|||
|
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>
|
|||
|
//RS422
|
|||
|
u_int8_t ptz_uart_422_buff[PTZ_UART_422_BUFF_SIZE];
|
|||
|
char uart_422_state = 0;
|
|||
|
//RS485
|
|||
|
u_int8_t ptz_uart_485_buff[PTZ_UART_485_BUFF_SIZE];
|
|||
|
char uart_485_state = 0;
|
|||
|
|
|||
|
|
|||
|
int bata;
|
|||
|
char uart_data;
|
|||
|
|
|||
|
|
|||
|
/// @brief <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>š<EFBFBD><C5A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @param[in] usart_periph:USARTx(x=0,1,2)
|
|||
|
/// @param[in] baud:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @return none
|
|||
|
/// @note <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// LH<4C><48>2022-05-20
|
|||
|
static void usart_config(uint32_t usart_periph, int baud)
|
|||
|
{
|
|||
|
switch(usart_periph)
|
|||
|
{
|
|||
|
case TEST://<2F><><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD>Զ˿<D4B6>
|
|||
|
//ʹ<>ܶ˿<DCB6>ʱ<EFBFBD><CAB1>
|
|||
|
rcu_periph_clock_enable(RCU_GPIOA);
|
|||
|
//ʹ<>ܴ<EFBFBD><DCB4><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
rcu_periph_clock_enable(RCU_USART0);
|
|||
|
gpio_af_set(GPIOA, GPIO_AF_7, GPIO_PIN_9);//TX
|
|||
|
gpio_af_set(GPIOA, GPIO_AF_7, GPIO_PIN_10);//RX
|
|||
|
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE,GPIO_PIN_9);
|
|||
|
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_9);
|
|||
|
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE,GPIO_PIN_10);
|
|||
|
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_10);
|
|||
|
break;
|
|||
|
|
|||
|
case UART_485://<2F><><EFBFBD><EFBFBD>1<EFBFBD><31>485
|
|||
|
//ʹ<>ܶ˿<DCB6>ʱ<EFBFBD><CAB1>
|
|||
|
rcu_periph_clock_enable(RCU_GPIOD);
|
|||
|
//ʹ<>ܴ<EFBFBD><DCB4><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
rcu_periph_clock_enable(RCU_USART1);
|
|||
|
gpio_af_set(GPIOD, GPIO_AF_7, GPIO_PIN_5);//TX
|
|||
|
gpio_af_set(GPIOD, GPIO_AF_7, GPIO_PIN_6);//RX
|
|||
|
gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_NONE,GPIO_PIN_5);
|
|||
|
gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_5);
|
|||
|
gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_NONE,GPIO_PIN_6);
|
|||
|
gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_6);
|
|||
|
///<2F>շ<EFBFBD>ģʽѡ<CABD><D1A1>
|
|||
|
gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_7);
|
|||
|
gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_7);
|
|||
|
break;
|
|||
|
|
|||
|
case UART_422://<2F><><EFBFBD><EFBFBD>2<EFBFBD><32>422
|
|||
|
//ʹ<>ܶ˿<DCB6>ʱ<EFBFBD><CAB1>
|
|||
|
rcu_periph_clock_enable(RCU_GPIOD);
|
|||
|
//ʹ<>ܴ<EFBFBD><DCB4><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
rcu_periph_clock_enable(RCU_USART2);
|
|||
|
gpio_af_set(GPIOD, GPIO_AF_7, GPIO_PIN_8);//TX
|
|||
|
gpio_af_set(GPIOD, GPIO_AF_7, GPIO_PIN_9);//RX
|
|||
|
gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_NONE,GPIO_PIN_8);
|
|||
|
gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_8);
|
|||
|
gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_NONE,GPIO_PIN_9);
|
|||
|
gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_9);
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
///<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
usart_deinit(usart_periph);//ʱ<>Ӹ<EFBFBD>λ
|
|||
|
usart_baudrate_set(usart_periph,baud);//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD>ʣ<EFBFBD>Ĭ<EFBFBD><C4AC>9600
|
|||
|
usart_receive_config(usart_periph, USART_RECEIVE_ENABLE);//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
usart_transmit_config(usart_periph, USART_TRANSMIT_ENABLE);//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
usart_enable(usart_periph);//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
|
|||
|
//ʹ<>ܽ<EFBFBD><DCBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
usart_interrupt_enable(usart_periph, USART_INT_RBNE);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/// @brief <20>ж<EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @param[in] usart_periph:USARTx(x=0,1,2)
|
|||
|
/// @return none
|
|||
|
/// @note <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// LH<4C><48>2022-05-20
|
|||
|
static void Usart_Nvic_config(uint32_t usart_periph)
|
|||
|
{
|
|||
|
switch(usart_periph)
|
|||
|
{
|
|||
|
case TEST://<2F><><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD>Զ˿<D4B6>
|
|||
|
//ʹ<>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
nvic_irq_enable(USART0_IRQn, 4, 0);//<2F><>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ3<CEAA><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD><CCAB><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>̫<EFBFBD><CCAB>Ϊ2
|
|||
|
break;
|
|||
|
|
|||
|
case UART_485://<2F><><EFBFBD><EFBFBD>1<EFBFBD><31>485
|
|||
|
nvic_irq_enable(USART1_IRQn, 3, 0);//<2F><><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ3<CEAA><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>Ϊ1
|
|||
|
break;
|
|||
|
|
|||
|
case UART_422://<2F><><EFBFBD><EFBFBD>2<EFBFBD><32>422
|
|||
|
nvic_irq_enable(USART2_IRQn, 3, 1);//<2F><><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>Ϊ3<CEAA><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>Ϊ2
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
break;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// @brief <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ζ<EFBFBD><CEB6>С<EFBFBD><D0A1><EFBFBD>Դ<EFBFBD><D4B4>
|
|||
|
/// @param[in] usart_periph:USARTx(x=0,1,2)
|
|||
|
/// @param[in] index:<3A>豸<EFBFBD>˿<EFBFBD>
|
|||
|
/// @param[in] *buff:<3A><><EFBFBD>е<EFBFBD>ַ
|
|||
|
/// @param[in] buff_size:<3A><><EFBFBD>г<EFBFBD><D0B3><EFBFBD>
|
|||
|
/// @return device_handle<6C><65><EFBFBD>豸<EFBFBD><E8B1B8>ַ
|
|||
|
/// @note <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// LH<4C><48>2022-05-20
|
|||
|
device_handle uart_init(uint32_t usart_periph, uint32_t index, u_int8_t *buff, int buff_size)
|
|||
|
{
|
|||
|
if(!uart_devices[index].init)
|
|||
|
{//û<>г<EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
InitRingQueue(&uart_devices[index].uart_ring_queue, buff, buff_size); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ζ<EFBFBD><CEB6>л<EFBFBD><D0BB><EFBFBD>
|
|||
|
BSP_OS_SemCreate(&uart_devices[index].port_mutex,1u,"port mutex");
|
|||
|
BSP_OS_SemCreate(&uart_devices[index].ser_mutex,1u,"serial mutex");
|
|||
|
BSP_OS_SemCreate(&uart_devices[index].sem_recv_data,0u,"sem recv data");
|
|||
|
uart_devices[index].init = 1;
|
|||
|
}
|
|||
|
|
|||
|
return (device_handle)(&uart_devices[index]);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8>ʼ<EFBFBD><CABC>
|
|||
|
/// @param[in] none
|
|||
|
/// @return none
|
|||
|
/// @note <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// LH<4C><48>2022-05-20
|
|||
|
static void Uart_Init(void)
|
|||
|
{
|
|||
|
///485<38><35><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8>ʼ<EFBFBD><CABC>UART_485
|
|||
|
usart_config(UART_485, g_ptz.uart_485_baud);//<2F><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
Usart_Nvic_config(UART_485);//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
uart_485_handle = uart_init(UART_485, PTZ_UART_485_INDEX, ptz_uart_485_buff, sizeof(ptz_uart_485_buff));
|
|||
|
BSP_IntVectSet(54,USART1_IRQHandler);
|
|||
|
BSP_IntEn(54);
|
|||
|
|
|||
|
///422<32><32><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8>ʼ<EFBFBD><CABC>
|
|||
|
usart_config(UART_422, g_ptz.uart_422_baud);//<2F><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
Usart_Nvic_config(UART_422);//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
uart_422_handle = uart_init(UART_422, PTZ_UART_422_INDEX, ptz_uart_422_buff, sizeof(ptz_uart_422_buff));
|
|||
|
BSP_IntVectSet(55,USART2_IRQHandler);
|
|||
|
BSP_IntEn(55);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// @brief 485<38><35><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @param[in] data:
|
|||
|
/// @return none
|
|||
|
/// @note <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// LH<4C><48>2022-05-20
|
|||
|
void IRQHandler_485_process(u_int8_t data)
|
|||
|
{
|
|||
|
uart_device_info *dev = (uart_device_info *)uart_485_handle;//<2F>ն˽<D5B6><CBBD><EFBFBD>
|
|||
|
|
|||
|
if(!RingQueueFull(&dev->uart_ring_queue))
|
|||
|
{
|
|||
|
InRingQueue(&dev->uart_ring_queue, data);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/// @brief 422<32><32><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @param[in] data<74><61>
|
|||
|
/// @return none
|
|||
|
/// @note <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// LH<4C><48>2022-05-20
|
|||
|
void IRQHandler_422_process(u_int8_t data)
|
|||
|
{
|
|||
|
uart_device_info *dev = (uart_device_info *)uart_422_handle;//<2F>ն˽<D5B6><CBBD><EFBFBD>
|
|||
|
|
|||
|
if(!RingQueueFull(&dev->uart_ring_queue))
|
|||
|
{
|
|||
|
InRingQueue(&dev->uart_ring_queue, data);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
///<2F><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
void ptz_uart_dev_send(device_handle device, void *data, int len)
|
|||
|
{
|
|||
|
unsigned char buff;
|
|||
|
|
|||
|
uart_device_info *device_info = (uart_device_info *)device;
|
|||
|
if((!device) || (!device_info->init))
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
BSP_OS_SemWait(&device_info->ser_mutex, 0u);
|
|||
|
|
|||
|
if(device == uart_485_handle)
|
|||
|
{
|
|||
|
PTZ_UART_485_TX;
|
|||
|
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
|
|||
|
|
|||
|
for (int i = 0; i<len; i++)
|
|||
|
{
|
|||
|
buff = ((u_int8_t *)data)[i];
|
|||
|
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
while(RESET == usart_flag_get(USART1, USART_FLAG_TBE)){}
|
|||
|
//д<>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|||
|
usart_data_transmit(USART1, buff);
|
|||
|
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
while(RESET == usart_flag_get(USART1, USART_FLAG_TC)){}
|
|||
|
if((i % 100) == 0 && i > 0)
|
|||
|
{
|
|||
|
OSTimeDlyHMSM(0u, 0u, 0u, 2u);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
|
|||
|
PTZ_UART_485_RX;
|
|||
|
}
|
|||
|
|
|||
|
if(device == uart_422_handle)
|
|||
|
{
|
|||
|
for (int i = 0; i<len; i++)
|
|||
|
{
|
|||
|
buff = ((u_int8_t *)data)[i];
|
|||
|
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
while(RESET == usart_flag_get(USART2, USART_FLAG_TBE)){}
|
|||
|
//д<>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|||
|
usart_data_transmit(USART2, buff);
|
|||
|
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
while(RESET == usart_flag_get(USART2, USART_FLAG_TC)){}
|
|||
|
if((i % 100) == 0 && i > 0)
|
|||
|
{
|
|||
|
OSTimeDlyHMSM(0u, 0u, 0u, 2u);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
BSP_OS_SemPost(&device_info->ser_mutex);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*******************************************************************************
|
|||
|
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
|
|||
|
** <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
** <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
** <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
********************************************************************************/
|
|||
|
int uart_dev_char_present(device_handle device)
|
|||
|
{
|
|||
|
uart_device_info *device_info = (uart_device_info *)device;
|
|||
|
|
|||
|
if((!device) || (!device_info->init))
|
|||
|
return 0;
|
|||
|
return !RingQueueEmpty(&device_info->uart_ring_queue);
|
|||
|
}
|
|||
|
|
|||
|
/*******************************************************************************
|
|||
|
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
|
|||
|
** <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD>ӻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
** <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
** <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
********************************************************************************/
|
|||
|
char uart_dev_in_char(device_handle device)
|
|||
|
{
|
|||
|
uart_device_info *device_info = (uart_device_info *)device;
|
|||
|
char c = 0;
|
|||
|
|
|||
|
if (uart_dev_char_present(device)) //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ζ<EFBFBD><CEB6>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
OutRingQueue(&device_info->uart_ring_queue, (u_int8_t*)&c);
|
|||
|
return c;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
char ptz_uart_dev_in_char(device_handle device)
|
|||
|
{
|
|||
|
uart_device_info *device_info = (uart_device_info *)device;
|
|||
|
char c = 0;
|
|||
|
|
|||
|
if (uart_dev_char_present(device)) //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ζ<EFBFBD><CEB6>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
OutRingQueue(&device_info->uart_ring_queue, (u_int8_t*)&c);
|
|||
|
return c;
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
int ptz_uart_dev_char_present(device_handle device)
|
|||
|
{
|
|||
|
uart_device_info *device_info = (uart_device_info *)device;
|
|||
|
|
|||
|
if((!device) || (!device_info->init))
|
|||
|
return 0;
|
|||
|
return !RingQueueEmpty(&device_info->uart_ring_queue);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
void Usart_init_module()
|
|||
|
{
|
|||
|
Uart_Init();
|
|||
|
}
|
|||
|
|
|||
|
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>ն˴<D5B6><CBB4><EFBFBD>
|
|||
|
void init_term_uart()
|
|||
|
{
|
|||
|
//ʹ<>ܶ˿<DCB6>ʱ<EFBFBD><CAB1>
|
|||
|
rcu_periph_clock_enable(RCU_GPIOA);
|
|||
|
|
|||
|
//ʹ<>ܴ<EFBFBD><DCB4><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
rcu_periph_clock_enable(RCU_USART0);
|
|||
|
|
|||
|
/* connect port to USARTx_Tx */
|
|||
|
gpio_af_set(GPIOA, GPIO_AF_7, GPIO_PIN_9);
|
|||
|
|
|||
|
/* connect port to USARTx_Rx */
|
|||
|
gpio_af_set(GPIOA, GPIO_AF_7, GPIO_PIN_10);
|
|||
|
|
|||
|
/* configure USART Tx as alternate function push-pull */
|
|||
|
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_9);
|
|||
|
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_9);
|
|||
|
|
|||
|
/* configure USART Rx as alternate function push-pull */
|
|||
|
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_10);
|
|||
|
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_10);
|
|||
|
|
|||
|
/* USART configure */
|
|||
|
usart_deinit(USART0);//ʱ<>Ӹ<EFBFBD>λ
|
|||
|
usart_baudrate_set(USART0,9600U);//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
usart_receive_config(USART0, USART_RECEIVE_ENABLE);//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
usart_enable(USART0);//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
|
|||
|
// BSP_OS_SemCreate(&ser_mutex,0u,"udp_send_data_mutex");
|
|||
|
|
|||
|
}
|