⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csp_can.h

📁 IAR 平台ATMEL 的例程, 和说明
💻 H
📖 第 1 页 / 共 2 页
字号:
#define PHSEG2(val)  (((val) & 0x07ul) << 20)   /* Writing Macro             */    

/******************************************************************************
* CSR, SR, IER, IDR, IMR : CAN Status and Interrupt Registers
******************************************************************************/
#define ENDINIT      (0x01ul << 2)              /* End of CAN Initialization */

/* SR, IER, IDR, IMR Registers Only                                          */
#define ERPAS        (0x01ul << 3)              /* Error Passive             */
#define BUSOFF       (0x01ul << 4)              /* Bus Off                   */

/* SR Register Only                                                          */
#define CANENA       (0x01ul << 0)              /* CAN Enable                */
#define CANINIT      (0x01ul << 1)              /* CAN Initialized           */
#define ABRQ         (0x01ul << 5)              /* CAN Abort Request         */
#define OVRQ         (0x01ul << 6)              /* CAN Overload Request      */
#define ISS          (0x01ul << 7)              /* Interrupt Source Status   */
#define REC          (0xFFul << 16)             /* Reception Error Counter   */
#define TEC          (0xFFul << 24)             /* Transmit Error Counter    */

/******************************************************************************
* CISR, ISSR, SIER, SIDR, SIMR : CAN Interrupt Source Registers
******************************************************************************/
#define CH0          (0x01ul << 0)              /* Interrupt channel 0       */
#define CH1          (0x01ul << 1)              /* Interrupt channel 1       */
#define CH2          (0x01ul << 2)              /* Interrupt channel 2       */
#define CH3          (0x01ul << 3)              /* Interrupt channel 3       */
#define CH4          (0x01ul << 4)              /* Interrupt channel 4       */
#define CH5          (0x01ul << 5)              /* Interrupt channel 5       */
#define CH6          (0x01ul << 6)              /* Interrupt channel 6       */
#define CH7          (0x01ul << 7)              /* Interrupt channel 7       */
#define CH8          (0x01ul << 8)              /* Interrupt channel 8       */
#define CH9          (0x01ul << 9)              /* Interrupt channel 9       */
#define CH10         (0x01ul << 10)             /* Interrupt channel 10      */
#define CH11         (0x01ul << 11)             /* Interrupt channel 11      */
#define CH12         (0x01ul << 12)             /* Interrupt channel 12      */
#define CH13         (0x01ul << 13)             /* Interrupt channel 13      */
#define CH14         (0x01ul << 14)             /* Interrupt channel 14      */
#define CH15         (0x01ul << 15)             /* Interrupt channel 15      */

/******************************************************************************
* MSK : CAN Mask Register Channel X
******************************************************************************/
/* MASK : Identifier Mask                                                    */
#define MASK_MASK    (0x1FFFFFFFul << 0)           /* Mask                   */
#define MASK(val)    (((val) & 0x1FFFFFFFul) << 0) /* Writing Macro          */  

/* MRB : Reserved Mask Bits                                                  */
#define MRB_MASK     (0x03ul << 29)                /* Mask                   */                   
#define MRB(val)     (((val) & 0x03ul) << 29)      /* Writing Macro          */  

#define MRTR         (0x01ul << 31)          /* Remote Transmission Resquest */ 

/******************************************************************************
* IR : CAN Identifier Register Channel X
******************************************************************************/
/* ID : Identifier                                                           */
#define ID_MASK      (0x1FFFFFFFul << 0)           /* Mask                   */
#define ID(val)      (((val) & 0x1FFFFFFFul) << 0) /* Writing Macro          */

/* IRB : Reserved Bits                                                       */
#define IRB_MASK     (0x03ul << 29)                /* Mask                   */
#define IRB(val)     (((val) & 0x03ul) << 29)      /* Writing Macro          */

#define RTR          (0x01ul << 31)          /* Remote Transmission Resquest */

/******************************************************************************
* CR : CAN Control Register Channel X
******************************************************************************/
/* DLC : Data Length Code                                                    */
#define DLC_MASK     (0x0Ful << 0)              /* Mask                      */
#define DLC(val)     (((val) & 0x0Ful) << 0)    /* Writing Macro             */       

#define IDE          (0x01ul << 4)              /* Extended Identifier Flag  */
#define RPLYV        (0x01ul << 5)              /* Automatic Reply           */ 
#define PCB          (0x01ul << 6)              /* Channel Producer          */
#define CHANEN       (0x01ul << 7)              /* Channel Enable            */
#define OVERWRITE    (0x01ul << 8)              /* Channel Overwrite Mode    */

/******************************************************************************
* CSR, SR, IER, IDR, IMR : CAN Interrupt Registers Channel X
******************************************************************************/
#define ACK          (0x01ul << 0)              /* Acknowledge Error         */
#define CAN_FRAME    (0x01ul << 1)              /* Frame Error               */
#define CRC          (0x01ul << 2)              /* CRC Error                 */
#define STUFF        (0x01ul << 3)              /* Stuffing Error            */
#define BUS          (0x01ul << 4)              /* Bus Error                 */
#define RXOK         (0x01ul << 5)              /* Reception Completed       */
#define TXOK         (0x01ul << 6)              /* Transmission Completed    */
#define RFRAME       (0x01ul << 7)              /* Remote Frame              */

/* CSR and SR Registers Only                                                 */
#define DLCW         (0x01ul << 9)              /* DLC Warning               */
#define FILLED       (0x01ul << 10)             /* Filled Flag               */
#define OVRUN        (0x01ul << 11)             /* Overrun Flag              */


