在线时间0 小时
UID323690
注册时间2011-10-20
NXP金币0
该用户从未签到
限制会员
- 积分
- -2
- 最后登录
- 2020-6-17
|
如下代码:这个波特率是采用k60的配置的,在测试过程中,只有83k和125k可以测通,其它波特率测不通,示波器看波形83k的是86k,125k的是130k;新手不知道怎么算的,sos大神,sos大牛。。。
补充说明:k60的开发板和我自己弄的板子都是使用50M的晶振,但是看例程里面k60是按48M来算can波特率的那些参数,而自己的k10却按48M算波特率却有误差,按50M就是正常的波特率,并且k10的500k和1m的波特率有误差。
switch (baudrateKHz)
{
case (33): // 33.33K
if(CAN_CTRL1_REG(CANBaseAdd) & CAN_CTRL1_CLKSRC_MASK)
{
// 48M/120= 400k sclock, 12Tq
// PROPSEG = 3, LOM = 0x0, LBUF = 0x0, TSYNC = 0x0, SAMP = 1
// RJW = 3, PSEG1 = 4, PSEG2 = 4,PRESDIV = 120
CAN_CTRL1_REG(CANBaseAdd) = (0 | CAN_CTRL1_PROPSEG(2)
| CAN_CTRL1_RJW(2)
| CAN_CTRL1_PSEG1(3)
| CAN_CTRL1_PSEG2(3)
| CAN_CTRL1_PRESDIV(119));
}
else
{
// 12M/20= 600k sclock, 18Tq
// PROPSEG = 1, LOM = 0x0, LBUF = 0x0, TSYNC = 0x0, SAMP = 1
// RJW = 4, PSEG1 = 8, PSEG2 = 8,PRESDIV = 20
CAN_CTRL1_REG(CANBaseAdd) = (0 | CAN_CTRL1_PROPSEG(0)
| CAN_CTRL1_PROPSEG(3)
| CAN_CTRL1_PSEG1(7)
| CAN_CTRL1_PSEG2(7)
| CAN_CTRL1_PRESDIV(19));
}
break;
case (83): // 83.33K
if(CAN_CTRL1_REG(CANBaseAdd) & CAN_CTRL1_CLKSRC_MASK)
{
// 48M/48= 1M sclock, 12Tq
// PROPSEG = 3, LOM = 0x0, LBUF = 0x0, TSYNC = 0x0, SAMP = 1
// RJW = 3, PSEG1 = 4, PSEG2 = 4,PRESDIV = 48
CAN_CTRL1_REG(CANBaseAdd) = (0 | CAN_CTRL1_PROPSEG(2)
| CAN_CTRL1_RJW(2)
| CAN_CTRL1_PSEG1(3)
| CAN_CTRL1_PSEG2(3)
| CAN_CTRL1_PRESDIV(47));
}
else
{
// 12M/12= 1M sclock, 12Tq
// PROPSEG = 3, LOM = 0x0, LBUF = 0x0, TSYNC = 0x0, SAMP = 1
// RJW = 3, PSEG1 = 4, PSEG2 = 4,PRESDIV = 12
CAN_CTRL1_REG(CANBaseAdd) = (0 | CAN_CTRL1_PROPSEG(2)
| CAN_CTRL1_RJW(2)
| CAN_CTRL1_PSEG1(3)
| CAN_CTRL1_PSEG2(3)
| CAN_CTRL1_PRESDIV(11));
}
break;
case (50):
if(CAN_CTRL1_REG(CANBaseAdd) & CAN_CTRL1_CLKSRC_MASK)
{
// 48M/80= 0.6M sclock, 12Tq
// PROPSEG = 3, LOM = 0x0, LBUF = 0x0, TSYNC = 0x0, SAMP = 1
// RJW = 3, PSEG1 = 4, PSEG2 = 4, PRESDIV = 40
CAN_CTRL1_REG(CANBaseAdd) = (0 | CAN_CTRL1_PROPSEG(2)
| CAN_CTRL1_RJW(1)
| CAN_CTRL1_PSEG1(3)
| CAN_CTRL1_PSEG2(3)
| CAN_CTRL1_PRESDIV(79));
}
else
{
// 12M/20= 0.6M sclock, 12Tq
// PROPSEG = 3, LOM = 0x0, LBUF = 0x0, TSYNC = 0x0, SAMP = 1
// RJW = 3, PSEG1 = 4, PSEG2 = 4, PRESDIV = 20
CAN_CTRL1_REG(CANBaseAdd) = (0 | CAN_CTRL1_PROPSEG(2)
| CAN_CTRL1_RJW(2)
| CAN_CTRL1_PSEG1(3)
| CAN_CTRL1_PSEG2(3)
| CAN_CTRL1_PRESDIV(19));
}
break;
case (100):
if(CAN_CTRL1_REG(CANBaseAdd) & CAN_CTRL1_CLKSRC_MASK)
{
// 48M/40= 1.2M sclock, 12Tq
// PROPSEG = 3, LOM = 0x0, LBUF = 0x0, TSYNC = 0x0, SAMP = 1
// RJW = 3, PSEG1 = 4, PSEG2 = 4, PRESDIV = 40
CAN_CTRL1_REG(CANBaseAdd) = (0 | CAN_CTRL1_PROPSEG(2)
| CAN_CTRL1_RJW(2)
| CAN_CTRL1_PSEG1(3)
| CAN_CTRL1_PSEG2(3)
| CAN_CTRL1_PRESDIV(39));
}
else
{
// 12M/10= 1.2M sclock, 12Tq
// PROPSEG = 3, LOM = 0x0, LBUF = 0x0, TSYNC = 0x0, SAMP = 1
// RJW = 3, PSEG1 = 4, PSEG2 = 4, PRESDIV = 10
CAN_CTRL1_REG(CANBaseAdd) = (0 | CAN_CTRL1_PROPSEG(2)
| CAN_CTRL1_RJW(2)
| CAN_CTRL1_PSEG1(3)
| CAN_CTRL1_PSEG2(3)
| CAN_CTRL1_PRESDIV(9));
}
break;
case (125):
if(CAN_CTRL1_REG(CANBaseAdd) & CAN_CTRL1_CLKSRC_MASK)
{
// 48M/32= 1.5M sclock, 12Tq
// PROPSEG = 3, LOM = 0x0, LBUF = 0x0, TSYNC = 0x0, SAMP = 1
// RJW = 3, PSEG1 = 4, PSEG2 = 4, PRESDIV = 32
CAN_CTRL1_REG(CANBaseAdd) = (0 | CAN_CTRL1_PROPSEG(2)
| CAN_CTRL1_RJW(2)
| CAN_CTRL1_PSEG1(3)
| CAN_CTRL1_PSEG2(3)
| CAN_CTRL1_PRESDIV(31));
}
else
{
// 12M/8= 1.5M sclock, 12Tq
// PROPSEG = 3, LOM = 0x0, LBUF = 0x0, TSYNC = 0x0, SAMP = 1
// RJW = 3, PSEG1 = 4, PSEG2 = 4, PRESDIV = 8
CAN_CTRL1_REG(CANBaseAdd) = (0 | CAN_CTRL1_PROPSEG(2)
| CAN_CTRL1_RJW(2)
| CAN_CTRL1_PSEG1(3)
| CAN_CTRL1_PSEG2(3)
| CAN_CTRL1_PRESDIV(7));
}
break;
case (250):
if(CAN_CTRL1_REG(CANBaseAdd) & CAN_CTRL1_CLKSRC_MASK)
{
// 48M/16= 3M sclock, 12Tq
// PROPSEG = 3, LOM = 0x0, LBUF = 0x0, TSYNC = 0x0, SAMP = 1
// RJW = 2, PSEG1 = 4, PSEG2 = 4, PRESDIV = 16
CAN_CTRL1_REG(CANBaseAdd) = (0 | CAN_CTRL1_PROPSEG(2)
| CAN_CTRL1_RJW(1)
| CAN_CTRL1_PSEG1(3)
| CAN_CTRL1_PSEG2(3)
| CAN_CTRL1_PRESDIV(15));
}
else
{
// 12M/4= 3M sclock, 12Tq
// PROPSEG = 3, LOM = 0x0, LBUF = 0x0, TSYNC = 0x0, SAMP = 1
// RJW = 2, PSEG1 = 4, PSEG2 = 4, PRESDIV = 4
CAN_CTRL1_REG(CANBaseAdd) = (0 | CAN_CTRL1_PROPSEG(2)
| CAN_CTRL1_RJW(1)
| CAN_CTRL1_PSEG1(3)
| CAN_CTRL1_PSEG2(3)
| CAN_CTRL1_PRESDIV(3));
}
break;
case (500):
if(CAN_CTRL1_REG(CANBaseAdd) & CAN_CTRL1_CLKSRC_MASK)
{
// 48M/8=6M sclock, 12Tq
// PROPSEG = 3, LOM = 0x0, LBUF = 0x0, TSYNC = 0x0, SAMP = 1
// RJW = 2, PSEG1 = 4, PSEG2 = 4, PRESDIV = 6
CAN_CTRL1_REG(CANBaseAdd) = (0 | CAN_CTRL1_PROPSEG(2)
| CAN_CTRL1_RJW(1)
| CAN_CTRL1_PSEG1(3)
| CAN_CTRL1_PSEG2(3)
| CAN_CTRL1_PRESDIV(7));
}
else
{
// 12M/2=6M sclock, 12Tq
// PROPSEG = 3, LOM = 0x0, LBUF = 0x0, TSYNC = 0x0, SAMP = 1
// RJW = 2, PSEG1 = 4, PSEG2 = 4, PRESDIV = 2
CAN_CTRL1_REG(CANBaseAdd) = (0 | CAN_CTRL1_PROPSEG(2)
| CAN_CTRL1_RJW(1)
| CAN_CTRL1_PSEG1(3)
| CAN_CTRL1_PSEG2(3)
| CAN_CTRL1_PRESDIV(1));
}
break;
case (1000):
if(CAN_CTRL1_REG(CANBaseAdd) & CAN_CTRL1_CLKSRC_MASK)
{
// 48M/6=8M sclock
// PROPSEG = 4, LOM = 0x0, LBUF = 0x0, TSYNC = 0x0, SAMP = 1
// RJW = 1, PSEG1 = 1, PSEG2 = 2, PRESCALER = 6
CAN_CTRL1_REG(CANBaseAdd) = (0 | CAN_CTRL1_PROPSEG(3)
| CAN_CTRL1_RJW(0)
| CAN_CTRL1_PSEG1(0)
| CAN_CTRL1_PSEG2(1)
| CAN_CTRL1_PRESDIV(5));
}
else
{
// 12M/1=12M sclock,12Tq
// PROPSEG = 3, LOM = 0x0, LBUF = 0x0, TSYNC = 0x0, SAMP = 1
// RJW = 4, PSEG1 = 4, PSEG2 = 4, PRESCALER = 1
CAN_CTRL1_REG(CANBaseAdd) = (0 | CAN_CTRL1_PROPSEG(2)
| CAN_CTRL1_RJW(3)
| CAN_CTRL1_PSEG1(3)
| CAN_CTRL1_PSEG2(3)
| CAN_CTRL1_PRESDIV(0));
}
break;
default:
return 1;
}
|
|