Subversion Repositories NaviCtrl

Rev

Rev 196 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
196 killagreg 1
/******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
1 ingob 2
* File Name          : 91x_emi.c
3
* Author             : MCD Application Team
196 killagreg 4
* Version            : V2.1
5
* Date               : 12/22/2008
6
* Description        : This file provides all the EMI firmware functions.
1 ingob 7
********************************************************************************
8
* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
9
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
10
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
11
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
12
* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
13
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
14
*******************************************************************************/
15
 
16
/* Includes ------------------------------------------------------------------*/
17
#include "91x_emi.h"
18
#include "91x_scu.h"
19
/* Private typedef -----------------------------------------------------------*/
20
/* Private define ------------------------------------------------------------*/
21
 
22
/* These constant variables are used as masks to handle the EMI registers.  */
23
 
24
 
196 killagreg 25
#define   EMI_Burst_and_PageModeRead_TL_Mask         0xFFFFF3FF
26
#define   EMI_Burst_and_PageModeRead_Sel_Mask        0xFFFFFEFF
27
#define   EMI_MemWidth_Mask                          0xFFFFFFCF
28
#define   EMI_WriteProtect_Mask                      0xFFFFFFF7  
29
#define   EMI_ByteLane_Mask                          0xFFFFFFFE  
30
#define   EMI_AccessRead_Dev_Mask                    0xFFFFFDFF  
31
#define   EMI_BurstModeWrite_Sel_Mask                0xFFFEFFFF
32
#define   EMI_AccessWrite_Dev_Mask                   0xFFFDFFFF
33
#define   EMI_BurstModeWrite_TL_Mask                 0xFFF3FFFF
1 ingob 34
 
196 killagreg 35
 
1 ingob 36
/* Private macro -------------------------------------------------------------*/
37
/* Private variables ---------------------------------------------------------*/
38
/* Registers reset value */
39
/* Private function prototypes -----------------------------------------------*/
40
/* Private functions ---------------------------------------------------------*/
41
 
42
/******************************************************************************
43
* Function Name  : EMI_DeInit
44
* Description    : Deinitializes the EMI peripheral registers to their default
45
*                  reset values.
46
* Input          : None
47
* Output         : None
48
* Return         : None
49
*******************************************************************************/
50
 
51
void EMI_DeInit(void)
52
{
53
 
54
  SCU_AHBPeriphReset(__EMI, ENABLE);          /* EMI peripheral under Reset */
55
  SCU_AHBPeriphReset(__EMI,DISABLE );         /* EMI not under Reset */
56
 
57
}
58
 
59
/*******************************************************************************
60
* Function Name  : EMI_StructInit
61
* Description    : Fills the EMI_InitTypeDef structure member with its reset
62
*                  value.
63
* Input          : EMI_InitStruct : pointer to a EMI_InitTypeDef structure
64
*                  which will be initialized.
65
* Output         : None
66
* Return         : None
67
*******************************************************************************/
68
 
