/*
GPIO功能
PB25按键上升延,触发中断,中断中闪烁PE2灯
*/

1、首先需要使能时钟,需要注意先使能对应CPU时钟,因为HPM支持双核
2、配置对应IOC控制器,一般只需要配置 HPM_IOC通用IO配置, PIOC和BIOC一般用不着,
寄存器配置在:562页
在这里插入图片描述在这里插入图片描述

3、配置GPIO 输入/输出 ,相关寄存器说明在:574页
4、使能中断,需要注意HPM中断函数需要自己注册

//程序配置
#include “Bsp_Gpio.h”
/*
PB25按键上升延,触发中断,中断中闪烁PE2灯
*/

void BSP_GPIO_Init(void)
{
gpio_interrupt_trigger_t trigger;

//使能CPU0 时钟
clock_add_to_group(clock_cpu0, 0);

//使能GPIO时钟
clock_add_to_group(clock_gpio, 0);

//IOC 通用IO控制器
//PIOC 电源管理域IO控制器
//BIOC 电池备份域IO控制器

/* 按键-- PB25配置 */
// IOC寄存器:配置IO外设功能,以及其基本配置:如上下拉。。。

// 配置为GPIO 模式 ,类似于STM32配置复用功能, HPM每个引脚对应的复用功能,都有对应的宏,
  HPM_IOC->PAD[IOC_PAD_PB25].FUNC_CTL = IOC_PB25_FUNC_CTL_GPIO_B_25; 

// IOC_PAD_PAD_CTL_PE_SET(1) :上下拉使能生效
// IOC_PAD_PAD_CTL_PS_SET(1) : 上拉
// IOC_PAD_PAD_CTL_HYS_SET(1) :施密特触发器生效
  HPM_IOC->PAD[IOC_PAD_PB25].PAD_CTL = IOC_PAD_PAD_CTL_PE_SET(1) | IOC_PAD_PAD_CTL_PS_SET(1) | IOC_PAD_PAD_CTL_HYS_SET(1);

//设置GPIO为输入模式
//HPM_GPIO0 :核0
  gpio_set_pin_input(HPM_GPIO0, GPIO_DI_GPIOB, 25);

  //配置上升延触发  
  trigger = gpio_interrupt_trigger_edge_rising;
  gpio_config_pin_interrupt(HPM_GPIO0, GPIO_DI_GPIOB, 25, trigger);

  //使能中断
  gpio_enable_pin_interrupt(HPM_GPIO0, GPIO_DI_GPIOB,25);

  //配置中断优先级,编号越小,中断优先级越高
  intc_m_enable_irq_with_priority(IRQn_GPIO0_B, 1);


  //配置PE2灯

  //配置为输出模式
	gpio_set_pin_output(HPM_GPIO0, GPIO_DI_GPIOE, 2);
  //输出低电平
	gpio_write_pin(HPM_GPIO0, GPIO_DI_GPIOE, 2, 0);

}

//HPM中断函数需要自己注册
// 注册中断函数
SDK_DECLARE_EXT_ISR_M(IRQn_GPIO0_B, isr_gpioB);
void isr_gpioB(void)
{
//翻转灯
gpio_toggle_pin(HPM_GPIO0, GPIO_DI_GPIOE,2);

//清除中断位
gpio_clear_pin_interrupt_flag(HPM_GPIO0, GPIO_DI_GPIOB,25);

}

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