M471M/R1/S BSP V3.01.000
The Board Support Package for M4521
ebi.c
Go to the documentation of this file.
1/**************************************************************************/
8#include "NuMicro.h"
9
10
51void EBI_Open(uint32_t u32Bank, uint32_t u32DataWidth, uint32_t u32TimingClass, uint32_t u32BusMode, uint32_t u32CSActiveLevel)
52{
53 volatile uint32_t *pu32EBICTL = (uint32_t *)((uint32_t)&EBI->CTL0 + (u32Bank * 0x10));
54 volatile uint32_t *pu32EBITCTL = (uint32_t *)((uint32_t)&EBI->TCTL0 + (u32Bank * 0x10));
55
56 if(u32DataWidth == EBI_BUSWIDTH_8BIT)
57 *pu32EBICTL &= ~EBI_CTL0_DW16_Msk;
58 else
59 *pu32EBICTL |= EBI_CTL0_DW16_Msk;
60
61 switch(u32TimingClass)
62 {
64 *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) |
66 (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk;
67 *pu32EBITCTL = 0x0;
68 break;
69
71 *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) |
73 (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk |
74 (0x3 << EBI_CTL0_TALE_Pos) ;
75 *pu32EBITCTL = 0x03003318;
76 break;
77
78 case EBI_TIMING_FAST:
79 *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) |
81 (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk;
82 *pu32EBITCTL = 0x0;
83 break;
84
86 *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) |
88 (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk |
89 (0x3 << EBI_CTL0_TALE_Pos) ;
90 *pu32EBITCTL = 0x03003318;
91 break;
92
93 case EBI_TIMING_SLOW:
94 *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) |
96 (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk |
97 (0x7 << EBI_CTL0_TALE_Pos) ;
98 *pu32EBITCTL = 0x07007738;
99 break;
100
102 *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) |
104 (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk |
105 (0x7 << EBI_CTL0_TALE_Pos) ;
106 *pu32EBITCTL = 0x07007738;
107 break;
108
110 *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) |
112 (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk |
113 (0x7 << EBI_CTL0_TALE_Pos) ;
114 *pu32EBITCTL = 0x07007738;
115 break;
116
117 default:
118 *pu32EBICTL &= ~EBI_CTL0_EN_Msk;
119 break;
120 }
121}
122
134void EBI_Close(uint32_t u32Bank)
135{
136 volatile uint32_t *pu32EBICTL = (uint32_t *)((uint32_t)&EBI->CTL0 + (u32Bank * 0x10));
137
138 *pu32EBICTL &= ~EBI_CTL0_EN_Msk;
139}
140
160void EBI_SetBusTiming(uint32_t u32Bank, uint32_t u32TimingConfig, uint32_t u32MclkDiv)
161{
162 volatile uint32_t *pu32EBICTL = (uint32_t *)((uint32_t)&EBI->CTL0 + (u32Bank * 0x10));
163 volatile uint32_t *pu32EBITCTL = (uint32_t *)((uint32_t)&EBI->TCTL0 + (u32Bank * 0x10));
164
165 *pu32EBICTL = (*pu32EBICTL & ~EBI_CTL0_MCLKDIV_Msk) | (u32MclkDiv << EBI_CTL0_MCLKDIV_Pos);
166 *pu32EBITCTL = u32TimingConfig;
167}
168 /* end of group EBI_EXPORTED_FUNCTIONS */
170 /* end of group EBI_Driver */
172 /* end of group Standard_Driver */
#define EBI_CTL0_TALE_Msk
Definition: M471M_R1_S.h:2024
#define EBI_CTL0_CSPOLINV_Pos
Definition: M471M_R1_S.h:2017
#define EBI_CTL0_TALE_Pos
Definition: M471M_R1_S.h:2023
#define EBI_CTL0_MCLKDIV_Msk
Definition: M471M_R1_S.h:2021
#define EBI_CTL0_DW16_Msk
Definition: M471M_R1_S.h:2015
#define EBI_CTL0_MCLKDIV_Pos
Definition: M471M_R1_S.h:2020
#define EBI_CTL0_EN_Msk
Definition: M471M_R1_S.h:2012
NuMicro peripheral access layer header file.
#define EBI_TIMING_VERYFAST
Definition: ebi.h:64
#define EBI_MCLKDIV_4
Definition: ebi.h:58
#define EBI_MCLKDIV_1
Definition: ebi.h:56
#define EBI_MCLKDIV_8
Definition: ebi.h:59
#define EBI_MCLKDIV_2
Definition: ebi.h:57
#define EBI_TIMING_FASTEST
Definition: ebi.h:63
#define EBI_TIMING_FAST
Definition: ebi.h:65
#define EBI_BUSWIDTH_8BIT
Definition: ebi.h:44
#define EBI_TIMING_VERYSLOW
Definition: ebi.h:68
#define EBI_TIMING_NORMAL
Definition: ebi.h:66
#define EBI_TIMING_SLOW
Definition: ebi.h:67
#define EBI_TIMING_SLOWEST
Definition: ebi.h:69
void EBI_Close(uint32_t u32Bank)
Disable EBI on specify Bank.
Definition: ebi.c:134
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:51
void EBI_SetBusTiming(uint32_t u32Bank, uint32_t u32TimingConfig, uint32_t u32MclkDiv)
Set EBI Bus Timing for specify Bank.
Definition: ebi.c:160
#define EBI
Definition: M471M_R1_S.h:13829