165 lines
4.9 KiB
C
165 lines
4.9 KiB
C
|
|
/*******************************************************************************
|
||
|
|
* Copyright © 2019 TRINAMIC Motion Control GmbH & Co. KG
|
||
|
|
* (now owned by Analog Devices Inc.),
|
||
|
|
*
|
||
|
|
* Copyright © 2023 Analog Devices Inc. All Rights Reserved. This software is
|
||
|
|
* proprietary & confidential to Analog Devices, Inc. and its licensors.
|
||
|
|
*******************************************************************************/
|
||
|
|
|
||
|
|
|
||
|
|
#ifndef _IO_H_
|
||
|
|
#define _IO_H_
|
||
|
|
|
||
|
|
// #include "derivative.h"
|
||
|
|
|
||
|
|
typedef enum { // Give bits explicitly, because IDE relies on it.
|
||
|
|
IOS_LOW = 0b00,
|
||
|
|
IOS_HIGH = 0b01,
|
||
|
|
IOS_OPEN = 0b10,
|
||
|
|
IOS_NOCHANGE = 0b11
|
||
|
|
} IO_States;
|
||
|
|
|
||
|
|
#if defined(Landungsbruecke) || defined(LandungsbrueckeSmall)
|
||
|
|
// use ST like configuration structures also for Landungsbruecke
|
||
|
|
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
GPIO_Mode_AN = 0x00, /*!< GPIO Analog Mode, Pin disabled */
|
||
|
|
GPIO_Mode_AF1 = 0x01, /*!< GPIO Alternate function Mode GPIO*/
|
||
|
|
GPIO_Mode_AF2 = 0x02, /*!< GPIO Alternate function Mode*/
|
||
|
|
GPIO_Mode_AF3 = 0x03, /*!< GPIO Alternate function Mode*/
|
||
|
|
GPIO_Mode_AF4 = 0x04, /*!< GPIO Alternate function Mode*/
|
||
|
|
GPIO_Mode_AF5 = 0x05, /*!< GPIO Alternate function Mode*/
|
||
|
|
GPIO_Mode_AF6 = 0x06, /*!< GPIO Alternate function Mode*/
|
||
|
|
GPIO_Mode_AF7 = 0x07, /*!< GPIO Alternate function Mode*/
|
||
|
|
GPIO_Mode_IN = 0x08, /*!< GPIO Input Mode */
|
||
|
|
GPIO_Mode_OUT = 0x09 /*!< GPIO Output Mode */
|
||
|
|
} GPIOMode_TypeDef;
|
||
|
|
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
GPIO_OType_PP = 0x00,
|
||
|
|
GPIO_OType_OD = 0x01
|
||
|
|
} GPIOOType_TypeDef;
|
||
|
|
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
GPIO_PuPd_NOPULL = 0x00,
|
||
|
|
GPIO_PuPd_UP = 0x01,
|
||
|
|
GPIO_PuPd_DOWN = 0x02
|
||
|
|
} GPIOPuPd_TypeDef;
|
||
|
|
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
GPIO_Speed_2MHz = 0x00, /*!< Low speed */
|
||
|
|
GPIO_Speed_25MHz = 0x01, /*!< Medium speed */
|
||
|
|
GPIO_Speed_50MHz = 0x02, /*!< Fast speed */
|
||
|
|
GPIO_Speed_100MHz = 0x03 /*!< High speed on 30 pF (80 MHz Output max speed on 15 pF) */
|
||
|
|
} GPIOSpeed_TypeDef;
|
||
|
|
|
||
|
|
#include "hal/Landungsbruecke/freescale/PDD/GPIO_PDD.h"
|
||
|
|
#elif defined(LandungsbrueckeV3)
|
||
|
|
// typedef enum
|
||
|
|
// {
|
||
|
|
// GPIO_MODE_INPUT = 0x00, /*!< GPIO Input Mode */
|
||
|
|
// GPIO_MODE_OUTPUT = 0x01, /*!< GPIO Output Mode */
|
||
|
|
// GPIO_MODE_AF = 0x02, /*!< GPIO Alternate function Mode*/
|
||
|
|
// GPIO_MODE_ANALOG = 0x03, /*!< GPIO Analog Mode*/
|
||
|
|
// } GPIOMode_TypeDef;
|
||
|
|
//
|
||
|
|
// typedef enum
|
||
|
|
// {
|
||
|
|
// GPIO_OTYPE_PP = 0x00,
|
||
|
|
// GPIO_OTYPE_OD = 0x01
|
||
|
|
// } GPIOOType_TypeDef;
|
||
|
|
//
|
||
|
|
// typedef enum
|
||
|
|
// {
|
||
|
|
// GPIO_PUPD_NONE = 0x00,
|
||
|
|
// GPIO_PUPD_PULLUP = 0x01,
|
||
|
|
// GPIO_PUPD_PULLDOWN = 0x02
|
||
|
|
// } GPIOPuPd_TypeDef;
|
||
|
|
//
|
||
|
|
// typedef enum
|
||
|
|
// {
|
||
|
|
// GPIO_OSPEED_2MHZ = 0x00, /*!< Low speed */
|
||
|
|
// GPIO_OSPEED_25MHZ = 0x01, /*!< Medium speed */
|
||
|
|
// GPIO_OSPEED_50MHZ = 0x02, /*!< Fast speed */
|
||
|
|
// GPIO_OSPEED_MAX = 0x03 /*!< GPIO very high output speed, max speed more than 50MHz */
|
||
|
|
// } GPIOSpeed_TypeDef;
|
||
|
|
typedef uint32_t GPIOMode_TypeDef;
|
||
|
|
typedef uint32_t GPIOOType_TypeDef;
|
||
|
|
typedef uint32_t GPIOPuPd_TypeDef;
|
||
|
|
typedef uint32_t GPIOSpeed_TypeDef;
|
||
|
|
|
||
|
|
|
||
|
|
#endif
|
||
|
|
|
||
|
|
|
||
|
|
enum IOsHighLevelFunctions { IO_DEFAULT, IO_DI, IO_AI, IO_DO, IO_PWM, IO_SD, IO_CLK16, IO_SPI };
|
||
|
|
|
||
|
|
typedef struct
|
||
|
|
{
|
||
|
|
const uint8_t DEFAULT;
|
||
|
|
const uint8_t DI;
|
||
|
|
const uint8_t AI;
|
||
|
|
const uint8_t DO;
|
||
|
|
const uint8_t PWM;
|
||
|
|
const uint8_t SD;
|
||
|
|
const uint8_t CLK16;
|
||
|
|
const uint8_t SPI;
|
||
|
|
} IOsHighLevelFunctionTypeDef;
|
||
|
|
|
||
|
|
typedef struct
|
||
|
|
{
|
||
|
|
GPIOMode_TypeDef GPIO_Mode;
|
||
|
|
GPIOSpeed_TypeDef GPIO_Speed;
|
||
|
|
GPIOOType_TypeDef GPIO_OType;
|
||
|
|
GPIOPuPd_TypeDef GPIO_PuPd;
|
||
|
|
} IOPinInitTypeDef;
|
||
|
|
|
||
|
|
typedef struct
|
||
|
|
{
|
||
|
|
#if defined(LandungsbrueckeV3)
|
||
|
|
uint32_t port;
|
||
|
|
volatile uint32_t *setBitRegister;
|
||
|
|
volatile uint32_t *resetBitRegister;
|
||
|
|
#elif defined(Landungsbruecke) || defined(LandungsbrueckeSmall)
|
||
|
|
PORT_MemMapPtr portBase;
|
||
|
|
GPIO_MemMapPtr GPIOBase;
|
||
|
|
volatile uint32_t *setBitRegister;
|
||
|
|
volatile uint32_t *resetBitRegister;
|
||
|
|
#endif
|
||
|
|
uint32_t bitWeight;
|
||
|
|
unsigned char bit;
|
||
|
|
IOPinInitTypeDef configuration;
|
||
|
|
IOPinInitTypeDef resetConfiguration;
|
||
|
|
enum IOsHighLevelFunctions highLevelFunction;
|
||
|
|
IO_States state;
|
||
|
|
} IOPinTypeDef;
|
||
|
|
|
||
|
|
typedef struct
|
||
|
|
{
|
||
|
|
void (*set)(IOPinTypeDef *pin);
|
||
|
|
void (*copy)(IOPinInitTypeDef *from, IOPinTypeDef*to);
|
||
|
|
void (*reset)(IOPinTypeDef *pin);
|
||
|
|
void (*toOutput)(IOPinTypeDef *pin);
|
||
|
|
void (*toInput)(IOPinTypeDef *pin);
|
||
|
|
|
||
|
|
void (*setHigh)(IOPinTypeDef *pin);
|
||
|
|
void (*setLow)(IOPinTypeDef *pin);
|
||
|
|
void (*setToState)(IOPinTypeDef *pin, IO_States state);
|
||
|
|
IO_States (*getState)(IOPinTypeDef *pin);
|
||
|
|
unsigned char (*isHigh)(IOPinTypeDef *pin);
|
||
|
|
void (*init)(void);
|
||
|
|
IOsHighLevelFunctionTypeDef HIGH_LEVEL_FUNCTIONS;
|
||
|
|
} IOsTypeDef;
|
||
|
|
|
||
|
|
extern IOsTypeDef IOs;
|
||
|
|
|
||
|
|
// A bit weight of 0 is used to indicate a nonexistent pin
|
||
|
|
#define DUMMY_BITWEIGHT 0
|
||
|
|
#define IS_DUMMY_PIN(pin) (pin->bitWeight == DUMMY_BITWEIGHT)
|
||
|
|
|
||
|
|
#endif /* _IO_H_ */
|