Nano100AN Series BSP  V3.02.002
The Board Support Package for Nano100AN Series
ebi.c
Go to the documentation of this file.
1 /****************************************************************************/
12 #include "Nano100Series.h"
13 #include "ebi.h"
14 
15 
47 void EBI_Open(uint32_t u32Bank, uint32_t u32DataWidth, uint32_t u32TimingClass, uint32_t u32BusMode, uint32_t u32CSActiveLevel)
48 {
49  EBI->EBICON = 0;
50 
51  if (u32DataWidth == EBI_BUSWIDTH_8BIT)
52  EBI->EBICON &= ~EBI_EBICON_ExtBW16_Msk;
53  else
54  EBI->EBICON |= EBI_EBICON_ExtBW16_Msk;
55 
57  switch (u32TimingClass)
58  {
59  case EBI_TIMING_FASTEST:
60  EBI->EBICON |= (0 << EBI_EBICON_ExttALE_Pos);
62  EBI->EXTIME = 0;
63  break;
64 
66  EBI->EBICON |= (1 << EBI_EBICON_ExttALE_Pos);
68  EBI->EXTIME = (4 << EBI_EXTIME_ExttACC_Pos) | (1 << EBI_EXTIME_ExttAHD_Pos) |
71  break;
72 
73  case EBI_TIMING_FAST:
74  EBI->EBICON |= (2 << EBI_EBICON_ExttALE_Pos);
76  EBI->EXTIME = (8 << EBI_EXTIME_ExttACC_Pos) | (2 << EBI_EXTIME_ExttAHD_Pos) |
79  break;
80 
81  case EBI_TIMING_NORMAL:
82  EBI->EBICON |= (3 << EBI_EBICON_ExttALE_Pos);
84  EBI->EXTIME = (16 << EBI_EXTIME_ExttACC_Pos) | (3 << EBI_EXTIME_ExttAHD_Pos) |
87  break;
88 
89  case EBI_TIMING_SLOW:
90  EBI->EBICON |= (4 << EBI_EBICON_ExttALE_Pos);
92  EBI->EXTIME = (20 << EBI_EXTIME_ExttACC_Pos) | (4 << EBI_EXTIME_ExttAHD_Pos) |
94  (12 << EBI_EXTIME_ExtIR2R_Pos);
95  break;
96 
98  EBI->EBICON |= (5 << EBI_EBICON_ExttALE_Pos);
100  EBI->EXTIME = (26 << EBI_EXTIME_ExttACC_Pos) | (5 << EBI_EXTIME_ExttAHD_Pos) |
102  (14 << EBI_EXTIME_ExtIR2R_Pos);
103  break;
104 
105  case EBI_TIMING_SLOWEST:
106  EBI->EBICON |= (6 << EBI_EBICON_ExttALE_Pos);
107  EBI->EBICON |= (EBI_MCLKDIV_32 << EBI_EBICON_MCLKDIV_Pos);
108  EBI->EXTIME = (31 << EBI_EXTIME_ExttACC_Pos) | (7 << EBI_EXTIME_ExttAHD_Pos) |
110  (15 << EBI_EXTIME_ExtIR2R_Pos);
111  break;
112  }
113 
115 }
116 
122 void EBI_Close(uint8_t u32Bank)
123 {
124  EBI->EBICON = 0;
125  EBI->EXTIME = 0;
126 }
127 
141 void EBI_SetBusTiming(uint32_t u32Bank, uint32_t u32TimingConfig, uint32_t u32MclkDiv)
142 {
143  EBI->EXTIME = u32TimingConfig;
144  EBI->EBICON = (EBI->EBICON & ~EBI_EBICON_MCLKDIV_Msk) | (u32MclkDiv << EBI_EBICON_MCLKDIV_Pos);
145 }
146 
147  /* end of group NANO100_EBI_EXPORTED_FUNCTIONS */
149  /* end of group NANO100_EBI_Driver */
151  /* end of group NANO100_Device_Driver */
153 
154 /*** (C) COPYRIGHT 2014 Nuvoton Technology Corp. ***/
#define EBI_MCLKDIV_2
Definition: ebi.h:50
#define EBI_EXTIME_ExttACC_Pos
#define EBI_EXTIME_ExtIW2X_Pos
#define EBI
Pointer to EBI register structure.
#define EBI_EXTIME_ExttAHD_Pos
#define EBI_TIMING_NORMAL
Definition: ebi.h:62
#define EBI_MCLKDIV_32
Definition: ebi.h:54
#define EBI_TIMING_VERYSLOW
Definition: ebi.h:64
#define EBI_TIMING_VERYFAST
Definition: ebi.h:60
Nano100 series peripheral access layer header file. This file contains all the peripheral register's ...
#define EBI_EXTIME_ExtIR2W_Pos
#define EBI_EBICON_ExtBW16_Msk
#define EBI_TIMING_SLOWEST
Definition: ebi.h:65
void EBI_Open(uint32_t u32Bank, uint32_t u32DataWidth, uint32_t u32TimingClass, uint32_t u32BusMode, uint32_t u32CSActiveLevel)
Initialize and enable EBI.
Definition: ebi.c:47
#define EBI_EBICON_ExttALE_Msk
#define EBI_EBICON_MCLKEN_Msk
#define EBI_TIMING_FASTEST
Definition: ebi.h:59
#define EBI_EBICON_ExttALE_Pos
#define EBI_TIMING_FAST
Definition: ebi.h:61
#define EBI_EXTIME_ExtIR2R_Pos
#define EBI_BUSWIDTH_8BIT
Definition: ebi.h:43
#define EBI_TIMING_SLOW
Definition: ebi.h:63
void EBI_Close(uint8_t u32Bank)
Disable EBI.
Definition: ebi.c:122
#define EBI_MCLKDIV_1
Definition: ebi.h:49
Nano100 Series Flash Memory Controller Driver Header File.
#define EBI_EBICON_MCLKDIV_Msk
#define EBI_MCLKDIV_8
Definition: ebi.h:52
#define EBI_MCLKDIV_4
Definition: ebi.h:51
#define EBI_EBICON_MCLKDIV_Pos
#define EBI_MCLKDIV_16
Definition: ebi.h:53
void EBI_SetBusTiming(uint32_t u32Bank, uint32_t u32TimingConfig, uint32_t u32MclkDiv)
Set EBI bus timings.
Definition: ebi.c:141
#define EBI_EBICON_ExtEN_Msk