RabbitECUTeensyMCUXpresso/source/Peripherals/IICHA.h

187 lines
5.8 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 IICHA_H
#define IICHA_H
#include <string.h>
#include "CPUAbstract.h"
#include "declarations.h"
#include "DLL.h"
#include "IOAPI.h"
#include "MATH.h"
#include "OS.h"
#include "PIM.h"
#include "PIMAPI.h"
#include "regset.h"
#include "RESM.h"
#include "SIM.h"
#include "SRLTFR.h"
#include "sys.h"
#include "types.h"
#ifdef BUILD_MK60
#define IICHA_nReg8SetIIC0 \
{ \
{ (volatile uint8*)(I2C0_BASE + offsetof(I2C_Type, C1)), (uint8)I2C_C1_IICEN_MASK, REGSET_enOverwrite }, \
{ NULL, 0, REGSET_enOverwrite } \
};
#endif //BUILD_MK60
#ifdef BUILD_MK64
#define IICHA_nReg8SetIIC0 \
{ \
{ (volatile uint8*)(I2C0_BASE + offsetof(I2C_Type, C1)), (uint8)I2C_C1_IICEN_MASK, REGSET_enOverwrite }, \
{ NULL, 0, REGSET_enOverwrite } \
};
#endif //BUILD_MK64
#ifdef BUILD_SAM3X8E
#define IICHA_nReg8SetIIC0 \
{ \
{ NULL, 0, REGSET_enOverwrite } \
};
#endif //BUILD_SAM3X8E
#ifdef BUILD_MK60
#define IICHA_nReg8SetIIC1 \
{ \
{ (volatile uint8*)(I2C1_BASE + offsetof(I2C_Type, C1)), (uint8)I2C_C1_IICEN_MASK, REGSET_enOverwrite }, \
{ NULL, 0, REGSET_enOverwrite } \
};
#endif //BUILD_MK60
#ifdef BUILD_MK64
#define IICHA_nReg8SetIIC1 \
{ \
{ (volatile uint8*)(I2C1_BASE + offsetof(I2C_Type, C1)), (uint8)I2C_C1_IICEN_MASK, REGSET_enOverwrite }, \
{ NULL, 0, REGSET_enOverwrite } \
};
#endif //BUILD_MK64
#ifdef BUILD_SAM3X8E
#define IICHA_nReg8SetIIC1 \
{ \
{ NULL, 0, REGSET_enOverwrite } \
};
#endif //BUILD_SAM3X8E
#define IICHA_nDivisorMap \
{ \
{20, 7}, \
{22, 7}, \
{24, 8}, \
{26, 8}, \
{28, 9}, \
{30, 9}, \
{34, 10}, \
{40, 10}, \
{28, 7}, \
{32, 7}, \
{36, 9}, \
{40, 9}, \
{44, 11}, \
{48, 11}, \
{56, 13}, \
{68, 13}, \
{48, 9}, \
{56, 9}, \
{64, 13}, \
{72, 13}, \
{80, 17}, \
{88, 17}, \
{104, 21}, \
{128, 21}, \
{80, 9}, \
{96, 9}, \
{112, 17}, \
{128, 17}, \
{144, 25}, \
{160, 25}, \
{192, 33}, \
{240, 33}, \
{160, 17}, \
{192, 17}, \
{224, 33}, \
{256, 33}, \
{288, 49}, \
{320, 49}, \
{384, 65}, \
{480, 65}, \
{320, 33}, \
{384, 33}, \
{448, 65}, \
{512, 65}, \
{576, 97}, \
{640, 97}, \
{768, 129}, \
{960, 129}, \
{640, 65}, \
{768, 65}, \
{896, 129}, \
{1024, 129}, \
{1152, 193}, \
{1280, 193}, \
{1536, 257}, \
{1920, 257}, \
{1280, 129}, \
{1536, 129}, \
{1792, 257}, \
{2048, 257}, \
{2304, 385}, \
{2560, 385}, \
{3072, 513}, \
{3840, 513} \
}
#define IIC_xRequestPortClock(x) \
/* turn on clock */ \
SIM_vSetReg32(SIM_SCGC4, x); \
IIC_u32PortClockRequested |= x
#define IIC_xCalcDivisor \
for (u32DivMapIDX = 0; \
u32DivMapIDX < (sizeof(IIC_rastDivisorMap) / sizeof(IIC_tstDivisorMap)); \
u32DivMapIDX++) \
{ \
u32Div = u32DivMapIDX; \
if (IIC_rastDivisorMap[u32DivMapIDX].u32SCLDivider > u32DivCalc) break; \
}
typedef struct
{
uint32 u32SCLDivider;
uint32 u32SDAHold;
} IICHA_tstDivisorMap;
#ifdef BUILD_MK60
typedef I2C_Type tstI2CModule;
#endif //BUILD_MK60
#ifdef BUILD_MK64
typedef I2C_Type tstI2CModule;
#endif //BUILD_MK64
#ifdef BUILD_SAM3X8E
typedef Twi tstI2CModule;
#endif //BUILD_SAM3X8E
void IICHA_vStart(puint32 const);
void IICHA_vRun(puint32 const);
void IICHA_vTerminate(puint32 const);
SYSAPI_tenSVCResult IICHA_enInitBus(IOAPI_tenEHIOResource, IOAPI_tstPortConfigCB*);
void IICHA_vInitTransfer(IOAPI_tstTransferCB*);
void IICHA_vInterrupt(IOAPI_tenEHIOResource);
#endif //IICHA_H