]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Nuvoton_Code/StdDriver/inc/ebi.h
Add Cortex M23 GCC and IAR ports. Add demo projects for Nuvoton NuMaker-PFM-2351.
[freertos] / FreeRTOS / Demo / CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC / Nuvoton_Code / StdDriver / inc / ebi.h
1 /**************************************************************************//**\r
2  * @file     ebi.h\r
3  * @version  V3.00\r
4  * @brief    External Bus Interface(EBI) driver header file\r
5  *\r
6  * @copyright (C) 2016 Nuvoton Technology Corp. All rights reserved.\r
7  *****************************************************************************/\r
8 #ifndef __EBI_H__\r
9 #define __EBI_H__\r
10 \r
11 #ifdef __cplusplus\r
12 extern "C"\r
13 {\r
14 #endif\r
15 \r
16 \r
17 /** @addtogroup Standard_Driver Standard Driver\r
18   @{\r
19 */\r
20 \r
21 /** @addtogroup EBI_Driver EBI Driver\r
22   @{\r
23 */\r
24 \r
25 /** @addtogroup EBI_EXPORTED_CONSTANTS EBI Exported Constants\r
26   @{\r
27 */\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
38 \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
45 \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
51 \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
57 \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
69 \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
77 \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
81 \r
82 /*@}*/ /* end of group EBI_EXPORTED_CONSTANTS */\r
83 \r
84 \r
85 /** @addtogroup EBI_EXPORTED_FUNCTIONS EBI Exported Functions\r
86   @{\r
87 */\r
88 \r
89 /**\r
90   * @brief      Read 8-bit data on EBI bank0\r
91   *\r
92   * @param[in]  ebi         The pointer of EBI module.\r
93   * @param[in]  u32Addr     The data address on EBI bank0.\r
94   *\r
95   * @return     8-bit Data\r
96   *\r
97   * @details    This macro is used to read 8-bit data from specify address on EBI bank0.\r
98   * \hideinitializer\r
99   */\r
100 #define EBI0_READ_DATA8(ebi, u32Addr)               (*((volatile unsigned char *)((((ebi)==EBI)? EBI_BANK0_BASE_ADDR:EBI_BANK0_BASE_ADDR_NS)+(u32Addr))))\r
101 \r
102 /**\r
103   * @brief      Write 8-bit data to EBI bank0\r
104   *\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
108   *\r
109   * @return     None\r
110   *\r
111   * @details    This macro is used to write 8-bit data to specify address on EBI bank0.\r
112   * \hideinitializer\r
113   */\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
115 \r
116 /**\r
117   * @brief      Read 16-bit data on EBI bank0\r
118   *\r
119   * @param[in]  ebi         The pointer of EBI module.\r
120   * @param[in]  u32Addr     The data address on EBI bank0.\r
121   *\r
122   * @return     16-bit Data\r
123   *\r
124   * @details    This macro is used to read 16-bit data from specify address on EBI bank0.\r
125   * \hideinitializer\r
126   */\r
127 #define EBI0_READ_DATA16(ebi, u32Addr)              (*((volatile unsigned short *)((((ebi)==EBI)? EBI_BANK0_BASE_ADDR:EBI_BANK0_BASE_ADDR_NS)+(u32Addr))))\r
128 \r
129 /**\r
130   * @brief      Write 16-bit data to EBI bank0\r
131   *\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
135   *\r
136   * @return     None\r
137   *\r
138   * @details    This macro is used to write 16-bit data to specify address on EBI bank0.\r
139   * \hideinitializer\r
140   */\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
142 \r
143 /**\r
144   * @brief      Read 32-bit data on EBI bank0\r
145   *\r
146   * @param[in]  ebi         The pointer of EBI module.\r
147   * @param[in]  u32Addr     The data address on EBI bank0.\r
148   *\r
149   * @return     32-bit Data\r
150   *\r
151   * @details    This macro is used to read 32-bit data from specify address on EBI bank0.\r
152   * \hideinitializer\r
153   */\r
154 #define EBI0_READ_DATA32(ebi, u32Addr)              (*((volatile unsigned int *)((((ebi)==EBI)? EBI_BANK0_BASE_ADDR:EBI_BANK0_BASE_ADDR_NS)+(u32Addr))))\r
155 \r
156 /**\r
157   * @brief      Write 32-bit data to EBI bank0\r
158   *\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
162   *\r
163   * @return     None\r
164   *\r
165   * @details    This macro is used to write 32-bit data to specify address on EBI bank0.\r
166   * \hideinitializer\r
167   */\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
169 \r
170 /**\r
171   * @brief      Read 8-bit data on EBI bank1\r
172   *\r
173   * @param[in]  ebi         The pointer of EBI module.\r
174   * @param[in]  u32Addr     The data address on EBI bank1.\r
175   *\r
176   * @return     8-bit Data\r
177   *\r
178   * @details    This macro is used to read 8-bit data from specify address on EBI bank1.\r
179   * \hideinitializer\r
180   */\r
181 #define EBI1_READ_DATA8(ebi, u32Addr)               (*((volatile unsigned char *)((((ebi)==EBI)? EBI_BANK1_BASE_ADDR:EBI_BANK1_BASE_ADDR_NS)+(u32Addr))))\r
182 \r
183 /**\r
184   * @brief      Write 8-bit data to EBI bank1\r
185   *\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
189   *\r
190   * @return     None\r
191   *\r
192   * @details    This macro is used to write 8-bit data to specify address on EBI bank1.\r
193   * \hideinitializer\r
194   */\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
196 \r
197 /**\r
198   * @brief      Read 16-bit data on EBI bank1\r
199   *\r
200   * @param[in]  ebi         The pointer of EBI module.\r
201   * @param[in]  u32Addr     The data address on EBI bank1.\r
202   *\r
203   * @return     16-bit Data\r
204   *\r
205   * @details    This macro is used to read 16-bit data from specify address on EBI bank1.\r
206   * \hideinitializer\r
207   */\r
208 #define EBI1_READ_DATA16(ebi, u32Addr)              (*((volatile unsigned short *)((((ebi)==EBI)? EBI_BANK1_BASE_ADDR:EBI_BANK1_BASE_ADDR_NS)+(u32Addr))))\r
209 \r
210 /**\r
211   * @brief      Write 16-bit data to EBI bank1\r
212   *\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
216   *\r
217   * @return     None\r
218   *\r
219   * @details    This macro is used to write 16-bit data to specify address on EBI bank1.\r
220   * \hideinitializer\r
221   */\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
223 \r
224 /**\r
225   * @brief      Read 32-bit data on EBI bank1\r
226   *\r
227   * @param[in]  ebi         The pointer of EBI module.\r
228   * @param[in]  u32Addr     The data address on EBI bank1.\r
229   *\r
230   * @return     32-bit Data\r
231   *\r
232   * @details    This macro is used to read 32-bit data from specify address on EBI bank1.\r
233   * \hideinitializer\r
234   */\r
235 #define EBI1_READ_DATA32(ebi, u32Addr)              (*((volatile unsigned int *)((((ebi)==EBI)? EBI_BANK1_BASE_ADDR:EBI_BANK1_BASE_ADDR_NS)+(u32Addr))))\r
236 \r
237 /**\r
238   * @brief      Write 32-bit data to EBI bank1\r
239   *\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
243   *\r
244   * @return     None\r
245   *\r
246   * @details    This macro is used to write 32-bit data to specify address on EBI bank1.\r
247   * \hideinitializer\r
248   */\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
250 \r
251 /**\r
252   * @brief      Read 8-bit data on EBI bank2\r
253   *\r
254   * @param[in]  ebi         The pointer of EBI module.\r
255   * @param[in]  u32Addr     The data address on EBI bank2.\r
256   *\r
257   * @return     8-bit Data\r
258   *\r
259   * @details    This macro is used to read 8-bit data from specify address on EBI bank2.\r
260   * \hideinitializer\r
261   */\r
262 #define EBI2_READ_DATA8(ebi, u32Addr)               (*((volatile unsigned char *)((((ebi)==EBI)? EBI_BANK2_BASE_ADDR:EBI_BANK2_BASE_ADDR_NS)+(u32Addr))))\r
263 \r
264 /**\r
265   * @brief      Write 8-bit data to EBI bank2\r
266   *\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
270   *\r
271   * @return     None\r
272   *\r
273   * @details    This macro is used to write 8-bit data to specify address on EBI bank2.\r
274   * \hideinitializer\r
275   */\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
277 \r
278 /**\r
279   * @brief      Read 16-bit data on EBI bank2\r
280   *\r
281   * @param[in]  ebi         The pointer of EBI module.\r
282   * @param[in]  u32Addr     The data address on EBI bank2.\r
283   *\r
284   * @return     16-bit Data\r
285   *\r
286   * @details    This macro is used to read 16-bit data from specify address on EBI bank2.\r
287   */\r
288 #define EBI2_READ_DATA16(ebi, u32Addr)              (*((volatile unsigned short *)((((ebi)==EBI)? EBI_BANK2_BASE_ADDR:EBI_BANK2_BASE_ADDR_NS)+(u32Addr))))\r
289 \r
290 /**\r
291   * @brief      Write 16-bit data to EBI bank2\r
292   *\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
296   *\r
297   * @return     None\r
298   *\r
299   * @details    This macro is used to write 16-bit data to specify address on EBI bank2.\r
300   * \hideinitializer\r
301   */\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
303 \r
304 /**\r
305   * @brief      Read 32-bit data on EBI bank2\r
306   *\r
307   * @param[in]  ebi         The pointer of EBI module.\r
308   * @param[in]  u32Addr     The data address on EBI bank2.\r
309   *\r
310   * @return     32-bit Data\r
311   *\r
312   * @details    This macro is used to read 32-bit data from specify address on EBI bank2.\r
313   * \hideinitializer\r
314   */\r
315 #define EBI2_READ_DATA32(ebi, u32Addr)              (*((volatile unsigned int *)((((ebi)==EBI)? EBI_BANK2_BASE_ADDR:EBI_BANK2_BASE_ADDR_NS)+(u32Addr))))\r
316 /**\r
317   * @brief      Write 32-bit data to EBI bank2\r
318   *\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
322   *\r
323   * @return     None\r
324   *\r
325   * @details    This macro is used to write 32-bit data to specify address on EBI bank2.\r
326   * \hideinitializer\r
327   */\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
329 \r
330 /**\r
331   * @brief      Enable EBI Write Buffer\r
332   *\r
333   * @param[in]  ebi         The pointer of EBI module.\r
334   *\r
335   * @return     None\r
336   *\r
337   * @details    This macro is used to improve EBI write operation for all EBI banks.\r
338   * \hideinitializer\r
339   */\r
340 #define EBI_ENABLE_WRITE_BUFFER(ebi)                ((ebi)->CTL0 |= EBI_CTL_WBUFEN_Msk);\r
341 \r
342 /**\r
343   * @brief      Disable EBI Write Buffer\r
344   *\r
345   * @param[in]  ebi         The pointer of EBI module.\r
346   *\r
347   * @return     None\r
348   *\r
349   * @details    This macro is used to disable EBI write buffer function.\r
350   * \hideinitializer\r
351   */\r
352 #define EBI_DISABLE_WRITE_BUFFER(ebi)               ((ebi)->CTL0 &= ~EBI_CTL_WBUFEN_Msk);\r
353 \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
357 \r
358 /*@}*/ /* end of group EBI_EXPORTED_FUNCTIONS */\r
359 \r
360 /*@}*/ /* end of group EBI_Driver */\r
361 \r
362 /*@}*/ /* end of group Standard_Driver */\r
363 \r
364 #ifdef __cplusplus\r
365 }\r
366 #endif\r
367 \r
368 #endif /* __EBI_H__ */\r
369 \r
370 /*** (C) COPYRIGHT 2016 Nuvoton Technology Corp. ***/\r