先辑 HPM6E80 学习笔记 - GPIO控制
2、配置对应IOC控制器,一般只需要配置 HPM_IOC通用IO配置, PIOC和BIOC一般用不着,3、配置GPIO 输入/输出 ,相关寄存器说明在:574页。PB25按键上升延,触发中断,中断中闪烁PE2灯。4、使能中断,需要注意HPM中断函数需要自己注册。PB25按键上升延,触发中断,中断中闪烁PE2灯。//PIOC 电源管理域IO控制器。//BIOC 电池备份域IO控制器。//HPM中断函
/*
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);
}
更多推荐



所有评论(0)