Merge pull request #504 from AubrCool/fix-can.drv.errors
Fix can.drv.errors
This commit is contained in:
commit
562ac32e32
|
@ -139,7 +139,7 @@ static void bxcan2_filter_init(struct rt_can_device *can)
|
||||||
CAN1->FMR |= FMR_FINIT;
|
CAN1->FMR |= FMR_FINIT;
|
||||||
mask = 0x01 << (i + 0);
|
mask = 0x01 << (i + 0);
|
||||||
off = i - BX_CAN2_FMRSTART;
|
off = i - BX_CAN2_FMRSTART;
|
||||||
if(i < pbxcan->fifo1filteroff) {
|
if(off < pbxcan->fifo1filteroff) {
|
||||||
if(pbxcan->filtermap[0].id32mask_cnt && off < pbxcan->filtermap[0].id32mask_cnt) {
|
if(pbxcan->filtermap[0].id32mask_cnt && off < pbxcan->filtermap[0].id32mask_cnt) {
|
||||||
CAN1->FS1R |= mask;
|
CAN1->FS1R |= mask;
|
||||||
CAN1->FM1R &= ~mask;
|
CAN1->FM1R &= ~mask;
|
||||||
|
@ -586,7 +586,7 @@ static rt_int32_t bxcanfindfilter(struct stm_bxcan *pbxcan,struct rt_can_filter_
|
||||||
if(pitem->rtr) {
|
if(pitem->rtr) {
|
||||||
thisid |= CAN_RTR_REMOTE;
|
thisid |= CAN_RTR_REMOTE;
|
||||||
}
|
}
|
||||||
if((off == 0 && pfilterreg->FR1 == thisid) ||
|
if((*off == 0 && pfilterreg->FR1 == thisid) ||
|
||||||
(*off == 1 && pfilterreg->FR2 == thisid)
|
(*off == 1 && pfilterreg->FR2 == thisid)
|
||||||
) {
|
) {
|
||||||
found = 1;
|
found = 1;
|
||||||
|
@ -959,14 +959,14 @@ static rt_err_t control(struct rt_can_device *can, int cmd, void *arg)
|
||||||
break;
|
break;
|
||||||
case RT_CAN_CMD_SET_BAUD:
|
case RT_CAN_CMD_SET_BAUD:
|
||||||
argval = (rt_uint32_t) arg;
|
argval = (rt_uint32_t) arg;
|
||||||
if(argval != CAN1MBaud ||
|
if(argval != CAN1MBaud &&
|
||||||
argval != CAN800kBaud ||
|
argval != CAN800kBaud &&
|
||||||
argval != CAN500kBaud ||
|
argval != CAN500kBaud &&
|
||||||
argval != CAN250kBaud ||
|
argval != CAN250kBaud &&
|
||||||
argval != CAN125kBaud ||
|
argval != CAN125kBaud &&
|
||||||
argval != CAN100kBaud ||
|
argval != CAN100kBaud &&
|
||||||
argval != CAN50kBaud ||
|
argval != CAN50kBaud &&
|
||||||
argval != CAN20kBaud ||
|
argval != CAN20kBaud &&
|
||||||
argval != CAN10kBaud ) {
|
argval != CAN10kBaud ) {
|
||||||
return RT_ERROR;
|
return RT_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -1063,7 +1063,7 @@ static int recvmsg(struct rt_can_device *can, void* buf, rt_uint32_t boxno)
|
||||||
pmsg->id = (uint32_t)0x1FFFFFFF & (pbxcan->sFIFOMailBox[boxno].RIR >> 3);
|
pmsg->id = (uint32_t)0x1FFFFFFF & (pbxcan->sFIFOMailBox[boxno].RIR >> 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
pmsg->rtr = (uint8_t)0x02 & pbxcan->sFIFOMailBox[boxno].RIR;
|
pmsg->rtr = (uint8_t) ((0x02 & pbxcan->sFIFOMailBox[boxno].RIR) >> 1);
|
||||||
pmsg->len = (uint8_t)0x0F & pbxcan->sFIFOMailBox[boxno].RDTR;
|
pmsg->len = (uint8_t)0x0F & pbxcan->sFIFOMailBox[boxno].RDTR;
|
||||||
pmsg->data[0] = (uint8_t)0xFF & pbxcan->sFIFOMailBox[boxno].RDLR;
|
pmsg->data[0] = (uint8_t)0xFF & pbxcan->sFIFOMailBox[boxno].RDLR;
|
||||||
pmsg->data[1] = (uint8_t)0xFF & (pbxcan->sFIFOMailBox[boxno].RDLR >> 8);
|
pmsg->data[1] = (uint8_t)0xFF & (pbxcan->sFIFOMailBox[boxno].RDLR >> 8);
|
||||||
|
@ -1127,7 +1127,7 @@ static struct stm_bxcan bxcan1data =
|
||||||
struct rt_can_device bxcan1;
|
struct rt_can_device bxcan1;
|
||||||
void CAN1_RX0_IRQHandler(void)
|
void CAN1_RX0_IRQHandler(void)
|
||||||
{
|
{
|
||||||
while(CAN1->RF0R & 0x11)
|
if(CAN1->RF0R & 0x03)
|
||||||
{
|
{
|
||||||
if ((CAN1->RF0R & CAN_RF0R_FOVR0) != 0)
|
if ((CAN1->RF0R & CAN_RF0R_FOVR0) != 0)
|
||||||
{
|
{
|
||||||
|
@ -1141,7 +1141,7 @@ void CAN1_RX0_IRQHandler(void)
|
||||||
}
|
}
|
||||||
void CAN1_RX1_IRQHandler(void)
|
void CAN1_RX1_IRQHandler(void)
|
||||||
{
|
{
|
||||||
while(CAN1->RF1R & 0x11)
|
if(CAN1->RF1R & 0x03)
|
||||||
{
|
{
|
||||||
if ((CAN1->RF1R & CAN_RF1R_FOVR1) != 0)
|
if ((CAN1->RF1R & CAN_RF1R_FOVR1) != 0)
|
||||||
{
|
{
|
||||||
|
@ -1262,7 +1262,7 @@ static struct stm_bxcan bxcan2data =
|
||||||
struct rt_can_device bxcan2;
|
struct rt_can_device bxcan2;
|
||||||
void CAN2_RX0_IRQHandler(void)
|
void CAN2_RX0_IRQHandler(void)
|
||||||
{
|
{
|
||||||
while(CAN2->RF0R & 0x11)
|
if(CAN2->RF0R & 0x03)
|
||||||
{
|
{
|
||||||
if ((CAN2->RF0R & CAN_RF0R_FOVR0) != 0)
|
if ((CAN2->RF0R & CAN_RF0R_FOVR0) != 0)
|
||||||
{
|
{
|
||||||
|
@ -1276,7 +1276,7 @@ void CAN2_RX0_IRQHandler(void)
|
||||||
}
|
}
|
||||||
void CAN2_RX1_IRQHandler(void)
|
void CAN2_RX1_IRQHandler(void)
|
||||||
{
|
{
|
||||||
while(CAN2->RF1R & 0x11)
|
if(CAN2->RF1R & 0x03)
|
||||||
{
|
{
|
||||||
if ((CAN2->RF1R & CAN_RF1R_FOVR1) != 0)
|
if ((CAN2->RF1R & CAN_RF1R_FOVR1) != 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -65,7 +65,7 @@ rt_inline int _can_int_rx(struct rt_can_device *can, struct rt_can_msg *data, in
|
||||||
can->hdr[hdr].msgs--;
|
can->hdr[hdr].msgs--;
|
||||||
}
|
}
|
||||||
listmsg->owner = RT_NULL;
|
listmsg->owner = RT_NULL;
|
||||||
} else
|
} else if(hdr == -1)
|
||||||
#endif /*RT_CAN_USING_HDR*/
|
#endif /*RT_CAN_USING_HDR*/
|
||||||
if (!rt_list_isempty(&rx_fifo->uselist))
|
if (!rt_list_isempty(&rx_fifo->uselist))
|
||||||
{
|
{
|
||||||
|
@ -97,6 +97,8 @@ rt_inline int _can_int_rx(struct rt_can_device *can, struct rt_can_msg *data, in
|
||||||
RT_ASSERT(rx_fifo->freenumbers <= can->config.msgboxsz);
|
RT_ASSERT(rx_fifo->freenumbers <= can->config.msgboxsz);
|
||||||
rt_hw_interrupt_enable(level);
|
rt_hw_interrupt_enable(level);
|
||||||
listmsg = RT_NULL;
|
listmsg = RT_NULL;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
data ++; msgs -= sizeof(struct rt_can_msg);
|
data ++; msgs -= sizeof(struct rt_can_msg);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue