]> git.sur5r.net Git - freertos/blob - Demo/CORTEX_M4F_STM32F407ZG-SK/board/iar_stm32f407zg_sk.c
Start to re-arrange files to include FreeRTOS+ in main download.
[freertos] / Demo / CORTEX_M4F_STM32F407ZG-SK / board / iar_stm32f407zg_sk.c
1 /**/\r
2 /* Includes ------------------------------------------------------------------*/\r
3 #include "iar_stm32f407zg_sk.h"\r
4 \r
5 /** \r
6   * @{\r
7   */ \r
8 GPIO_TypeDef* GPIO_PORT[LEDn] = {LED1_GPIO_PORT, LED2_GPIO_PORT, LED3_GPIO_PORT,\r
9                                  LED4_GPIO_PORT};\r
10 const uint16_t GPIO_PIN[LEDn] = {LED1_PIN, LED2_PIN, LED3_PIN,\r
11                                  LED4_PIN};\r
12 const uint32_t GPIO_CLK[LEDn] = {LED1_GPIO_CLK, LED2_GPIO_CLK, LED3_GPIO_CLK,\r
13                                  LED4_GPIO_CLK};\r
14 \r
15 GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {WAKEUP_BUTTON_GPIO_PORT, TAMPER_BUTTON_GPIO_PORT,\r
16                                       USER_BUTTON_GPIO_PORT,RIGHT_BUTTON_GPIO_PORT, LEFT_BUTTON_GPIO_PORT,\r
17                                       UP_BUTTON_GPIO_PORT,DOWN_BUTTON_GPIO_PORT, SEL_BUTTON_GPIO_PORT}; \r
18 \r
19 const uint16_t BUTTON_PIN[BUTTONn] = {WAKEUP_BUTTON_PIN, TAMPER_BUTTON_PIN,\r
20                                       USER_BUTTON_PIN,RIGHT_BUTTON_PIN, LEFT_BUTTON_PIN,\r
21                                       UP_BUTTON_PIN,DOWN_BUTTON_PIN, SEL_BUTTON_PIN}; \r
22 \r
23 const uint32_t BUTTON_CLK[BUTTONn] = {WAKEUP_BUTTON_GPIO_CLK, TAMPER_BUTTON_GPIO_CLK,\r
24                                       USER_BUTTON_GPIO_CLK,RIGHT_BUTTON_GPIO_CLK, LEFT_BUTTON_GPIO_CLK,\r
25                                       UP_BUTTON_GPIO_CLK,DOWN_BUTTON_GPIO_CLK, SEL_BUTTON_GPIO_CLK};\r
26 \r
27 const uint16_t BUTTON_EXTI_LINE[BUTTONn] = {WAKEUP_BUTTON_EXTI_LINE,\r
28                                             TAMPER_BUTTON_EXTI_LINE, \r
29                                             USER_BUTTON_EXTI_LINE,\r
30                                             RIGHT_BUTTON_EXTI_LINE,\r
31                                             LEFT_BUTTON_EXTI_LINE, \r
32                                             UP_BUTTON_EXTI_LINE,\r
33                                             DOWN_BUTTON_EXTI_LINE,\r
34                                             SEL_BUTTON_EXTI_LINE};\r
35 \r
36 const uint16_t BUTTON_PORT_SOURCE[BUTTONn] = {WAKEUP_BUTTON_EXTI_PORT_SOURCE,\r
37                                               TAMPER_BUTTON_EXTI_PORT_SOURCE, \r
38                                               USER_BUTTON_EXTI_PORT_SOURCE,\r
39                                               RIGHT_BUTTON_EXTI_PORT_SOURCE,\r
40                                               LEFT_BUTTON_EXTI_PORT_SOURCE, \r
41                                               UP_BUTTON_EXTI_PORT_SOURCE,\r
42                                               DOWN_BUTTON_EXTI_PORT_SOURCE,\r
43                                               SEL_BUTTON_EXTI_PORT_SOURCE};\r
44                                                                  \r
45 const uint16_t BUTTON_PIN_SOURCE[BUTTONn] = {WAKEUP_BUTTON_EXTI_PIN_SOURCE,\r
46                                              TAMPER_BUTTON_EXTI_PIN_SOURCE, \r
47                                              USER_BUTTON_EXTI_PIN_SOURCE,\r
48                                              RIGHT_BUTTON_EXTI_PIN_SOURCE,\r
49                                              LEFT_BUTTON_EXTI_PIN_SOURCE, \r
50                                              UP_BUTTON_EXTI_PIN_SOURCE,\r
51                                              DOWN_BUTTON_EXTI_PIN_SOURCE,\r
52                                              SEL_BUTTON_EXTI_PIN_SOURCE}; \r
53 const uint16_t BUTTON_IRQn[BUTTONn] = {WAKEUP_BUTTON_EXTI_IRQn, TAMPER_BUTTON_EXTI_IRQn,\r
54                                        USER_BUTTON_EXTI_IRQn,RIGHT_BUTTON_EXTI_IRQn,\r
55                                        LEFT_BUTTON_EXTI_IRQn, UP_BUTTON_EXTI_IRQn,\r
56                                        DOWN_BUTTON_EXTI_IRQn, SEL_BUTTON_EXTI_IRQn};\r
57 \r
58 USART_TypeDef* COM_USART[COMn] = {EVAL_COM1,EVAL_COM2}; \r
59 \r
60 GPIO_TypeDef* COM_TX_PORT[COMn] = {EVAL_COM1_TX_GPIO_PORT, EVAL_COM2_TX_GPIO_PORT};\r
61  \r
62 GPIO_TypeDef* COM_RX_PORT[COMn] = {EVAL_COM1_RX_GPIO_PORT,EVAL_COM2_RX_GPIO_PORT};\r
63 \r
64 const uint32_t COM_USART_CLK[COMn] = {EVAL_COM1_CLK,EVAL_COM2_CLK};\r
65 \r
66 const uint32_t COM_TX_PORT_CLK[COMn] = {EVAL_COM1_TX_GPIO_CLK,EVAL_COM2_TX_GPIO_CLK};\r
67  \r
68 const uint32_t COM_RX_PORT_CLK[COMn] = {EVAL_COM1_RX_GPIO_CLK, EVAL_COM2_RX_GPIO_CLK};\r
69 \r
70 const uint16_t COM_TX_PIN[COMn] = {EVAL_COM1_TX_PIN, EVAL_COM2_TX_PIN};\r
71 \r
72 const uint16_t COM_RX_PIN[COMn] = {EVAL_COM1_RX_PIN, EVAL_COM2_RX_PIN};\r
73  \r
74 const uint16_t COM_TX_PIN_SOURCE[COMn] = {EVAL_COM1_TX_SOURCE, EVAL_COM2_TX_SOURCE};\r
75 \r
76 const uint16_t COM_RX_PIN_SOURCE[COMn] = {EVAL_COM1_RX_SOURCE, EVAL_COM1_RX_SOURCE};\r
77  \r
78 const uint16_t COM_TX_AF[COMn] = {EVAL_COM1_TX_AF, EVAL_COM2_TX_AF};\r
79  \r
80 const uint16_t COM_RX_AF[COMn] = {EVAL_COM1_RX_AF, EVAL_COM2_RX_AF};\r
81 \r
82 NVIC_InitTypeDef   NVIC_InitStructure;\r
83 \r
84 /**\r
85   * @}\r
86   */ \r
87 void STM_EVAL_GPIOReset(void)\r
88 {\r
89   GPIO_DeInit(GPIOA);\r
90   GPIO_DeInit(GPIOB);\r
91   GPIO_DeInit(GPIOC);\r
92   GPIO_DeInit(GPIOD);\r
93   GPIO_DeInit(GPIOE);\r
94   GPIO_DeInit(GPIOF);\r
95   GPIO_DeInit(GPIOG);\r
96   GPIO_DeInit(GPIOH);\r
97   GPIO_DeInit(GPIOI);\r
98 }\r
99 /**\r
100   * @brief  Configures LED GPIO.\r
101   * @param  Led: Specifies the Led to be configured. \r
102   *   This parameter can be one of following parameters:\r
103   *     @arg LED1\r
104   *     @arg LED2\r
105   *     @arg LED3\r
106   *     @arg LED4\r
107   * @retval None\r
108   */\r
109 void STM_EVAL_LEDInit(Led_TypeDef Led)\r
110 {\r
111   GPIO_InitTypeDef  GPIO_InitStructure;\r
112   \r
113   /* Enable the GPIO_LED Clock */\r
114   RCC_AHB1PeriphClockCmd(GPIO_CLK[Led], ENABLE);\r
115 \r
116 \r
117   /* Configure the GPIO_LED pin */\r
118   GPIO_InitStructure.GPIO_Pin = GPIO_PIN[Led];\r
119   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;\r
120   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;\r
121   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;\r
122   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
123   GPIO_Init(GPIO_PORT[Led], &GPIO_InitStructure);\r
124 }\r
125 \r
126 /**\r
127   * @brief  Turns selected LED On.\r
128   * @param  Led: Specifies the Led to be set on. \r
129   *   This parameter can be one of following parameters:\r
130   *     @arg LED1\r
131   *     @arg LED2\r
132   *     @arg LED3\r
133   *     @arg LED4  \r
134   * @retval None\r
135   */\r
136 void STM_EVAL_LEDOn(Led_TypeDef Led)\r
137 {\r
138   GPIO_PORT[Led]->BSRRL = GPIO_PIN[Led];\r
139 }\r
140 \r
141 /**\r
142   * @brief  Turns selected LED Off.\r
143   * @param  Led: Specifies the Led to be set off. \r
144   *   This parameter can be one of following parameters:\r
145   *     @arg LED1\r
146   *     @arg LED2\r
147   *     @arg LED3\r
148   *     @arg LED4 \r
149   * @retval None\r
150   */\r
151 void STM_EVAL_LEDOff(Led_TypeDef Led)\r
152 {\r
153   GPIO_PORT[Led]->BSRRH = GPIO_PIN[Led];  \r
154 }\r
155 \r
156 /**\r
157   * @brief  Toggles the selected LED.\r
158   * @param  Led: Specifies the Led to be toggled. \r
159   *   This parameter can be one of following parameters:\r
160   *     @arg LED1\r
161   *     @arg LED2\r
162   *     @arg LED3\r
163   *     @arg LED4  \r
164   * @retval None\r
165   */\r
166 void STM_EVAL_LEDToggle(Led_TypeDef Led)\r
167 {\r
168   GPIO_PORT[Led]->ODR ^= GPIO_PIN[Led];\r
169 }\r
170 \r
171 /**\r
172   * @brief  Configures Button GPIO and EXTI Line.\r
173   * @param  Button: Specifies the Button to be configured.\r
174   *   This parameter can be one of following parameters:   \r
175   *     @arg BUTTON_WAKEUP: Wakeup Push Button\r
176   *     @arg BUTTON_TAMPER: Tamper Push Button  \r
177   *     @arg BUTTON_KEY: Key Push Button \r
178   *     @arg BUTTON_RIGHT: Joystick Right Push Button \r
179   *     @arg BUTTON_LEFT: Joystick Left Push Button \r
180   *     @arg BUTTON_UP: Joystick Up Push Button \r
181   *     @arg BUTTON_DOWN: Joystick Down Push Button\r
182   *     @arg BUTTON_SEL: Joystick Sel Push Button\r
183   * @param  Button_Mode: Specifies Button mode.\r
184   *   This parameter can be one of following parameters:   \r
185   *     @arg BUTTON_MODE_GPIO: Button will be used as simple IO \r
186   *     @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line with interrupt\r
187   *                     generation capability  \r
188   * @retval None\r
189   */\r
190 void STM_EVAL_PBInit(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode)\r
191 {\r
192   GPIO_InitTypeDef GPIO_InitStructure;\r
193   EXTI_InitTypeDef EXTI_InitStructure;\r
194   NVIC_InitTypeDef NVIC_InitStructure;\r
195 \r
196 \r
197   /* Enable the BUTTON Clock */\r
198   RCC_AHB1PeriphClockCmd(BUTTON_CLK[Button], ENABLE);\r
199   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);\r
200 \r
201   /* Configure Button pin as input */\r
202   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;\r
203   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;\r
204   GPIO_InitStructure.GPIO_Pin = BUTTON_PIN[Button];\r
205   GPIO_Init(BUTTON_PORT[Button], &GPIO_InitStructure);\r
206 \r
207 \r
208   if (Button_Mode == BUTTON_MODE_EXTI)\r
209   {\r
210     /* Connect Button EXTI Line to Button GPIO Pin */\r
211     SYSCFG_EXTILineConfig(BUTTON_PORT_SOURCE[Button], BUTTON_PIN_SOURCE[Button]);\r
212 \r
213     /* Configure Button EXTI line */\r
214     EXTI_InitStructure.EXTI_Line = BUTTON_EXTI_LINE[Button];\r
215     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;\r
216 \r
217     if(Button != BUTTON_WAKEUP)\r
218     {\r
219       EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  \r
220     }\r
221     else\r
222     {\r
223       EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  \r
224     }\r
225     EXTI_InitStructure.EXTI_LineCmd = ENABLE;\r
226     EXTI_Init(&EXTI_InitStructure);\r
227 \r
228     /* Enable and set Button EXTI Interrupt to the lowest priority */\r
229     NVIC_InitStructure.NVIC_IRQChannel = BUTTON_IRQn[Button];\r
230     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;\r
231     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;\r
232     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;\r
233 \r
234     NVIC_Init(&NVIC_InitStructure); \r
235   }\r
236 }\r
237 \r
238 /**\r
239   * @brief  Returns the selected Button state.\r
240   * @param  Button: Specifies the Button to be checked.\r
241   *   This parameter can be one of following parameters:    \r
242   *     @arg BUTTON_WAKEUP: Wakeup Push Button\r
243   *     @arg BUTTON_TAMPER: Tamper Push Button  \r
244   *     @arg BUTTON_KEY: Key Push Button \r
245   *     @arg BUTTON_RIGHT: Joystick Right Push Button \r
246   *     @arg BUTTON_LEFT: Joystick Left Push Button \r
247   *     @arg BUTTON_UP: Joystick Up Push Button \r
248   *     @arg BUTTON_DOWN: Joystick Down Push Button\r
249   *     @arg BUTTON_SEL: Joystick Sel Push Button    \r
250   * @retval The Button GPIO pin value.\r
251   */\r
252 uint32_t STM_EVAL_PBGetState(Button_TypeDef Button)\r
253 {\r
254   return GPIO_ReadInputDataBit(BUTTON_PORT[Button], BUTTON_PIN[Button]);\r
255 }\r
256 \r
257 \r
258 /**\r
259   * @brief  Configures COM port.\r
260   * @param  COM: Specifies the COM port to be configured.\r
261   *   This parameter can be one of following parameters:    \r
262   *     @arg COM1\r
263   *     @arg COM2  \r
264   * @param  USART_InitStruct: pointer to a USART_InitTypeDef structure that\r
265   *   contains the configuration information for the specified USART peripheral.\r
266   * @retval None\r
267   */\r
268 void STM_EVAL_COMInit(COM_TypeDef COM, USART_InitTypeDef* USART_InitStruct)\r
269 {\r
270   GPIO_InitTypeDef GPIO_InitStructure;\r
271 \r
272   /* Enable GPIO clock */\r
273   RCC_AHB1PeriphClockCmd(COM_TX_PORT_CLK[COM] | COM_RX_PORT_CLK[COM], ENABLE);\r
274 \r
275   if (COM == COM1)\r
276   {\r
277     /* Enable UART clock */\r
278     RCC_APB2PeriphClockCmd(COM_USART_CLK[COM], ENABLE);\r
279   }\r
280 \r
281   /* Connect PXx to USARTx_Tx*/\r
282   GPIO_PinAFConfig(COM_TX_PORT[COM], COM_TX_PIN_SOURCE[COM], COM_TX_AF[COM]);\r
283 \r
284   /* Connect PXx to USARTx_Rx*/\r
285   GPIO_PinAFConfig(COM_RX_PORT[COM], COM_RX_PIN_SOURCE[COM], COM_RX_AF[COM]);\r
286 \r
287   /* Configure USART Tx as alternate function  */\r
288   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;\r
289   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;\r
290   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;\r
291 \r
292   GPIO_InitStructure.GPIO_Pin = COM_TX_PIN[COM];\r
293   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\r
294   GPIO_Init(COM_TX_PORT[COM], &GPIO_InitStructure);\r
295 \r
296   /* Configure USART Rx as alternate function  */\r
297   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;\r
298   GPIO_InitStructure.GPIO_Pin = COM_RX_PIN[COM];\r
299   GPIO_Init(COM_RX_PORT[COM], &GPIO_InitStructure);\r
300 \r
301   /* USART configuration */\r
302   USART_Init(COM_USART[COM], USART_InitStruct);\r
303     \r
304   /* Enable USART */\r
305   USART_Cmd(COM_USART[COM], ENABLE);\r
306 }\r
307 \r
308 \r
309 /**\r
310   * @}\r
311   */ \r
312 \r
313 \r
314 /**\r
315   * @}\r
316   */ \r
317 \r
318 /**\r
319   * @}\r
320   */\r
321 \r
322 /**\r
323   * @}\r
324   */    \r
325 \r
326 /**\r
327   * @}\r
328   */ \r
329     \r
330 /******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/\r