1 /**************************************************************************//** 2 * @file ebi.h 3 * @version V3.00 4 * $Revision: 2 $ 5 * $Date: 19/04/01 4:48p $ 6 * @brief M2L31 series External Bus Interface(EBI) driver header file 7 * 8 * @note 9 * Copyright (C) 2017 Nuvoton Technology Corp. All rights reserved. 10 *****************************************************************************/ 11 #ifndef __EBI_H__ 12 #define __EBI_H__ 13 14 #ifdef __cplusplus 15 extern "C" 16 { 17 #endif 18 19 20 /** @addtogroup Standard_Driver Standard Driver 21 @{ 22 */ 23 24 /** @addtogroup EBI_Driver EBI Driver 25 @{ 26 */ 27 28 /** @addtogroup EBI_EXPORTED_CONSTANTS EBI Exported Constants 29 @{ 30 */ 31 /*---------------------------------------------------------------------------------------------------------*/ 32 /* Miscellaneous Constant Definitions */ 33 /*---------------------------------------------------------------------------------------------------------*/ 34 #define EBI_BANK0_BASE_ADDR 0x60000000UL /*!< EBI bank0 base address */ 35 #define EBI_BANK1_BASE_ADDR 0x60100000UL /*!< EBI bank1 base address */ 36 #define EBI_BANK2_BASE_ADDR 0x60200000UL /*!< EBI bank1 base address */ 37 #define EBI_MAX_SIZE 0x00100000UL /*!< Maximum EBI size for each bank is 1 MB */ 38 39 /*---------------------------------------------------------------------------------------------------------*/ 40 /* Constants for EBI bank number */ 41 /*---------------------------------------------------------------------------------------------------------*/ 42 #define EBI_BANK0 0 /*!< EBI bank 0 */ 43 #define EBI_BANK1 1 /*!< EBI bank 1 */ 44 #define EBI_BANK2 2 /*!< EBI bank 2 */ 45 46 /*---------------------------------------------------------------------------------------------------------*/ 47 /* Constants for EBI data bus width */ 48 /*---------------------------------------------------------------------------------------------------------*/ 49 #define EBI_BUSWIDTH_8BIT 8 /*!< EBI bus width is 8-bit */ 50 #define EBI_BUSWIDTH_16BIT 16 /*!< EBI bus width is 16-bit */ 51 52 /*---------------------------------------------------------------------------------------------------------*/ 53 /* Constants for EBI CS Active Level */ 54 /*---------------------------------------------------------------------------------------------------------*/ 55 #define EBI_CS_ACTIVE_LOW 0 /*!< EBI CS active level is low */ 56 #define EBI_CS_ACTIVE_HIGH 1 /*!< EBI CS active level is high */ 57 58 /*---------------------------------------------------------------------------------------------------------*/ 59 /* Constants for EBI MCLK divider and Timing */ 60 /*---------------------------------------------------------------------------------------------------------*/ 61 #define EBI_MCLKDIV_1 0x0UL /*!< EBI output clock(MCLK) is HCLK/1 */ 62 #define EBI_MCLKDIV_2 0x1UL /*!< EBI output clock(MCLK) is HCLK/2 */ 63 #define EBI_MCLKDIV_4 0x2UL /*!< EBI output clock(MCLK) is HCLK/4 */ 64 #define EBI_MCLKDIV_8 0x3UL /*!< EBI output clock(MCLK) is HCLK/8 */ 65 #define EBI_MCLKDIV_16 0x4UL /*!< EBI output clock(MCLK) is HCLK/16 */ 66 #define EBI_MCLKDIV_32 0x5UL /*!< EBI output clock(MCLK) is HCLK/32 */ 67 #define EBI_MCLKDIV_64 0x6UL /*!< EBI output clock(MCLK) is HCLK/64 \hideinitializer */ 68 #define EBI_MCLKDIV_128 0x7UL /*!< EBI output clock(MCLK) is HCLK/128 */ 69 70 #define EBI_TIMING_FASTEST 0x0UL /*!< EBI timing is the fastest */ 71 #define EBI_TIMING_VERYFAST 0x1UL /*!< EBI timing is very fast */ 72 #define EBI_TIMING_FAST 0x2UL /*!< EBI timing is fast */ 73 #define EBI_TIMING_NORMAL 0x3UL /*!< EBI timing is normal */ 74 #define EBI_TIMING_SLOW 0x4UL /*!< EBI timing is slow */ 75 #define EBI_TIMING_VERYSLOW 0x5UL /*!< EBI timing is very slow */ 76 #define EBI_TIMING_SLOWEST 0x6UL /*!< EBI timing is the slowest */ 77 78 #define EBI_OPMODE_NORMAL 0x0UL /*!< EBI bus operate in normal mode */ 79 #define EBI_OPMODE_CACCESS (EBI_CTL_CACCESS_Msk) /*!< EBI bus operate in Continuous Data Access mode */ 80 #define EBI_OPMODE_ADSEPARATE (EBI_CTL_ADSEPEN_Msk) /*!< EBI bus operate in AD Separate mode \hideinitializer */ 81 82 /*@}*/ /* end of group EBI_EXPORTED_CONSTANTS */ 83 84 85 /** @addtogroup EBI_EXPORTED_FUNCTIONS EBI Exported Functions 86 @{ 87 */ 88 89 /** 90 * @brief Read 8-bit data on EBI bank0 91 * 92 * @param[in] u32Addr The data address on EBI bank0. 93 * 94 * @return 8-bit Data 95 * 96 * @details This macro is used to read 8-bit data from specify address on EBI bank0. 97 */ 98 #define EBI0_READ_DATA8(u32Addr) (*((volatile unsigned char *)(EBI_BANK0_BASE_ADDR+(u32Addr)))) 99 100 /** 101 * @brief Write 8-bit data to EBI bank0 102 * 103 * @param[in] u32Addr The data address on EBI bank0. 104 * @param[in] u32Data Specify data to be written. 105 * 106 * @return None 107 * 108 * @details This macro is used to write 8-bit data to specify address on EBI bank0. 109 */ 110 #define EBI0_WRITE_DATA8(u32Addr, u32Data) (*((volatile unsigned char *)(EBI_BANK0_BASE_ADDR+(u32Addr))) = (u32Data)) 111 112 /** 113 * @brief Read 16-bit data on EBI bank0 114 * 115 * @param[in] u32Addr The data address on EBI bank0. 116 * 117 * @return 16-bit Data 118 * 119 * @details This macro is used to read 16-bit data from specify address on EBI bank0. 120 */ 121 #define EBI0_READ_DATA16(u32Addr) (*((volatile unsigned short *)(EBI_BANK0_BASE_ADDR+(u32Addr)))) 122 123 /** 124 * @brief Write 16-bit data to EBI bank0 125 * 126 * @param[in] u32Addr The data address on EBI bank0. 127 * @param[in] u32Data Specify data to be written. 128 * 129 * @return None 130 * 131 * @details This macro is used to write 16-bit data to specify address on EBI bank0. 132 */ 133 #define EBI0_WRITE_DATA16(u32Addr, u32Data) (*((volatile unsigned short *)(EBI_BANK0_BASE_ADDR+(u32Addr))) = (u32Data)) 134 135 /** 136 * @brief Read 32-bit data on EBI bank0 137 * 138 * @param[in] u32Addr The data address on EBI bank0. 139 * 140 * @return 32-bit Data 141 * 142 * @details This macro is used to read 32-bit data from specify address on EBI bank0. 143 */ 144 #define EBI0_READ_DATA32(u32Addr) (*((volatile unsigned int *)(EBI_BANK0_BASE_ADDR+(u32Addr)))) 145 146 /** 147 * @brief Write 32-bit data to EBI bank0 148 * 149 * @param[in] u32Addr The data address on EBI bank0. 150 * @param[in] u32Data Specify data to be written. 151 * 152 * @return None 153 * 154 * @details This macro is used to write 32-bit data to specify address on EBI bank0. 155 */ 156 #define EBI0_WRITE_DATA32(u32Addr, u32Data) (*((volatile unsigned int *)(EBI_BANK0_BASE_ADDR+(u32Addr))) = (u32Data)) 157 158 /** 159 * @brief Read 8-bit data on EBI bank1 160 * 161 * @param[in] u32Addr The data address on EBI bank1. 162 * 163 * @return 8-bit Data 164 * 165 * @details This macro is used to read 8-bit data from specify address on EBI bank1. 166 */ 167 #define EBI1_READ_DATA8(u32Addr) (*((volatile unsigned char *)(EBI_BANK1_BASE_ADDR+(u32Addr)))) 168 169 /** 170 * @brief Write 8-bit data to EBI bank1 171 * 172 * @param[in] u32Addr The data address on EBI bank1. 173 * @param[in] u32Data Specify data to be written. 174 * 175 * @return None 176 * 177 * @details This macro is used to write 8-bit data to specify address on EBI bank1. 178 */ 179 #define EBI1_WRITE_DATA8(u32Addr, u32Data) (*((volatile unsigned char *)(EBI_BANK1_BASE_ADDR+(u32Addr))) = (u32Data)) 180 181 /** 182 * @brief Read 16-bit data on EBI bank1 183 * 184 * @param[in] u32Addr The data address on EBI bank1. 185 * 186 * @return 16-bit Data 187 * 188 * @details This macro is used to read 16-bit data from specify address on EBI bank1. 189 */ 190 #define EBI1_READ_DATA16(u32Addr) (*((volatile unsigned short *)(EBI_BANK1_BASE_ADDR+(u32Addr)))) 191 192 /** 193 * @brief Write 16-bit data to EBI bank1 194 * 195 * @param[in] u32Addr The data address on EBI bank1. 196 * @param[in] u32Data Specify data to be written. 197 * 198 * @return None 199 * 200 * @details This macro is used to write 16-bit data to specify address on EBI bank1. 201 */ 202 #define EBI1_WRITE_DATA16(u32Addr, u32Data) (*((volatile unsigned short *)(EBI_BANK1_BASE_ADDR+(u32Addr))) = (u32Data)) 203 204 /** 205 * @brief Read 32-bit data on EBI bank1 206 * 207 * @param[in] u32Addr The data address on EBI bank1. 208 * 209 * @return 32-bit Data 210 * 211 * @details This macro is used to read 32-bit data from specify address on EBI bank1. 212 */ 213 #define EBI1_READ_DATA32(u32Addr) (*((volatile unsigned int *)(EBI_BANK1_BASE_ADDR+(u32Addr)))) 214 215 /** 216 * @brief Write 32-bit data to EBI bank1 217 * 218 * @param[in] u32Addr The data address on EBI bank1. 219 * @param[in] u32Data Specify data to be written. 220 * 221 * @return None 222 * 223 * @details This macro is used to write 32-bit data to specify address on EBI bank1. 224 */ 225 #define EBI1_WRITE_DATA32(u32Addr, u32Data) (*((volatile unsigned int *)(EBI_BANK1_BASE_ADDR+(u32Addr))) = (u32Data)) 226 /** 227 * @brief Read 8-bit data on EBI bank2 228 * 229 * @param[in] u32Addr The data address on EBI bank2. 230 * 231 * @return 8-bit Data 232 * 233 * @details This macro is used to read 8-bit data from specify address on EBI bank2. 234 * \hideinitializer 235 */ 236 #define EBI2_READ_DATA8(u32Addr) (*((volatile unsigned char *)(EBI_BANK2_BASE_ADDR+(u32Addr)))) 237 238 /** 239 * @brief Write 8-bit data to EBI bank2 240 * 241 * @param[in] u32Addr The data address on EBI bank2. 242 * @param[in] u32Data Specify data to be written. 243 * 244 * @return None 245 * 246 * @details This macro is used to write 8-bit data to specify address on EBI bank2. 247 * \hideinitializer 248 */ 249 #define EBI2_WRITE_DATA8(u32Addr, u32Data) (*((volatile unsigned char *)(EBI_BANK2_BASE_ADDR+(u32Addr))) = (u32Data)) 250 251 /** 252 * @brief Read 16-bit data on EBI bank2 253 * 254 * @param[in] u32Addr The data address on EBI bank2. 255 * 256 * @return 16-bit Data 257 * 258 * @details This macro is used to read 16-bit data from specify address on EBI bank2. 259 * \hideinitializer 260 */ 261 #define EBI2_READ_DATA16(u32Addr) (*((volatile unsigned short *)(EBI_BANK2_BASE_ADDR+(u32Addr)))) 262 263 /** 264 * @brief Write 16-bit data to EBI bank2 265 * 266 * @param[in] u32Addr The data address on EBI bank2. 267 * @param[in] u32Data Specify data to be written. 268 * 269 * @return None 270 * 271 * @details This macro is used to write 16-bit data to specify address on EBI bank2. 272 * \hideinitializer 273 */ 274 #define EBI2_WRITE_DATA16(u32Addr, u32Data) (*((volatile unsigned short *)(EBI_BANK2_BASE_ADDR+(u32Addr))) = (u32Data)) 275 276 /** 277 * @brief Read 32-bit data on EBI bank2 278 * 279 * @param[in] u32Addr The data address on EBI bank2. 280 * 281 * @return 32-bit Data 282 * 283 * @details This macro is used to read 32-bit data from specify address on EBI bank2. 284 * \hideinitializer 285 */ 286 #define EBI2_READ_DATA32(u32Addr) (*((volatile unsigned int *)(EBI_BANK2_BASE_ADDR+(u32Addr)))) 287 288 /** 289 * @brief Write 32-bit data to EBI bank2 290 * 291 * @param[in] u32Addr The data address on EBI bank2. 292 * @param[in] u32Data Specify data to be written. 293 * 294 * @return None 295 * 296 * @details This macro is used to write 32-bit data to specify address on EBI bank2. 297 * \hideinitializer 298 */ 299 #define EBI2_WRITE_DATA32(u32Addr, u32Data) (*((volatile unsigned int *)(EBI_BANK2_BASE_ADDR+(u32Addr))) = (u32Data)) 300 301 302 /** 303 * @brief Enable EBI Write Buffer 304 * 305 * @param None 306 * 307 * @return None 308 * 309 * @details This macro is used to improve EBI write operation for EBI bank0 and bank1. 310 */ 311 #define EBI_ENABLE_WRITE_BUFFER() (EBI->CTL0 |= EBI_CTL_WBUFEN_Msk); 312 313 /** 314 * @brief Disable EBI Write Buffer 315 * 316 * @param None 317 * 318 * @return None 319 * 320 * @details This macro is used to disable EBI write buffer function. 321 */ 322 #define EBI_DISABLE_WRITE_BUFFER() (EBI->CTL0 &= ~EBI_CTL_WBUFEN_Msk); 323 324 void EBI_Open(uint32_t u32Bank, uint32_t u32DataWidth, uint32_t u32TimingClass, uint32_t u32BusMode, uint32_t u32CSActiveLevel); 325 void EBI_Close(uint32_t u32Bank); 326 void EBI_SetBusTiming(uint32_t u32Bank, uint32_t u32TimingConfig, uint32_t u32MclkDiv); 327 328 /*@}*/ /* end of group EBI_EXPORTED_FUNCTIONS */ 329 330 /*@}*/ /* end of group EBI_Driver */ 331 332 /*@}*/ /* end of group Standard_Driver */ 333 334 #ifdef __cplusplus 335 } 336 #endif 337 338 #endif //__EBI_H__ 339 340 /*** (C) COPYRIGHT 2017 Nuvoton Technology Corp. ***/ 341