69
void EMI_StructInit( EMI_InitTypeDef *EMI_InitStruct)
70
{
71
 
72
  /* Number of bus turnaround cycles added between read and write accesses.*/
73
  /*This member can be 0x01,0x02,0x03, ....0xF (Reset value:0xF "15 cycles"*/
74
 
75
  EMI_InitStruct->EMI_Bank_IDCY =0xF;
76
 
77
 
78
  /* Number of wait states for read accesses*/
79
  /*This member can be: 0x01,0x02,0x03, ....0x1F (Reset value:0x1F "31 cycles"*/
80
 
81
  EMI_InitStruct->EMI_Bank_WSTRD =0x1F;
82
 
83
 
84
  /* Number of wait states for write accesses*/
85
  /*This member can be: 0x01,0x02,0x03, ....0x1F (Reset value:0x1F "31 cycles"*/
86
 
87
  EMI_InitStruct->EMI_Bank_WSTWR =0x1F;
88
 
89
  /*Output enable assertion delay from chip select assertion*/
90
  /*This member can be: 0x01,0x02,0x03, ....0xF (Reset value:0x01 "1 cycle"*/
91
 
92
  EMI_InitStruct->EMI_Bank_WSTROEN =0x01;
93
 
94
 
95
  /*Write enable assertion delay from chip select assertion*/
96
  /*This member can be: 0x01,0x02,0x03, ....0xF (Reset value:0x00 "0 cycle"*/
97
 
98
  EMI_InitStruct->EMI_Bank_WSTWEN =0x00;
196 killagreg 99
 
100
  /*Number of wait states for burst read accesses after the first read.*/
101
  /* They do not apply to non-burst devices.*/
102
  /*This member can be: 0x01,0x02,0x03, ....0x1F (Reset value:0x1F "31 cycles"*/
103
 
104
  EMI_InitStruct->EMI_Bank_BRDCR =0x1F;
1 ingob 105
 
106
  /*This member Controls the memory width*/
107
  /*This member can be :"EMI_Width_Byte" = 8 bits width or "EMI_Width_HalfWord" = 16 bits width*/
108
 
109
  EMI_InitStruct->EMI_Bank_MemWidth = EMI_Width_Byte;
110
 
111
 
112
  /*Write protection feature */
113
  /*This member can be :"EMI_Bank_NonWriteProtect" = No write protection or "EMI_Bank_WriteProtect" = bank is write protected*/
114
 
115
  EMI_InitStruct-> EMI_Bank_WriteProtection= EMI_Bank_NonWriteProtect;
116
 
117
 
196 killagreg 118
  /* Burst Read or page mode transfer length */
119
  /*This member can be :"EMI_Read_4Data"  or "EMI_Read_8Data" for page mode*/
120
  /*Read and it can be "EMI_Read_4Data","EMI_Read_8Data","EMI_Read_16Data" */
121
  /*or "EMI_Read_Continuous"(synchronous only) for burst mode read*/
122
 
123
  EMI_InitStruct->EMI_Burst_and_PageModeRead_TransferLength= EMI_Read_4Data;
1 ingob 124
 
196 killagreg 125
  /*Select or deselect the Burst and page mode read*/
126
  /*This member can be :"EMI_NormalMode" or "EMI_BurstModeRead" */
1 ingob 127
 
196 killagreg 128
  EMI_InitStruct->EMI_Burst_and_PageModeRead_Selection = EMI_NormalMode;
129
 
130
 
131
  /* Enables the byte select signals in 16-bit PSRAM bus mode*/
132
  /*(EMI_UBn and EMI_LBn) are enabled. Bit 2 in the GPIO EMI register */
133
  /*(SCU_EMI) must also be set to 1 */
134
 
135
   EMI_InitStruct->EMI_ByteLane_Selection=EMI_Byte_Select_disabled;
136
 
137
  /*Access the device using synchronous accesses for reads*/
138
 
139
  EMI_InitStruct-> EMI_AccessRead_Support=EMI_Read_Asyn;
140
 
141
  /*Access the device using synchronous accesses for Write*/
142
 
143
  EMI_InitStruct->EMI_AccessWrite_Support=EMI_Write_Asyn;
144
 
145
  /* Burst Write transfer length */
146
  /*This member can be :"EMI_Write_4Data", "EMI_Write_8Data" or */
147
  /*"EMI_Write_Continuous" for synchronous only*/
148
 
149
  EMI_InitStruct->EMI_BurstModeWrite_TransferLength = EMI_Write_4Data;
150
 
151
  /* Select burst or non-burst write to memory*/
152
 
153
  EMI_InitStruct-> EMI_BurstModeWrite_Selection=EMI_NonBurstModeWrite;
154
 
1 ingob 155
 
156
}
157
 
