RabbitECUTeensyMCUXpresso/source/Peripherals/CANHA.h

136 lines
3.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: CANHA Header File */
/* DESCRIPTION: CAN Hardware Adaption */
/* FILE NAME: CANHA.h */
/* REVISION HISTORY: 19-08-2016 | 1.0 | Initial revision */
/* */
/******************************************************************************/
#ifndef CANHA_H
#define CANHA_H
#include "types.h"
#include "IOAPI.h"
#include "SYSAPI.h"
#define CANHA_nSetTimingData \
{ \
{ 33333, 59, 10, 7, 2 }, \
{ 50000, 58, 7, 7, 2 }, \
{ 62500, 49, 7, 6, 2 }, \
{ 83333, 49, 5, 4, 2 }, \
{ 100000, 49, 4, 3, 2 }, \
{ 125000, 24, 7, 6, 2 }, \
{ 250000, 9, 10, 7, 2 }, \
{ 500000, 3, 3, 1, 1 }, \
{ 1000000, 4, 6, 1, 1 } \
}
#define CAN_nCANModules 2
#define CAN_nInRingBuffSize 16u
#define CAN_nCANMailboxCount 16u
#define CAN_nCANRXMailboxCount 12u
#define CAN_nCANMBXInactive1 0x00
#define CAN_nCANMBXBusy 0x01
#define CAN_nCANMBXFull 0x02
#define CAN_nCANMBXEmpty 0x04
#define CAN_nCANMBXOverrun 0x06
#define CAN_nCANMBXInactive2 0x08
#define CAN_nCANMBXAbort 0x09
#define CAN_nCANMBXRAnswer 0x0A
#define CAN_nCANMBXData 0x0C
#define CAN_nCANMBXTAnswer 0x0E
#define CANHA_nCANIDSTDSHIFT 18
typedef struct
{
uint32 u32BitRate;
uint8 u8PRESDIV;
uint8 u8TSEG1;
uint8 u8TSEG2;
uint8 u8SJW;
} CANHA_tstTimingSettings;
typedef struct
{
uint32 biTimestamp : 16;
uint32 biDLC : 4;
uint32 biRTR : 1;
uint32 biIDE : 1;
uint32 biSRR : 1;
uint32 biCAN : 1;
uint32 biTimestampHighNibble : 4;
uint32 biChannel : 4;
} CANHA_tstCANCS;
#ifdef BUILD_MK60
typedef struct
{
uint32 u32CS;
uint32 u32ID;
uint32 u32DWH;
uint32 u32DWL;
} CANHA_tstCANMB;
#endif //BUILD_MK60
#ifdef BUILD_MK64
typedef struct
{
uint32 u32CS;
uint32 u32ID;
uint32 u32DWH;
uint32 u32DWL;
} CANHA_tstCANMB;
#endif //BUILD_MK64
#ifdef BUILD_SAM3X8E
typedef struct
{
uint32 u32MR;
uint32 u32AM;
uint32 u32ID;
uint32 u32FID;
uint32 u32CS;
uint32 u32DWL;
uint32 u32DWH;
uint32 u32CR;
} CANHA_tstCANMB;
#endif //BUILD_SAM3X8E
#ifdef BUILD_MK60
#include "mk60f12.h"
typedef CAN_Type tstCANModule;
#endif //BUILD_MK60
#ifdef BUILD_MK64
#include "mk64f12.h"
typedef CAN_Type tstCANModule;
#endif //BUILD_MK64
#ifdef BUILD_SAM3X8E
#include "sam3xa.h"
typedef Can tstCANModule;
#define CAN_MB_TYPE_NDIS 0
#define CAN_MB_TYPE_RX 1
#define CAN_MB_TYPE_TX 3
#endif
void CANHA_vStart(uint32* const);
void CANHA_vRun(uint32* const);
void CANHA_vTerminate(uint32* const);
void CANHA_vInitTransfer(IOAPI_tstTransferCB*);
uint32 CANHA_u32InitBus(IOAPI_tenEHIOResource, IOAPI_tstPortConfigCB*);
bool CANHA_boReadMB(tstCANModule*, CANHA_tstCANMB*);
void CANHA_vInterrupt(IOAPI_tenEHIOResource);
#endif //CANHA_H