bsp_huart_iodm.c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include "include.h"
  2. #include "bsp_huart_iodm.h"
  3. #include "driver_hsuart.h"
  4. #include "prod_test_iodm.h"
  5. #include "driver_gpio.h"
  6. #if FUNC_IODM_EN
  7. static uint8_t huart_iodm_rx_buffer[HUART_IODM_BUF_LEN] = {0};
  8. static uint8_t huart_iodm_tx_buffer[HUART_IODM_BUF_LEN] = {0};
  9. ///HUART IODM 等发送空闲
  10. AT(.com_text.huart_iodm.text)
  11. static void bsp_huart_iodm_wait_txdone(void)
  12. {
  13. while (hsuart_get_flag(HSUART_IT_TX) == RESET);
  14. }
  15. ///HUART IODM 发送数据
  16. void bsp_huart_iodm_dma_tx(const uint8_t *dma_buf, uint8_t dma_buf_len)
  17. {
  18. bsp_huart_iodm_wait_txdone();
  19. memcpy(huart_iodm_tx_buffer, dma_buf, dma_buf_len);
  20. hsuart_dma_start(HSUT_TRANSMIT, DMA_ADR(huart_iodm_tx_buffer), dma_buf_len);
  21. }
  22. ///HUART IODM DMA 中断服务函数
  23. AT(.com_text.huart_iodm.dma_rx_isr)
  24. static void bsp_huart_iodm_dma_rx_isr(void)
  25. {
  26. if (hsuart_get_flag(HSUART_IT_RX) != RESET) {
  27. prod_test_iodm_packet_receive(huart_iodm_rx_buffer, HUART_IODM_BUF_LEN);
  28. prod_test_iodm_set_do_flag(FLAG_IODM_RECEIVE_EVENT);
  29. hsuart_clear_flag(HSUART_IT_RX | HSUART_IT_RX_TMR_OV);
  30. hsuart_dma_start(HSUT_RECEIVE, DMA_ADR(huart_iodm_rx_buffer), HUART_IODM_BUF_LEN);
  31. }
  32. }
  33. void bsp_huart_iodm_init(void)
  34. {
  35. gpio_init_typedef gpio_init_structure;
  36. hsuart_init_typedef hsuart_init_struct;
  37. clk_gate0_cmd(CLK_GATE0_HSUART, CLK_EN);
  38. /************************************ GPIO Init ************************************/
  39. gpio_init_structure.gpio_pin = HSUART_IODM_PIN_SEL;
  40. gpio_init_structure.gpio_dir = GPIO_DIR_INPUT;
  41. gpio_init_structure.gpio_fen = GPIO_FEN_PER;
  42. gpio_init_structure.gpio_fdir = GPIO_FDIR_MAP;
  43. gpio_init_structure.gpio_mode = GPIO_MODE_DIGITAL;
  44. gpio_init_structure.gpio_pupd = GPIO_PUPD_PU10K;
  45. gpio_init(HSUART_IODM_PORT_SEL, &gpio_init_structure);
  46. /* NOTE: make sure printf_io isn't using PB9(VUSB) */
  47. gpio_func_mapping_clear(HSUART_IODM_PORT_SEL, HSUART_IODM_PIN_SEL);
  48. gpio_func_mapping_config(HSUART_IODM_PORT_SEL, HSUART_IODM_PIN_SEL, GPIO_CROSSBAR_IN_HURRX);
  49. gpio_func_mapping_config(HSUART_IODM_PORT_SEL, HSUART_IODM_PIN_SEL, GPIO_CROSSBAR_OUT_HURTX);
  50. /*********************************** HSUART Init ***********************************/
  51. hsuart_init_struct.baud = HSUART_IODM_BAUD;
  52. hsuart_init_struct.one_line_en = HSUT_ONELINE_EN;
  53. hsuart_init_struct.tx_mode = HSUT_TX_DMA_MODE;
  54. hsuart_init_struct.rx_mode = HSUT_RX_DMA_MODE;
  55. hsuart_init_struct.tx_stop_bit = HSUT_STOP_BIT_2BIT;
  56. hsuart_init_struct.tx_word_len = HSUT_TX_LENGTH_8b;
  57. hsuart_init_struct.rx_word_len = HSUT_RX_LENGTH_8b;
  58. hsuart_init_struct.clk_source = HSUT_24M_CLK;
  59. hsuart_init_struct.rx_dma_buf_mode = HSUT_DMA_BUF_SINGLE;
  60. hsuart_init(&hsuart_init_struct);
  61. hsuart_clear_flag(HSUART_IT_RX | HSUART_IT_RX_TMR_OV);
  62. hsuart_rx_idle_config(HSUART_IODM_OV_CNT, ENABLE);
  63. hsuart_pic_config(bsp_huart_iodm_dma_rx_isr, 0, HSUART_IT_RX, ENABLE);
  64. hsuart_cmd(HSUT_TRANSMIT | HSUT_RECEIVE, ENABLE);
  65. hsuart_dma_start(HSUT_RECEIVE, DMA_ADR(huart_iodm_rx_buffer), HUART_IODM_BUF_LEN);
  66. }
  67. void bsp_huart_iodm_exit(void)
  68. {
  69. }
  70. #endif