?? can20b.h
字號:
#ifndef _L_INCLUDE_CANDEF_H
#define _L_INCLUDE_CANDEF_H
#include "vxworks.h"
#include "intLib.h"
#include "arch/i86/ivI86.h"
#include "msgQLib.h"
#undef PeliCANMode
/* CAN driver work mode, 0:polling, 1:interrup */
#define IRQ_POLLING 0
#define IRQ_INTERRUPT 1
/* CAN channel define */
#define CAN0 0
#define CAN1 1
#define BASE_ADDR 0xda00 /* base dpram address */
#define CAN0_INT_NUMBER 7
#define CAN1_INT_NUMBER 15
#define DIST_CAN 0x200 /*CAN控制器的寄存器地址間隔*/
/* 數據幀最大長度*/
#define MAX_MSG_LENGTH 13
/* 消息隊列深度 */
#define MAX_MSGS 100
typedef unsigned char BYTE;
typedef unsigned long U32;
typedef unsigned short U16;
typedef struct {
BYTE id[2]; /*標識符*/
int rtr; /*遠程傳輸請求:1,遠程幀;0,數據幀*/
int dlen; /*數據長度,不能超過8*/
BYTE data[8]; /*數據*/
}CANMSG;/*消息結構*/
typedef union {
U32 id;
BYTE idc[4];
}ZV_ID;
typedef struct {
BYTE acc_code;/*接收碼*/
BYTE acc_mask;/*屏蔽碼*/
BYTE bt0; /*位時序定義字節0*/
BYTE bt1; /*位時序定義字節1*/
BYTE irq; /* 中斷號 */
BYTE mode; /* 工作模式, 0:查詢,1:中斷 */
}CANCFG;/*配置結構*/
/*模式和控制寄存器的地址和位定義*/
#define ModeControlReg 0
#define RM_RR_Bit 0x01 /*復位模式請求位*/
#ifdef PeliCANMode
#define LOM_Bit 0x02 /*僅聽模式位*/
#define STM_Bit 0x04 /*自我測試模式位*/
#define AFM_Bit 0x08 /*驗收濾波器模式位*/
#define SM_Bit 0x10 /*進入休眠模式位*/
#endif
/*中斷使能和控制寄存器的地址和位定義*/
#ifdef PeliCANMode
#define InterruptEnReg 4 /* PeliCAN 模式*/
#define RIE_Bit 0x01 /*接收中斷使能位*/
#define TIE_Bit 0x02 /*發送中斷使能位*/
#define EIE_Bit 0x04 /*錯誤警告中斷使能位*/
#define DOIE_Bit 0x08 /*數據超載中斷使能位*/
#define WUIE_Bit 0x10 /*喚醒中斷使能位*/
#define EPIE_Bit 0x20 /*錯誤隱性中斷使能位*/
#define ALIE_Bit 0x40 /*仲裁丟失中斷使能位*/
#define BEIE_Bit 0x80 /*總線錯誤中斷使能位*/
#else /*BasicCAN 模式*/
#define InterruptEnReg 0 /* 控制寄存器*/
#define RIE_Bit 0x02 /*接收中斷使能位*/
#define TIE_Bit 0x04 /*發送中斷使能位*/
#define EIE_Bit 0x08 /*錯誤中斷使能位*/
#define DOIE_Bit 0x10 /*超載中斷使能位*/
#endif
/*命令寄存器的地址和位定義*/
#define CommandReg 1
#define TR_Bit 0x01 /*發送請求位*/
#define AT_Bit 0x02 /*中止發送位*/
#define RRB_Bit 0x04 /*釋放接收緩沖器位*/
#define CDO_Bit 0x08 /*清除數據超載位*/
#if defined (PeliCANMode)
#define SRR_Bit 0x10 /*自身接收請求位*/
#else /*BasicCAN 模式*/
#define GTS_Bit 0x10 /*進入睡眠模式位*/
#endif
/*狀態寄存器的地址和位定義*/
#define StatusReg 2
#define RBS_Bit 0x01 /*接收緩沖器狀態位*/
#define DOS_Bit 0x02 /*數據超載狀態位*/
#define TBS_Bit 0x04 /*發送緩沖器狀態位*/
#define TCS_Bit 0x08 /*發送完成狀態位*/
#define RS_Bit 0x10 /*接收狀態位*/
#define TS_Bit 0x20 /*發送狀態位*/
#define ES_Bit 0x40 /*錯誤狀態位*/
#define BS_Bit 0x80 /*總線狀態位*/
/*中斷寄存器的地址和位定義*/
#define InterruptReg 3
#define RI_Bit 0x01 /*接收中斷位*/
#define TI_Bit 0x02 /*發送中斷位*/
#define EI_Bit 0x04 /*錯誤警告中斷位*/
#define DOI_Bit 0x08 /*數據超載中斷位*/
#define WUI_Bit 0x10 /*喚醒中斷位*/
#if defined (PeliCANMode)
#define EPI_Bit 0x20 /*錯誤被動中斷位*/
#define ALI_Bit 0x40 /*仲裁丟失中斷位*/
#define BEI_Bit 0x80 /*總線錯誤中斷位*/
#endif
/*總線定時寄存器的地址和位定義*/
#define BusTiming0Reg 6
#define BusTiming1Reg 7
#define SAM_Bit 0x80
/*采樣模式位
1 總線被采樣三次
0 總線被采樣一次*/
/*輸出控制寄存器的地址和位定義*/
#define OutControlReg 8
/*OCMODE1 OCMODE0 */
#define BiPhaseMode 0x00 /*雙相輸出模式*/
#define NormalMode 0x02 /*正常輸出模式*/
#define ClkOutMode 0x03 /*時鐘輸出模式*/
/*TX1 的輸出管腳配置*/
#define OCPOL1_Bit 0x20 /*輸出極性控制位*/
#define Tx1Float 0x00 /*配置為懸空*/
#define Tx1PullDn 0x40 /*配置為下拉*/
#define Tx1PullUp 0x80 /*配置為上拉*/
#define Tx1PshPull 0Xc0 /*配置為推挽*/
/*TX0 的輸出管腳配置*/
#define OCPOL0_Bit 0x04 /*輸出極性控制位*/
#define Tx0Float 0x00 /*配置為懸空*/
#define Tx0PullDn 0x08 /*配置為下拉*/
#define Tx0PullUp 0x10 /*配置為上拉*/
#define Tx0PshPull 0X18 /*配置為推挽*/
/*驗收代碼和屏蔽寄存器的地址定義*/
#ifdef PeliCANMode
#define AcceptCode0Reg 16
#define AcceptCode1Reg 17
#define AcceptCode2Reg 18
#define AcceptCode3Reg 19
#define AcceptMask0Reg 20
#define AcceptMask1Reg 21
#define AcceptMask2Reg 22
#define AcceptMask3Reg 23
#else /*BasicCAN 模式*/
#define AcceptCodeReg 4
#define AcceptMaskReg 5
#endif
/*Rx-緩沖器的地址定義*/
#ifdef PeliCANMode
#define RxFrameInfo 16
#define RxBuffer1 17
#define RxBuffer2 18
#define RxBuffer3 19
#define RxBuffer4 20
#define RxBuffer5 21
#define RxBuffer6 22
#define RxBuffer7 23
#define RxBuffer8 24
#define RxBuffer9 25
#define RxBuffer10 26
#define RxBuffer11 27
#define RxBuffer12 28
#else /*BasicCAN 模式*/
#define RxBuffer1 20
#define RxBuffer2 21
#define RxBuffer3 22
#define RxBuffer4 23
#define RxBuffer5 24
#define RxBuffer6 25
#define RxBuffer7 26
#define RxBuffer8 27
#define RxBuffer9 28
#define RxBuffer10 29
#endif
/*Tx 緩沖器的地址定義*/
#ifdef PeliCANMode
/*僅寫地址*/
#define TxFrameInfo 16
#define TxBuffer1 17
#define TxBuffer2 18
#define TxBuffer3 19
#define TxBuffer4 20
#define TxBuffer5 21
#define TxBuffer6 22
#define TxBuffer7 23
#define TxBuffer8 24
#define TxBuffer9 25
#define TxBuffer10 26
#define TxBuffer11 27
#define TxBuffer12 28
/*僅讀地址*/
#define TxFramInFoRd 96
#define TxBufferRd1 97
#define TxBufferRd2 98
#define TxBufferRd3 99
#define TxBufferRd4 100
#define TxBufferRd5 101
#define TxBufferRd6 102
#define TxBufferRd7 103
#define TxBufferRd8 104
#define TxBufferRd9 105
#define TxBufferRd10 106
#define TxBufferRd11 107
#define TxBufferRd12 108
#else /*BasicCAN 模式*/
#define TxBuffer1 10
#define TxBuffer2 11
#define TxBuffer3 12
#define TxBuffer4 13
#define TxBuffer5 14
#define TxBuffer6 15
#define TxBuffer7 16
#define TxBuffer8 17
#define TxBuffer9 18
#define TxBuffer10 19
#endif
/*其他寄存器的地址定義*/
#if defined (PeliCANMode)
#define ArbLostCapReg 11
#define ErrCodeCapReg 12
#define ErrWarnLimitReg 13
#define RxErrCountReg 14
#define TxErrCountReg 15
#define RxMsgCountReg 29
#define RxBufstartAdr 30
#define FRAME_EFF 0x80
#define FRAME_RTR 0x40
#define FRAME_DLEN 0x0F
#else
#define FRAME_RTR 0x10
#define FRAME_DLEN 0x0F
#endif
/*時鐘分頻寄存器的地址和位定義*/
#define ClockDivideReg 31
#define DivBy1 0x07 /*CLKOUT=振蕩器頻率*/
#define DivBy2 0x00 /*CLKOUT=1/2 振蕩器頻率*/
#define CLKOff_Bit 0x08 /*時鐘關閉位時鐘輸出管腳控制位*/
#define RXINTEN_Bit 0x20 /*用于接收中斷的管腳TX1 */
#define CBP_Bit 0x40 /*CAN 比較器旁路控制位*/
#define CANMode_Bit 0x80 /*CAN 模式控制位*/
#define PrescExample 0x02
#define SJWExample 0xC0
#define TSEG1Example 0x0A
#define TSEG2Example 0x30
#define Presc_MB_24 0x00
#define SJW_MB_24 0x00
#define TSEG1_MB_24 0x08
#define TSEG2_MB_24 0x10
#define Presc_kB_24 0x07
#define SJW_kB_24 0xC0
#define TSEG1_kB_24 0x09
#define TSEG2_kB_24 0x30
#define Presc_MB_16 0x00
#define SJW_MB_16 0x00
#define TSEG1_MB_16 0x04
#define TSEG2_MB_16 0x10
#define Presc_kB_16 0x04
#define SJW_kB_16 0xC0
#define TSEG1_kB_16 0x0A
#define TSEG2_kB_16 0x30
#define SJW_500k_16 0x00
#define Presc_500k_16 0x01
#define TSEG1_500k_16 0x04
#define TSEG2_500k_16 0x10
/* 使用的常量定義------------------------------------------------------------
------------------------------------- */
#define YES 1
#define NO 0
#define ENABLE 1
#define DISABLE 0
#define ENABLE_N 0
#define DISABLE_N 1
#define INTLEVELACT 0
#define INTEDGEACT 1
#define PRIORITY_LOW 0
#define PRIORITY_HIGH 1
/*寄存器內容默認復位值清除寄存器*/
#define ClrByte 0x00
/*常量清除中斷使能寄存器*/
#if defined (PeliCANMode)
#define ClrIntEnSJA ClrByte
#else
#define ClrIntEnSJA ClrByte RM_RR_Bit /*保留復位請求*/
#endif
/*驗收代碼和屏蔽寄存器的定義*/
#define DontCare 0xFF
/* 函數返回值定義*/
#define SUCCESS 1
#define FAILURE 0
/*ioctl cmd_code*/
#define CAN_INIT 0x02
/*從指定的CAN控制器接收消息包
port:CAN控制器--0,控制器0;1,控制器1
msg_ptr:指向消息結構變量,返回消息
返回值:1,成功;0,無消息
*/
/*由指定的CAN控制器發送消息包
port:CAN控制器--0,控制器0;1,控制器1
msg:要發送的消息
返回值:1,成功;0,失敗
*/
/*啟動CAN的正常運行
port:CAN控制器--0,控制器0;1,控制器1
*/
/*設置控制器的屏蔽接收碼和傳輸速率
port:CAN控制器--0,控制器0;1,控制器1
cfg:配置結構
返回值:1,成功;0,失敗
*/
/*對板子的運行進行系統配置
seg:板子的寄存器段設置
irq0:控制器0的irq號
irq1:控制器1的irq號
返回值:1,成功;0,失敗
*/
/*停止控制器的運行
返回值:1,成功;0,失敗
*/
/*查詢控制器的發送狀態
port:CAN控制器--0,控制器0;1,控制器1
返回值:1,發送空閑;0,發送正忙,即有未發送的消息
*/
/*設置發送方式
mode:發送方式--0,正常方式(缺省),自動重傳;1,無重傳方式
*/
/*錯誤狀態:
0: no error
0x10: seg_addr set error
0x12: irq_no set error
0x20: port 1 bus off
0x21: port 2 bus off
0x22: port 1 bus error
0x23: port 2 bus error
0x30: port 1 receiving buffer full
0x31: port 2 receiving buffer full
*/
/* canReset ,CAN 總線復位
輸入:port,CAN控制器--0,控制器0;1,控制器1
返回值:無
*/
#endif /* #ifdef _L_INCLUDE_CANDEF_H */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -