Initial commit, project files and example
This commit is contained in:
278
libs/BSP/carme.h
Normal file
278
libs/BSP/carme.h
Normal file
@@ -0,0 +1,278 @@
|
||||
#ifndef __CARME_H__
|
||||
#define __CARME_H__
|
||||
/**
|
||||
*****************************************************************************
|
||||
* @addtogroup CARME
|
||||
* @{
|
||||
* @addtogroup CARME_Core
|
||||
* @{
|
||||
*
|
||||
* @file carme.h
|
||||
* @version 1.0
|
||||
* @date 2013-01-09
|
||||
* @author rct1
|
||||
*
|
||||
*****************************************************************************
|
||||
* @copyright
|
||||
* @{
|
||||
*
|
||||
* This software can be used by students and other personal of the Bern
|
||||
* University of Applied Sciences under the terms of the MIT license.
|
||||
* For other persons this software is under the terms of the GNU General
|
||||
* Public License version 2.
|
||||
*
|
||||
* Copyright © 2013, Bern University of Applied Sciences.
|
||||
* All rights reserved.
|
||||
*
|
||||
*
|
||||
* ##### MIT License
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*
|
||||
* ##### GNU GENERAL PUBLIC LICENSE
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*
|
||||
* @}
|
||||
*****************************************************************************
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/*----- Header-Files -------------------------------------------------------*/
|
||||
#include <stm32f4xx.h> /* Processor STM32F407IG */
|
||||
|
||||
/*----- Macros -------------------------------------------------------------*/
|
||||
/* FSMC base addresses for each block */
|
||||
#define FSMC_NOR_PSRAM_CS_ADDR(n) (0x60000000 + ((n) - 1) \
|
||||
* 0x4000000) /**< address formula */
|
||||
#define FSMC_FLASH_BASE FSMC_NOR_PSRAM_CS_ADDR(1) /**< External flash */
|
||||
#define FSMC_PSRAM_BASE FSMC_NOR_PSRAM_CS_ADDR(2) /**< External ram */
|
||||
#define FSMC_LCD_SSD1963_BASE FSMC_NOR_PSRAM_CS_ADDR(3) /**< LCD SSD1963 controller */
|
||||
#define FSMC_IO_BASE FSMC_NOR_PSRAM_CS_ADDR(4) /**< External IO */
|
||||
#define FSMC_CARME_EXTENSION1_BASE (FSMC_IO_BASE + 0x0000000) /**< CARME Extension 1 */
|
||||
#define FSMC_CARME_EXTENSION2_BASE (FSMC_IO_BASE + 0x1000000) /**< CARME Extension 2 */
|
||||
#define FSMC_CAN_BASE (FSMC_IO_BASE + 0x2000000) /**< CAN controller SJA1000 */
|
||||
|
||||
/* AGPIO list */
|
||||
#define CARME_AGPIO_9 GPIOI, GPIO_Pin_5 /**< Additional GPIO 9 */
|
||||
#define CARME_AGPIO_13 GPIOG, GPIO_Pin_15 /**< Additional GPIO 13 */
|
||||
#define CARME_AGPIO_21 GPIOI, GPIO_Pin_4 /**< Additional GPIO 21 */
|
||||
#define CARME_AGPIO_22 GPIOH, GPIO_Pin_2 /**< Additional GPIO 22 */
|
||||
#define CARME_AGPIO_90 GPIOF, GPIO_Pin_11 /**< Additional GPIO 90 */
|
||||
#define CARME_AGPIO_91 GPIOF, GPIO_Pin_10 /**< Additional GPIO 91 */
|
||||
#define CARME_AGPIO_93 GPIOF, GPIO_Pin_9 /**< Additional GPIO 93 */
|
||||
#define CARME_AGPIO_94 GPIOF, GPIO_Pin_8 /**< Additional GPIO 94 */
|
||||
#define CARME_AGPIO_96 GPIOF, GPIO_Pin_7 /**< Additional GPIO 96 */
|
||||
#define CARME_AGPIO_97 GPIOF, GPIO_Pin_6 /**< Additional GPIO 97 */
|
||||
#define CARME_AGPIO_99 GPIOC, GPIO_Pin_7 /**< Additional GPIO 99 */
|
||||
#define CARME_AGPIO_101 GPIOB, GPIO_Pin_15 /**< Additional GPIO 101 */
|
||||
#define CARME_AGPIO_102 GPIOB, GPIO_Pin_14 /**< Additional GPIO 102 */
|
||||
#define CARME_AGPIO_103 GPIOI, GPIO_Pin_0 /**< Additional GPIO 103 */
|
||||
#define CARME_AGPIO_105 GPIOB, GPIO_Pin_8 /**< Additional GPIO 105 */
|
||||
#define CARME_AGPIO_108 GPIOB, GPIO_Pin_6 /**< Additional GPIO 108 */
|
||||
#define CARME_AGPIO_115 GPIOB, GPIO_Pin_2 /**< Additional GPIO 115 */
|
||||
#define CARME_AGPIO_116 GPIOB, GPIO_Pin_1 /**< Additional GPIO 116 */
|
||||
#define CARME_LED_GREEN GPIOI, GPIO_Pin_6 /**< Green LED on module */
|
||||
#define CARME_LED_RED GPIOI, GPIO_Pin_7 /**< Red LED on module */
|
||||
|
||||
/* AGPIO Pin list */
|
||||
#define CARME_AGPIO_PIN_116 ((uint32_t)0x00001) /**< Additional GPIO 116 Pin */
|
||||
#define CARME_AGPIO_PIN_115 ((uint32_t)0x00002) /**< Additional GPIO 115 Pin */
|
||||
#define CARME_AGPIO_PIN_108 ((uint32_t)0x00004) /**< Additional GPIO 108 Pin */
|
||||
#define CARME_AGPIO_PIN_105 ((uint32_t)0x00008) /**< Additional GPIO 105 Pin */
|
||||
#define CARME_AGPIO_PIN_103 ((uint32_t)0x00010) /**< Additional GPIO 103 Pin */
|
||||
#define CARME_AGPIO_PIN_102 ((uint32_t)0x00020) /**< Additional GPIO 102 Pin */
|
||||
#define CARME_AGPIO_PIN_101 ((uint32_t)0x00040) /**< Additional GPIO 101 Pin */
|
||||
#define CARME_AGPIO_PIN_99 ((uint32_t)0x00080) /**< Additional GPIO 99 Pin */
|
||||
#define CARME_AGPIO_PIN_97 ((uint32_t)0x00100) /**< Additional GPIO 97 Pin */
|
||||
#define CARME_AGPIO_PIN_96 ((uint32_t)0x00200) /**< Additional GPIO 96 Pin */
|
||||
#define CARME_AGPIO_PIN_94 ((uint32_t)0x00400) /**< Additional GPIO 94 Pin */
|
||||
#define CARME_AGPIO_PIN_93 ((uint32_t)0x00800) /**< Additional GPIO 93 Pin */
|
||||
#define CARME_AGPIO_PIN_91 ((uint32_t)0x01000) /**< Additional GPIO 91 Pin */
|
||||
#define CARME_AGPIO_PIN_90 ((uint32_t)0x02000) /**< Additional GPIO 90 Pin */
|
||||
#define CARME_AGPIO_PIN_22 ((uint32_t)0x04000) /**< Additional GPIO 22 Pin */
|
||||
#define CARME_AGPIO_PIN_21 ((uint32_t)0x08000) /**< Additional GPIO 21 Pin */
|
||||
#define CARME_AGPIO_PIN_13 ((uint32_t)0x10000) /**< Additional GPIO 13 Pin */
|
||||
#define CARME_AGPIO_PIN_9 ((uint32_t)0x20000) /**< Additional GPIO 9 Pin */
|
||||
#define CARME_LED_PIN_GREEN ((uint32_t)0x40000) /**< Green LED Pin */
|
||||
#define CARME_LED_PIN_RED ((uint32_t)0x80000) /**< Red LED Pin */
|
||||
|
||||
/* CARME error codes */
|
||||
#define CARME_NO_ERROR 0x0 /**< No error */
|
||||
#define CARME_ERROR_IO1_BASE 0x10 /**< CARME IO1 errors */
|
||||
#define CARME_ERROR_IO2_BASE 0x20 /**< CARME IO2 errors */
|
||||
#define CARME_ERROR_UART_BASE 0x30 /**< UART errors */
|
||||
#define CARME_ERROR_CAN_BASE 0x40 /**< CAN errors */
|
||||
#define CARME_ERROR_I2C_BASE 0x60 /**< I2C errors */
|
||||
#define CARME_ERROR_AUDIO_BASE 0x80 /**< Audio codec errors */
|
||||
#define CARME_ERROR_ETH_BASE 0xA0 /**< Ethernet errors */
|
||||
#define CARME_ERROR_USB_BASE 0xC0 /**< USB errors */
|
||||
#define CARME_ERROR_EEPROM_BASE 0xE0 /**< EEPROM errors */
|
||||
|
||||
/**
|
||||
* @brief Get GPIO_PinSourcex from GPIO_Pin_x.
|
||||
*/
|
||||
#define CARME_GPIO_PIN_TO_SOURCE(GPIO_PIN) ( \
|
||||
((GPIO_PIN) & GPIO_Pin_0) ? GPIO_PinSource0 : /* bit 0 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_1) ? GPIO_PinSource1 : /* bit 1 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_2) ? GPIO_PinSource2 : /* bit 2 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_3) ? GPIO_PinSource3 : /* bit 3 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_4) ? GPIO_PinSource4 : /* bit 4 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_5) ? GPIO_PinSource5 : /* bit 5 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_6) ? GPIO_PinSource6 : /* bit 6 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_7) ? GPIO_PinSource7 : /* bit 7 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_8) ? GPIO_PinSource8 : /* bit 8 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_9) ? GPIO_PinSource9 : /* bit 9 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_10) ? GPIO_PinSource10 : /* bit 10 is set? */\
|
||||
((GPIO_PIN) & GPIO_Pin_11) ? GPIO_PinSource11 : /* bit 11 is set? */\
|
||||
((GPIO_PIN) & GPIO_Pin_12) ? GPIO_PinSource12 : /* bit 12 is set? */\
|
||||
((GPIO_PIN) & GPIO_Pin_13) ? GPIO_PinSource13 : /* bit 13 is set? */\
|
||||
((GPIO_PIN) & GPIO_Pin_14) ? GPIO_PinSource14 : /* bit 14 is set? */\
|
||||
((GPIO_PIN) & GPIO_Pin_15) ? GPIO_PinSource15 : /* bit 15 is set? */\
|
||||
-1) /* no bits are set */
|
||||
|
||||
/**
|
||||
* @brief Get EXTI_PortSourceGPIOx from GPIOx.
|
||||
*/
|
||||
#define CARME_GPIO_TO_EXTIPORTSOURCE(GPIO_PORT) ( \
|
||||
(GPIO_PORT == GPIOA) ? EXTI_PortSourceGPIOA : /* Port A? */ \
|
||||
(GPIO_PORT == GPIOB) ? EXTI_PortSourceGPIOB : /* Port B? */ \
|
||||
(GPIO_PORT == GPIOC) ? EXTI_PortSourceGPIOC : /* Port C? */ \
|
||||
(GPIO_PORT == GPIOD) ? EXTI_PortSourceGPIOD : /* Port D? */ \
|
||||
(GPIO_PORT == GPIOE) ? EXTI_PortSourceGPIOE : /* Port E? */ \
|
||||
(GPIO_PORT == GPIOF) ? EXTI_PortSourceGPIOF : /* Port F? */ \
|
||||
(GPIO_PORT == GPIOG) ? EXTI_PortSourceGPIOG : /* Port G? */ \
|
||||
(GPIO_PORT == GPIOH) ? EXTI_PortSourceGPIOH : /* Port H? */ \
|
||||
(GPIO_PORT == GPIOI) ? EXTI_PortSourceGPIOI : /* Port I? */ \
|
||||
-1) /* no port is set */
|
||||
|
||||
/**
|
||||
* @brief Get EXTI_PinSourcex from GPIO_Pin_x.
|
||||
*/
|
||||
#define CARME_GPIO_TO_EXTIPINSOURCE(GPIO_PIN) ( \
|
||||
((GPIO_PIN) & GPIO_Pin_0) ? EXTI_PinSource0 : /* bit 0 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_1) ? EXTI_PinSource1 : /* bit 1 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_2) ? EXTI_PinSource2 : /* bit 2 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_3) ? EXTI_PinSource3 : /* bit 3 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_4) ? EXTI_PinSource4 : /* bit 4 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_5) ? EXTI_PinSource5 : /* bit 5 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_6) ? EXTI_PinSource6 : /* bit 6 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_7) ? EXTI_PinSource7 : /* bit 7 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_8) ? EXTI_PinSource8 : /* bit 8 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_9) ? EXTI_PinSource9 : /* bit 9 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_10) ? EXTI_PinSource10 : /* bit 10 is set? */\
|
||||
((GPIO_PIN) & GPIO_Pin_11) ? EXTI_PinSource11 : /* bit 11 is set? */\
|
||||
((GPIO_PIN) & GPIO_Pin_12) ? EXTI_PinSource12 : /* bit 12 is set? */\
|
||||
((GPIO_PIN) & GPIO_Pin_13) ? EXTI_PinSource13 : /* bit 13 is set? */\
|
||||
((GPIO_PIN) & GPIO_Pin_14) ? EXTI_PinSource14 : /* bit 14 is set? */\
|
||||
((GPIO_PIN) & GPIO_Pin_15) ? EXTI_PinSource15 : /* bit 15 is set? */\
|
||||
-1) /* no bits are set */
|
||||
|
||||
/**
|
||||
* @brief Get EXTI_Linex from GPIO_Pin_x.
|
||||
*/
|
||||
#define CARME_GPIO_TO_EXTILINE(GPIO_PIN) ( \
|
||||
((GPIO_PIN) & GPIO_Pin_0) ? EXTI_Line0 : /* bit 0 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_1) ? EXTI_Line1 : /* bit 1 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_2) ? EXTI_Line2 : /* bit 2 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_3) ? EXTI_Line3 : /* bit 3 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_4) ? EXTI_Line4 : /* bit 4 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_5) ? EXTI_Line5 : /* bit 5 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_6) ? EXTI_Line6 : /* bit 6 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_7) ? EXTI_Line7 : /* bit 7 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_8) ? EXTI_Line8 : /* bit 8 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_9) ? EXTI_Line9 : /* bit 9 is set? */ \
|
||||
((GPIO_PIN) & GPIO_Pin_10) ? EXTI_Line10 : /* bit 10 is set? */\
|
||||
((GPIO_PIN) & GPIO_Pin_11) ? EXTI_Line11 : /* bit 11 is set? */\
|
||||
((GPIO_PIN) & GPIO_Pin_12) ? EXTI_Line12 : /* bit 12 is set? */\
|
||||
((GPIO_PIN) & GPIO_Pin_13) ? EXTI_Line13 : /* bit 13 is set? */\
|
||||
((GPIO_PIN) & GPIO_Pin_14) ? EXTI_Line14 : /* bit 14 is set? */\
|
||||
((GPIO_PIN) & GPIO_Pin_15) ? EXTI_Line15 : /* bit 15 is set? */\
|
||||
-1) /* no bits are set */
|
||||
|
||||
#ifndef max
|
||||
/**
|
||||
* @brief Get the maximum of two numbers.
|
||||
*/
|
||||
#define max(a, b) ( ((a) > (b)) ? (a) : (b) )
|
||||
#endif
|
||||
|
||||
#ifndef min
|
||||
/**
|
||||
* @brief Get the minimum of two numbers.
|
||||
*/
|
||||
#define min(a, b) ( ((a) < (b)) ? (a) : (b) )
|
||||
#endif
|
||||
|
||||
/*----- Data types ---------------------------------------------------------*/
|
||||
/**
|
||||
* @brief CARME port and pin association structure.
|
||||
*/
|
||||
typedef struct _CARME_Port_Pin_t {
|
||||
GPIO_TypeDef* GPIOx;
|
||||
uint16_t GPIO_Pin;
|
||||
GPIOMode_TypeDef GPIO_Mode;
|
||||
uint8_t GPIO_AF;
|
||||
} CARME_Port_Pin_t;
|
||||
|
||||
/**
|
||||
* @brief Error variable
|
||||
*/
|
||||
typedef uint8_t ERROR_CODES;
|
||||
|
||||
/*----- Function prototypes ------------------------------------------------*/
|
||||
extern void CARME_Init(void);
|
||||
extern void CARME_GPIO_Init(CARME_Port_Pin_t *pPortPinAssociation,
|
||||
GPIO_InitTypeDef *pGPIO_InitStruct, uint8_t size);
|
||||
extern void CARME_AGPIO_Set(uint32_t write, uint32_t mask);
|
||||
extern void CARME_AGPIO_Get(uint32_t *pStatus);
|
||||
extern void CARME_LED_Green_Set(void);
|
||||
extern void CARME_LED_Green_Reset(void);
|
||||
extern void CARME_LED_Red_Set(void);
|
||||
extern void CARME_LED_Red_Reset(void);
|
||||
|
||||
/*----- Data ---------------------------------------------------------------*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/**
|
||||
* @}
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* __CARME_H__ */
|
||||
Reference in New Issue
Block a user