?? can.lst
字號:
C51 COMPILER V7.02a CAN 08/31/2006 08:52:05 PAGE 1
C51 COMPILER V7.02a, COMPILATION OF MODULE CAN
OBJECT MODULE PLACED IN CAN.OBJ
COMPILER INVOKED BY: D:\KeilV702\C51\BIN\c51.exe CAN.c DB OE
stmt level source
1 /****************************************************************************
2 **
3 ** 文件名: CAN.c
4 ** 功能: C8051Fxxx的CAN控制器驅動;
5 ** 創建時間:2005.08.05
6
7 ** 修改時間:2005.12.01
8 ** 修改說明:
9
10 ** 作者: 李立學
11 ** 版權申明:可以拷貝,可以修改,但必須保留修改時間和作者信息
12 **
13 ****************************************************************************/
14
15 #include "LZK.H"
16
17 uint8 xdata CAN_SendDATA[8];
18 uint8 xdata CAN_RecvDATA[8];
19
20 /****************************************************************************
21 ** 函數名稱: CAN_Init(void)
22 ** 功能描述: 初始化CAN控制器定時、波特率,使能CAN控制器
23 ** 入口參數: 無
24 ** 出口參數: 無
25 ** 全局變量: 無
26 ** 調用模塊: 無
27 ** 說明:
28 ****************************************************************************/
29 void CAN_Init(void)
30 {
31 1 SFRPAGE = CAN0_PAGE;
32 1 CAN0CN = 0x41; // 0100_0001, Set CCE and INIT
33 1 // Bit7: TEST: Test Mode Enable bit. 0: Disabled;
34 1 // Bit6: CCE: Configuration Change Enable bit, "CCE". 0: Disabled;
35 1 // Bit5: DAR: Disable Automatic Retransmission bit. 0: Eabled;
36 1 // Bit4: CANIF:Module Interrupt Flag. 1: CAN interrupt has occurred and is active, Cle
-ared by hardware.
37 1 // Bit3: EIE: Module Error Interrupt Enable Bit. 1: Enabled;
38 1 // Bit2: SIE: Status change Interrupt Enable Bit. 1: Enabled;
39 1 // Bit1: IE: Module Interrupt Enable Bit. 1: Enabled IRQ_B;
40 1 // Bit0: INIT: Initialization bit. 0: Normal Operation;
41 1 CAN0ADR = BRPEXT; // Address for BRP Extension Register.
42 1 CAN0DAT = 0x0000; // BRPE = 0x00;
43 1
44 1 CAN0ADR = BITREG; // Address for Bit Timing register.
45 1 // Prop_Seg = 7 * 4 / 24 = 1166.7nS > 400nS.
46 1 CAN0DAT = 7 << 12 | // TSeg2 = (Phase_Seg2 - 1) = 8 - 1 = 7;
47 1 14 << 8 | // Tseg1 = (Prop_Seg + Phase_Seg1 - 1) = 7 + 8 - 1 = 14
48 1 3 << 6 | // SWJp = SWJ - 1 = 4 - 1 = 3;
49 1 3; // BRP = 4.
50 1 // Bit Time = Sync_Seg(1) + Prop_Seg(7) + Phase_Seg1(8) + Phase_Seg2(8);
51 1 // BautRate = 24M / 4 /(1 + 7 + 8 + 8) = 250K.
52 1 // CAN0TST = 0x04; // Basic Mode Enabled. IF1 Used as Tx Buffer, IF2 Used as Rx Buffer.
53 1 // Bit7: Rx Monitors the actual value of the CAN_RX Pin
54 1 // CAN bus is recessive (CAN_RX = ‘1’) or dominant (CAN_RX = ‘0’).
C51 COMPILER V7.02a CAN 08/31/2006 08:52:05 PAGE 2
55 1 // Bit[6..5]: Tx1-0 Control of CAN_TX pin
56 1 // 00: Reset value, CAN_TX is controlled by the CAN Core.
57 1 // 01: Sample Point can be monitored at CAN_TX pin.
58 1 // 10: CAN_TX pin drives a dominant (‘0’) value.
59 1 // 11: CAN_TX pin drives a recessive (‘1’) value.
60 1 // Bit4: LBack Loop Back Mode
61 1 // 0/1: Loop Back Mode is disabled / enabled.
62 1 // Bit3: Silent Silent Mode
63 1 // 0/1: Normal operation / The module is in Silent Mode
64 1 // Bit2: Basic Basic Mode
65 1 // 0/1: Basic Basic Mode Disabled / Eanabled.
66 1 // In Basic Mode, IF1 Registers used as Tx Buffer, IF2 Registers used as Rx Buffer.
67 1
68 1 CAN0ADR = IF1CMDMSK; // Point to Command Mask 1
69 1 CAN0DAT = 0x0087; // Config IF1 as TX.
70 1 // WR/RD Mask Arb Control ClrIntPnd TxRqst/NewDat DataA DataB
71 1 // 1(WR) 0 0 0 0 1 1 1
72 1
73 1 CAN0ADR = IF2CMDMSK; // Point to Command Mask 2
74 1 CAN0DAT = 0x001F; // Config IF2 as RX.
75 1 // WR/RD Mask Arb Control ClrIntPnd TxRqst/NewDat DataA DataB
76 1 // 0(RD) 0 0 1 1 1 1 1
77 1
78 1 CAN0CN &= ~0x41; // CAN0CN = 0x00, Clear CCE and INIT bits, Starts CAN State machine
79 1 }
80
81
82 /****************************************************************************
83 ** 函數名稱: CAN_ClrMsgObject(void)
84 ** 功能描述: 清除所有CAN控制器msg object.
85 ** 入口參數: 無
86 ** 出口參數: 無
87 ** 全局變量: 無
88 ** 調用模塊: 無
89 ** 說明:
90 ****************************************************************************/
91 void CAN_ClrMsgObject(void)
92 {
93 1 uint8 i;
94 1
95 1 SFRPAGE = CAN0_PAGE;
96 1 CAN0ADR = IF1CMDMSK; // Point to Command Mask Register 1
97 1 CAN0DATL = 0xFF; // Set direction to WRITE all IF registers to Msg Obj
98 1 for(i=1; i<=32; i++)
99 1 {
100 2 CAN0ADR = IF1CMDRQST; // Write blank (reset) IF registers to each msg obj
101 2 CAN0DATL = i;
102 2 DuS( CAN_6CLK ); // CAN_CLK = 6MHz, 6 CAN_CLK = 1uS.
103 2 }
104 1 }
105
106
107 // Initialize Message Object use IF2
108
109 // IFx Mask 1 Register: 15..0
110 // Msk15-0
111 // IFx Mask 2 Register: 15 14 13 12..0
112 // MXtd MDir reg Msk28-16
113
114 // IFx Arbitration 1 Register: 15..0
115 // ID15-0
116 // IFx Arbitration 2 Register: 15 14 13 12..0
C51 COMPILER V7.02a CAN 08/31/2006 08:52:05 PAGE 3
117 // MsgVal Xtd Dir ID28-16
118
119 // IFx Message Control Register:
120 // bit 15 14 13 12 11 10 9 8 7 6..4 3..0
121 // NewDat MsgLst IntPnd UMask TxIE RxIE RmtEn TxRqst EoB reg DLC3-0
122
123 // IFx Data A and Data B Registers
124 // IFx Message Data A1: data1 data0
125 // IFx Message Data A2: data3 data2
126 // IFx Message Data B1: data5 data4
127 // IFx Message Data B2: data7 data6
128
129 /****************************************************************************
130 ** 函數名稱: CAN_ClrMsgObject(void)
131 ** 功能描述: 清除所有CAN控制器msg object.
132 ** 入口參數: 無
133 ** 出口參數: 無
134 ** 全局變量: 無
135 ** 調用模塊: 無
136 ** 說明:
137 ****************************************************************************/
138 void CAN_InitMsgObj(unsigned char MsgNum,unsigned int CmdMsk,unsigned int Msk1,unsigned int Msk2,unsigned
-int Arb1,unsigned int Arb2,unsigned int MsgCtrl)
139 {
140 1 SFRPAGE = CAN0_PAGE; // 3-6 CAN clock cycles to move IF reg contents to the Msg Obj in CAN RAM
-.
141 1 CAN0ADR = IF1CMDMSK; // Point to Command Mask 1
142 1 CAN0DAT = CmdMsk; // Set Command Mask Registers
143 1 CAN0ADR = IF1MSK1; // Point to Mask Registers
144 1 CAN0DAT = Msk1; // Mask1
145 1 CAN0DAT = Msk2; // Mask2
146 1 CAN0DAT = Arb1; // Arbitration1
147 1 CAN0DAT = Arb2; // Arbitration2
148 1 CAN0DAT = MsgCtrl; // Msg Cntrl
149 1 CAN0ADR = IF1CMDRQST; // Point to Command Request reg.
150 1 CAN0DAT = MsgNum; // Select Msg Obj passed into function parameter list --initiates write to
-Msg Obj.
151 1 }
152
153
154 /****************************************************************************
155 ** 函數名稱: CAN_RunCtrl(bit RunCtrl)
156 ** 功能描述: 啟動/停止CAN控制器
157 ** 入口參數: 無
158 ** 出口參數: 無
159 ** 全局變量: 無
160 ** 調用模塊: 無
161 ** 說明:
162 ****************************************************************************/
163 /*
164 void CAN_RunCtrl(bit RunCtrl)
165 {
166 SFRPAGE = CAN0_PAGE;
167
168 if( RunCtrl )
169 CAN0CN &= 0xfe; // Clear the INIT bit.
170 else
171 CAN0CN |= 0x01; // Set the INIT bit.
172 }
173 */
174
175 /****************************************************************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -