nu_sys.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. /**************************************************************************//**
  2. * @file sys.h
  3. * @brief N9H30 SYS driver header file
  4. *
  5. * @note
  6. * SPDX-License-Identifier: Apache-2.0
  7. * Copyright (C) 2018 Nuvoton Technology Corp. All rights reserved.
  8. *****************************************************************************/
  9. #ifndef __NU_SYS_H__
  10. #define __NU_SYS_H__
  11. #ifdef __cplusplus
  12. extern "C"
  13. {
  14. #endif
  15. /** @addtogroup N9H30_Device_Driver N9H30 Device Driver
  16. @{
  17. */
  18. /** @addtogroup N9H30_SYS_Driver SYS Driver
  19. @{
  20. */
  21. /** @addtogroup N9H30_SYS_EXPORTED_CONSTANTS SYS Exported Constants
  22. @{
  23. */
  24. /**
  25. * @details Interrupt Number Definition.
  26. */
  27. typedef enum IRQn
  28. {
  29. /****** N9H30 Specific Interrupt Numbers *****************************************/
  30. WDT_IRQn = 1, /*!< Watch Dog Timer Interrupt */
  31. WWDT_IRQn = 2, /*!< Windowed-WDT Interrupt */
  32. LVD_IRQn = 3, /*!< Low Voltage Detect Interrupt */
  33. EINT0_IRQn = 4, /*!< External Interrupt 0 */
  34. EINT1_IRQn = 5, /*!< External Interrupt 1 */
  35. EINT2_IRQn = 6, /*!< External Interrupt 2 */
  36. EINT3_IRQn = 7, /*!< External Interrupt 3 */
  37. EINT4_IRQn = 8, /*!< External Interrupt 4 */
  38. EINT5_IRQn = 9, /*!< External Interrupt 5 */
  39. EINT6_IRQn = 10, /*!< External Interrupt 6 */
  40. EINT7_IRQn = 11, /*!< External Interrupt 7 */
  41. ACTL_IRQn = 12, /*!< Audio Controller Interrupt */
  42. LCD_IRQn = 13, /*!< LCD Controller Interrupt */
  43. CAP_IRQn = 14, /*!< Sensor Interface Controller Interrupt */
  44. RTC_IRQn = 15, /*!< Real Time Clock Interrupt */
  45. TMR0_IRQn = 16, /*!< Timer 0 Interrupt */
  46. TMR1_IRQn = 17, /*!< Timer 1 Interrupt */
  47. ADC_IRQn = 18, /*!< ADC Interrupt */
  48. EMC0_RX_IRQn = 19, /*!< EMC 0 RX Interrupt */
  49. EMC1_RX_IRQn = 20, /*!< EMC 1 RX Interrupt */
  50. EMC0_TX_IRQn = 21, /*!< EMC 0 TX Interrupt */
  51. EMC1_TX_IRQn = 22, /*!< EMC 1 TX Interrupt */
  52. EHCI_IRQn = 23, /*!< USB 2.0 Host Controller Interrupt */
  53. OHCI_IRQn = 24, /*!< USB 1.1 Host Controller Interrupt */
  54. GDMA0_IRQn = 25, /*!< GDMA Channel 0 Interrupt */
  55. GDMA1_IRQn = 26, /*!< GDMA Channel 1 Interrupt */
  56. SDH_IRQn = 27, /*!< SD/SDIO Host Interrupt */
  57. FMI_IRQn = 28, /*!< FMI Interrupt */
  58. USBD_IRQn = 29, /*!< USB Device Interrupt */
  59. TMR2_IRQn = 30, /*!< Timer 2 Interrupt */
  60. TMR3_IRQn = 31, /*!< Timer 3 Interrupt */
  61. TMR4_IRQn = 32, /*!< Timer 4 Interrupt */
  62. JPEG_IRQn = 33, /*!< JPEG Engine Interrupt */
  63. GE2D_IRQn = 34, /*!< 2D Graphic Engine Interrupt */
  64. CRPT_IRQn = 35, /*!< Cryptographic Accelerator Interrupt */
  65. UART0_IRQn = 36, /*!< UART 0 Interrupt */
  66. UART1_IRQn = 37, /*!< UART 1 Interrupt */
  67. UART2_IRQn = 38, /*!< UART 2 Interrupt */
  68. UART4_IRQn = 39, /*!< UART 4 Interrupt */
  69. UART6_IRQn = 40, /*!< UART 6 Interrupt */
  70. UART8_IRQn = 41, /*!< UART 8 Interrupt */
  71. UART10_IRQn = 42, /*!< UART 10 Interrupt */
  72. UART3_IRQn = 43, /*!< UART 3 Interrupt */
  73. UART5_IRQn = 44, /*!< UART 5 Interrupt */
  74. UART7_IRQn = 45, /*!< UART 7 Interrupt */
  75. UART9_IRQn = 46, /*!< UART 9 Interrupt */
  76. ETMR0_IRQn = 47, /*!< Enhanced Timer 0 Interrupt */
  77. ETMR1_IRQn = 48, /*!< Enhanced Timer 1 Interrupt */
  78. ETMR2_IRQn = 49, /*!< Enhanced Timer 2 Interrupt */
  79. ETMR3_IRQn = 50, /*!< Enhanced Timer 3 Interrupt */
  80. SPI0_IRQn = 51, /*!< SPI 0 Interrupt */
  81. SPI1_IRQn = 52, /*!< SPI 1 Interrupt */
  82. I2C0_IRQn = 53, /*!< I2C 0 Interrupt */
  83. I2C1_IRQn = 54, /*!< I2C 1 Interrupt */
  84. SC0_IRQn = 55, /*!< Smart Card 0 Interrupt */
  85. SC1_IRQn = 56, /*!< Smart Card 1 Interrupt */
  86. GPIO_IRQn = 57, /*!< GPIO Interrupt */
  87. CAN0_IRQn = 58, /*!< CAN 0 Interrupt */
  88. CAN1_IRQn = 59, /*!< CAN 1 Interrupt */
  89. PWM_IRQn = 60, /*!< PWM Interrupt */
  90. /* Renaming for RTT porting */
  91. IRQ_WDT = 1, /*!< Watch Dog Timer Interrupt */
  92. IRQ_WWDT = 2, /*!< Windowed-WDT Interrupt */
  93. IRQ_LVD = 3, /*!< Low Voltage Detect Interrupt */
  94. IRQ_EINT0 = 4, /*!< External Interrupt 0 */
  95. IRQ_EINT1 = 5, /*!< External Interrupt 1 */
  96. IRQ_EINT2 = 6, /*!< External Interrupt 2 */
  97. IRQ_EINT3 = 7, /*!< External Interrupt 3 */
  98. IRQ_EINT4 = 8, /*!< External Interrupt 4 */
  99. IRQ_EINT5 = 9, /*!< External Interrupt 5 */
  100. IRQ_EINT6 = 10, /*!< External Interrupt 6 */
  101. IRQ_EINT7 = 11, /*!< External Interrupt 7 */
  102. IRQ_ACTL = 12, /*!< Audio Controller Interrupt */
  103. IRQ_LCD = 13, /*!< LCD Controller Interrupt */
  104. IRQ_CAP = 14, /*!< Sensor Interface Controller Interrupt */
  105. IRQ_RTC = 15, /*!< Real Time Clock Interrupt */
  106. IRQ_TMR0 = 16, /*!< Timer 0 Interrupt */
  107. IRQ_TMR1 = 17, /*!< Timer 1 Interrupt */
  108. IRQ_ADC = 18, /*!< ADC Interrupt */
  109. IRQ_EMC0_RX = 19, /*!< EMC 0 RX Interrupt */
  110. IRQ_EMC1_RX = 20, /*!< EMC 1 RX Interrupt */
  111. IRQ_EMC0_TX = 21, /*!< EMC 0 TX Interrupt */
  112. IRQ_EMC1_TX = 22, /*!< EMC 1 TX Interrupt */
  113. IRQ_EHCI = 23, /*!< USB 2.0 Host Controller Interrupt */
  114. IRQ_OHCI = 24, /*!< USB 1.1 Host Controller Interrupt */
  115. IRQ_GDMA0 = 25, /*!< GDMA Channel 0 Interrupt */
  116. IRQ_GDMA1 = 26, /*!< GDMA Channel 1 Interrupt */
  117. IRQ_SDH = 27, /*!< SD/SDIO Host Interrupt */
  118. IRQ_FMI = 28, /*!< FMI Interrupt */
  119. IRQ_USBD = 29, /*!< USB Device Interrupt */
  120. IRQ_TMR2 = 30, /*!< Timer 2 Interrupt */
  121. IRQ_TMR3 = 31, /*!< Timer 3 Interrupt */
  122. IRQ_TMR4 = 32, /*!< Timer 4 Interrupt */
  123. IRQ_JPEG = 33, /*!< JPEG Engine Interrupt */
  124. IRQ_GE2D = 34, /*!< 2D Graphic Engine Interrupt */
  125. IRQ_CRPT = 35, /*!< Cryptographic Accelerator Interrupt */
  126. IRQ_UART0 = 36, /*!< UART 0 Interrupt */
  127. IRQ_UART1 = 37, /*!< UART 1 Interrupt */
  128. IRQ_UART2 = 38, /*!< UART 2 Interrupt */
  129. IRQ_UART4 = 39, /*!< UART 4 Interrupt */
  130. IRQ_UART6 = 40, /*!< UART 6 Interrupt */
  131. IRQ_UART8 = 41, /*!< UART 8 Interrupt */
  132. IRQ_UART10 = 42, /*!< UART 10 Interrupt */
  133. IRQ_UART3 = 43, /*!< UART 3 Interrupt */
  134. IRQ_UART5 = 44, /*!< UART 5 Interrupt */
  135. IRQ_UART7 = 45, /*!< UART 7 Interrupt */
  136. IRQ_UART9 = 46, /*!< UART 9 Interrupt */
  137. IRQ_ETMR0 = 47, /*!< Enhanced Timer 0 Interrupt */
  138. IRQ_ETMR1 = 48, /*!< Enhanced Timer 1 Interrupt */
  139. IRQ_ETMR2 = 49, /*!< Enhanced Timer 2 Interrupt */
  140. IRQ_ETMR3 = 50, /*!< Enhanced Timer 3 Interrupt */
  141. IRQ_SPI0 = 51, /*!< SPI 0 Interrupt */
  142. IRQ_SPI1 = 52, /*!< SPI 1 Interrupt */
  143. IRQ_I2C0 = 53, /*!< I2C 0 Interrupt */
  144. IRQ_I2C1 = 54, /*!< I2C 1 Interrupt */
  145. IRQ_SC0 = 55, /*!< Smart Card 0 Interrupt */
  146. IRQ_SC1 = 56, /*!< Smart Card 1 Interrupt */
  147. IRQ_GPIO = 57, /*!< GPIO Interrupt */
  148. IRQ_CAN0 = 58, /*!< CAN 0 Interrupt */
  149. IRQ_CAN1 = 59, /*!< CAN 1 Interrupt */
  150. IRQ_PWM = 60, /*!< PWM Interrupt */
  151. }
  152. IRQn_Type;
  153. /* Define constants for use timer in service parameters. */
  154. #define TIMER0 0 /*!< Select Timer0 */
  155. #define TIMER1 1 /*!< Select Timer1 */
  156. #define ONE_SHOT_MODE 0 /*!< Timer Operation Mode - One Shot */
  157. #define PERIODIC_MODE 1 /*!< Timer Operation Mode - Periodic */
  158. #define TOGGLE_MODE 2 /*!< Timer Operation Mode - Toggle */
  159. /* The parameters for sysSetInterruptPriorityLevel() and
  160. sysInstallISR() use */
  161. #define FIQ_LEVEL_0 0 /*!< FIQ Level 0 */
  162. #define IRQ_LEVEL_1 1 /*!< IRQ Level 1 */
  163. #define IRQ_LEVEL_2 2 /*!< IRQ Level 2 */
  164. #define IRQ_LEVEL_3 3 /*!< IRQ Level 3 */
  165. #define IRQ_LEVEL_4 4 /*!< IRQ Level 4 */
  166. #define IRQ_LEVEL_5 5 /*!< IRQ Level 5 */
  167. #define IRQ_LEVEL_6 6 /*!< IRQ Level 6 */
  168. #define IRQ_LEVEL_7 7 /*!< IRQ Level 7 */
  169. #define ONE_HALF_SECS 0 /*!< WDT interval - 1.5s */
  170. #define FIVE_SECS 1 /*!< WDT interval - 5s */
  171. #define TEN_SECS 2 /*!< WDT interval - 10s */
  172. #define TWENTY_SECS 3 /*!< WDT interval - 20s */
  173. /* Define constants for use AIC in service parameters. */
  174. #define SYS_SWI 0 /*!< Exception - SWI */
  175. #define SYS_D_ABORT 1 /*!< Exception - Data abort */
  176. #define SYS_I_ABORT 2 /*!< Exception - Instruction abort */
  177. #define SYS_UNDEFINE 3 /*!< Exception - undefine */
  178. /* The parameters for sysSetLocalInterrupt() use */
  179. #define ENABLE_IRQ 0x7F /*!< Enable I-bit of CP15 */
  180. #define ENABLE_FIQ 0xBF /*!< Enable F-bit of CP15 */
  181. #define ENABLE_FIQ_IRQ 0x3F /*!< Enable I-bit and F-bit of CP15 */
  182. #define DISABLE_IRQ 0x80 /*!< Disable I-bit of CP15 */
  183. #define DISABLE_FIQ 0x40 /*!< Disable F-bit of CP15 */
  184. #define DISABLE_FIQ_IRQ 0xC0 /*!< Disable I-bit and F-bit of CP15 */
  185. /* Define Cache type */
  186. #define CACHE_WRITE_BACK 0 /*!< Cache Write-back mode */
  187. #define CACHE_WRITE_THROUGH 1 /*!< Cache Write-through mode */
  188. #define CACHE_DISABLE -1 /*!< Cache Disable */
  189. /** \brief Structure type of clock source
  190. */
  191. typedef enum CLKn
  192. {
  193. SYS_UPLL = 1, /*!< UPLL clock */
  194. SYS_APLL = 2, /*!< APLL clock */
  195. SYS_SYSTEM = 3, /*!< System clock */
  196. SYS_HCLK1 = 4, /*!< HCLK1 clock */
  197. SYS_HCLK234 = 5, /*!< HCLK234 clock */
  198. SYS_PCLK = 6, /*!< PCLK clock */
  199. SYS_CPU = 7, /*!< CPU clock */
  200. } CLK_Type;
  201. /// @cond HIDDEN_SYMBOLS
  202. typedef struct datetime_t
  203. {
  204. UINT32 year;
  205. UINT32 mon;
  206. UINT32 day;
  207. UINT32 hour;
  208. UINT32 min;
  209. UINT32 sec;
  210. } DateTime_T;
  211. /* The parameters for sysSetInterruptType() use */
  212. #define LOW_LEVEL_SENSITIVE 0x00
  213. #define HIGH_LEVEL_SENSITIVE 0x40
  214. #define NEGATIVE_EDGE_TRIGGER 0x80
  215. #define POSITIVE_EDGE_TRIGGER 0xC0
  216. /* The parameters for sysSetGlobalInterrupt() use */
  217. #define ENABLE_ALL_INTERRUPTS 0
  218. #define DISABLE_ALL_INTERRUPTS 1
  219. #define MMU_DIRECT_MAPPING 0
  220. #define MMU_INVERSE_MAPPING 1
  221. /* Define constants for use Cache in service parameters. */
  222. #define CACHE_4M 2
  223. #define CACHE_8M 3
  224. #define CACHE_16M 4
  225. #define CACHE_32M 5
  226. #define I_CACHE 6
  227. #define D_CACHE 7
  228. #define I_D_CACHE 8
  229. /**
  230. * @brief Disable register write-protection function
  231. * @param None
  232. * @return None
  233. * @details This function disable register write-protection function.
  234. * To unlock the protected register to allow write access.
  235. */
  236. static __inline void SYS_UnlockReg(void)
  237. {
  238. do
  239. {
  240. outpw(0xB00001FC, 0x59UL);
  241. outpw(0xB00001FC, 0x16UL);
  242. outpw(0xB00001FC, 0x88UL);
  243. }
  244. while (inpw(0xB00001FC) == 0UL);
  245. }
  246. /**
  247. * @brief Enable register write-protection function
  248. * @param None
  249. * @return None
  250. * @details This function is used to enable register write-protection function.
  251. * To lock the protected register to forbid write access.
  252. */
  253. static __inline void SYS_LockReg(void)
  254. {
  255. outpw(0xB00001FC, 0);
  256. }
  257. /// @endcond HIDDEN_SYMBOLS
  258. /*@}*/ /* end of group N9H30_SYS_EXPORTED_CONSTANTS */
  259. /** @addtogroup N9H30_SYS_EXPORTED_FUNCTIONS SYS Exported Functions
  260. @{
  261. */
  262. /* Define system library Timer functions */
  263. UINT32 sysGetTicks(INT32 nTimeNo);
  264. INT32 sysResetTicks(INT32 nTimeNo);
  265. INT32 sysUpdateTickCount(INT32 nTimeNo, UINT32 uCount);
  266. INT32 sysSetTimerReferenceClock(INT32 nTimeNo, UINT32 uClockRate);
  267. INT32 sysStartTimer(INT32 nTimeNo, UINT32 uTicksPerSecond, INT32 nOpMode);
  268. INT32 sysStopTimer(INT32 nTimeNo);
  269. void sysClearWatchDogTimerCount(void);
  270. void sysClearWatchDogTimerInterruptStatus(void);
  271. void sysDisableWatchDogTimer(void);
  272. void sysDisableWatchDogTimerReset(void);
  273. void sysEnableWatchDogTimer(void);
  274. void sysEnableWatchDogTimerReset(void);
  275. PVOID sysInstallWatchDogTimerISR(INT32 nIntTypeLevel, PVOID pvNewISR);
  276. INT32 sysSetWatchDogTimerInterval(INT32 nWdtInterval);
  277. INT32 sysSetTimerEvent(INT32 nTimeNo, UINT32 uTimeTick, PVOID pvFun);
  278. void sysClearTimerEvent(INT32 nTimeNo, UINT32 uTimeEventNo);
  279. void sysSetLocalTime(DateTime_T ltime); /*!< Set local time \hideinitializer */
  280. void sysGetCurrentTime(DateTime_T *curTime); /*!< Get current time \hideinitializer */
  281. void sysDelay(UINT32 uTicks);
  282. /* Define system library UART functions */
  283. //INT8 sysGetChar(void);
  284. //INT32 sysInitializeUART(void);
  285. //void sysprintf(PINT8 pcStr, ...);
  286. //void sysPutChar(UINT8 ucCh);
  287. //INT sysIsKbHit(void);
  288. /* Define system library AIC functions */
  289. INT32 sysDisableInterrupt(IRQn_Type eIntNo);
  290. INT32 sysEnableInterrupt(IRQn_Type eIntNo);
  291. BOOL sysGetIBitState(void); /*!< Get I bit state \hideinitializer */
  292. UINT32 sysGetInterruptEnableStatus(void); /*!< Get interrupt enable status \hideinitializer */
  293. UINT32 sysGetInterruptEnableStatusH(void); /*!< Get interrupt enable status \hideinitializer */
  294. PVOID sysInstallExceptionHandler(INT32 nExceptType, PVOID pvNewHandler);
  295. PVOID sysInstallFiqHandler(PVOID pvNewISR);
  296. PVOID sysInstallIrqHandler(PVOID pvNewISR);
  297. PVOID sysInstallISR(INT32 nIntTypeLevel, IRQn_Type eIntNo, PVOID pvNewISR);
  298. INT32 sysSetGlobalInterrupt(INT32 nIntState); /*!< Enable/Disable all interrupt \hideinitializer */
  299. INT32 sysSetInterruptPriorityLevel(IRQn_Type eIntNo, UINT32 uIntLevel);
  300. INT32 sysSetInterruptType(IRQn_Type eIntNo, UINT32 uIntSourceType); /*!< Change interrupt type \hideinitializer */
  301. INT32 sysSetLocalInterrupt(INT32 nIntState);
  302. /* Define system library Cache functions */
  303. void sysDisableCache(void);
  304. INT32 sysEnableCache(UINT32 uCacheOpMode);
  305. void sysFlushCache(INT32 nCacheType); /*!< flush cache \hideinitializer */
  306. BOOL sysGetCacheState(void); /*!< get cache state \hideinitializer */
  307. INT32 sysGetSdramSizebyMB(void); /*!< Get DRAM size \hideinitializer */
  308. void sysInvalidCache(void); /*!< invalid cache \hideinitializer */
  309. INT32 sysSetCachePages(UINT32 addr, INT32 size, INT32 cache_mode); /*!< set cache page \hideinitializer */
  310. int sysSetMMUMappingMethod(int mode); /*!< MMU mapping \hideinitializer */
  311. UINT32 sysGetClock(CLK_Type clk);
  312. typedef void (*sys_pvFunPtr)(); /* function pointer */
  313. /// @cond HIDDEN_SYMBOLS
  314. extern sys_pvFunPtr sysIrqHandlerTable[];
  315. extern BOOL volatile _sys_bIsAICInitial;
  316. /// @endcond
  317. #ifdef __cplusplus
  318. }
  319. #endif
  320. /*@}*/ /* end of group N9H30_SYS_EXPORTED_FUNCTIONS */
  321. /*@}*/ /* end of group N9H30_SYS_Driver */
  322. /*@}*/ /* end of group N9H30_Device_Driver */
  323. #endif //__NU_SYS_H__
  324. /*** (C) COPYRIGHT 2018 Nuvoton Technology Corp. ***/