blob: 4d16d0005c762f2a054fe985f0d4c212b71b364e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
/**************************************************************************//**
* @file ebi.c
* @version V3.00
* $Revision: 3 $
* $Date: 14/01/28 10:49a $
* @brief M051 series EBI driver source file
*
* @note
* Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
*****************************************************************************/
#include "M051Series.h"
/** @addtogroup M051_Device_Driver M051 Device Driver
@{
*/
/** @addtogroup M051_EBI_Driver EBI Driver
@{
*/
/** @addtogroup M051_EBI_EXPORTED_FUNCTIONS EBI Exported Functions
@{
*/
/**
* @brief Initialize EBI function
*
* @param[in] u32Bank Bank number for EBI. This parameter is current not used.
* @param[in] u32DataWidth Data bus width. Valid values are:
* - \ref EBI_BUSWIDTH_8BIT
* - \ref EBI_BUSWIDTH_16BIT
* @param[in] u32TimingClass Default timing configuration. Valid values are:
* - \ref EBI_TIMING_FASTEST
* - \ref EBI_TIMING_VERYFAST
* - \ref EBI_TIMING_FAST
* - \ref EBI_TIMING_NORMAL
* - \ref EBI_TIMING_SLOW
* - \ref EBI_TIMING_VERYSLOW
* - \ref EBI_TIMING_SLOWEST
* @param[in] u32BusMode Enable EBI separate mode. This parameter is current not used.
* @param[in] u32CSActiveLevel CS is active High/Low. This parameter is current not used.
*
* @return none
*
* @details This function make EBI module be ready for read and write operation.
* @note Only u32DataWidth and u32TimingClass is valid in M051 series.
*/
void EBI_Open(uint32_t u32Bank, uint32_t u32DataWidth, uint32_t u32TimingClass, uint32_t u32BusMode, uint32_t u32CSActiveLevel)
{
if(u32DataWidth == EBI_BUSWIDTH_8BIT)
EBI->EBICON &= ~EBI_EBICON_ExtBW16_Msk;
else
EBI->EBICON |= EBI_EBICON_ExtBW16_Msk;
switch(u32TimingClass)
{
case EBI_TIMING_FASTEST:
EBI->EBICON = (EBI->EBICON & ~(EBI_EBICON_MCLKDIV_Msk | EBI_EBICON_ExttALE_Msk)) |
(EBI_MCLKDIV_1 << EBI_EBICON_MCLKDIV_Pos) | EBI_EBICON_ExtEN_Msk;
EBI->EXTIME = 0x0;
break;
case EBI_TIMING_VERYFAST:
EBI->EBICON = (EBI->EBICON & ~(EBI_EBICON_MCLKDIV_Msk | EBI_EBICON_ExttALE_Msk)) |
(EBI_MCLKDIV_1 << EBI_EBICON_MCLKDIV_Pos) | EBI_EBICON_ExtEN_Msk |
(0x3 << EBI_EBICON_ExttALE_Pos) ;
EBI->EXTIME = 0x03003318;
break;
case EBI_TIMING_FAST:
EBI->EBICON = (EBI->EBICON & ~(EBI_EBICON_MCLKDIV_Msk | EBI_EBICON_ExttALE_Msk)) |
(EBI_MCLKDIV_2 << EBI_EBICON_MCLKDIV_Pos) | EBI_EBICON_ExtEN_Msk;
EBI->EXTIME = 0x0;
break;
case EBI_TIMING_NORMAL:
EBI->EBICON = (EBI->EBICON & ~(EBI_EBICON_MCLKDIV_Msk | EBI_EBICON_ExttALE_Msk)) |
(EBI_MCLKDIV_2 << EBI_EBICON_MCLKDIV_Pos) | EBI_EBICON_ExtEN_Msk |
(0x3 << EBI_EBICON_ExttALE_Pos) ;
EBI->EXTIME = 0x03003318;
break;
case EBI_TIMING_SLOW:
EBI->EBICON = (EBI->EBICON & ~(EBI_EBICON_MCLKDIV_Msk | EBI_EBICON_ExttALE_Msk)) |
(EBI_MCLKDIV_2 << EBI_EBICON_MCLKDIV_Pos) | EBI_EBICON_ExtEN_Msk |
(0x7 << EBI_EBICON_ExttALE_Pos) ;
EBI->EXTIME = 0x07007738;
break;
case EBI_TIMING_VERYSLOW:
EBI->EBICON = (EBI->EBICON & ~(EBI_EBICON_MCLKDIV_Msk | EBI_EBICON_ExttALE_Msk)) |
(EBI_MCLKDIV_4 << EBI_EBICON_MCLKDIV_Pos) | EBI_EBICON_ExtEN_Msk |
(0x7 << EBI_EBICON_ExttALE_Pos) ;
EBI->EXTIME = 0x07007738;
break;
case EBI_TIMING_SLOWEST:
EBI->EBICON = (EBI->EBICON & ~(EBI_EBICON_MCLKDIV_Msk | EBI_EBICON_ExttALE_Msk)) |
(EBI_MCLKDIV_8 << EBI_EBICON_MCLKDIV_Pos) | EBI_EBICON_ExtEN_Msk |
(0x7 << EBI_EBICON_ExttALE_Pos) ;
EBI->EXTIME = 0x07007738;
break;
default:
EBI->EBICON &= ~EBI_EBICON_ExtEN_Msk;
break;
}
}
/**
* @brief Disable EBI function
*
* @param[in] u32Bank Bank number for EBI. This parameter is current not used.
*
* @return none
*
* @details This function close EBI module.
*/
void EBI_Close(uint32_t u32Bank)
{
EBI->EBICON &= ~EBI_EBICON_ExtEN_Msk;
}
/**
* @brief Set EBI bus timings
*
* @param[in] u32Bank Bank number for EBI. This parameter is current not used.
*
* @param[in] u32TimingConfig Configure EBI timing settings, ExttACC, ExttAHD, ExtIW2X and ExtIR2R.
* @param[in] u32MclkDiv Divider for MCLK. Valid values are:
* - \ref EBI_MCLKDIV_1
* - \ref EBI_MCLKDIV_2
* - \ref EBI_MCLKDIV_4
* - \ref EBI_MCLKDIV_8
* - \ref EBI_MCLKDIV_16
* - \ref EBI_MCLKDIV_32
*
* @return none
*
* @details This function make EBI module be ready for read and write operation.
*/
void EBI_SetBusTiming(uint32_t u32Bank, uint32_t u32TimingConfig, uint32_t u32MclkDiv)
{
EBI->EBICON = (EBI->EBICON & ~EBI_EBICON_MCLKDIV_Msk) | (u32MclkDiv << EBI_EBICON_MCLKDIV_Pos);
EBI->EXTIME = u32TimingConfig;
}
/*@}*/ /* end of group M051_EBI_EXPORTED_FUNCTIONS */
/*@}*/ /* end of group M051_EBI_Driver */
/*@}*/ /* end of group M051_Device_Driver */
/*** (C) COPYRIGHT 2013 Nuvoton Technology Corp. ***/
|