gd32f4xx.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. /*!
  2. \file gd32f4xx.h
  3. \brief general definitions for GD32F4xx
  4. */
  5. /*
  6. Copyright (C) 2016 GigaDevice
  7. 2016-08-15, V1.0.0, firmware update for GD32F4xx
  8. */
  9. #ifndef GD32F4XX_H
  10. #define GD32F4XX_H
  11. #ifdef cplusplus
  12. extern "C" {
  13. #endif
  14. /* define GD32F4xx */
  15. #if !defined (GD32F4xx)
  16. #define GD32F4xx
  17. #endif /* define GD32F4xx */
  18. #if !defined (GD32F4xx)
  19. #error "Please select the target GD32F4xx device used in your application (in gd32f4xx.h file)"
  20. #endif /* undefine GD32F4xx tip */
  21. /* define value of high speed crystal oscillator (HXTAL) in Hz */
  22. #if !defined (HXTAL_VALUE)
  23. #define HXTAL_VALUE ((uint32_t)25000000)
  24. #endif /* high speed crystal oscillator value */
  25. /* define startup timeout value of high speed crystal oscillator (HXTAL) */
  26. #if !defined (HXTAL_STARTUP_TIMEOUT)
  27. #define HXTAL_STARTUP_TIMEOUT ((uint16_t)0x0800)
  28. #endif /* high speed crystal oscillator startup timeout */
  29. /* define value of internal 16MHz RC oscillator (IRC16M) in Hz */
  30. #if !defined (IRC16M_VALUE)
  31. #define IRC16M_VALUE ((uint32_t)16000000)
  32. #endif /* internal 16MHz RC oscillator value */
  33. /* define startup timeout value of internal 16MHz RC oscillator (IRC16M) */
  34. #if !defined (IRC16M_STARTUP_TIMEOUT)
  35. #define IRC16M_STARTUP_TIMEOUT ((uint16_t)0x0500)
  36. #endif /* internal 16MHz RC oscillator startup timeout */
  37. /* define value of internal 32KHz RC oscillator(IRC32K) in Hz */
  38. #if !defined (IRC32K_VALUE)
  39. #define IRC32K_VALUE ((uint32_t)32000)
  40. #endif /* internal 32KHz RC oscillator value */
  41. /* define value of low speed crystal oscillator (LXTAL)in Hz */
  42. #if !defined (LXTAL_VALUE)
  43. #define LXTAL_VALUE ((uint32_t)32768)
  44. #endif /* low speed crystal oscillator value */
  45. /* I2S external clock in selection */
  46. //#define I2S_EXTERNAL_CLOCK_IN (uint32_t)12288000U
  47. /* GD32F4xx firmware library version number V1.0 */
  48. #define __GD32F4xx_STDPERIPH_VERSION_MAIN (0x03) /*!< [31:24] main version */
  49. #define __GD32F4xx_STDPERIPH_VERSION_SUB1 (0x00) /*!< [23:16] sub1 version */
  50. #define __GD32F4xx_STDPERIPH_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */
  51. #define __GD32F4xx_STDPERIPH_VERSION_RC (0x00) /*!< [7:0] release candidate */
  52. #define __GD32F4xx_STDPERIPH_VERSION ((__GD32F4xx_STDPERIPH_VERSION_MAIN << 24)\
  53. |(__GD32F4xx_STDPERIPH_VERSION_SUB1 << 16)\
  54. |(__GD32F4xx_STDPERIPH_VERSION_SUB2 << 8)\
  55. |(__GD32F4xx_STDPERIPH_VERSION_RC))
  56. /* configuration of the Cortex-M4 processor and core peripherals */
  57. #define __CM4_REV 0x0001 /*!< Core revision r0p1 */
  58. #define __MPU_PRESENT 1 /*!< GD32F4xx do not provide MPU */
  59. #define __NVIC_PRIO_BITS 4 /*!< GD32F4xx uses 4 bits for the priority levels */
  60. #define __VENDOR_SYSTICKCONFIG 0 /*!< set to 1 if different sysTick config is used */
  61. #define __FPU_PRESENT 1 /*!< FPU present */
  62. /* define interrupt number */
  63. typedef enum IRQn
  64. {
  65. /* Cortex-M4 processor exceptions numbers */
  66. NonMaskableInt_IRQn = -14, /*!< 2 non maskable interrupt */
  67. MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 memory management interrupt */
  68. BusFault_IRQn = -11, /*!< 5 Cortex-M4 bus fault interrupt */
  69. UsageFault_IRQn = -10, /*!< 6 Cortex-M4 usage fault interrupt */
  70. SVCall_IRQn = -5, /*!< 11 Cortex-M4 SV call interrupt */
  71. DebugMonitor_IRQn = -4, /*!< 12 Cortex-M4 debug monitor interrupt */
  72. PendSV_IRQn = -2, /*!< 14 Cortex-M4 pend SV interrupt */
  73. SysTick_IRQn = -1, /*!< 15 Cortex-M4 system tick interrupt */
  74. /* interruput numbers */
  75. WWDGT_IRQn = 0, /*!< window watchDog timer interrupt */
  76. LVD_IRQn = 1, /*!< LVD through EXTI line detect interrupt */
  77. TAMPER_STAMP_IRQn = 2, /*!< Tamper and TimeStamp through EXTI Line detect */
  78. RTC_WKUP_IRQn = 3, /*!< RTC Wakeup through EXTI line interrupt */
  79. FMC_IRQn = 4, /*!< FMC interrupt */
  80. RCU_CTC_IRQn = 5, /*!< RCU and CTC interrupt */
  81. EXTI0_IRQn = 6, /*!< EXTI line 0 interrupts */
  82. EXTI1_IRQn = 7, /*!< EXTI line 1 interrupts */
  83. EXTI2_IRQn = 8, /*!< EXTI line 2 interrupts */
  84. EXTI3_IRQn = 9, /*!< EXTI line 3 interrupts */
  85. EXTI4_IRQn = 10, /*!< EXTI line 4 interrupts */
  86. DMA0_Channel0_IRQn = 11, /*!< DMA0 Channel0 Interrupt */
  87. DMA0_Channel1_IRQn = 12, /*!< DMA0 Channel1 Interrupt */
  88. DMA0_Channel2_IRQn = 13, /*!< DMA0 Channel2 Interrupt */
  89. DMA0_Channel3_IRQn = 14, /*!< DMA0 Channel3 Interrupt */
  90. DMA0_Channel4_IRQn = 15, /*!< DMA0 Channel4 Interrupt */
  91. DMA0_Channel5_IRQn = 16, /*!< DMA0 Channel5 Interrupt */
  92. DMA0_Channel6_IRQn = 17, /*!< DMA0 Channel6 Interrupt */
  93. ADC_IRQn = 18, /*!< ADC interrupt */
  94. CAN0_TX_IRQn = 19, /*!< CAN0 TX interrupts */
  95. CAN0_RX0_IRQn = 20, /*!< CAN0 RX0 interrupts */
  96. CAN0_RX1_IRQn = 21, /*!< CAN0 RX1 interrupts */
  97. CAN0_EWMC_IRQn = 22, /*!< CAN0 EWMC interrupts */
  98. EXTI5_9_IRQn = 23, /*!< EXTI[9:5] interrupts */
  99. TIMER0_BRK_TIMER8_IRQn = 24, /*!< TIMER0 Break and TIMER8 interrupts */
  100. TIMER0_UP_TIMER9_IRQn = 25, /*!< TIMER0 Update and TIMER9 interrupts */
  101. TIMER0_TRG_CMT_TIMER10_IRQn = 26, /*!< TIMER0 Trigger and Commutation and TIMER10 interrupts */
  102. TIMER0_CC_IRQn = 27, /*!< TIMER0 Capture Compare interrupts */
  103. TIMER1_IRQn = 28, /*!< TIMER1 interrupt */
  104. TIMER2_IRQn = 29, /*!< TIMER2 interrupt */
  105. TIMER3_IRQn = 30, /*!< TIMER3 interrupts */
  106. I2C0_EV_IRQn = 31, /*!< I2C0 event interrupt */
  107. I2C0_ER_IRQn = 32, /*!< I2C0 error interrupt */
  108. I2C1_EV_IRQn = 33, /*!< I2C1 event interrupt */
  109. I2C1_ER_IRQn = 34, /*!< I2C1 error interrupt */
  110. SPI0_IRQn = 35, /*!< SPI0 interrupt */
  111. SPI1_IRQn = 36, /*!< SPI1 interrupt */
  112. USART0_IRQn = 37, /*!< USART0 interrupt */
  113. USART1_IRQn = 38, /*!< USART1 interrupt */
  114. USART2_IRQn = 39, /*!< USART2 interrupt */
  115. EXTI10_15_IRQn = 40, /*!< EXTI[15:10] interrupts */
  116. RTC_Alarm_IRQn = 41, /*!< RTC Alarm interrupt */
  117. USBFS_WKUP_IRQn = 42, /*!< USBFS Wakeup interrupt */
  118. TIMER7_BRK_TIMER11_IRQn = 43, /*!< TIMER7 Break and TIMER11 interrupts */
  119. TIMER7_UP_TIMER12_IRQn = 44, /*!< TIMER7 Update and TIMER12 interrupts */
  120. TIMER7_TRG_CMT_TIMER13_IRQn = 45, /*!< TIMER7 Trigger and Commutation and TIMER13 interrupts */
  121. TIMER7_CC_IRQn = 46, /*!< TIMER7 Capture Compare interrupts */
  122. DMA0_Channel7_IRQn = 47, /*!< DMA0 Channel7 Interrupt */
  123. EXMC_IRQn = 48, /*!< EXMC Interrupt */
  124. SDIO_IRQn = 49, /*!< SDIO Interrupt */
  125. TIMER4_IRQn = 50, /*!< TIMER4 Interrupt */
  126. SPI2_IRQn = 51, /*!< SPI2 Interrupt */
  127. UART3_IRQn = 52, /*!< UART3 Interrupt */
  128. UART4_IRQn = 53, /*!< UART4 Interrupt */
  129. TIMER5_DAC_IRQn = 54, /*!< TIMER5 and DAC0 DAC1 Underrun error Interrupt */
  130. TIMER6_IRQn = 55, /*!< TIMER6 Interrupt */
  131. DMA1_Channel0_IRQn = 56, /*!< DMA1 Channel0 Interrupt */
  132. DMA1_Channel1_IRQn = 57, /*!< DMA1 Channel1 Interrupt */
  133. DMA1_Channel2_IRQn = 58, /*!< DMA1 Channel2 Interrupt */
  134. DMA1_Channel3_IRQn = 59, /*!< DMA1 Channel3 Interrupt */
  135. DMA1_Channel4_IRQn = 60, /*!< DMA1 Channel4 Interrupt */
  136. ENET_IRQn = 61, /*!< Ethernet Interrupt */
  137. ENET_WKUP_IRQn = 62, /*!< Ethernet Wakeup through EXTI Line Interrupt */
  138. CAN1_TX_IRQn = 63, /*!< CAN1 TX Interrupt */
  139. CAN1_RX0_IRQn = 64, /*!< CAN1 RX0 Interrupt */
  140. CAN1_RX1_IRQn = 65, /*!< CAN1 RX1 Interrupt */
  141. CAN1_EWMC_IRQn = 66, /*!< CAN1 EWMC Interrupt */
  142. USBFS_IRQn = 67, /*!< USBFS Interrupt */
  143. DMA1_Channel5_IRQn = 68, /*!< DMA1 Channel5 Interrupt */
  144. DMA1_Channel6_IRQn = 69, /*!< DMA1 Channel6 Interrupt */
  145. DMA1_Channel7_IRQn = 70, /*!< DMA1 Channel7 Interrupt */
  146. USART5_IRQn = 71, /*!< USART5 Interrupt */
  147. I2C2_EV_IRQn = 72, /*!< I2C2 Event Interrupt */
  148. I2C2_ER_IRQn = 73, /*!< I2C2 Error Interrupt */
  149. USBHS_EP1_Out_IRQn = 74, /*!< USBHS Endpoint 1 Out Interrupt */
  150. USBHS_EP1_In_IRQn = 75, /*!< USBHS Endpoint 1 in Interrupt */
  151. USBHS_WKUP_IRQn = 76, /*!< USBHS Wakeup through EXTI Line Interrupt */
  152. USBHS_IRQn = 77, /*!< USBHS Interrupt */
  153. DCI_IRQn = 78, /*!< DCI Interrupt */
  154. TRNG_IRQn = 80, /*!< TRNG Interrupt */
  155. FPU_IRQn = 81, /*!< FPU Interrupt */
  156. UART6_IRQn = 82, /*!< UART6 Interrupt */
  157. UART7_IRQn = 83, /*!< UART7 Interrupt */
  158. SPI3_IRQn = 84, /*!< SPI3 Interrupt */
  159. SPI4_IRQn = 85, /*!< SPI4 Interrupt */
  160. SPI5_IRQn = 86, /*!< SPI5 Interrupt */
  161. TLI_IRQn = 88, /*!< TLI Interrupt */
  162. TLI_ER_IRQn = 89, /*!< TLI Error Interrupt */
  163. IPA_IRQn = 90, /*!< IPA Interrupt */
  164. } IRQn_Type;
  165. /* includes */
  166. #include "core_cm4.h"
  167. #include "system_gd32f4xx.h"
  168. #include <stdint.h>
  169. /* enum definitions */
  170. typedef enum {DISABLE = 0, ENABLE = !DISABLE} EventStatus, ControlStatus;
  171. typedef enum {FALSE = 0, TRUE = !FALSE} bool;
  172. typedef enum {RESET = 0, SET = !RESET} FlagStatus;
  173. typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrStatus;
  174. /* bit operations */
  175. #define REG32(addr) (*(volatile uint32_t *)(uint32_t)(addr))
  176. #define REG16(addr) (*(volatile uint16_t *)(uint32_t)(addr))
  177. #define REG8(addr) (*(volatile uint8_t *)(uint32_t)(addr))
  178. #define BIT(x) ((uint32_t)((uint32_t)0x01U<<(x)))
  179. #define BITS(start, end) ((0xFFFFFFFFUL << (start)) & (0xFFFFFFFFUL >> (31U - (uint32_t)(end))))
  180. #define GET_BITS(regval, start, end) (((regval) & BITS((start),(end))) >> (start))
  181. /* main flash and SRAM memory map */
  182. #define FLASH_BASE ((uint32_t)0x08000000U) /*!< main FLASH base address */
  183. #define TCMSRAM_BASE ((uint32_t)0x10000000U) /*!< TCMSRAM(64KB) base address */
  184. #define OPTION_BASE ((uint32_t)0x1FFEC000U) /*!< Option bytes base address */
  185. #define SRAM_BASE ((uint32_t)0x20000000U) /*!< SRAM0 base address */
  186. /* peripheral memory map */
  187. #define APB1_BUS_BASE ((uint32_t)0x40000000U) /*!< apb1 base address */
  188. #define APB2_BUS_BASE ((uint32_t)0x40010000U) /*!< apb2 base address */
  189. #define AHB1_BUS_BASE ((uint32_t)0x40020000U) /*!< ahb1 base address */
  190. #define AHB2_BUS_BASE ((uint32_t)0x50000000U) /*!< ahb2 base address */
  191. /* EXMC memory map */
  192. #define EXMC_BASE ((uint32_t)0xA0000000U) /*!< EXMC register base address */
  193. /* advanced peripheral bus 1 memory map */
  194. #define TIMER_BASE (APB1_BUS_BASE + 0x00000000U) /*!< TIMER base address */
  195. #define RTC_BASE (APB1_BUS_BASE + 0x00002800U) /*!< RTC base address */
  196. #define WWDGT_BASE (APB1_BUS_BASE + 0x00002C00U) /*!< WWDGT base address */
  197. #define FWDGT_BASE (APB1_BUS_BASE + 0x00003000U) /*!< FWDGT base address */
  198. #define I2S_ADD_BASE (APB1_BUS_BASE + 0x00003400U) /*!< I2S1_add base address */
  199. #define SPI_BASE (APB1_BUS_BASE + 0x00003800U) /*!< SPI base address */
  200. #define USART_BASE (APB1_BUS_BASE + 0x00004400U) /*!< USART base address */
  201. #define I2C_BASE (APB1_BUS_BASE + 0x00005400U) /*!< I2C base address */
  202. #define CAN_BASE (APB1_BUS_BASE + 0x00006400U) /*!< CAN base address */
  203. #define CTC_BASE (APB1_BUS_BASE + 0x00006C00U) /*!< CTC base address */
  204. #define PMU_BASE (APB1_BUS_BASE + 0x00007000U) /*!< PMU base address */
  205. #define DAC_BASE (APB1_BUS_BASE + 0x00007400U) /*!< DAC base address */
  206. #define IREF_BASE (APB1_BUS_BASE + 0x0000C400U) /*!< IREF base address */
  207. /* advanced peripheral bus 2 memory map */
  208. #define TLI_BASE (APB2_BUS_BASE + 0x00006800U) /*!< TLI base address */
  209. #define SYSCFG_BASE (APB2_BUS_BASE + 0x00003800U) /*!< SYSCFG base address */
  210. #define EXTI_BASE (APB2_BUS_BASE + 0x00003C00U) /*!< EXTI base address */
  211. #define SDIO_BASE (APB2_BUS_BASE + 0x00002C00U) /*!< SDIO base address */
  212. #define ADC_BASE (APB2_BUS_BASE + 0x00002000U) /*!< ADC base address */
  213. /* advanced high performance bus 1 memory map */
  214. #define GPIO_BASE (AHB1_BUS_BASE + 0x00000000U) /*!< GPIO base address */
  215. #define CRC_BASE (AHB1_BUS_BASE + 0x00003000U) /*!< CRC base address */
  216. #define RCU_BASE (AHB1_BUS_BASE + 0x00003800U) /*!< RCU base address */
  217. #define FMC_BASE (AHB1_BUS_BASE + 0x00003C00U) /*!< FMC base address */
  218. #define BKPSRAM_BASE (AHB1_BUS_BASE + 0x00004000U) /*!< BKPSRAM base address */
  219. #define DMA_BASE (AHB1_BUS_BASE + 0x00006000U) /*!< DMA base address */
  220. #define ENET_BASE (AHB1_BUS_BASE + 0x00008000U) /*!< ENET base address */
  221. #define IPA_BASE (AHB1_BUS_BASE + 0x0000B000U) /*!< IPA base address */
  222. #define USBHS_BASE (AHB1_BUS_BASE + 0x00020000U) /*!< USBHS base address */
  223. /* advanced high performance bus 2 memory map */
  224. #define USBFS_BASE (AHB2_BUS_BASE + 0x00000000U) /*!< USBFS base address */
  225. #define DCI_BASE (AHB2_BUS_BASE + 0x00050000U) /*!< DCI base address */
  226. #define TRNG_BASE (AHB2_BUS_BASE + 0x00060800U) /*!< TRNG base address */
  227. /* option byte and debug memory map */
  228. #define OB_BASE ((uint32_t)0x1FFEC000U) /*!< OB base address */
  229. #define DBG_BASE ((uint32_t)0xE0042000U) /*!< DBG base address */
  230. /* define marco USE_STDPERIPH_DRIVER */
  231. #if !defined USE_STDPERIPH_DRIVER
  232. #define USE_STDPERIPH_DRIVER
  233. #endif
  234. #ifdef USE_STDPERIPH_DRIVER
  235. #include "gd32f4xx_libopt.h"
  236. #endif /* USE_STDPERIPH_DRIVER */
  237. #ifdef cplusplus
  238. }
  239. #endif
  240. #endif