summaryrefslogtreecommitdiff
path: root/bsp/nuvoton/libraries/n9h30/Driver/Include/nu_sys.h
blob: 8a4cea517bc1274416c82ee42efefbd87a7510cf (plain)
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
/**************************************************************************//**
* @file     sys.h
* @brief    N9H30 SYS driver header file
*
* @note
* SPDX-License-Identifier: Apache-2.0
* Copyright (C) 2018 Nuvoton Technology Corp. All rights reserved.
*****************************************************************************/

#ifndef __NU_SYS_H__
#define __NU_SYS_H__

#ifdef __cplusplus
extern "C"
{
#endif

/** @addtogroup N9H30_Device_Driver N9H30 Device Driver
  @{
*/

/** @addtogroup N9H30_SYS_Driver SYS Driver
  @{
*/

/** @addtogroup N9H30_SYS_EXPORTED_CONSTANTS SYS Exported Constants
  @{
*/

/**
 * @details  Interrupt Number Definition.
 */
typedef enum IRQn
{

    /******  N9H30 Specific Interrupt Numbers *****************************************/

    WDT_IRQn                = 1,       /*!< Watch Dog Timer Interrupt                  */
    WWDT_IRQn               = 2,       /*!< Windowed-WDT Interrupt                     */
    LVD_IRQn                = 3,       /*!< Low Voltage Detect Interrupt               */
    EINT0_IRQn              = 4,       /*!< External Interrupt 0                       */
    EINT1_IRQn              = 5,       /*!< External Interrupt 1                       */
    EINT2_IRQn              = 6,       /*!< External Interrupt 2                       */
    EINT3_IRQn              = 7,       /*!< External Interrupt 3                       */
    EINT4_IRQn              = 8,       /*!< External Interrupt 4                       */
    EINT5_IRQn              = 9,       /*!< External Interrupt 5                       */
    EINT6_IRQn              = 10,      /*!< External Interrupt 6                       */
    EINT7_IRQn              = 11,      /*!< External Interrupt 7                       */
    ACTL_IRQn               = 12,      /*!< Audio Controller Interrupt                 */
    LCD_IRQn                = 13,      /*!< LCD Controller Interrupt                   */
    CAP_IRQn                = 14,      /*!< Sensor Interface Controller Interrupt      */
    RTC_IRQn                = 15,      /*!< Real Time Clock Interrupt                  */
    TMR0_IRQn               = 16,      /*!< Timer 0 Interrupt                          */
    TMR1_IRQn               = 17,      /*!< Timer 1 Interrupt                          */
    ADC_IRQn                = 18,      /*!< ADC Interrupt                              */
    EMC0_RX_IRQn            = 19,      /*!< EMC 0 RX Interrupt                         */
    EMC1_RX_IRQn            = 20,      /*!< EMC 1 RX Interrupt                         */
    EMC0_TX_IRQn            = 21,      /*!< EMC 0 TX Interrupt                         */
    EMC1_TX_IRQn            = 22,      /*!< EMC 1 TX Interrupt                         */
    EHCI_IRQn               = 23,      /*!< USB 2.0 Host Controller Interrupt          */
    OHCI_IRQn               = 24,      /*!< USB 1.1 Host Controller Interrupt          */
    GDMA0_IRQn              = 25,      /*!< GDMA Channel 0 Interrupt                   */
    GDMA1_IRQn              = 26,      /*!< GDMA Channel 1 Interrupt                   */
    SDH_IRQn                = 27,      /*!< SD/SDIO Host Interrupt                     */
    FMI_IRQn                = 28,      /*!< FMI Interrupt                              */
    USBD_IRQn               = 29,      /*!< USB Device Interrupt                       */
    TMR2_IRQn               = 30,      /*!< Timer 2 Interrupt                          */
    TMR3_IRQn               = 31,      /*!< Timer 3 Interrupt                          */
    TMR4_IRQn               = 32,      /*!< Timer 4 Interrupt                          */
    JPEG_IRQn               = 33,      /*!< JPEG Engine Interrupt                      */
    GE2D_IRQn               = 34,      /*!< 2D Graphic Engine Interrupt                */
    CRPT_IRQn               = 35,      /*!< Cryptographic Accelerator Interrupt        */
    UART0_IRQn              = 36,      /*!< UART 0 Interrupt                           */
    UART1_IRQn              = 37,      /*!< UART 1 Interrupt                           */
    UART2_IRQn              = 38,      /*!< UART 2 Interrupt                           */
    UART4_IRQn              = 39,      /*!< UART 4 Interrupt                           */
    UART6_IRQn              = 40,      /*!< UART 6 Interrupt                           */
    UART8_IRQn              = 41,      /*!< UART 8 Interrupt                           */
    UART10_IRQn             = 42,      /*!< UART 10 Interrupt                          */
    UART3_IRQn              = 43,      /*!< UART 3 Interrupt                           */
    UART5_IRQn              = 44,      /*!< UART 5 Interrupt                           */
    UART7_IRQn              = 45,      /*!< UART 7 Interrupt                           */
    UART9_IRQn              = 46,      /*!< UART 9 Interrupt                           */
    ETMR0_IRQn              = 47,      /*!< Enhanced Timer 0 Interrupt                 */
    ETMR1_IRQn              = 48,      /*!< Enhanced Timer 1 Interrupt                 */
    ETMR2_IRQn              = 49,      /*!< Enhanced Timer 2 Interrupt                 */
    ETMR3_IRQn              = 50,      /*!< Enhanced Timer 3 Interrupt                 */
    SPI0_IRQn               = 51,      /*!< SPI 0 Interrupt                            */
    SPI1_IRQn               = 52,      /*!< SPI 1 Interrupt                            */
    I2C0_IRQn               = 53,      /*!< I2C 0 Interrupt                            */
    I2C1_IRQn               = 54,      /*!< I2C 1 Interrupt                            */
    SC0_IRQn                = 55,      /*!< Smart Card 0 Interrupt                     */
    SC1_IRQn                = 56,      /*!< Smart Card 1 Interrupt                     */
    GPIO_IRQn               = 57,      /*!< GPIO Interrupt                             */
    CAN0_IRQn               = 58,      /*!< CAN 0 Interrupt                            */
    CAN1_IRQn               = 59,      /*!< CAN 1 Interrupt                            */
    PWM_IRQn                = 60,      /*!< PWM Interrupt                              */

    /* Renaming for RTT porting */
    IRQ_WDT                = 1,       /*!< Watch Dog Timer Interrupt                  */
    IRQ_WWDT               = 2,       /*!< Windowed-WDT Interrupt                     */
    IRQ_LVD                = 3,       /*!< Low Voltage Detect Interrupt               */
    IRQ_EINT0              = 4,       /*!< External Interrupt 0                       */
    IRQ_EINT1              = 5,       /*!< External Interrupt 1                       */
    IRQ_EINT2              = 6,       /*!< External Interrupt 2                       */
    IRQ_EINT3              = 7,       /*!< External Interrupt 3                       */
    IRQ_EINT4              = 8,       /*!< External Interrupt 4                       */
    IRQ_EINT5              = 9,       /*!< External Interrupt 5                       */
    IRQ_EINT6              = 10,      /*!< External Interrupt 6                       */
    IRQ_EINT7              = 11,      /*!< External Interrupt 7                       */
    IRQ_ACTL               = 12,      /*!< Audio Controller Interrupt                 */
    IRQ_LCD                = 13,      /*!< LCD Controller Interrupt                   */
    IRQ_CAP                = 14,      /*!< Sensor Interface Controller Interrupt      */
    IRQ_RTC                = 15,      /*!< Real Time Clock Interrupt                  */
    IRQ_TMR0               = 16,      /*!< Timer 0 Interrupt                          */
    IRQ_TMR1               = 17,      /*!< Timer 1 Interrupt                          */
    IRQ_ADC                = 18,      /*!< ADC Interrupt                              */
    IRQ_EMC0_RX            = 19,      /*!< EMC 0 RX Interrupt                         */
    IRQ_EMC1_RX            = 20,      /*!< EMC 1 RX Interrupt                         */
    IRQ_EMC0_TX            = 21,      /*!< EMC 0 TX Interrupt                         */
    IRQ_EMC1_TX            = 22,      /*!< EMC 1 TX Interrupt                         */
    IRQ_EHCI               = 23,      /*!< USB 2.0 Host Controller Interrupt          */
    IRQ_OHCI               = 24,      /*!< USB 1.1 Host Controller Interrupt          */
    IRQ_GDMA0              = 25,      /*!< GDMA Channel 0 Interrupt                   */
    IRQ_GDMA1              = 26,      /*!< GDMA Channel 1 Interrupt                   */
    IRQ_SDH                = 27,      /*!< SD/SDIO Host Interrupt                     */
    IRQ_FMI                = 28,      /*!< FMI Interrupt                              */
    IRQ_USBD               = 29,      /*!< USB Device Interrupt                       */
    IRQ_TMR2               = 30,      /*!< Timer 2 Interrupt                          */
    IRQ_TMR3               = 31,      /*!< Timer 3 Interrupt                          */
    IRQ_TMR4               = 32,      /*!< Timer 4 Interrupt                          */
    IRQ_JPEG               = 33,      /*!< JPEG Engine Interrupt                      */
    IRQ_GE2D               = 34,      /*!< 2D Graphic Engine Interrupt                */
    IRQ_CRPT               = 35,      /*!< Cryptographic Accelerator Interrupt        */
    IRQ_UART0              = 36,      /*!< UART 0 Interrupt                           */
    IRQ_UART1              = 37,      /*!< UART 1 Interrupt                           */
    IRQ_UART2              = 38,      /*!< UART 2 Interrupt                           */
    IRQ_UART4              = 39,      /*!< UART 4 Interrupt                           */
    IRQ_UART6              = 40,      /*!< UART 6 Interrupt                           */
    IRQ_UART8              = 41,      /*!< UART 8 Interrupt                           */
    IRQ_UART10             = 42,      /*!< UART 10 Interrupt                          */
    IRQ_UART3              = 43,      /*!< UART 3 Interrupt                           */
    IRQ_UART5              = 44,      /*!< UART 5 Interrupt                           */
    IRQ_UART7              = 45,      /*!< UART 7 Interrupt                           */
    IRQ_UART9              = 46,      /*!< UART 9 Interrupt                           */
    IRQ_ETMR0              = 47,      /*!< Enhanced Timer 0 Interrupt                 */
    IRQ_ETMR1              = 48,      /*!< Enhanced Timer 1 Interrupt                 */
    IRQ_ETMR2              = 49,      /*!< Enhanced Timer 2 Interrupt                 */
    IRQ_ETMR3              = 50,      /*!< Enhanced Timer 3 Interrupt                 */
    IRQ_SPI0               = 51,      /*!< SPI 0 Interrupt                            */
    IRQ_SPI1               = 52,      /*!< SPI 1 Interrupt                            */
    IRQ_I2C0               = 53,      /*!< I2C 0 Interrupt                            */
    IRQ_I2C1               = 54,      /*!< I2C 1 Interrupt                            */
    IRQ_SC0                = 55,      /*!< Smart Card 0 Interrupt                     */
    IRQ_SC1                = 56,      /*!< Smart Card 1 Interrupt                     */
    IRQ_GPIO               = 57,      /*!< GPIO Interrupt                             */
    IRQ_CAN0               = 58,      /*!< CAN 0 Interrupt                            */
    IRQ_CAN1               = 59,      /*!< CAN 1 Interrupt                            */
    IRQ_PWM                = 60,      /*!< PWM Interrupt                              */
}
IRQn_Type;

/* Define constants for use timer in service parameters.  */
#define TIMER0            0     /*!< Select Timer0 */
#define TIMER1            1     /*!< Select Timer1 */

#define ONE_SHOT_MODE     0     /*!< Timer Operation Mode - One Shot */
#define PERIODIC_MODE     1     /*!< Timer Operation Mode - Periodic */
#define TOGGLE_MODE       2     /*!< Timer Operation Mode - Toggle */

/* The parameters for sysSetInterruptPriorityLevel() and
   sysInstallISR() use */
#define FIQ_LEVEL_0     0       /*!< FIQ Level 0 */
#define IRQ_LEVEL_1     1       /*!< IRQ Level 1 */
#define IRQ_LEVEL_2     2       /*!< IRQ Level 2 */
#define IRQ_LEVEL_3     3       /*!< IRQ Level 3 */
#define IRQ_LEVEL_4     4       /*!< IRQ Level 4 */
#define IRQ_LEVEL_5     5       /*!< IRQ Level 5 */
#define IRQ_LEVEL_6     6       /*!< IRQ Level 6 */
#define IRQ_LEVEL_7     7       /*!< IRQ Level 7 */

#define ONE_HALF_SECS     0     /*!< WDT interval - 1.5s */
#define FIVE_SECS         1     /*!< WDT interval - 5s */
#define TEN_SECS          2     /*!< WDT interval - 10s */
#define TWENTY_SECS       3     /*!< WDT interval - 20s */

/* Define constants for use AIC in service parameters.  */
#define SYS_SWI           0     /*!< Exception - SWI */
#define SYS_D_ABORT       1     /*!< Exception - Data abort */
#define SYS_I_ABORT       2     /*!< Exception - Instruction abort */
#define SYS_UNDEFINE      3     /*!< Exception - undefine */

/* The parameters for sysSetLocalInterrupt() use */
#define ENABLE_IRQ        0x7F  /*!< Enable I-bit of CP15  */
#define ENABLE_FIQ        0xBF  /*!< Enable F-bit of CP15  */
#define ENABLE_FIQ_IRQ    0x3F  /*!< Enable I-bit and F-bit of CP15  */
#define DISABLE_IRQ       0x80  /*!< Disable I-bit of CP15  */
#define DISABLE_FIQ       0x40  /*!< Disable F-bit of CP15  */
#define DISABLE_FIQ_IRQ   0xC0  /*!< Disable I-bit and F-bit of CP15  */

/* Define Cache type  */
#define CACHE_WRITE_BACK        0     /*!< Cache Write-back mode  */
#define CACHE_WRITE_THROUGH     1     /*!< Cache Write-through mode  */
#define CACHE_DISABLE           -1    /*!< Cache Disable  */

/** \brief  Structure type of clock source
 */
typedef enum CLKn
{

    SYS_UPLL     = 1,   /*!< UPLL clock */
    SYS_APLL     = 2,   /*!< APLL clock */
    SYS_SYSTEM   = 3,   /*!< System clock */
    SYS_HCLK1    = 4,   /*!< HCLK1 clock */
    SYS_HCLK234  = 5,   /*!< HCLK234 clock */
    SYS_PCLK     = 6,   /*!< PCLK clock */
    SYS_CPU      = 7,   /*!< CPU clock */

}  CLK_Type;



/// @cond HIDDEN_SYMBOLS
typedef struct datetime_t
{
    UINT32  year;
    UINT32  mon;
    UINT32  day;
    UINT32  hour;
    UINT32  min;
    UINT32  sec;
} DateTime_T;

/* The parameters for sysSetInterruptType() use */
#define LOW_LEVEL_SENSITIVE        0x00
#define HIGH_LEVEL_SENSITIVE       0x40
#define NEGATIVE_EDGE_TRIGGER      0x80
#define POSITIVE_EDGE_TRIGGER      0xC0

/* The parameters for sysSetGlobalInterrupt() use */
#define ENABLE_ALL_INTERRUPTS      0
#define DISABLE_ALL_INTERRUPTS     1

#define MMU_DIRECT_MAPPING  0
#define MMU_INVERSE_MAPPING 1


/* Define constants for use Cache in service parameters.  */
#define CACHE_4M        2
#define CACHE_8M        3
#define CACHE_16M       4
#define CACHE_32M       5
#define I_CACHE         6
#define D_CACHE         7
#define I_D_CACHE       8


/**
  * @brief      Disable register write-protection function
  * @param      None
  * @return     None
  * @details    This function disable register write-protection function.
  *             To unlock the protected register to allow write access.
  */
static __inline void SYS_UnlockReg(void)
{
    do
    {
        outpw(0xB00001FC, 0x59UL);
        outpw(0xB00001FC, 0x16UL);
        outpw(0xB00001FC, 0x88UL);
    }
    while (inpw(0xB00001FC) == 0UL);
}

/**
  * @brief      Enable register write-protection function
  * @param      None
  * @return     None
  * @details    This function is used to enable register write-protection function.
  *             To lock the protected register to forbid write access.
  */
static __inline void SYS_LockReg(void)
{
    outpw(0xB00001FC, 0);
}


/// @endcond HIDDEN_SYMBOLS

/*@}*/ /* end of group N9H30_SYS_EXPORTED_CONSTANTS */


/** @addtogroup N9H30_SYS_EXPORTED_FUNCTIONS SYS Exported Functions
  @{
*/

/* Define system library Timer functions */
UINT32  sysGetTicks(INT32 nTimeNo);
INT32   sysResetTicks(INT32 nTimeNo);
INT32   sysUpdateTickCount(INT32 nTimeNo, UINT32 uCount);
INT32   sysSetTimerReferenceClock(INT32 nTimeNo, UINT32 uClockRate);
INT32   sysStartTimer(INT32 nTimeNo, UINT32 uTicksPerSecond, INT32 nOpMode);
INT32   sysStopTimer(INT32 nTimeNo);
void    sysClearWatchDogTimerCount(void);
void    sysClearWatchDogTimerInterruptStatus(void);
void    sysDisableWatchDogTimer(void);
void    sysDisableWatchDogTimerReset(void);
void    sysEnableWatchDogTimer(void);
void    sysEnableWatchDogTimerReset(void);
PVOID   sysInstallWatchDogTimerISR(INT32 nIntTypeLevel, PVOID pvNewISR);
INT32   sysSetWatchDogTimerInterval(INT32 nWdtInterval);
INT32   sysSetTimerEvent(INT32 nTimeNo, UINT32 uTimeTick, PVOID pvFun);
void    sysClearTimerEvent(INT32 nTimeNo, UINT32 uTimeEventNo);
void    sysSetLocalTime(DateTime_T ltime);          /*!< Set local time \hideinitializer */
void    sysGetCurrentTime(DateTime_T *curTime);     /*!< Get current time \hideinitializer */
void    sysDelay(UINT32 uTicks);

/* Define system library UART functions */
//INT8    sysGetChar(void);
//INT32   sysInitializeUART(void);
//void    sysprintf(PINT8 pcStr, ...);
//void    sysPutChar(UINT8 ucCh);
//INT     sysIsKbHit(void);

/* Define system library AIC functions */
INT32   sysDisableInterrupt(IRQn_Type eIntNo);
INT32   sysEnableInterrupt(IRQn_Type eIntNo);
BOOL    sysGetIBitState(void);              /*!< Get I bit state \hideinitializer */
UINT32  sysGetInterruptEnableStatus(void);  /*!< Get interrupt enable status \hideinitializer */
UINT32  sysGetInterruptEnableStatusH(void); /*!< Get interrupt enable status \hideinitializer */
PVOID   sysInstallExceptionHandler(INT32 nExceptType, PVOID pvNewHandler);
PVOID   sysInstallFiqHandler(PVOID pvNewISR);
PVOID   sysInstallIrqHandler(PVOID pvNewISR);
PVOID   sysInstallISR(INT32 nIntTypeLevel, IRQn_Type eIntNo, PVOID pvNewISR);
INT32   sysSetGlobalInterrupt(INT32 nIntState);     /*!< Enable/Disable all interrupt \hideinitializer */
INT32   sysSetInterruptPriorityLevel(IRQn_Type eIntNo, UINT32 uIntLevel);
INT32   sysSetInterruptType(IRQn_Type eIntNo, UINT32 uIntSourceType);       /*!< Change interrupt type \hideinitializer */
INT32   sysSetLocalInterrupt(INT32 nIntState);


/* Define system library Cache functions */
void    sysDisableCache(void);
INT32   sysEnableCache(UINT32 uCacheOpMode);
void    sysFlushCache(INT32 nCacheType);    /*!< flush cache \hideinitializer */
BOOL    sysGetCacheState(void);             /*!< get cache state \hideinitializer */
INT32   sysGetSdramSizebyMB(void);          /*!< Get DRAM size \hideinitializer */
void    sysInvalidCache(void);              /*!< invalid cache \hideinitializer */
INT32   sysSetCachePages(UINT32 addr, INT32 size, INT32 cache_mode);    /*!< set cache page \hideinitializer */

int sysSetMMUMappingMethod(int mode);   /*!< MMU mapping \hideinitializer */

UINT32 sysGetClock(CLK_Type clk);

typedef void (*sys_pvFunPtr)();   /* function pointer */
/// @cond HIDDEN_SYMBOLS
extern sys_pvFunPtr sysIrqHandlerTable[];
extern BOOL volatile _sys_bIsAICInitial;
/// @endcond
#ifdef __cplusplus
}
#endif

/*@}*/ /* end of group N9H30_SYS_EXPORTED_FUNCTIONS */

/*@}*/ /* end of group N9H30_SYS_Driver */

/*@}*/ /* end of group N9H30_Device_Driver */

#endif //__NU_SYS_H__

/*** (C) COPYRIGHT 2018 Nuvoton Technology Corp. ***/