CAN0->MCR &= ~CAN_MCR_SOFTRST_MASK; CAN0->MCR |= CAN_MCR_MDIS_MASK; /* MDIS=1: Disable module before selecting clock */ CAN0->CTRL1 &= ~CAN_CTRL1_CLKSRC_MASK; /* CLKSRC=0: Clock Source = oscillator (8 MHz) */ CAN0->MCR &= ~CAN_MCR_MDIS_MASK; /* MDIS=0; Enable ...
初始化FLEXCAN_Reset函数后,一直等待在如下的循环代码里,如下图所示。 /* Wait until FlexCAN reset completes. */ while (0U != (base->MCR & CAN_MCR_SOFTRST_MASK)){ } 程序参考的是SDK里面的 evkbimxrt1050_flexcan_interrupt_transfer例程,默认的例程是可以用的 经过检查后发现错误产生的原因是因为...
CAN0->MCR &= ~CAN_MCR_SOFTRST_MASK;CAN0->MCR |= CAN_MCR_MDIS_MASK; /* MDIS=1: Dis...
使能FlexCAN 模块,通过配置 FLEXCAN_MCR[MDIS] 为 0,可以使能 FlexCAN 模块。使能后,FlexCAN 模块会自动进入冻结模式。在冻结模式下,设置 FLEXCAN_MCR_SOFTRST 为 1,软件重置 FlexCAN 模块寄存器。然后将所有的信息缓冲区的独立掩码寄存器和全局掩码寄存器的掩码值都设置为 1,表示接收信息缓冲区将只接收 ID 号...
在冻结模式下,设置 FLEXCAN_MCR_SOFTRST 为 1,软件重置 FlexCAN 模块寄存器。然后将所有的信息缓冲区的独立掩码寄存器和全局掩码寄存器的掩码值都设置为 1,表示接收信息缓冲区将只接收 ID 号和缓冲区提前配置的 ID 号完全相同的报文,同时将每个信息缓冲区寄存器也全部清 0。
canx->MCR |= CAN_MCR_FRZ_MASK; canx->MCR &= ~CAN_MCR_MDIS_MASK; while(!(canx->MCR & CAN_MCR_LPMACK_MASK)); canx->MCR ^= CAN_MCR_SOFTRST_MASK; while(canx->MCR & CAN_MCR_SOFTRST_MASK);while(!(canx->MCR & CAN_MCR_FRZACK_MASK));if...
/* Reset the FLEXCAN */ base->MCR = (base->MCR & ~CAN_MCR_SOFTRST_MASK) | CAN_MCR_SOFTRST(1U); /* Wait for reset cycle to complete */ while (((base->MCR & CAN_MCR_SOFTRST_MASK) >> CAN_MCR_SOFTRST_SHIFT) != 0U){} // hwDelay(1000); base->MCR = (base->MCR & ...
② MCR中的SOFT_RST位,它复位一些异步存储器映射寄存器。 软件复位被同步并且不得不跟随一个内部请求/确认过程交叉时钟范围。因此,它需要花一些时间以完全(扩展)完成其影响。 当软件复位被挂起SOFT_RST位保持有效,因此软件能轮询这一位,来了解复位什么时候已经完成。并且,当时钟在任何低功耗模式被停止时,软件复位不...
(3)CANMCR的SOFTRST位—与设备级软件复位等效 对FlexCAN模块的任何配置改变或初始化操作,都必须在冻结模式下进行。下面是通用的初始化配置步骤: (1)初始化CANCTRL寄存器中的操作模式 (2)初始化报文缓冲区 (3)根据接收掩码的需要初始化RXGMASK、RX14MASK和RX15MASK ...
8.1.6唤醒中断屏蔽(WAKE_MASK) —Bit 10 该位使能产生唤醒中断(Wake-Up) 。 0= 唤醒中断禁止。 1= 唤醒中断允许。 8.1.7软件复位(SOFT_RST) —Bit 9 当宣告了SOFT_RST, Flex CAN复位其内部状态机(序列发生器,错误计数器,错误标志,定时器) 以及接口寄存器(FC MCR, FCI MASK 1, FCI FLAG 1, FC MAX...