embedded - CAN的RX Fifo1没有产生中断回调(基本上它没有接收数据)
问题描述
CAN 总线上有两种类型的消息。这些是广播消息和默认消息。目前,我对这两个消息都使用了 fifo0(效果很好)。但我想使用 fifo1 专门用于广播消息。下面是我的初始化代码
uint8 BspCan_RxFilterConfig(uint32 filterId, uint32 filterMask, uint8 filterBankId, uint8 enableFlag, uint8 fifoAssignment)
{
///\todo Add method for calculating filter on the fly
CAN_FilterTypeDef canBusFilterConfig;
FunctionalState filterEnableFlag = ENABLE;
if(enableFlag == 0)
{
filterEnableFlag = DISABLE;
}
else
{
filterEnableFlag = ENABLE;
}
/*Define filter used to determine if application needs to handle message on the CAN bus or if it should
ignore it. If the selected rx FIFO is changed, the rx functions in this module must also be updated.
Using mask mode with all bits set to "don't care"*/
canBusFilterConfig.FilterBank = filterBankId; //Identification of which of the filter banks to define.
canBusFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; //Sets whether to filter out messages based on a specific id or a list
canBusFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; //Sets the width of the filter, 32-bit width means filter applies to full range of std id, extended id, IDE, and RTR bits
canBusFilterConfig.FilterIdHigh = (0xFFFF0000 & filterId)>>16; //For upper 16 bits, dominant bit is expected (logic 0)
canBusFilterConfig.FilterIdLow = 0x0000FFFF & filterId; //For Lower 16 bits, dominant bit is expected (logic 0)
canBusFilterConfig.FilterMaskIdHigh = (0xFFFF0000 & filterMask)>>16; //Upper 16 bits are don't care
canBusFilterConfig.FilterMaskIdLow = 0x0000FFFF & filterMask; //Lower 16 bits are don't care
//canBusFilterConfig.FilterFIFOAssignment = CAN_FILTER_FIFO0; //Sets which rx FIFO to which to apply the filter settings
canBusFilterConfig.FilterActivation = filterEnableFlag;
canBusFilterConfig.SlaveStartFilterBank = 1; //Bank for the defined filter. Arbitrary value.
if (fifoAssignment == 0)
{
canBusFilterConfig.FilterFIFOAssignment = CAN_FILTER_FIFO0;
}
else
{
canBusFilterConfig.FilterFIFOAssignment = CAN_FILTER_FIFO1;
}
//Only fails if CAN peripheral is not in ready or listening state
if (HAL_CAN_ConfigFilter(&gCanBusH, &canBusFilterConfig) != HAL_OK)
{
return(ERR_CAN_INIT_FAILED);
}
else
{
return(SZW_NO_ERROR);
}
}//end BspCan_RxFilterConfig
初始化时,fifo0 可以正常工作,但 fifo1 不能。如果我只是为这两种类型的消息初始化 fifo1,它不会产生中断。我在这里做错了什么?如何初始化 fifo1 以使其工作并产生中断?我也试过不使用数字滤波器仍然没有运气。
提前致谢,
解决方案
推荐阅读
- swift - UICollectionViewCell:如何将 UICollectionView 的单元格居中
- oauth-2.0 - Microsoft Azure Directory oAuth redirect_uri 不接受状态查询参数
- json - 如何正确使用 Scala Play Read?
- ios - 单击按钮后立即执行 SwiftUI 按钮操作,而不是单击释放
- java - 在 Spring Boot 中创建通用 mongo 存储库
- security - 使用 Authorize filter .net core 访问图像
- python - 具有提供的加权率的数据框列的加权平均值
- elasticsearch - 弹性搜索中的 LM
- shell - 如何检查文件夹中是否存在文件类型
- python - 当图形导出到 html 时,plotly on_click 事件不起作用