158
/*******************************************************************************
159
* Function Name  : EMI_Init
160
* Description    : Initializes EMI  peripheral according to the specified
161
*                  parameters in the EMI_InitStruct.
162
 
163
* Input          : EMI_Bankx:where x can be 0,1,2 or 3 to select the EMI Bank.
164
                   EMI_InitStruct: pointer to a EMI_InitTypeDef structure
165
                                  ( Structure Config to be loaded in EMI Registers). .
166
 
167
* Output         : None
168
* Return         : None
169
*******************************************************************************/
170
 
171
void EMI_Init( EMI_Bank_TypeDef* EMI_Bankx, EMI_InitTypeDef* EMI_InitStruct)
172
 
173
{
174
 
175
  EMI_Bankx->ICR  = EMI_InitStruct-> EMI_Bank_IDCY ;
176
 
177
  EMI_Bankx->RCR  = EMI_InitStruct->EMI_Bank_WSTRD ;
178
 
179
  EMI_Bankx->WCR  = EMI_InitStruct->EMI_Bank_WSTWR ;
180
 
181
  EMI_Bankx->OECR = EMI_InitStruct->EMI_Bank_WSTROEN;
182
 
183
  EMI_Bankx->WECR = EMI_InitStruct->EMI_Bank_WSTWEN ;
196 killagreg 184
 
185
  EMI_Bankx->BRDCR  = EMI_InitStruct->EMI_Bank_BRDCR ;
186
 
1 ingob 187
  EMI_Bankx->BCR &= EMI_MemWidth_Mask;
188
  EMI_Bankx->BCR |= EMI_InitStruct->EMI_Bank_MemWidth;
189
 
190
  EMI_Bankx->BCR &= EMI_WriteProtect_Mask;
191
  EMI_Bankx->BCR |= EMI_InitStruct->EMI_Bank_WriteProtection;
192
 
196 killagreg 193
 
194
  EMI_Bankx->BCR &= EMI_Burst_and_PageModeRead_TL_Mask;
195
  EMI_Bankx->BCR |= EMI_InitStruct->EMI_Burst_and_PageModeRead_TransferLength;
196
 
197
  EMI_Bankx->BCR &= EMI_Burst_and_PageModeRead_Sel_Mask;
198
  EMI_Bankx->BCR |=  EMI_InitStruct->EMI_Burst_and_PageModeRead_Selection;
199
 
200
  EMI_Bankx->BCR &= EMI_BurstModeWrite_TL_Mask;
201
  EMI_Bankx->BCR |= EMI_InitStruct->EMI_BurstModeWrite_TransferLength;
202
 
203
  EMI_Bankx->BCR &= EMI_BurstModeWrite_Sel_Mask;
204
  EMI_Bankx->BCR |=  EMI_InitStruct->EMI_BurstModeWrite_Selection;
205
 
206
  EMI_Bankx->BCR &=  EMI_ByteLane_Mask;
207
  EMI_Bankx->BCR |=  EMI_InitStruct->EMI_ByteLane_Selection;
208
 
209
  EMI_Bankx->BCR &=  EMI_AccessRead_Dev_Mask;  
210
  EMI_Bankx->BCR |=  EMI_InitStruct->EMI_AccessRead_Support;
211
 
212
  EMI_Bankx->BCR &=   EMI_AccessWrite_Dev_Mask;
213
  EMI_Bankx->BCR |=  EMI_InitStruct->EMI_AccessWrite_Support;
1 ingob 214
 
215
 
216
}
196 killagreg 217
/*******************************************************************************
218
* Function Name  : EMI_BCLKCmd
219
* Description    : Enable or Disable the activation of BCLK clock (LFBGA only)
220
* Input          : NewState : ENABLE or DISABLE
221
* Output         : None
222
* Return         : None
223
*******************************************************************************/
224
void EMI_BCLKCmd(FunctionalState NewState)
225
{
226
  if (NewState == ENABLE)
227
 *EMI_CCR |=0x1;
228
  else
229
 *EMI_CCR &=~0x1;
230
}
1 ingob 231
 
232
 
233
 
196 killagreg 234
/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/