HC32F460 Pin number一样,端口不一样,怎么配置不一样的中断
项目中需要多个中断,画的时候没注意,都使用了Pin00,但一个是PortB,一个是PortD,先初始化了PortB的Pin00,再初始化的PortD Pin00结果初始化后只有PortB的响应,PortD的不响应。哪位大神帮我改改,谢谢!void Key1_callback()
{
NVIC_ClearPendingIRQ(Int010_IRQn);
}
void Init_intruppt1()
{
stc_exint_config_t stcExtiConfig; /* 外部中断配置结构体 */
stc_irq_regi_conf_t stcIrqRegiConf; /*irq配置结构体 */
stc_port_init_t stcPortInit; /*管脚配置结构体 */
/* configuration structure initialization */
MEM_ZERO_STRUCT(stcExtiConfig);
MEM_ZERO_STRUCT(stcIrqRegiConf);
MEM_ZERO_STRUCT(stcPortInit);
/* Set PD06 as External Int Ch.6 input */
stcPortInit.enExInt = Enable;
stcPortInit.enPinMode = Pin_Mode_In;
stcPortInit.enInvert=Enable;
PORT_Init(PortB, Pin00, &stcPortInit);
stcExtiConfig.enExitCh = ExtiCh00;
stcExtiConfig.enFilterEn = Enable;
stcExtiConfig.enFltClk = Pclk3Div8;
stcExtiConfig.enExtiLvl = ExIntRisingEdge;
EXINT_Init(&stcExtiConfig);
stcIrqRegiConf.enIntSrc = INT_PORT_EIRQ0;
stcIrqRegiConf.enIRQn = Int010_IRQn;
stcIrqRegiConf.pfnCallback = &Key1_callback;
enIrqRegistration(&stcIrqRegiConf);
/* Clear Pending */
NVIC_ClearPendingIRQ(stcIrqRegiConf.enIRQn);
/* 配置优先级 */
NVIC_SetPriority(stcIrqRegiConf.enIRQn, DDL_IRQ_PRIORITY_15);
/* 使能 NVIC */
NVIC_EnableIRQ(stcIrqRegiConf.enIRQn);
}
void Fan_speedcount()
{
Fan_Speed++;
NVIC_ClearPendingIRQ(Int020_IRQn);
}
void Init_FanSpeed1()
{
stc_exint_config_t stcExtiConfig; /* 外部中断配置结构体 */
stc_irq_regi_conf_t stcIrqRegiConf; /*irq配置结构体 */
stc_port_init_t stcPortInit; /*管脚配置结构体 */
/* configuration structure initialization */
MEM_ZERO_STRUCT(stcExtiConfig);
MEM_ZERO_STRUCT(stcIrqRegiConf);
MEM_ZERO_STRUCT(stcPortInit);
stcPortInit.enExInt = Enable;
stcPortInit.enPinMode = Pin_Mode_In;
stcPortInit.enInvert=Enable;
PORT_Init(PortD, Pin00, &stcPortInit);
stcExtiConfig.enExitCh = ExtiCh00;
stcExtiConfig.enFilterEn = Enable;
stcExtiConfig.enFltClk = Pclk3Div8;
stcExtiConfig.enExtiLvl = ExIntRisingEdge;
EXINT_Init(&stcExtiConfig);
stcIrqRegiConf.enIntSrc = INT_PORT_EIRQ0;
stcIrqRegiConf.enIRQn = Int020_IRQn;
stcIrqRegiConf.pfnCallback = &Fan_speedcount;
enIrqRegistration(&stcIrqRegiConf);
/* Clear Pending */
NVIC_ClearPendingIRQ(stcIrqRegiConf.enIRQn);
/* 配置优先级 */
NVIC_SetPriority(stcIrqRegiConf.enIRQn, DDL_IRQ_PRIORITY_15);
/* 使能 NVIC */
NVIC_EnableIRQ(stcIrqRegiConf.enIRQn);
} 改板子吧,或看看这2个IO上面,哪个IO有输入捕获功能,这也能当中断用。
类似的问题 https://club.rt-thread.org/ask/question/54c7798ff53ce735.html 这算同一组中断源,只会响应靠前的那个中断也就是PB00。
想要全部用中断只能改板子,如果将就用不想浪费PCB板的话,那PD00就只能用查询了。 确定不同端口的Pin number对应的外部中断引脚。根据硬件原理,每个Pin number都可以配置为外部中断引脚。因此,需要查阅HC32F460的数据手册或参考手册,了解每个端口对应的Pin number和中断引脚配置。
根据不同的中断引脚配置,编写相应的中断服务程序(ISR)。每个中断源都需要编写相应的ISR,以处理对应的中断事件。在ISR中,可以实现特定的功能或操作,例如按键按下、串口接收数据等。
在主程序中,根据不同的中断源和端口,调用相应的中断服务程序。在调用ISR之前,需要先配置相应的中断触发方式和优先级。根据HC32F460的硬件原理,可以通过设置寄存器的特定位来配置中断触发方式(上升沿触发、下降沿触发等)和优先级。 需要注意的是,由于不同端口的Pin number对应的外部中断引脚不同,因此ISR的实现方式和处理逻辑也需要根据具体情况进行调整。此外,在使用中断时需要注意避免嵌套中断和优先级冲突等问题,以确保程序的正确性和稳定性。
页:
[1]