/******************************************************************************
*************************** CAN Macros Definition *****************************
******************************************************************************/
/* ECR, DCR, PMSR : CAN Power Management Registers                           */
#define CSP_CAN_SET_ECR(can, val)         ((can)->ECR = (val))    /* Enable  */
#define CSP_CAN_SET_DCR(can, val)         ((can)->DCR = (val))    /* Disable */
#define CSP_CAN_GET_PMSR(can)             ((can)->PMSR)           /* Status  */

/* CR : CAN Control Register                                                 */
#define CSP_CAN_SET_CR(can, val)          ((can)->CR = (val))

/* MR : CAN Mode Register                                                    */
#define CSP_CAN_GET_MR(can)               ((can)->MR)
#define CSP_CAN_SET_MR(can, mode)         ((can)->MR = (mode))

/* CSR, SR : CAN Status Register                                             */
#define CSP_CAN_SET_CSR(can, val)         ((can)->CSR = (val))    /* Clear   */
#define CSP_CAN_GET_SR(can)               ((can)->SR)             /* Status  */

/* IER, IDR, IMR : CAN Interrupt Registers                                   */
#define CSP_CAN_SET_IER(can, val)         ((can)->IER = (val))    /* Enable  */
#define CSP_CAN_SET_IDR(can, val)         ((can)->IDR = (val))    /* Disable */
#define CSP_CAN_GET_IMR(can)              ((can)->IMR)            /* Mask    */

/* CISR, ISSR, SIER, SIDR, SIMR : CAN Interrupt Source Registers             */
#define CSP_CAN_SET_CISR(can, val)        ((can)->CISR = (val))   /* Clear   */
#define CSP_CAN_GET_ISSR(can)             ((can)->ISSR)           /* Status  */
#define CSP_CAN_SET_SIER(can, val)        ((can)->SIER = (val))   /* Enable  */
#define CSP_CAN_SET_SIDR(can, val)        ((can)->SIDR = (val))   /* Disable */
#define CSP_CAN_GET_SIMR(can)             ((can)->SIMR)           /* Mask    */

/* DRA : CAN Data A Register Channel X                                       */
#define CSP_CAN_CHANNEL_GET_DRA(can, channel)       ((can)->CHANNEL[(channel)].DRA)
#define CSP_CAN_CHANNEL_SET_DRA(can, channel, val)  ((can)->CHANNEL[(channel)].DRA = (val))

/* DRB : CAN Data B Register Channel X                                       */
#define CSP_CAN_CHANNEL_GET_DRB(can, channel)       ((can)->CHANNEL[(channel)].DRB)
#define CSP_CAN_CHANNEL_SET_DRB(can, channel, val)  ((can)->CHANNEL[(channel)].DRB = (val))

/* MSK : CAN Mask Register Channel X                                         */
#define CSP_CAN_CHANNEL_GET_MSK(can, channel)       ((can)->CHANNEL[(channel)].MSK)
#define CSP_CAN_CHANNEL_SET_MSK(can, channel, val)  ((can)->CHANNEL[(channel)].MSK = (val))

/* IR : CAN Identifier Register Channel X                                    */
#define CSP_CAN_CHANNEL_GET_IR(can, channel)        ((can)->CHANNEL[(channel)].IR)
#define CSP_CAN_CHANNEL_SET_IR(can, channel, val)   ((can)->CHANNEL[(channel)].IR = (val))

/* CR : CAN Control Register Channel X                                       */
#define CSP_CAN_CHANNEL_GET_CR(can, channel)        ((can)->CHANNEL[(channel)].CR)
#define CSP_CAN_CHANNEL_SET_CR(can, channel, val)   ((can)->CHANNEL[(channel)].CR = (val))

/* STP : CAN Stamp Register Channel X                                        */ 
#define CSP_CAN_CHANNEL_GET_STP(can, channel)       ((can)->CHANNEL[(channel)].STP)

/* CSR : CAN Clear Status Register Channel X                                 */
#define CSP_CAN_CHANNEL_SET_CSR(can, channel, val)  ((can)->CHANNEL[(channel)].CSR = (val))

/* SR : CAN Status Register Channel X                                        */
#define CSP_CAN_CHANNEL_GET_SR(can, channel)        ((can)->CHANNEL[(channel)].SR)

/* IER, IDR, IMR : CAN Interrupt Registers Channel X                         */
#define CSP_CAN_CHANNEL_SET_IER(can, channel, val)  ((can)->CHANNEL[(channel)].IER = (val))
#define CSP_CAN_CHANNEL_SET_IDR(can, channel, val)  ((can)->CHANNEL[(channel)].IDR = (val))
#define CSP_CAN_CHANNEL_GET_IMR(can, channel)       ((can)->CHANNEL[(channel)].IMR)


/******************************************************************************
********************* CAN External Functions Declaration **********************
******************************************************************************/
extern void CSP_CANInit(CSP_CAN_T *const can, U32_T mode);
extern void CSP_CANClose(CSP_CAN_T *const can);
extern void CSP_CANConfigInterrupt(CSP_CAN_T *const can, U32_T int_mode, U32_T int_mask, U32_T callback);
extern void CSP_CANChannelConfigInterrupt(CSP_CAN_T *const can, U8_T channel, U32_T int_mask);
extern void CSP_CANEnable(CSP_CAN_T *const can);
extern void CSP_CANDisable(CSP_CAN_T *const can);
extern void CSP_CANReceive(CSP_CAN_T *const can, U8_T channel, U32_T id, U32_T mask, U8_T control);
extern void CSP_CANTransmit(CSP_CAN_T *const can, U8_T channel, U32_T id, U8_T *data, U16_T control);


#endif   /* CSP_CAN_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -