RabbitECUTeensyMCUXpresso/source/KernelServices/PIMHA.h

171 lines
6.4 KiB
C

/******************************************************************************/
/* Copyright (c) 2016 MD Automotive Controls. Original Work. */
/* License: http://www.gnu.org/licenses/gpl.html GPL version 2 or higher */
/******************************************************************************/
/* CONTEXT:KERNEL */
/* PACKAGE TITLE: XXX Header File */
/* DESCRIPTION: XXX */
/* FILE NAME: XXX.h */
/* REVISION HISTORY: 19-08-2016 | 1.0 | Initial revision */
/* */
/******************************************************************************/
#ifndef PIMHA_H
#define PIMHA_H
#include <stddef.h>
#include "CPUAbstract.h"
#include "declarations.h"
#include "PIMAPI.h"
#include "build.h"
#ifdef BUILD_SAM3X8E
#include "pio.h"
#endif
#include "IOAPI.h"
#include "types.h"
#if defined(BUILD_MK60)
typedef PORT_Type tstPortModule;
typedef GPIO_Type tstGPIOModule;
#endif //BUILD_MK60
#if defined(BUILD_MK64)
typedef PORT_Type tstPortModule;
typedef GPIO_Type tstGPIOModule;
#include "mk64f12.h"
#endif //BUILD_MK64
#ifdef BUILD_SAM3X8E
typedef Pio tstGPIOModule;
#endif
#ifdef BUILD_MK60
#define PIMHA_nReg32Set \
{ \
{ (volatile uint32*)(PORTB_BASE + offsetof(PORT_Type, PCR[16])), (uint32)PORT_PCR_MUX(3), REGSET_enOr }, \
{ (volatile uint32*)(PORTB_BASE + offsetof(PORT_Type, PCR[17])), (uint32)PORT_PCR_MUX(3), REGSET_enOr }, \
{ (volatile uint32*)(PORTC_BASE + offsetof(PORT_Type, PCR[16])), (uint32)PORT_PCR_MUX(3), REGSET_enOverwrite }, \
{ (volatile uint32*)(PORTC_BASE + offsetof(PORT_Type, PCR[17])), (uint32)PORT_PCR_MUX(3), REGSET_enOverwrite }, \
{ (volatile uint32*)(PORTE_BASE + offsetof(PORT_Type, PCR[24])), (uint32)PORT_PCR_MUX(2), REGSET_enOverwrite }, \
{ (volatile uint32*)(PORTE_BASE + offsetof(PORT_Type, PCR[25])), (uint32)PORT_PCR_MUX(2), REGSET_enOverwrite }, \
{ NULL, 0, REGSET_enOverwrite} \
};
#endif //BUILD_MK60
#ifdef BUILD_MK64
#define PIMHA_nReg32Set \
{ \
{ (volatile uint32*)(PORTB_BASE + offsetof(PORT_Type, PCR[16])), (uint32)PORT_PCR_MUX(3), REGSET_enOr }, \
{ (volatile uint32*)(PORTB_BASE + offsetof(PORT_Type, PCR[17])), (uint32)PORT_PCR_MUX(3), REGSET_enOr }, \
{ (volatile uint32*)(PORTC_BASE + offsetof(PORT_Type, PCR[16])), (uint32)PORT_PCR_MUX(3), REGSET_enOverwrite }, \
{ (volatile uint32*)(PORTC_BASE + offsetof(PORT_Type, PCR[17])), (uint32)PORT_PCR_MUX(3), REGSET_enOverwrite }, \
{ (volatile uint32*)(PORTE_BASE + offsetof(PORT_Type, PCR[24])), (uint32)PORT_PCR_MUX(2), REGSET_enOverwrite }, \
{ (volatile uint32*)(PORTE_BASE + offsetof(PORT_Type, PCR[25])), (uint32)PORT_PCR_MUX(2), REGSET_enOverwrite }, \
{ NULL, 0, REGSET_enOverwrite} \
};
#endif //BUILD_MK64
#ifdef BUILD_SAM3X8E
#define PIMHA_nReg32Set \
{ \
{ NULL, 0, REGSET_enOverwrite} \
};
#endif //BUILD_SAM3X8E
#if defined(BUILD_MK60) || defined(BUILD_MK64)
#define PIMHA_nPortPointerMap \
{ \
PORTA, \
PORTB, \
PORTC, \
PORTD, \
PORTE \
}
#endif //BUILD_MK60
#ifdef BUILD_SAM3X8E
#define PIMHA_nPortPointerMap \
{ \
{PIOA}, \
{PIOB}, \
{PIOC}, \
{PIOD} \
}
#endif //BUILD_SAM3X8E
#if defined(BUILD_MK60) || defined(BUILD_MK64)
#define PIMHA_nGPIOPointerMap \
{ \
PTA, \
PTB, \
PTC, \
PTD, \
PTE \
}
#endif //BUILD_MK6X
#ifdef BUILD_SAM3X8E
#define PIMHA_nGPIOPointerMap \
{ \
{PIOA}, \
{PIOB}, \
{PIOC}, \
{PIOD}, \
{PIOD} \
}
#endif
#if defined(BUILD_MK60) || defined(BUILD_MK64)
#define PIMHA_nPortClockMasks \
{ \
SIM_SCGC5_PORTA_MASK, \
SIM_SCGC5_PORTB_MASK, \
SIM_SCGC5_PORTC_MASK, \
SIM_SCGC5_PORTD_MASK, \
SIM_SCGC5_PORTE_MASK \
}
#endif //BUILD_MK6X
/* The clock bit is borrowed from the IRQ# */
#ifdef BUILD_SAM3X8E
#define PIMHA_nPortClockMasks \
{ \
PIOA_IRQn, \
PIOB_IRQn, \
PIOC_IRQn, \
PIOD_IRQn \
}
#endif //BUILD_MK60
#ifdef BUILD_MK60
#define PIMHA_xRequestPortClock(x) \
/* turn on PORTA clock */ \
SIM_vSetReg32(SIM_SCGC5, x); \
PIM_u32PortClockRequested |= x
#endif //BUILD_MK60
#ifdef BUILD_MK64
#define PIMHA_xRequestPortClock(x) \
/* turn on PORTA clock */ \
SIM_vSetReg32(SIM_SCGC5, x); \
PIM_u32PortClockRequested |= x
#endif //BUILD_MK64
#ifdef BUILD_SAM3X8E
#define PIMHA_xRequestPortClock(x) SIMHA_boEnablePeripheralClock(x)
#endif //BUILD_SAM3X8E
void PIMHA_vStart(uint32* const);
void PIMHA_vRun(uint32* const);
void PIMHA_vTerminate(uint32* const);
void PIMHA_vInitPortBit(PIMAPI_tenPort, IOAPI_tenEHIOType, uint32);
void PIMHA_vAssertPortBit(PIMAPI_tenPort, uint32, IOAPI_tenTriState);
void PIMHA_vSetPortMux(PIMAPI_tenPort, IOAPI_tenEHIOType, uint32, uint32);
bool PIMHA_boGetPortBitState(PIMAPI_tenPort, uint32);
#endif //PIMHA_H