M4521_BSP V3.02.000
The Board Support Package for M4521
ebi.c
Go to the documentation of this file.
1/**************************************************************************/
12#include "M4521.h"
13
14
55void EBI_Open(uint32_t u32Bank, uint32_t u32DataWidth, uint32_t u32TimingClass, uint32_t u32BusMode, uint32_t u32CSActiveLevel)
56{
57 volatile uint32_t *pu32EBICTL = (uint32_t *)((uint32_t)&EBI->CTL0 + (u32Bank * 0x10));
58 volatile uint32_t *pu32EBITCTL = (uint32_t *)((uint32_t)&EBI->TCTL0 + (u32Bank * 0x10));
59
60 if(u32DataWidth == EBI_BUSWIDTH_8BIT)
61 *pu32EBICTL &= ~EBI_CTL0_DW16_Msk;
62 else
63 *pu32EBICTL |= EBI_CTL0_DW16_Msk;
64
65 switch(u32TimingClass)
66 {
68 *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) |
70 (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk;
71 *pu32EBITCTL = 0x0;
72 break;
73
75 *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) |
77 (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk |
78 (0x3 << EBI_CTL0_TALE_Pos) ;
79 *pu32EBITCTL = 0x03003318;
80 break;
81
82 case EBI_TIMING_FAST:
83 *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) |
85 (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk;
86 *pu32EBITCTL = 0x0;
87 break;
88
90 *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) |
92 (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk |
93 (0x3 << EBI_CTL0_TALE_Pos) ;
94 *pu32EBITCTL = 0x03003318;
95 break;
96
97 case EBI_TIMING_SLOW:
98 *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) |
100 (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk |
101 (0x7 << EBI_CTL0_TALE_Pos) ;
102 *pu32EBITCTL = 0x07007738;
103 break;
104
106 *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) |
108 (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk |
109 (0x7 << EBI_CTL0_TALE_Pos) ;
110 *pu32EBITCTL = 0x07007738;
111 break;
112
114 *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) |
116 (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk |
117 (0x7 << EBI_CTL0_TALE_Pos) ;
118 *pu32EBITCTL = 0x07007738;
119 break;
120
121 default:
122 *pu32EBICTL &= ~EBI_CTL0_EN_Msk;
123 break;
124 }
125}
126
138void EBI_Close(uint32_t u32Bank)
139{
140 volatile uint32_t *pu32EBICTL = (uint32_t *)((uint32_t)&EBI->CTL0 + (u32Bank * 0x10));
141
142 *pu32EBICTL &= ~EBI_CTL0_EN_Msk;
143}
144
164void EBI_SetBusTiming(uint32_t u32Bank, uint32_t u32TimingConfig, uint32_t u32MclkDiv)
165{
166 volatile uint32_t *pu32EBICTL = (uint32_t *)((uint32_t)&EBI->CTL0 + (u32Bank * 0x10));
167 volatile uint32_t *pu32EBITCTL = (uint32_t *)((uint32_t)&EBI->TCTL0 + (u32Bank * 0x10));
168
169 *pu32EBICTL = (*pu32EBICTL & ~EBI_CTL0_MCLKDIV_Msk) | (u32MclkDiv << EBI_CTL0_MCLKDIV_Pos);
170 *pu32EBITCTL = u32TimingConfig;
171}
172 /* end of group EBI_EXPORTED_FUNCTIONS */
174 /* end of group EBI_Driver */
176 /* end of group Standard_Driver */
178
179/*** (C) COPYRIGHT 2022 Nuvoton Technology Corp. ***/
#define EBI_CTL0_TALE_Msk
Definition: M4521.h:2028
#define EBI_CTL0_CSPOLINV_Pos
Definition: M4521.h:2021
#define EBI_CTL0_TALE_Pos
Definition: M4521.h:2027
#define EBI_CTL0_MCLKDIV_Msk
Definition: M4521.h:2025
#define EBI_CTL0_DW16_Msk
Definition: M4521.h:2019
#define EBI_CTL0_MCLKDIV_Pos
Definition: M4521.h:2024
#define EBI_CTL0_EN_Msk
Definition: M4521.h:2016
#define EBI_TIMING_VERYFAST
Definition: ebi.h:68
#define EBI_MCLKDIV_4
Definition: ebi.h:62
#define EBI_MCLKDIV_1
Definition: ebi.h:60
#define EBI_MCLKDIV_8
Definition: ebi.h:63
#define EBI_MCLKDIV_2
Definition: ebi.h:61
#define EBI_TIMING_FASTEST
Definition: ebi.h:67
#define EBI_TIMING_FAST
Definition: ebi.h:69
#define EBI_BUSWIDTH_8BIT
Definition: ebi.h:48
#define EBI_TIMING_VERYSLOW
Definition: ebi.h:72
#define EBI_TIMING_NORMAL
Definition: ebi.h:70
#define EBI_TIMING_SLOW
Definition: ebi.h:71
#define EBI_TIMING_SLOWEST
Definition: ebi.h:73
void EBI_Close(uint32_t u32Bank)
Disable EBI on specify Bank.
Definition: ebi.c:138
void EBI_Open(uint32_t u32Bank, uint32_t u32DataWidth, uint32_t u32TimingClass, uint32_t u32BusMode, uint32_t u32CSActiveLevel)
Initialize EBI for specify Bank.
Definition: ebi.c:55
void EBI_SetBusTiming(uint32_t u32Bank, uint32_t u32TimingConfig, uint32_t u32MclkDiv)
Set EBI Bus Timing for specify Bank.
Definition: ebi.c:164
#define EBI
Definition: M4521.h:13833