MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / CAN_SetBps

Function CAN_SetBps

bsp/loongson/ls1cdev/libraries/ls1c_can.c:257–338  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

255}
256
257unsigned char CAN_SetBps(CAN_TypeDef* CANx, Ls1c_CanBPS_t Bps)
258{
259 unsigned char InitStatus = CAN_InitStatus_Failed;
260 unsigned char CAN_Prescaler, CAN_BS1, CAN_BS2, CAN_SJW;
261 CAN_SJW = CAN_SJW_1tq;
262 /* 进入复位模式 */
263 InitStatus = set_reset_mode(CANx);
264 if( InitStatus == CAN_InitStatus_Failed)
265 return CAN_InitStatus_Failed;
266
267 /* BaudRate= f(APB)/((1+BS1+BS2)(SJW*2*Prescaler))=126000000/[(1+7+2)*1*2*63]=100000=100K*/
268 /* BPS PRE BS1 BS2 最低40K
269 1M 9 4 2
270 800K 8 7 2
271 500K 9 11 2
272 250K 36 4 2
273 125K 36 11 2
274 100K 63 7 2
275 50K 63 16 3`
276 40K 63 16 8
277 */
278 switch (Bps)
279 {
280 case LS1C_CAN1MBaud:
281 CAN_Prescaler = 9;
282 CAN_BS1 = CAN_BS1_4tq;
283 CAN_BS2 = CAN_BS2_2tq;
284 break;
285 case LS1C_CAN800kBaud:
286 CAN_Prescaler = 8;
287 CAN_BS1 = CAN_BS1_7tq;
288 CAN_BS2 = CAN_BS2_2tq;
289 break;
290 case LS1C_CAN500kBaud:
291 CAN_Prescaler = 9;
292 CAN_BS1 = CAN_BS1_11tq;
293 CAN_BS2 = CAN_BS2_2tq;
294 break;
295 case LS1C_CAN250kBaud:
296 CAN_Prescaler = 36;
297 CAN_BS1 = CAN_BS1_4tq;
298 CAN_BS2 = CAN_BS2_2tq;
299 break;
300 case LS1C_CAN125kBaud:
301 CAN_Prescaler = 36;
302 CAN_BS1 = CAN_BS1_11tq;
303 CAN_BS2 = CAN_BS2_2tq;
304 break;
305 case LS1C_CAN100kBaud:
306 CAN_Prescaler = 63;
307 CAN_BS1 = CAN_BS1_7tq;
308 CAN_BS2 = CAN_BS2_2tq;
309 break;
310 case LS1C_CAN50kBaud:
311 CAN_Prescaler = 63;
312 CAN_BS1 = CAN_BS1_16tq;
313 CAN_BS2 = CAN_BS2_3tq;
314 break;

Callers 1

controlFunction · 0.85

Calls 2

set_reset_modeFunction · 0.85
set_startFunction · 0.85

Tested by

no test coverage detected