123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- //==============================================================================
- // Purpose: allgemeines CAN Interface für FlexCAN von MPC5646
- //
- // Created on: 20.04.2012 by IPE
- //
- // History
- // 20.04.2012 neu, T.Maurer
- //==============================================================================
- #ifndef __FLEXCAN_H__
- #define __FLEXCAN_H__
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- // Constants
- #define CAN_DATA_ARR_LEN 8 //Max Anzahl der Datenbytes der CAN-Schittstelle
- //==============================================================================
- //== API ==
- //Return-Werte der Funktionen
- #define CAN_OK 0
- #define CAN_ERROR -1
- // Globale Datentypen
- //CAN_CONFIG
- //Konfiguration des CAN-Moduls
- typedef struct {
- volatile struct FLEXCAN_tag *CAN_Modul; //Adresse des FlexCAN-Moduls
- enum {CAN0_PortB0_1=0, CAN1_PortC10_11, CAN2_PortE8_9, CAN3_PortF8_9 } Port; //Auswahl der Rx/Tx-Port-Pins für ein CAN-Modul
- enum {TxPushPull=0,Tx_OpenDrain} TxPortType; //Tx Pin wird als Push-Pull (CMOS) oder Open-Drain konfiguriert
- enum {RxMask_Global=0,RxMask_Individual} RxMaskType; //Auswahl zwischen globaler RxMaske oder individueller RxMaske
- uint32_t GlobalRxMask; //globale RxMaske des Moduls; nur von Bedeutung wenn in RxMaskType "RxMask_Global" ausgewählt
- enum {CANBaud_1000kHz_OSC_40MHz=0, CANBaud_500kHz_OSC_40MHz, CANBaud_250kHz_OSC_40MHz, CANBaud_125kHz_OSC_40MHz} BaudConfig;
- } CAN_CONFIG;
- //CAN_MAILBOX
- //Konfiguration und ID der MessageBox
- typedef struct {
- CAN_CONFIG *p_CAN_Config;
- uint8_t MBNumber; //Message Buffer Number, 0..63
- enum {MB_Tx,MB_Rx} Direction;
- uint8_t RemoteEn; //Remote Frame Transmission Ein, aktiviert den RTR-Modus der MB
- uint8_t DataBytes; //Anzahl der Datenbytes, max=8
- uint8_t Interrupt; //Empfang oder Senden generiert einen Interrupt
- uint32_t AcceptMask; //individuelle RxMaske der MsgBox; ohne Bedeutung,wenn in CAN_CONFIG RxMask_Global oder wenn es eine Tx-MB ist
- enum {SHORT_ID, LONG_ID} IDE;
- uint32_t ID; //ID : Rx -> ID oder maskierte ID zur CAN-Nachrichten-Filterung. Nur die in AcceptMask/GlobalRxMask selektierten Bits werden beachtet
- } CAN_MAILBOX;
- // Global functions
- extern int8_t CAN_Init(CAN_CONFIG *config);
- //Initialisierung der Kontrollregister des CAN-Moduls
- //return: CAN_OK oder CAN_ERROR
- extern int8_t CAN_Init_Mailbox(CAN_MAILBOX *mbox);
- //Initialisierung der Message-Buffer und ihrer Einstellungen
- //return: CAN_OK oder CAN_ERROR
- extern int8_t CAN_Write(CAN_MAILBOX *mbox, uint8_t *data);
- //schreiben auf einen Tx-MessageBuffer
- //return: CAN_OK oder CAN_ERROR
- extern int8_t CAN_Write_dataset(CAN_MAILBOX *mbox, uint8_t* data,uint64_t timestamp);
- extern int8_t CAN_Read(CAN_MAILBOX *mbox, uint8_t *data);
- //lesen von einem Message-Buffer
- //return: CAN_OK oder CAN_ERROR
- extern int8_t CAN_Abort(CAN_MAILBOX *mbox);
- //Abbruch eines Sende-Prozesses
- //Gibt CAN_ERROR zurück, wenn mbox eine Rx-MB ist
- extern uint8_t CAN_Get_error_Register(CAN_CONFIG *config,uint32_t* can_esr);
- extern int8_t CAN_Check_error_Register(CAN_CONFIG *config) ;
- //==============================================================================
- #ifdef __cplusplus
- }
- #endif
- #endif /* ifndef*/
|