?? sja_bcanfunc.lst
字號:
150 1 if(CAN_ByteRate>14){
151 2 ErrorFlag =1;
152 2 }
153 1 else{
154 2 while(--ErrorCount){
155 3 WriteSjaReg(REG_BTR0,SJA_BTR_CODETAB[CAN_ByteRate*2]);
156 3 WriteSjaReg(REG_BTR1,SJA_BTR_CODETAB[CAN_ByteRate*2+1]);
157 3 if(ReadSjaReg(REG_BTR0) != SJA_BTR_CODETAB[CAN_ByteRate*2])continue;
158 3 if(ReadSjaReg(REG_BTR1) != SJA_BTR_CODETAB[CAN_ByteRate*2+1])continue;
159 3 ErrorFlag=0;
160 3 break;
161 3
162 3 }//while結束
163 2
164 2 }
165 1 return ErrorFlag ;
166 1 }
167
168
169 /************************************************************************
170 ;*函數原型: BCAN_SET_OBJECT *
171 *參數說明: *
172 * BCAN_ACR:存放驗收代碼寄存器(ACR)的參數設置 *
173 * BCAN_AMR:存放接收屏蔽寄存器(AMR)的參數設置 *
174 ;*返回值: *
175 ;* 0 ;通信對象設置成功 *
C51 COMPILER V8.02 SJA_BCANFUNC 07/24/2007 19:21:02 PAGE 4
176 ;* 1 ;通信對象設置失敗 *
177 ;* *
178 ;*說明:設置CAN節點的通訊對象,允許接收的報文ID號的高8位(D10--D3) 。 *
179 ;* 允許接收的報文,是由AMR和ACR共同決定的. *
180 ;* 滿足以下條件的ID號的報文才可以被接收 *
181 ;*[(ID.10-ID.3)≡(AC.7-AC.0)]||(AM.7-AM.0)≡11111111 *
182 ;* 該子程序只能用于復位模式 *
- *
183 ;************************************************************************/
184 bit BCAN_SET_OBJECT(unsigned char BCAN_ACR,unsigned char BCAN_AMR)
185 {
186 1 SJA_BCANAdr=REG_ACR; //訪問地址指向驗收代碼寄存器(ACR)
187 1 *SJA_BCANAdr=BCAN_ACR; //寫入參數
188 1 if(*SJA_BCANAdr != BCAN_ACR) //校驗寫入值
189 1 {
190 2 return 1;
191 2 }
192 1 SJA_BCANAdr=REG_AMR; //訪問地址指向驗收屏蔽寄存器(AMR)
193 1 *SJA_BCANAdr=BCAN_AMR; //寫入參數
194 1 if(*SJA_BCANAdr != BCAN_AMR) //校驗寫入值
195 1 {
196 2 return 1;
197 2 }
198 1
199 1 return 0;
200 1 }
201
202 /************************************************************************
203 ;*函數原型: bit BCAN_SET_OUTCLK (unsigned char Out_Control, *
204 unsigned char Clock_Out); *
205 ;*參數說明: *
206 * Out_Control:存放輸出控制寄存器 (OC) 的參數設置 *
207 * Clock_Out:存放時鐘分頻寄存器 (CDR) 的參數設置 *
208 * *
209 ;*返回值: *
210 ;* 0 ;設置成功 *
211 ;* 1 ;設置失敗 *
212 ;* *
213 ;*說明:設置SJA1000的輸出模式和時鐘分頻 。該子程序只能用于復位模式 *
- *
214 ;************************************************************************/
215 bit BCAN_SET_OUTCLK (unsigned char Out_Control,
216 unsigned char Clock_Out)
217 {
218 1 SJA_BCANAdr=REG_OCR ; //訪問地址指向輸出控制寄存器
219 1 *SJA_BCANAdr=Out_Control; //寫入參數
220 1 if(*SJA_BCANAdr != Out_Control) //校驗寫入值
221 1 {
222 2 return 1;
223 2 }
224 1 SJA_BCANAdr=REG_CDR; //訪問地址指向輸出控制寄存器
225 1 *SJA_BCANAdr=Clock_Out; //寫入參數
226 1 return 0;
227 1 }
228
229
230 /************************************************************************
231 *函數原型: bit BCAN_HW_INIT(unsigned char BCAN_ACR, *
232 * unsigned char BCAN_AMR, *
233 * unsigned char Bus_Timing0, *
234 * unsigned char Bus_Timing1, *
235 * unsigned char Out_Control, *
C51 COMPILER V8.02 SJA_BCANFUNC 07/24/2007 19:21:02 PAGE 5
236 * unsigned char Clock_Out *
237 * ) *
238 *參數說明: *
239 * BCAN_ACR:存放驗收代碼寄存器(ACR)的參數設置 *
240 * BCAN_AMR:存放接收屏蔽寄存器(AMR)的參數設置 *
241 * Bus_Timing0:存放總線定時0寄存器(BTR0)的參數設置 *
242 * Bus_Timing1:存放總線定時1寄存器(BTR1)的參數設置 *
243 * Out_Control:存放輸出控制寄存器 (OC) 的參數設置 *
244 * Clock_Out:存放時鐘分頻寄存器 (CDR) 的參數設置 *
245 * *
246 *返回值: *
247 * 0 ; 表示初始化成功 *
248 * 1 ; 表示初始化失敗 *
249 * *
250 *說明:CAN控制器的初始化只能在復位模式下才能完成。初始化操作之前請先進入*
251 * 到復位操作模式,并將要初始化的各參數的值按數據手冊中的計算方法,正 *
252 * 確的按實際需要計算好參數后,將參數寫入對應的寄存器 。 *
253 *注: 為了CAN控制器的正確運行,請務必仔細的閱讀SJA1000的數據手冊 *
254 * *
255 *示例:設應用系統中晶體頻率16MHZ,節點只接收ID(標志符)高八位為 *
256 * '10101010'的消息,系統波特率為50Kbit/s,關閉CLKOUT輸出。 *
257 * 則根據數據手冊中的計算方法的各參數如下: *
258 * ACR==0AAH,AMR==00H,BTR0==0C9H,BTR1==0C9H,OC==0FFH,CDR=48H *
259 * 則調用本函數為: *
260 * BCAN_HW_INIT(0xaa,0x00,0xc9,0xc9,0xff,0x48) *
261 ************************************************************************
262 bit BCAN_HW_INIT(unsigned char BCAN_ACR,
263 unsigned char BCAN_AMR,
264 unsigned char Bus_Timing0,
265 unsigned char Bus_Timing1,
266 unsigned char Out_Control,
267 unsigned char Clock_Out
268 )
269 {
270 SJA_BCANAdr=REG_ACR; //訪問地址指向驗收代碼寄存器(ACR)
271 *SJA_BCANAdr=BCAN_ACR; //寫入參數
272 if(*SJA_BCANAdr != BCAN_ACR) //校驗寫入值
273 {
274 return 1;
275 }
276 SJA_BCANAdr=REG_AMR; //訪問地址指向驗收屏蔽寄存器(AMR)
277 *SJA_BCANAdr=BCAN_AMR; //寫入參數
278 if(*SJA_BCANAdr != BCAN_AMR) //校驗寫入值
279 {
280 return 1;
281 }
282 SJA_BCANAdr=REG_BTR0; //訪問地址指向總線定時寄存器0
283 *SJA_BCANAdr=Bus_Timing0; //寫入參數
284 if(*SJA_BCANAdr != Bus_Timing0)//校驗寫入值
285 {
286 return 1;
287 }
288 SJA_BCANAdr=REG_BTR1; //訪問地址指向總線定時寄存器0
289 *SJA_BCANAdr=Bus_Timing1; //寫入參數
290 if(*SJA_BCANAdr != Bus_Timing1)//校驗寫入值
291 {
292 return 1;
293 }
294 SJA_BCANAdr=REG_OCR ; //訪問地址指向輸出控制寄存器
295 *SJA_BCANAdr=Out_Control; //寫入參數
296 if(*SJA_BCANAdr != Out_Control)//校驗寫入值
297 {
C51 COMPILER V8.02 SJA_BCANFUNC 07/24/2007 19:21:02 PAGE 6
298 return 1;
299 }
300 SJA_BCANAdr=REG_CDR; //訪問地址指向輸出控制寄存器
301 *SJA_BCANAdr=Clock_Out; //寫入參數
302 return 0;
303 }
304
305 /************************************************************************
306 *函數原型: bit BCAN_DATA_WRITE(unsigned char *SendDataBuf)*
307 *參數說明: 特定幀各式的數據
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -