Blame view

Base_core/user_driver/HW_MCUIO.c 3.15 KB
95ce2328   李外   完成USB移植,测试正常,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
  #include "HW_MCUIO.h"
  #include "custom_hid_core.h"
  #include "usbd_hw.h"
  
  #if ( MCU_GD32F30X == 1 )
  
  void HW_GD_GPIO_Init(HW_GPIO_PortDef Port, HW_GPIO_InitTypeDef *GPIO_init)
  {
      gpio_init(Port, GPIO_init->Mode, GPIO_init->Speed, GPIO_init->Pin);
  }
  
  void HW_GD_GPIO_TogglePin(HW_GPIO_PortDef Port, uint32_t Pin)
  {
      if (gpio_input_bit_get(Port, Pin) == SET)
      {
          gpio_bit_reset(Port, Pin);
      }
      else
      {
          gpio_bit_set(Port, Pin);
      }
  }
  
  static volatile uint32_t systick;
  uint32_t HW_GD_GetTick(void)
  {
      return systick;
  }
  
  void HW_GD_IncTick(void)
  {
      systick++;
  }
  
  void HW_GD_Delay(uint32_t DelayMs)
  {
      uint32_t tick = HW_GD_GetTick();
  
      do
      {
          if (HW_GD_GetTick() - tick >= DelayMs)
          {
              return;
          }
      } while (1);
  }
  
  void HW_GD_DelayUS(uint32_t DelayUs)
  {
      uint32_t cnt = DelayUs * 22; // 98.340M,1000us,??996us
      while (cnt--)
      {
          /* code */
      }
  }
  
  void HW_GD_SPI0_Init(void)
  {
      rcu_periph_clock_enable(RCU_GPIOA);
      rcu_periph_clock_enable(RCU_AF);
      rcu_periph_clock_enable(RCU_SPI0);
      
0897ce2d   李外   rf 的 SPI暂未调通,还是有问题
63
64
65
  //    HW_GPIO_SetPin(RF_CS_GPIO_Port, RF_CS_Pin);
  //    HW_GPIO_Init(RF_CS_GPIO_Port, RF_CS_Pin, GPIO_MODE_OUT_PP, HW_GPIO_SPEED_HIGH);
      gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
95ce2328   李外   完成USB移植,测试正常,
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
      gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_7);
      gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
      
      spi_parameter_struct spi_init_struct;
  
      /* SPI0 parameter config */
      spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;
      spi_init_struct.device_mode          = SPI_MASTER;
      spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;
      spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;
      spi_init_struct.nss                  = SPI_NSS_SOFT;
      spi_init_struct.prescale             = SPI_PSC_16;
      spi_init_struct.endian               = SPI_ENDIAN_MSB;
      spi_init(SPI0, &spi_init_struct);
      spi_enable(SPI0);
      
0897ce2d   李外   rf 的 SPI暂未调通,还是有问题
82
83
84
85
86
      gpio_init(GPIOC, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
      nvic_irq_enable(EXTI5_9_IRQn, 1U, 0U);
      gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOC, GPIO_PIN_SOURCE_6);
      exti_init(EXTI_6, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
      exti_interrupt_flag_clear(EXTI_6);
95ce2328   李外   完成USB移植,测试正常,
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
      
  }
  
  uint8_t HW_GD_SPI_TransmitReceiveOneByte(uint32_t SPIX, uint8_t tx_data, uint8_t rx_data)
  {
      uint32_t time_out = RF_SPI_TIMEOUT;
      uint8_t rtn=0;
      while (!spi_i2s_flag_get(SPIX, SPI_FLAG_TBE) && time_out--)
          ;
      spi_i2s_data_transmit(SPIX, tx_data);
      if(time_out==0) rtn=1;
      time_out = RF_SPI_TIMEOUT;
      while (!spi_i2s_flag_get(SPIX, SPI_FLAG_RBNE) && time_out--)
          ;
      rx_data=spi_i2s_data_receive(SPIX);
      if(time_out==0) rtn=1; 
      
      return rtn;
  }
  
  uint8_t HW_GD_SPI0_TransmitReceive(uint8_t *txbuf, uint8_t *rxbuf, uint16_t len)
  {
      uint8_t rtn=0;
      for(uint16_t i=0;i<len;i++)
      {
          rtn|=HW_GD_SPI_TransmitReceiveOneByte(SPI0, *txbuf++, *rxbuf++);
      }
      
      return rtn;
  }
  
  extern usb_dev usbd_custom_hid;
  uint8_t HW_GD_CUSTOM_HID_REPORT_SEND(uint8_t *buf, uint16_t len)
  {
      return custom_hid_report_send (&usbd_custom_hid, buf, len);
  }
  
  
  
  #endif