1 /**************************************************************************//**
\r
4 * @brief External Bus Interface(EBI) driver header file
\r
6 * @copyright (C) 2016 Nuvoton Technology Corp. All rights reserved.
\r
7 *****************************************************************************/
\r
17 /** @addtogroup Standard_Driver Standard Driver
\r
21 /** @addtogroup EBI_Driver EBI Driver
\r
25 /** @addtogroup EBI_EXPORTED_CONSTANTS EBI Exported Constants
\r
28 /*---------------------------------------------------------------------------------------------------------*/
\r
29 /* Miscellaneous Constant Definitions */
\r
30 /*---------------------------------------------------------------------------------------------------------*/
\r
31 #define EBI_BANK0_BASE_ADDR 0x60000000UL /*!< EBI bank0 base address \hideinitializer */
\r
32 #define EBI_BANK1_BASE_ADDR 0x60100000UL /*!< EBI bank1 base address \hideinitializer */
\r
33 #define EBI_BANK2_BASE_ADDR 0x60200000UL /*!< EBI bank2 base address \hideinitializer */
\r
34 #define EBI_BANK0_BASE_ADDR_NS 0x70000000UL /*!< EBI bank0 base address for Non-Secure \hideinitializer */
\r
35 #define EBI_BANK1_BASE_ADDR_NS 0x70100000UL /*!< EBI bank1 base address for Non-Secure \hideinitializer */
\r
36 #define EBI_BANK2_BASE_ADDR_NS 0x70200000UL /*!< EBI bank2 base address for Non-Secure \hideinitializer */
\r
37 #define EBI_MAX_SIZE 0x00100000UL /*!< Maximum EBI size for each bank is 1 MB \hideinitializer */
\r
39 /*---------------------------------------------------------------------------------------------------------*/
\r
40 /* Constants for EBI bank number */
\r
41 /*---------------------------------------------------------------------------------------------------------*/
\r
42 #define EBI_BANK0 0UL /*!< EBI bank 0 \hideinitializer */
\r
43 #define EBI_BANK1 1UL /*!< EBI bank 1 \hideinitializer */
\r
44 #define EBI_BANK2 2UL /*!< EBI bank 2 \hideinitializer */
\r
46 /*---------------------------------------------------------------------------------------------------------*/
\r
47 /* Constants for EBI data bus width */
\r
48 /*---------------------------------------------------------------------------------------------------------*/
\r
49 #define EBI_BUSWIDTH_8BIT 8UL /*!< EBI bus width is 8-bit \hideinitializer */
\r
50 #define EBI_BUSWIDTH_16BIT 16UL /*!< EBI bus width is 16-bit \hideinitializer */
\r
52 /*---------------------------------------------------------------------------------------------------------*/
\r
53 /* Constants for EBI CS Active Level */
\r
54 /*---------------------------------------------------------------------------------------------------------*/
\r
55 #define EBI_CS_ACTIVE_LOW 0UL /*!< EBI CS active level is low \hideinitializer */
\r
56 #define EBI_CS_ACTIVE_HIGH 1UL /*!< EBI CS active level is high \hideinitializer */
\r
58 /*---------------------------------------------------------------------------------------------------------*/
\r
59 /* Constants for EBI MCLK divider and Timing */
\r
60 /*---------------------------------------------------------------------------------------------------------*/
\r
61 #define EBI_MCLKDIV_1 0x0UL /*!< EBI output clock(MCLK) is HCLK/1 \hideinitializer */
\r
62 #define EBI_MCLKDIV_2 0x1UL /*!< EBI output clock(MCLK) is HCLK/2 \hideinitializer */
\r
63 #define EBI_MCLKDIV_4 0x2UL /*!< EBI output clock(MCLK) is HCLK/4 \hideinitializer */
\r
64 #define EBI_MCLKDIV_8 0x3UL /*!< EBI output clock(MCLK) is HCLK/8 \hideinitializer */
\r
65 #define EBI_MCLKDIV_16 0x4UL /*!< EBI output clock(MCLK) is HCLK/16 \hideinitializer */
\r
66 #define EBI_MCLKDIV_32 0x5UL /*!< EBI output clock(MCLK) is HCLK/32 \hideinitializer */
\r
67 #define EBI_MCLKDIV_64 0x6UL /*!< EBI output clock(MCLK) is HCLK/64 \hideinitializer */
\r
68 #define EBI_MCLKDIV_128 0x7UL /*!< EBI output clock(MCLK) is HCLK/128 \hideinitializer */
\r
70 #define EBI_TIMING_FASTEST 0x0UL /*!< EBI timing is the fastest \hideinitializer */
\r
71 #define EBI_TIMING_VERYFAST 0x1UL /*!< EBI timing is very fast \hideinitializer */
\r
72 #define EBI_TIMING_FAST 0x2UL /*!< EBI timing is fast \hideinitializer */
\r
73 #define EBI_TIMING_NORMAL 0x3UL /*!< EBI timing is normal \hideinitializer */
\r
74 #define EBI_TIMING_SLOW 0x4UL /*!< EBI timing is slow \hideinitializer */
\r
75 #define EBI_TIMING_VERYSLOW 0x5UL /*!< EBI timing is very slow \hideinitializer */
\r
76 #define EBI_TIMING_SLOWEST 0x6UL /*!< EBI timing is the slowest \hideinitializer */
\r
78 #define EBI_OPMODE_NORMAL 0x0UL /*!< EBI bus operate in normal mode \hideinitializer */
\r
79 #define EBI_OPMODE_CACCESS (EBI_CTL_CACCESS_Msk) /*!< EBI bus operate in Continuous Data Access mode \hideinitializer */
\r
80 #define EBI_OPMODE_ADSEPARATE (EBI_CTL_ADSEPEN_Msk) /*!< EBI bus operate in AD Separate mode \hideinitializer */
\r
82 /*@}*/ /* end of group EBI_EXPORTED_CONSTANTS */
\r
85 /** @addtogroup EBI_EXPORTED_FUNCTIONS EBI Exported Functions
\r
90 * @brief Read 8-bit data on EBI bank0
\r
92 * @param[in] ebi The pointer of EBI module.
\r
93 * @param[in] u32Addr The data address on EBI bank0.
\r
95 * @return 8-bit Data
\r
97 * @details This macro is used to read 8-bit data from specify address on EBI bank0.
\r
100 #define EBI0_READ_DATA8(ebi, u32Addr) (*((volatile unsigned char *)((((ebi)==EBI)? EBI_BANK0_BASE_ADDR:EBI_BANK0_BASE_ADDR_NS)+(u32Addr))))
\r
103 * @brief Write 8-bit data to EBI bank0
\r
105 * @param[in] ebi The pointer of EBI module.
\r
106 * @param[in] u32Addr The data address on EBI bank0.
\r
107 * @param[in] u32Data Specify data to be written.
\r
111 * @details This macro is used to write 8-bit data to specify address on EBI bank0.
\r
114 #define EBI0_WRITE_DATA8(ebi, u32Addr, u32Data) (*((volatile unsigned char *)((((ebi)==EBI)? EBI_BANK0_BASE_ADDR:EBI_BANK0_BASE_ADDR_NS)+(u32Addr))) = (u32Data))
\r
117 * @brief Read 16-bit data on EBI bank0
\r
119 * @param[in] ebi The pointer of EBI module.
\r
120 * @param[in] u32Addr The data address on EBI bank0.
\r
122 * @return 16-bit Data
\r
124 * @details This macro is used to read 16-bit data from specify address on EBI bank0.
\r
127 #define EBI0_READ_DATA16(ebi, u32Addr) (*((volatile unsigned short *)((((ebi)==EBI)? EBI_BANK0_BASE_ADDR:EBI_BANK0_BASE_ADDR_NS)+(u32Addr))))
\r
130 * @brief Write 16-bit data to EBI bank0
\r
132 * @param[in] ebi The pointer of EBI module.
\r
133 * @param[in] u32Addr The data address on EBI bank0.
\r
134 * @param[in] u32Data Specify data to be written.
\r
138 * @details This macro is used to write 16-bit data to specify address on EBI bank0.
\r
141 #define EBI0_WRITE_DATA16(ebi, u32Addr, u32Data) (*((volatile unsigned short *)((((ebi)==EBI)? EBI_BANK0_BASE_ADDR:EBI_BANK0_BASE_ADDR_NS)+(u32Addr))) = (u32Data))
\r
144 * @brief Read 32-bit data on EBI bank0
\r
146 * @param[in] ebi The pointer of EBI module.
\r
147 * @param[in] u32Addr The data address on EBI bank0.
\r
149 * @return 32-bit Data
\r
151 * @details This macro is used to read 32-bit data from specify address on EBI bank0.
\r
154 #define EBI0_READ_DATA32(ebi, u32Addr) (*((volatile unsigned int *)((((ebi)==EBI)? EBI_BANK0_BASE_ADDR:EBI_BANK0_BASE_ADDR_NS)+(u32Addr))))
\r
157 * @brief Write 32-bit data to EBI bank0
\r
159 * @param[in] ebi The pointer of EBI module.
\r
160 * @param[in] u32Addr The data address on EBI bank0.
\r
161 * @param[in] u32Data Specify data to be written.
\r
165 * @details This macro is used to write 32-bit data to specify address on EBI bank0.
\r
168 #define EBI0_WRITE_DATA32(ebi, u32Addr, u32Data) (*((volatile unsigned int *)((((ebi)==EBI)? EBI_BANK0_BASE_ADDR:EBI_BANK0_BASE_ADDR_NS)+(u32Addr))) = (u32Data))
\r
171 * @brief Read 8-bit data on EBI bank1
\r
173 * @param[in] ebi The pointer of EBI module.
\r
174 * @param[in] u32Addr The data address on EBI bank1.
\r
176 * @return 8-bit Data
\r
178 * @details This macro is used to read 8-bit data from specify address on EBI bank1.
\r
181 #define EBI1_READ_DATA8(ebi, u32Addr) (*((volatile unsigned char *)((((ebi)==EBI)? EBI_BANK1_BASE_ADDR:EBI_BANK1_BASE_ADDR_NS)+(u32Addr))))
\r
184 * @brief Write 8-bit data to EBI bank1
\r
186 * @param[in] ebi The pointer of EBI module.
\r
187 * @param[in] u32Addr The data address on EBI bank1.
\r
188 * @param[in] u32Data Specify data to be written.
\r
192 * @details This macro is used to write 8-bit data to specify address on EBI bank1.
\r
195 #define EBI1_WRITE_DATA8(ebi, u32Addr, u32Data) (*((volatile unsigned char *)((((ebi)==EBI)? EBI_BANK1_BASE_ADDR:EBI_BANK1_BASE_ADDR_NS)+(u32Addr))) = (u32Data))
\r
198 * @brief Read 16-bit data on EBI bank1
\r
200 * @param[in] ebi The pointer of EBI module.
\r
201 * @param[in] u32Addr The data address on EBI bank1.
\r
203 * @return 16-bit Data
\r
205 * @details This macro is used to read 16-bit data from specify address on EBI bank1.
\r
208 #define EBI1_READ_DATA16(ebi, u32Addr) (*((volatile unsigned short *)((((ebi)==EBI)? EBI_BANK1_BASE_ADDR:EBI_BANK1_BASE_ADDR_NS)+(u32Addr))))
\r
211 * @brief Write 16-bit data to EBI bank1
\r
213 * @param[in] ebi The pointer of EBI module.
\r
214 * @param[in] u32Addr The data address on EBI bank1.
\r
215 * @param[in] u32Data Specify data to be written.
\r
219 * @details This macro is used to write 16-bit data to specify address on EBI bank1.
\r
222 #define EBI1_WRITE_DATA16(ebi, u32Addr, u32Data) (*((volatile unsigned short *)((((ebi)==EBI)? EBI_BANK1_BASE_ADDR:EBI_BANK1_BASE_ADDR_NS)+(u32Addr))) = (u32Data))
\r
225 * @brief Read 32-bit data on EBI bank1
\r
227 * @param[in] ebi The pointer of EBI module.
\r
228 * @param[in] u32Addr The data address on EBI bank1.
\r
230 * @return 32-bit Data
\r
232 * @details This macro is used to read 32-bit data from specify address on EBI bank1.
\r
235 #define EBI1_READ_DATA32(ebi, u32Addr) (*((volatile unsigned int *)((((ebi)==EBI)? EBI_BANK1_BASE_ADDR:EBI_BANK1_BASE_ADDR_NS)+(u32Addr))))
\r
238 * @brief Write 32-bit data to EBI bank1
\r
240 * @param[in] ebi The pointer of EBI module.
\r
241 * @param[in] u32Addr The data address on EBI bank1.
\r
242 * @param[in] u32Data Specify data to be written.
\r
246 * @details This macro is used to write 32-bit data to specify address on EBI bank1.
\r
249 #define EBI1_WRITE_DATA32(ebi, u32Addr, u32Data) (*((volatile unsigned int *)((((ebi)==EBI)? EBI_BANK1_BASE_ADDR:EBI_BANK1_BASE_ADDR_NS)+(u32Addr))) = (u32Data))
\r
252 * @brief Read 8-bit data on EBI bank2
\r
254 * @param[in] ebi The pointer of EBI module.
\r
255 * @param[in] u32Addr The data address on EBI bank2.
\r
257 * @return 8-bit Data
\r
259 * @details This macro is used to read 8-bit data from specify address on EBI bank2.
\r
262 #define EBI2_READ_DATA8(ebi, u32Addr) (*((volatile unsigned char *)((((ebi)==EBI)? EBI_BANK2_BASE_ADDR:EBI_BANK2_BASE_ADDR_NS)+(u32Addr))))
\r
265 * @brief Write 8-bit data to EBI bank2
\r
267 * @param[in] ebi The pointer of EBI module.
\r
268 * @param[in] u32Addr The data address on EBI bank2.
\r
269 * @param[in] u32Data Specify data to be written.
\r
273 * @details This macro is used to write 8-bit data to specify address on EBI bank2.
\r
276 #define EBI2_WRITE_DATA8(ebi, u32Addr, u32Data) (*((volatile unsigned char *)((((ebi)==EBI)? EBI_BANK2_BASE_ADDR:EBI_BANK2_BASE_ADDR_NS)+(u32Addr))) = (u32Data))
\r
279 * @brief Read 16-bit data on EBI bank2
\r
281 * @param[in] ebi The pointer of EBI module.
\r
282 * @param[in] u32Addr The data address on EBI bank2.
\r
284 * @return 16-bit Data
\r
286 * @details This macro is used to read 16-bit data from specify address on EBI bank2.
\r
288 #define EBI2_READ_DATA16(ebi, u32Addr) (*((volatile unsigned short *)((((ebi)==EBI)? EBI_BANK2_BASE_ADDR:EBI_BANK2_BASE_ADDR_NS)+(u32Addr))))
\r
291 * @brief Write 16-bit data to EBI bank2
\r
293 * @param[in] ebi The pointer of EBI module.
\r
294 * @param[in] u32Addr The data address on EBI bank2.
\r
295 * @param[in] u32Data Specify data to be written.
\r
299 * @details This macro is used to write 16-bit data to specify address on EBI bank2.
\r
302 #define EBI2_WRITE_DATA16(ebi, u32Addr, u32Data) (*((volatile unsigned short *)((((ebi)==EBI)? EBI_BANK2_BASE_ADDR:EBI_BANK2_BASE_ADDR_NS)+(u32Addr))) = (u32Data))
\r
305 * @brief Read 32-bit data on EBI bank2
\r
307 * @param[in] ebi The pointer of EBI module.
\r
308 * @param[in] u32Addr The data address on EBI bank2.
\r
310 * @return 32-bit Data
\r
312 * @details This macro is used to read 32-bit data from specify address on EBI bank2.
\r
315 #define EBI2_READ_DATA32(ebi, u32Addr) (*((volatile unsigned int *)((((ebi)==EBI)? EBI_BANK2_BASE_ADDR:EBI_BANK2_BASE_ADDR_NS)+(u32Addr))))
\r
317 * @brief Write 32-bit data to EBI bank2
\r
319 * @param[in] ebi The pointer of EBI module.
\r
320 * @param[in] u32Addr The data address on EBI bank2.
\r
321 * @param[in] u32Data Specify data to be written.
\r
325 * @details This macro is used to write 32-bit data to specify address on EBI bank2.
\r
328 #define EBI2_WRITE_DATA32(ebi, u32Addr, u32Data) (*((volatile unsigned int *)((((ebi)==EBI)? EBI_BANK2_BASE_ADDR:EBI_BANK2_BASE_ADDR_NS)+(u32Addr))) = (u32Data))
\r
331 * @brief Enable EBI Write Buffer
\r
333 * @param[in] ebi The pointer of EBI module.
\r
337 * @details This macro is used to improve EBI write operation for all EBI banks.
\r
340 #define EBI_ENABLE_WRITE_BUFFER(ebi) ((ebi)->CTL0 |= EBI_CTL_WBUFEN_Msk);
\r
343 * @brief Disable EBI Write Buffer
\r
345 * @param[in] ebi The pointer of EBI module.
\r
349 * @details This macro is used to disable EBI write buffer function.
\r
352 #define EBI_DISABLE_WRITE_BUFFER(ebi) ((ebi)->CTL0 &= ~EBI_CTL_WBUFEN_Msk);
\r
354 void EBI_Open(uint32_t u32Bank, uint32_t u32DataWidth, uint32_t u32TimingClass, uint32_t u32BusMode, uint32_t u32CSActiveLevel);
\r
355 void EBI_Close(uint32_t u32Bank);
\r
356 void EBI_SetBusTiming(uint32_t u32Bank, uint32_t u32TimingConfig, uint32_t u32MclkDiv);
\r
358 /*@}*/ /* end of group EBI_EXPORTED_FUNCTIONS */
\r
360 /*@}*/ /* end of group EBI_Driver */
\r
362 /*@}*/ /* end of group Standard_Driver */
\r
368 #endif /* __EBI_H__ */
\r
370 /*** (C) COPYRIGHT 2016 Nuvoton Technology Corp. ***/
\r