RabbitECUTeensyMCUXpresso/source/UserServices/TEPM.h

277 lines
7.6 KiB
C

/******************************************************************************/
/* TEPM header file */
/******************************************************************************/
/* */
/* Copyright (c) 2013 MD Automotive Controls. All rights reserved. */
/* */
/* */
/* */
/******************************************************************************/
#ifndef TEPM_H
#define TEPM_H
#include "IOAPI.h"
#include "TEPMAPI.h"
#include "SYSAPI.h"
#include "TEPMHA.h"
#define TEPM_nSoonCounts 80
#define TEPM_nSoonCountsLoose 250
#define TEPM_nFarCounts 0xe0000000
#define TEPM_SPEED
#define TEPM_SPEED_MK6X
#define TEPM_PRIO_INPUT_MK6X
#define TEPM_REENTRANCY_OFF
#define TEPM_REENTRANCY_HW_OFF
#ifdef BUILD_SPARKDOG_PF
#define TEPM_PRIO_RESOURCE EH_IO_TMR11
#endif //BUILD_SPARKDOG_PF
#ifdef BUILD_SPARKDOG_TEENSY_ADAPT
#define TEPM_PRIO_RESOURCE EH_IO_TMR10
#endif //BUILD_SPARKDOG_TEENSY_ADAPT
#ifdef BUILD_MK60
#define TEPM_nEventChannels 24u
#endif //BUILD_MK60
#ifdef BUILD_MK64
#define TEPM_nEventChannels 18u
#endif //BUILD_MK64
#define TEPM_nEventsMax 30u
#define TEPM_nMastersMax 1u
typedef enum
{
FTM_enFTM0,
FTM_enFTM1,
FTM_enFTM2,
FTM_enFTM3,
FTM_enFTMModuleCount
} FTM_tenFTMModule;
#ifdef BUILD_MK60
#define TEPM_nChannelInfo \
{ \
{EH_IO_TMR1, FTM_enFTM0, 7u, 4u}, \
{EH_IO_TMR2, FTM_enFTM0, 6u, 4u}, \
{EH_IO_TMR3, FTM_enFTM0, 5u, 4u}, \
{EH_IO_TMR4, FTM_enFTM0, 4u, 4u}, \
{EH_IO_TMR5, FTM_enFTM3, 3u, 4u}, \
{EH_IO_TMR6, FTM_enFTM3, 2u, 4u}, \
{EH_IO_TMR7, FTM_enFTM3, 1u, 4u}, \
{EH_IO_TMR8, FTM_enFTM3, 0u, 4u}, \
{EH_IO_TMR9, FTM_enFTM3, 4u, 6u}, \
{EH_IO_TMR10, FTM_enFTM3, 5u, 6u}, \
{EH_IO_TMR11, FTM_enFTM3, 6u, 6u}, \
{EH_IO_TMR12, FTM_enFTM3, 7u, 6u}, \
{EH_IO_TMR13, FTM_enFTM0, 3u, 4u}, \
{EH_IO_TMR14, FTM_enFTM0, 2u, 4u}, \
{EH_IO_TMR15, FTM_enFTM0, 1u, 4u}, \
{EH_IO_TMR16, FTM_enFTM0, 0u, 4u}, \
{EH_IO_ADSE4, FTM_enFTM1, 0u, 6u}, \
{EH_IO_GPSE9, FTM_enFTM1, 0u, 3u}, \
{EH_IO_GPSE8, FTM_enFTM1, 1u, 3u}, \
{EH_IO_ADSE5, FTM_enFTM2, 0u, 6u}, \
{EH_IO_GPSE7, FTM_enFTM2, 0u, 3u}, \
{EH_IO_CAN1T, FTM_enFTM2, 0u, 3u}, \
{EH_IO_CAN1R, FTM_enFTM2, 1u, 3u} \
}
#endif //BUILD_MK60
#ifdef BUILD_MK64
#define TEPM_nChannelInfo \
{ \
{EH_IO_TMR1, FTM_enFTM3, 0u, 0u, 3u}, \
{EH_IO_TMR2, FTM_enFTM0, 0u, 0u, 3u}, \
{EH_IO_TMR3, FTM_enFTM0, 1u, 0u, 3u}, \
{EH_IO_TMR4, FTM_enFTM0, 1u, 0u, 3u}, \
{EH_IO_TMR5, FTM_enFTM3, 4u, 0u, 3u}, \
{EH_IO_TMR6, FTM_enFTM3, 2u, 0u, 3u}, \
{EH_IO_TMR7, FTM_enFTM3, 3u, 0u, 3u}, \
{EH_IO_TMR8, FTM_enFTM0, 2u, 0u, 3u}, \
{EH_IO_TMR9, FTM_enFTM0, 3u, 0u, 3u}, \
{EH_IO_TMR10, FTM_enFTM0, 5u, 0u, 3u}, \
{EH_IO_TMR11, FTM_enFTM0, 6u, 0u, 3u}, \
{EH_IO_TMR12, FTM_enFTM3, 1u, 0u, 3u}, \
{EH_IO_TMR13, FTM_enFTM2, 0u, 0u, 3u}, \
{EH_IO_TMR14, FTM_enFTM2, 1u, 0u, 3u}, \
{EH_IO_TMR15, FTM_enFTM3, 4u, 0u, 2u}, \
{EH_IO_TMR16, FTM_enFTM3, 5u, 0u, 2u}, \
{EH_IO_TMR17, FTM_enFTM3, 6u, 0u, 2u}, \
{EH_IO_TMR18, FTM_enFTM3, 7u, 0u, 2u}, \
}
#endif //BUILD_MK60
#ifdef BUILD_MK60
#define TEPM_nChannelFastInfo \
{ \
{EH_IO_TMR16}, \
{EH_IO_TMR15}, \
{EH_IO_TMR14}, \
{EH_IO_TMR13}, \
{EH_IO_TMR4}, \
{EH_IO_TMR3}, \
{EH_IO_TMR2}, \
{EH_IO_TMR1} \
}
#endif //BUILD_MK60
#ifdef BUILD_MK64
#define TEPM_nChannelFastInfo \
{ \
{EH_IO_TMR2}, \
{EH_IO_TMR3}, \
{EH_IO_TMR8}, \
{EH_IO_TMR9}, \
{EH_IO_TMR5}, \
{EH_IO_TMR10}, \
{EH_IO_TMR11}, \
{EH_IO_Invalid}, \
{EH_IO_Invalid}, \
{EH_IO_Invalid}, \
{EH_IO_Invalid}, \
{EH_IO_Invalid}, \
{EH_IO_Invalid}, \
{EH_IO_Invalid}, \
{EH_IO_Invalid}, \
{EH_IO_Invalid}, \
{EH_IO_TMR13}, \
{EH_IO_TMR14}, \
{EH_IO_Invalid}, \
{EH_IO_Invalid}, \
{EH_IO_Invalid}, \
{EH_IO_Invalid}, \
{EH_IO_Invalid}, \
{EH_IO_Invalid}, \
{EH_IO_TMR1}, \
{EH_IO_TMR12}, \
{EH_IO_TMR6}, \
{EH_IO_TMR7}, \
{EH_IO_TMR15}, \
{EH_IO_TMR16}, \
{EH_IO_TMR17}, \
{EH_IO_TMR18}, \
}
#endif //BUILD_MK64
#ifdef BUILD_MK60
#define TEPM_nMasterInfo \
{ \
{EH_VIO_FTM0}, \
{EH_VIO_FTM0}, \
{EH_VIO_FTM0}, \
{EH_VIO_FTM0}, \
{EH_VIO_FTM3}, \
{EH_VIO_FTM3}, \
{EH_VIO_FTM3}, \
{EH_VIO_FTM3}, \
{EH_VIO_FTM3}, \
{EH_VIO_FTM3}, \
{EH_VIO_FTM3}, \
{EH_VIO_FTM3}, \
{EH_VIO_FTM0}, \
{EH_VIO_FTM0}, \
{EH_VIO_FTM0}, \
{EH_VIO_FTM0}, \
{EH_VIO_FTM1}, \
{EH_VIO_FTM1}, \
{EH_VIO_FTM1}, \
{EH_VIO_FTM2}, \
{EH_VIO_FTM2}, \
{EH_VIO_FTM2}, \
{EH_VIO_FTM2} \
}
#endif
#ifdef BUILD_MK64
#define TEPM_nMasterInfo \
{ \
{EH_VIO_FTM3}, \
{EH_VIO_FTM0}, \
{EH_VIO_FTM0}, \
{EH_VIO_FTM0}, \
{EH_VIO_FTM0}, \
{EH_VIO_FTM3}, \
{EH_VIO_FTM3}, \
{EH_VIO_FTM0}, \
{EH_VIO_FTM0}, \
{EH_VIO_FTM0}, \
{EH_VIO_FTM0}, \
{EH_VIO_FTM3}, \
{EH_VIO_FTM2}, \
{EH_VIO_FTM2}, \
{EH_VIO_FTM3}, \
{EH_VIO_FTM3}, \
{EH_VIO_FTM3}, \
{EH_VIO_FTM3} \
}
#endif
#define TEPM_xInitInterrupts(x) \
if (FTM0 == x){TEPM_vInitInterrupts(FTM0_IRQn);} \
if (FTM1 == x){TEPM_vInitInterrupts(FTM1_IRQn);} \
if (FTM2 == x){TEPM_vInitInterrupts(FTM2_IRQn);} \
if (FTM3 == x){TEPM_vInitInterrupts(FTM3_IRQn);} \
typedef struct
{
IOAPI_tenEHIOResource enEHIOResource;
TEPMAPI_ttEventTime tEventTime;
} TEPM_tstTEPMResult;
typedef struct
{
IOAPI_tenEHIOResource enEHIOResource;
TEPMHA_tenTimerModule enModule;
TEPMHA_tenModuleType enModuleType;
uint32 u32Channel;
uint32 u32SubChannel;
uint32 u32MuxSel;
IRQn_Type enIRQType;
} TEPM_tstTEPMChannel;
typedef struct
{
TEPMHA_tenTimerModule enModule;
uint32 u32Channel;
IOAPI_tenEHIOResource enEHIOResource;
} TEPM_tstTEPMReverseChannel;
typedef struct
{
IOAPI_tenEHIOResource enEHIOResource[TEPMHA_nMastersMax];
} TEPM_tstMasters;
void TEPM_vStart(puint32 const pu32Arg);
void TEPM_vRun(puint32 const pu32Arg);
void TEPM_vAsyncRequest(void);
IOAPI_tenEHIOResource TEPM_enGetPrimaryLinkedResource(void);
void TEMP_vTerminate(puint32 const pu32Arg);
SYSAPI_tenSVCResult TEPM_vInitTEPMResource(IOAPI_tenEHIOResource, TEPMAPI_tstTEPMResourceCB*);
uint32 TEPM_u32InitTEPMChannel(IOAPI_tenEHIOResource, TEPMAPI_tstTEPMChannelCB*, bool boPWMMode);
void TEPM_boGetMasterEHIOResourceList(IOAPI_tenEHIOResource, IOAPI_tenEHIOResource*, puint32);
void TEPM_vAppendTEPMQueue(IOAPI_tenEHIOResource, TEPMAPI_tstTimedUserEvent*, TEPMAPI_ttEventCount);
void TEPM_vConfigureKernelTEPMInput(IOAPI_tenEHIOResource, TEPMAPI_tstTimedKernelEvent*);
void TEPM_vConfigureKernelTEPMOutput(IOAPI_tenEHIOResource, TEPMAPI_tstTimedKernelEvent*, TEPMAPI_ttEventCount);
void TEPM_vConfigureUserTEPMInput(IOAPI_tenEHIOResource, TEPMAPI_tstTimedUserEvent*);
void TEPM_vInitiateUserCallBack(IOAPI_tenEHIOResource, TEPMAPI_ttEventTime);
void TEPM_vGetTimerVal(IOAPI_tenEHIOResource, puint32);
void TEPM_vInterruptHandler(IOAPI_tenEHIOResource, void*);
uint32 TEPM_u32GetFTMTableIndex(IOAPI_tenEHIOResource);
void TEPM_vStartEventProgramKernelQueues(bool, uint32);
void TEPM_vSynchroniseEventProgramKernelQueues(void);
IOAPI_tenTriState TEPM_enGetTimerDigitalState(IOAPI_tenEHIOResource);
void TEPM_vEnableSequences(bool boEnable);
uint32 TEPM_u32GetTimerVal(IOAPI_tenEHIOResource, void*);
void TEPM_vSetFuelCutsMask(uint32, uint32, uint32);
void TEPM_vSetSparkCutsMask(uint32, uint32, uint32);
#endif // TEPM_H