can.h 5.79 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167

#ifdef        GLOBALS_BSP_CAN
    #define   EXTERN_BSP_CAN
#else
    #define   EXTERN_BSP_CAN     extern
#endif

#ifndef BSP_CAN_H_
#define BSP_CAN_H_
    #include "stdint.h"

  

    
    #define     txResNum                 13 
    #define     U2_txResNum                 14 
    #define     txCommon                 15

    #define     MSG_EMPTY                   0
    #define     MSG_FULL                 1
                                  
    
    #define     SJW_1Tq                  0
    #define     SJW_2Tq                  1
    #define     SJW_3Tq                  2

    #define     SAMP_1                   0
    #define     Seg1_10Tq                9
    #define     Seg1_11Tq                10
    #define     Seg1_12Tq                11
    #define     Seg1_13Tq                12
    #define     Seg1_14Tq                13  
    #define     Seg1_8Tq                 7
    #define     Seg2_7Tq                 6
    #define     Seg2_8Tq                 7
    #define     Seg1_3Tq                 2
    #define     Seg1_4Tq                 3
    #define     Seg1_5Tq                 4
    #define     Seg1_6Tq                 5
    #define     Seg2_1Tq                 0
    #define     Seg2_2Tq                 1
    #define     Seg2_3Tq                 2
    #define     Seg2_4Tq                 3
    #define     Seg2_5Tq                 4
    #define     IDAM_2_32Bit             0
    #define     IDAM_4_16Bit             1
    #define     IDHIT0                   0
    #define     MSG_EMPOTY               0
    #define     MSG_FULL                 1

    #define     CanWakeUpEn              1
    #define     CanWakeUpDis             0  

    
    
    #define     success                  1
    #define     failt                    0 
    #define     CanON                    1
    #define     CanOFF                   0
      
    #define     ID280                    0x280  
    #define     ID2C0                    0x2C0     
    #define     ID392                    0x392    
    #define     ID350                    0x350    
    #define     ID51B                    0x51B     
    #define     ID380                    0x380      
    #define     ID320                    0x320     
    #define     ID301                    0x301    
    #define     ID440                    0x440     
    #define     ID360                    0x360     
    #define     ID515                    0x515  
    #define     ID600                    0x600
    #define     ID3E6                    0x3E6

/* ToDo: You can allocate the CTXD0 to P02 or P51 with PIOR33 register */
#define CTXD0_PORT_SETTING() do{ \
        PORT->PIOR3 &= ~(1 << 3);    /* allocate CTXD0 to P02 */ \
        PORT->P0    |=  (1 << 2);    /* P02 output high level */ \
        PORT->PM0   &= ~(1 << 2);    /* P02 is used as CTXD0 output */ \
        PORT->PMC0  &= ~(1 << 2);    /* P02 is digital function */ \
}while(0)

/* ToDo: You can allocate the CRXD0 to P03 or P50 with PIOR33 register */
#define CRXD0_PORT_SETTING() do{ \
        PORT->PIOR3 &= ~(1 << 3);    /* allocate CRXD0 to P03 */ \
        PORT->PM0   |=  (1 << 3);    /* P03 is used as CRXD0 input */ \
        PORT->PMC0  &= ~(1 << 3);    /* P03 is digital function */ \
}while(0)
    
//Format of CAN Module Control Register CTRL
#define CTRL_RSTA_READ 0x0200U
#define CTRL_TSTA_READ 0x0100U
#define CTRL_CCERC_READ 0x0080U
#define CTRL_AL_READ 0x0040U
#define CTRL_VALID_READ 0x0020U
#define CTRL_PSMODE_READ 0x0018U
#define CTRL_OPMODE_READ 0x0007U

#define CTRL_CCERC_CLR 0x0080U
#define CTRL_AL_CLR 0x0040U
#define CTRL_VALID_CLR 0x0020U

#define CTRL_CCERC_SET 0x8000U
#define CTRL_AL_SET 0x4000U

#define PSMODE_IDLE 0x0018U
#define PSMODE_SLEEP 0x0810U//0x0800U
#define PSMODE_STOP 0x1800U

#define OPMODE_IDLE 0x0007U
#define OPMODE_NORMAL 0x0106U//0x0100U
#define OPMODE_NORMAL_ABT 0x0205U//0x0200U
#define OPMODE_ONLY_RX 0x0304U//0x0300U
#define OPMODE_SHOT 0x0403U//0x0400U
#define OPMODE_TEST 0x0502U//0x0500U

//CAN module receive history list register RGPT
#define RGPT_RHPM_READ 0x0002U
#define RGPT_ROVF_READ 0x0001U

#define RGPT_ROVF_CLR 0x0001U

#define MCTRL_DN_CLR 0x0004U

//CAN module interrupt status register INTS
#define INTS_TX_READ 0x0001U
#define INTS_RX_READ 0x0002U
#define INTS_ERR_READ 0x0004U
#define INTS_PERR_READ 0x0008U
#define INTS_AL_READ 0x0010U
#define INTS_WK_READ 0x0020U


#define INTS_TX_CLR 0x0001U
#define INTS_RX_CLR 0x0002U
#define INTS_ERR_CLR 0x0004U
#define INTS_PERR_CLR 0x0008U
#define INTS_AL_CLR 0x0010U
#define INTS_WK_CLR 0x0020U

typedef enum
{
    Canm_BusOk = 0,
    Canm_ActiveErr,
    Canm_PassiveErr,
    Canm_busoff,
}CanState_t;

    EXTERN_BSP_CAN	    void	    bsp_CAN_Init(void);
    EXTERN_BSP_CAN          uint8_t         bsp_CANSendFrame(uint32_t id,uint8_t buff_num,uint8_t *txdata,uint8_t length);
    EXTERN_BSP_CAN          void            bsp_CAN_Msgbuf_init(void);
    EXTERN_BSP_CAN          void            bsp_tx_msgbuf_init(uint8_t buffer_number,uint32_t tx_msg_ID,uint8_t tx_msg_DLC);
    EXTERN_BSP_CAN          void            bsp_rx_msgbuf_init(uint8_t buf_num,uint32_t id,uint8_t MaskReg_n);
    
    EXTERN_BSP_CAN          void            bsp_tx_msgbuf_abort(uint8_t buffer_number);
    EXTERN_BSP_CAN          void            bsp_CAN_Sleep(void);
    EXTERN_BSP_CAN          void            bsp_CAN_SleepRelease(void);
    EXTERN_BSP_CAN          void            bsp_CAN_BusOff_Recover(void);    
    EXTERN_BSP_CAN          CanState_t      GetBusOffState(void);
    EXTERN_BSP_CAN          uint8_t         CAN0_Get_Wake_Up_Flag ( void );
    EXTERN_BSP_CAN          uint8_t         CanSendLock;
    EXTERN_BSP_CAN  volatile    uint8_t                   g_bReturn;  
    EXTERN_BSP_CAN          uint8_t Get_CH0_BusOffStatus(void);
    EXTERN_BSP_CAN          uint8_t bsp_Is_CAN_Sleep(void);
    EXTERN_BSP_CAN          void bsp_CAN_MaskCheck(void);
    
#endif /* BSP_CAN_H_ */