| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- #include "include.h"
- #include "driver_gpio.h"
- #include "driver_uart.h"
- #include "uart_transfer.h"
- #if TRACE_EN
- #define TRACE(...) my_printf("[WIRELESS] ");\
- my_printf(__VA_ARGS__)
- #define TRACE_R(...) my_print_r(__VA_ARGS__);
- #else
- #define TRACE(...)
- #define TRACE_R(...)
- #endif // TRACE_EN
- #define UART_TX_PORT GPIOA_REG
- #define UART_TX_PIN GPIO_PIN_5
- #define UART_RX_PORT GPIOA_REG
- #define UART_RX_PIN GPIO_PIN_6
- #define USB_EP1_COOR_SIZE (PACKAGE_POINT_SIZE *(MAX_POINT/PACKAGE_POINT_NUM))
- uart_transfer_cb_typedef uart_rx = {
- .done = 0,
- .len = 0,
- .backlen = 0,
- .timeout = 50, //ms
- };
- u8 u8ReceiveDataStep = 0;
- AT(.com_text.isr)
- void uart_isr(void)
- {
- if (uart_get_flag(UART, UART_IT_RX) != RESET) {
- uart_rx.tick = tick_get();
- if (uart_rx.len < sizeof(uart_rx.buf))
- {
- switch (u8ReceiveDataStep)
- {
- case 0:
- if (uart_receive_data(UART) == 0x55)
- {
- uart_rx.buf[uart_rx.len++] = uart_receive_data(UART);
- u8ReceiveDataStep = 1;
- }
- else
- {
- uart_rx.len = 0;
- u8ReceiveDataStep = 0;
- }
- break;
- case 1:
- if (uart_receive_data(UART) == 0x54)
- {
- uart_rx.buf[uart_rx.len++] = uart_receive_data(UART);
- u8ReceiveDataStep = 2;
- }
- else
- {
- uart_rx.len = 0;
- u8ReceiveDataStep = 0;
- }
- break;
- /*
- case 2:
- if ((uart_receive_data(UART) & 0x80) == 0x80)
- {
- uart_rx.buf[uart_rx.len++] = uart_receive_data(UART);
- u8ReceiveDataStep = 3;
- }
- else
- {
- uart_rx.len = 0;
- u8ReceiveDataStep = 0;
- }
- break;
- */
- default:
- uart_rx.buf[uart_rx.len++] = uart_receive_data(UART);
- break;
- }
- }
- uart_clear_flag(UART, UART_IT_RX);
- }
- }
- void uart_transfer_init(u32 baud)
- {
- if (bTransmitEn == TRUE) //transmit
- {
- return;
- }
- uart_init_typedef uart_init_struct;
- gpio_init_typedef gpio_init_structure;
- clk_gate0_cmd(CLK_GATE0_UART, CLK_EN);
- //clk_udet_clk_set(XOSC24M_CLK); //udet 必须调用
- // RX
- gpio_init_structure.gpio_pin = UART_RX_PIN;
- gpio_init_structure.gpio_dir = GPIO_DIR_INPUT;
- gpio_init_structure.gpio_fen = GPIO_FEN_PER;
- gpio_init_structure.gpio_fdir = GPIO_FDIR_SELF;
- gpio_init_structure.gpio_mode = GPIO_MODE_DIGITAL;
- gpio_init_structure.gpio_pupd = GPIO_PUPD_PU10K;
- gpio_init(UART_RX_PORT, &gpio_init_structure);
- // TX
- gpio_init_structure.gpio_pin = UART_TX_PIN;
- gpio_init_structure.gpio_dir = GPIO_DIR_OUTPUT;
- gpio_init_structure.gpio_drv = GPIO_DRV_6MA;
- gpio_init(UART_TX_PORT, &gpio_init_structure);
- gpio_func_mapping_config(UART_RX_PORT, UART_RX_PIN, GPIO_CROSSBAR_IN_UARTRX);
- gpio_func_mapping_config(UART_TX_PORT, UART_TX_PIN, GPIO_CROSSBAR_OUT_UARTTX);
- uart_init_struct.baud = baud;
- uart_init_struct.mode = UART_SEND_RECV_MODE;
- uart_init_struct.word_len = UART_WORD_LENGTH_8b;
- uart_init_struct.stop_bits = UART_STOP_BIT_1BIT;
- uart_init_struct.one_line_enable = UART_SEPARATE;
- /* Only UART Valid */
- uart_init_struct.baud_fix = UART_BAUD_FIX;
- /* Only UART Valid */
- uart_init_struct.clock_source = UART_INC_CLOCK;
- uart_init(UART, &uart_init_struct);
- uart_pic_config(UART, uart_isr, 0, UART_IT_RX, ENABLE);
- uart_cmd(UART, ENABLE);
- //PRINT("uart_transfer_init\n");
- }
- void uart_transfer_data()
- {
- //if (((tick_get() - uart_rx.tick) >= uart_rx.timeout) && uart_rx.len)
- if ((USB_EP1_COOR_SIZE + 10) == uart_rx.len)
- {
- //uart_rx.done = 1;
- while (uart_rx.backlen < 10) {
- uart_rx.bufback[uart_rx.backlen] = uart_rx.buf[USB_EP1_COOR_SIZE + uart_rx.backlen];
- uart_rx.backlen++;
- }
- uart_rx.len = 0;
- u8ReceiveDataStep = 0;
- u8 *p = uart_rx.bufback;
- while (uart_rx.backlen) {
- uart_send_data(UART, *p++);
- while (uart_get_flag(UART, UART_IT_TX) != SET);
- uart_rx.backlen --;
- }
- }
- }
- void uart_to_wireless_transfer_data()
- {
- if (10 == uart_rx.len)
- {
- while (uart_rx.backlen < 10) {
- uart_rx.bufback[uart_rx.backlen] = uart_rx.buf[uart_rx.backlen];
- uart_rx.backlen++;
- }
- uart_rx.len = 0;
- u8ReceiveDataStep = 0;
- uart_rx.backlen = 0;
- wireless_send_test(10, (u8 *)uart_rx.bufback);
- }
- }
|