中级会员
 
- 积分
- 425
- 金钱
- 425
- 注册时间
- 2019-11-13
- 在线时间
- 50 小时
|
1金钱
望大佬们帮我看看这段代码怎么理解?
部分代码如下:
1. 芯片为C8T6,CAN管脚选择PB8,PB9
2. 主函数依次有如下配置:
CAN_Config();
CAN1_Config16BitFilter();
CAN1_Config16BitFilter_1();
3. CAN1_Config16BitFilter() 中有 CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
4. CAN1_Config16BitFilter_1() 中有 CAN_ITConfig(CAN1, CAN_IT_FMP1, ENABLE);
5. 中断优先级配置中包括如下代码:
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
6. 对应也有两个中断服务函数 void CAN1_RX1_IRQHandler(void)和 void USB_LP_CAN1_RX0_IRQHandler(void)
问题如下:
两个16位过滤器分别过滤了两个CAN信号,一旦接收到信号后,到底是运行哪个中断服务函数?
|
最佳答案
查看完整内容[请看2#楼]
感觉当初问的问题挺幼稚的
CAN1_Config16BitFilter()过滤的信号走CAN1_RX0_IRQHandler()函数;
CAN1_Config16BitFilter_1()过滤的信号走CAN1_RX1_IRQHandler()函数;
因为:
CAN1_RX0_IRQHandler:can1的FIFO0接收中断。
CAN1_RX1_IRQHandler:can1的FIFO1接收中断。
FMPIE0: FIFO0消息挂号中断允许
FMPIE1: FIFO1消息挂号中断允许
|