HC32L130 外部IO中断

1.HC32L130外部端口PB2

#include "app_SD3078.h"

#define RCC_RTC_INT_PORT 	SysctrlPeripheralGpio		/* GPIO端口时钟 */

#define PORT_RTC_INT	GpioPortB			/* GPIO端口 */
#define PIN_RTC_INT		GpioPin2		/* GPIO引脚 */

void App_RTC_INTInit(void){
    stc_gpio_cfg_t stcGpioCfg;
    
    ///< 打开GPIO外设时钟门控
    Sysctrl_SetPeripheralGate(RCC_RTC_INT_PORT, TRUE);
    
    ///< 端口方向配置->输入
    stcGpioCfg.enDir = GpioDirIn;
    ///< 端口驱动能力配置->高驱动能力
    stcGpioCfg.enDrv = GpioDrvL;
    ///< 端口上下拉配置->无
    stcGpioCfg.enPu = GpioPuDisable;
    stcGpioCfg.enPd = GpioPdDisable;
    ///< 端口开漏输出配置->开漏输出关闭
    stcGpioCfg.enOD = GpioOdDisable;
    ///< 端口输入/输出值寄存器总线控制模式配置->AHB
    stcGpioCfg.enCtrlMode = GpioAHB;
    ///< GPIO IO USER KEY初始化
    Gpio_Init(PORT_RTC_INT, PIN_RTC_INT, &stcGpioCfg); 

    ///< 打开并配置USER KEY为下降沿中断
    Gpio_EnableIrq(PORT_RTC_INT, PIN_RTC_INT, GpioIrqFalling);
    ///< 使能端口PORTA系统中断
    EnableNvic(PORTB_IRQn, IrqLevel2, TRUE); 	
}

///< PortB中断服务函数
void PortB_IRQHandler(void)
{
    if(TRUE == Gpio_GetIrqStatus(PORT_RTC_INT, PIN_RTC_INT))
    {            

				printf("PortB_IRQHandler");

      Gpio_ClearIrq(PORT_RTC_INT, PIN_RTC_INT);    
    }

} 

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HC32L130单片机的外部中断可以通过以下步骤进行配置: 1. 配置外部中断引脚,确定所需的中断引脚及其所属的GPIO口。 2. 配置中断触发方式,包括上升沿触发、下降沿触发、边沿触发等。 3. 使能中断,开启外部中断的总开关。 下面是一个简单的外部中断配置例程: ```c #include "hc32l130.h" void ExtIntInit(void) { // 配置中断引脚所属的GPIO口 M0P_GPIO->PAADS &= ~(1 << 0); // PA0不使用模拟功能 M0P_GPIO->PAOE &= ~(1 << 0); // PA0不使用开漏输出 M0P_GPIO->PAPU &= ~(1 << 0); // PA0不使用上拉 M0P_GPIO->PADIR &= ~(1 << 0); // PA0设置为输入 M0P_GPIO->PASTP |= (1 << 0); // PA0不作为休眠唤醒引脚 M0P_GPIO->PAINEN |= (1 << 0); // PA0使能输入 // 配置中断触发方式为上升沿触发 M0P_EXTINT->ENIR_f.EN0 = 1; // 使能中断0 M0P_EXTINT->EINT0_f.ELVL = 1; // 上升沿触发 // 使能外部中断 NVIC_ClearPendingIRQ(EXTI0_IRQn); // 清除中断标志 NVIC_SetPriority(EXTI0_IRQn, 3); // 设置中断优先级 NVIC_EnableIRQ(EXTI0_IRQn); // 使能中断 } void EXTI0_IRQHandler(void) { // 处理中断事件 // ... // 清除中断标志 M0P_EXTINT->EIFR_f.EIF0 = 1; } int main(void) { // 系统初始化 // ... // 初始化外部中断 ExtIntInit(); while (1) { // 主循环 // ... } return 0; } ``` 在上面的例程中,我们首先配置了PA0口作为中断引脚,并设置了中断触发方式为上升沿触发。然后通过使能中断,开启了外部中断的总开关。在中断处理函数中,我们可以处理中断事件,并清除中断标志以便下一次中断触发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值