CARME-M4 BSP  V1.5
carme.h
Go to the documentation of this file.
1 #ifndef __CARME_H__
2 #define __CARME_H__
3 
70 #ifdef __cplusplus
71 extern "C" {
72 #endif /* __cplusplus */
73 
74 /*----- Header-Files -------------------------------------------------------*/
75 #include <stm32f4xx.h> /* Processor STM32F407IG */
76 
77 /*----- Macros -------------------------------------------------------------*/
78 /* FSMC base addresses for each block */
79 #define FSMC_NOR_PSRAM_CS_ADDR(n) (0x60000000 + ((n) - 1) \
80  * 0x4000000)
81 #define FSMC_FLASH_BASE FSMC_NOR_PSRAM_CS_ADDR(1)
82 #define FSMC_PSRAM_BASE FSMC_NOR_PSRAM_CS_ADDR(2)
83 #define FSMC_LCD_SSD1963_BASE FSMC_NOR_PSRAM_CS_ADDR(3)
84 #define FSMC_IO_BASE FSMC_NOR_PSRAM_CS_ADDR(4)
85 #define FSMC_CARME_EXTENSION1_BASE (FSMC_IO_BASE + 0x0000000)
86 #define FSMC_CARME_EXTENSION2_BASE (FSMC_IO_BASE + 0x1000000)
87 #define FSMC_CAN_BASE (FSMC_IO_BASE + 0x2000000)
89 /* AGPIO list */
90 #define CARME_AGPIO_9 GPIOI, GPIO_Pin_5
91 #define CARME_AGPIO_13 GPIOG, GPIO_Pin_15
92 #define CARME_AGPIO_21 GPIOI, GPIO_Pin_4
93 #define CARME_AGPIO_22 GPIOH, GPIO_Pin_2
94 #define CARME_AGPIO_90 GPIOF, GPIO_Pin_11
95 #define CARME_AGPIO_91 GPIOF, GPIO_Pin_10
96 #define CARME_AGPIO_93 GPIOF, GPIO_Pin_9
97 #define CARME_AGPIO_94 GPIOF, GPIO_Pin_8
98 #define CARME_AGPIO_96 GPIOF, GPIO_Pin_7
99 #define CARME_AGPIO_97 GPIOF, GPIO_Pin_6
100 #define CARME_AGPIO_99 GPIOC, GPIO_Pin_7
101 #define CARME_AGPIO_101 GPIOB, GPIO_Pin_15
102 #define CARME_AGPIO_102 GPIOB, GPIO_Pin_14
103 #define CARME_AGPIO_103 GPIOI, GPIO_Pin_0
104 #define CARME_AGPIO_105 GPIOB, GPIO_Pin_8
105 #define CARME_AGPIO_108 GPIOB, GPIO_Pin_6
106 #define CARME_AGPIO_115 GPIOB, GPIO_Pin_2
107 #define CARME_AGPIO_116 GPIOB, GPIO_Pin_1
108 #define CARME_LED_GREEN GPIOI, GPIO_Pin_6
109 #define CARME_LED_RED GPIOI, GPIO_Pin_7
111 /* AGPIO Pin list */
112 #define CARME_AGPIO_PIN_116 ((uint32_t)0x00001)
113 #define CARME_AGPIO_PIN_115 ((uint32_t)0x00002)
114 #define CARME_AGPIO_PIN_108 ((uint32_t)0x00004)
115 #define CARME_AGPIO_PIN_105 ((uint32_t)0x00008)
116 #define CARME_AGPIO_PIN_103 ((uint32_t)0x00010)
117 #define CARME_AGPIO_PIN_102 ((uint32_t)0x00020)
118 #define CARME_AGPIO_PIN_101 ((uint32_t)0x00040)
119 #define CARME_AGPIO_PIN_99 ((uint32_t)0x00080)
120 #define CARME_AGPIO_PIN_97 ((uint32_t)0x00100)
121 #define CARME_AGPIO_PIN_96 ((uint32_t)0x00200)
122 #define CARME_AGPIO_PIN_94 ((uint32_t)0x00400)
123 #define CARME_AGPIO_PIN_93 ((uint32_t)0x00800)
124 #define CARME_AGPIO_PIN_91 ((uint32_t)0x01000)
125 #define CARME_AGPIO_PIN_90 ((uint32_t)0x02000)
126 #define CARME_AGPIO_PIN_22 ((uint32_t)0x04000)
127 #define CARME_AGPIO_PIN_21 ((uint32_t)0x08000)
128 #define CARME_AGPIO_PIN_13 ((uint32_t)0x10000)
129 #define CARME_AGPIO_PIN_9 ((uint32_t)0x20000)
130 #define CARME_LED_PIN_GREEN ((uint32_t)0x40000)
131 #define CARME_LED_PIN_RED ((uint32_t)0x80000)
133 /* CARME error codes */
134 #define CARME_NO_ERROR 0x0
135 #define CARME_ERROR_IO1_BASE 0x10
136 #define CARME_ERROR_IO2_BASE 0x20
137 #define CARME_ERROR_UART_BASE 0x30
138 #define CARME_ERROR_CAN_BASE 0x40
139 #define CARME_ERROR_I2C_BASE 0x60
140 #define CARME_ERROR_AUDIO_BASE 0x80
141 #define CARME_ERROR_ETH_BASE 0xA0
142 #define CARME_ERROR_USB_BASE 0xC0
143 #define CARME_ERROR_EEPROM_BASE 0xE0
148 #define CARME_GPIO_PIN_TO_SOURCE(GPIO_PIN) ( \
149  ((GPIO_PIN) & GPIO_Pin_0) ? GPIO_PinSource0 : /* bit 0 is set? */ \
150  ((GPIO_PIN) & GPIO_Pin_1) ? GPIO_PinSource1 : /* bit 1 is set? */ \
151  ((GPIO_PIN) & GPIO_Pin_2) ? GPIO_PinSource2 : /* bit 2 is set? */ \
152  ((GPIO_PIN) & GPIO_Pin_3) ? GPIO_PinSource3 : /* bit 3 is set? */ \
153  ((GPIO_PIN) & GPIO_Pin_4) ? GPIO_PinSource4 : /* bit 4 is set? */ \
154  ((GPIO_PIN) & GPIO_Pin_5) ? GPIO_PinSource5 : /* bit 5 is set? */ \
155  ((GPIO_PIN) & GPIO_Pin_6) ? GPIO_PinSource6 : /* bit 6 is set? */ \
156  ((GPIO_PIN) & GPIO_Pin_7) ? GPIO_PinSource7 : /* bit 7 is set? */ \
157  ((GPIO_PIN) & GPIO_Pin_8) ? GPIO_PinSource8 : /* bit 8 is set? */ \
158  ((GPIO_PIN) & GPIO_Pin_9) ? GPIO_PinSource9 : /* bit 9 is set? */ \
159  ((GPIO_PIN) & GPIO_Pin_10) ? GPIO_PinSource10 : /* bit 10 is set? */\
160  ((GPIO_PIN) & GPIO_Pin_11) ? GPIO_PinSource11 : /* bit 11 is set? */\
161  ((GPIO_PIN) & GPIO_Pin_12) ? GPIO_PinSource12 : /* bit 12 is set? */\
162  ((GPIO_PIN) & GPIO_Pin_13) ? GPIO_PinSource13 : /* bit 13 is set? */\
163  ((GPIO_PIN) & GPIO_Pin_14) ? GPIO_PinSource14 : /* bit 14 is set? */\
164  ((GPIO_PIN) & GPIO_Pin_15) ? GPIO_PinSource15 : /* bit 15 is set? */\
165  -1) /* no bits are set */
166 
170 #define CARME_GPIO_TO_EXTIPORTSOURCE(GPIO_PORT) ( \
171  (GPIO_PORT == GPIOA) ? EXTI_PortSourceGPIOA : /* Port A? */ \
172  (GPIO_PORT == GPIOB) ? EXTI_PortSourceGPIOB : /* Port B? */ \
173  (GPIO_PORT == GPIOC) ? EXTI_PortSourceGPIOC : /* Port C? */ \
174  (GPIO_PORT == GPIOD) ? EXTI_PortSourceGPIOD : /* Port D? */ \
175  (GPIO_PORT == GPIOE) ? EXTI_PortSourceGPIOE : /* Port E? */ \
176  (GPIO_PORT == GPIOF) ? EXTI_PortSourceGPIOF : /* Port F? */ \
177  (GPIO_PORT == GPIOG) ? EXTI_PortSourceGPIOG : /* Port G? */ \
178  (GPIO_PORT == GPIOH) ? EXTI_PortSourceGPIOH : /* Port H? */ \
179  (GPIO_PORT == GPIOI) ? EXTI_PortSourceGPIOI : /* Port I? */ \
180  -1) /* no port is set */
181 
185 #define CARME_GPIO_TO_EXTIPINSOURCE(GPIO_PIN) ( \
186  ((GPIO_PIN) & GPIO_Pin_0) ? EXTI_PinSource0 : /* bit 0 is set? */ \
187  ((GPIO_PIN) & GPIO_Pin_1) ? EXTI_PinSource1 : /* bit 1 is set? */ \
188  ((GPIO_PIN) & GPIO_Pin_2) ? EXTI_PinSource2 : /* bit 2 is set? */ \
189  ((GPIO_PIN) & GPIO_Pin_3) ? EXTI_PinSource3 : /* bit 3 is set? */ \
190  ((GPIO_PIN) & GPIO_Pin_4) ? EXTI_PinSource4 : /* bit 4 is set? */ \
191  ((GPIO_PIN) & GPIO_Pin_5) ? EXTI_PinSource5 : /* bit 5 is set? */ \
192  ((GPIO_PIN) & GPIO_Pin_6) ? EXTI_PinSource6 : /* bit 6 is set? */ \
193  ((GPIO_PIN) & GPIO_Pin_7) ? EXTI_PinSource7 : /* bit 7 is set? */ \
194  ((GPIO_PIN) & GPIO_Pin_8) ? EXTI_PinSource8 : /* bit 8 is set? */ \
195  ((GPIO_PIN) & GPIO_Pin_9) ? EXTI_PinSource9 : /* bit 9 is set? */ \
196  ((GPIO_PIN) & GPIO_Pin_10) ? EXTI_PinSource10 : /* bit 10 is set? */\
197  ((GPIO_PIN) & GPIO_Pin_11) ? EXTI_PinSource11 : /* bit 11 is set? */\
198  ((GPIO_PIN) & GPIO_Pin_12) ? EXTI_PinSource12 : /* bit 12 is set? */\
199  ((GPIO_PIN) & GPIO_Pin_13) ? EXTI_PinSource13 : /* bit 13 is set? */\
200  ((GPIO_PIN) & GPIO_Pin_14) ? EXTI_PinSource14 : /* bit 14 is set? */\
201  ((GPIO_PIN) & GPIO_Pin_15) ? EXTI_PinSource15 : /* bit 15 is set? */\
202  -1) /* no bits are set */
203 
207 #define CARME_GPIO_TO_EXTILINE(GPIO_PIN) ( \
208  ((GPIO_PIN) & GPIO_Pin_0) ? EXTI_Line0 : /* bit 0 is set? */ \
209  ((GPIO_PIN) & GPIO_Pin_1) ? EXTI_Line1 : /* bit 1 is set? */ \
210  ((GPIO_PIN) & GPIO_Pin_2) ? EXTI_Line2 : /* bit 2 is set? */ \
211  ((GPIO_PIN) & GPIO_Pin_3) ? EXTI_Line3 : /* bit 3 is set? */ \
212  ((GPIO_PIN) & GPIO_Pin_4) ? EXTI_Line4 : /* bit 4 is set? */ \
213  ((GPIO_PIN) & GPIO_Pin_5) ? EXTI_Line5 : /* bit 5 is set? */ \
214  ((GPIO_PIN) & GPIO_Pin_6) ? EXTI_Line6 : /* bit 6 is set? */ \
215  ((GPIO_PIN) & GPIO_Pin_7) ? EXTI_Line7 : /* bit 7 is set? */ \
216  ((GPIO_PIN) & GPIO_Pin_8) ? EXTI_Line8 : /* bit 8 is set? */ \
217  ((GPIO_PIN) & GPIO_Pin_9) ? EXTI_Line9 : /* bit 9 is set? */ \
218  ((GPIO_PIN) & GPIO_Pin_10) ? EXTI_Line10 : /* bit 10 is set? */\
219  ((GPIO_PIN) & GPIO_Pin_11) ? EXTI_Line11 : /* bit 11 is set? */\
220  ((GPIO_PIN) & GPIO_Pin_12) ? EXTI_Line12 : /* bit 12 is set? */\
221  ((GPIO_PIN) & GPIO_Pin_13) ? EXTI_Line13 : /* bit 13 is set? */\
222  ((GPIO_PIN) & GPIO_Pin_14) ? EXTI_Line14 : /* bit 14 is set? */\
223  ((GPIO_PIN) & GPIO_Pin_15) ? EXTI_Line15 : /* bit 15 is set? */\
224  -1) /* no bits are set */
225 
226 #ifndef max
227 
230 #define max(a, b) ( ((a) > (b)) ? (a) : (b) )
231 #endif
232 
233 #ifndef min
234 
237 #define min(a, b) ( ((a) < (b)) ? (a) : (b) )
238 #endif
239 
240 /*----- Data types ---------------------------------------------------------*/
244 typedef struct _CARME_Port_Pin_t {
245  GPIO_TypeDef* GPIOx;
246  uint16_t GPIO_Pin;
247  GPIOMode_TypeDef GPIO_Mode;
248  uint8_t GPIO_AF;
250 
254 typedef uint8_t ERROR_CODES;
256 /*----- Function prototypes ------------------------------------------------*/
257 extern void CARME_Init(void);
258 extern void CARME_GPIO_Init(CARME_Port_Pin_t *pPortPinAssociation,
259  GPIO_InitTypeDef *pGPIO_InitStruct, uint8_t size);
260 extern void CARME_AGPIO_Set(uint32_t write, uint32_t mask);
261 extern void CARME_AGPIO_Get(uint32_t *pStatus);
262 extern void CARME_LED_Green_Set(void);
263 extern void CARME_LED_Green_Reset(void);
264 extern void CARME_LED_Red_Set(void);
265 extern void CARME_LED_Red_Reset(void);
266 
267 /*----- Data ---------------------------------------------------------------*/
268 
269 #ifdef __cplusplus
270 }
271 #endif /* __cplusplus */
272 
278 #endif /* __CARME_H__ */
uint8_t ERROR_CODES
Error variable.
Definition: carme.h:255
void CARME_LED_Red_Reset(void)
Reset the red LED on the CARME Module.
Definition: carme.c:690
GPIOMode_TypeDef
GPIO Configuration Mode enumeration.
void CARME_GPIO_Init(CARME_Port_Pin_t *pPortPinAssociation, GPIO_InitTypeDef *pGPIO_InitStruct, uint8_t size)
Initialize GPIO ports with a CARME_Port_Pin_t table.
Definition: carme.c:540
void CARME_Init(void)
CARME-M4 module initialization.
Definition: carme.c:152
CARME port and pin association structure.
Definition: carme.h:245
void CARME_LED_Green_Set(void)
Set the green LED on the CARME Module.
Definition: carme.c:654
GPIO Init structure definition.
void CARME_AGPIO_Set(uint32_t write, uint32_t mask)
Set the AGPIO state.
Definition: carme.c:567
void CARME_LED_Red_Set(void)
Set the red LED on the CARME Module.
Definition: carme.c:678
void CARME_AGPIO_Get(uint32_t *pStatus)
Get the AGPIO state.
Definition: carme.c:592
void CARME_LED_Green_Reset(void)
Reset the green LED on the CARME Module.
Definition: carme.c:666
struct _CARME_Port_Pin_t CARME_Port_Pin_t
CARME port and pin association structure.