首页 > 其他分享 >【MT9669】GPIO IRQ功能在驱动中使用说明

【MT9669】GPIO IRQ功能在驱动中使用说明

时间:2024-06-19 21:28:52浏览次数:28  
标签:MT9669 GPIO IRQ PADMUX EXT irq gpio CONFIG

在MT9669的Linux Kernel中,驱动要如何实现中断操作呢?下面是对于非PM GPIO口实现IRQ的相应操作说明:

1.在MT9669中对于GPIO IRQ的对应关系说明如下:

  在bootable/bootloader/mboot-mtk/mboot/sboot/inc/M7642/board/BD_MT167B_10AT_MT5888_M7642.h中有如下内容:

#define PADS_EXTINT0                            DISABLE                 //CONFIG_PADMUX_MODE1: EXT INT0
#define PADS_EXTINT1                            DISABLE                 //CONFIG_PADMUX_MODE1: EXT INT1
                                                                        //CONFIG_PADMUX_MODE2: EXT INT1
#define PADS_EXTINT2                            DISABLE                 //CONFIG_PADMUX_MODE1: EXT INT2
                                                                        //CONFIG_PADMUX_MODE2: EXT INT2
#define PADS_EXTINT3                            DISABLE                 //CONFIG_PADMUX_MODE1: EXT INT3
                                                                        //CONFIG_PADMUX_MODE2: EXT INT3
#define PADS_EXTINT4                            DISABLE                 //CONFIG_PADMUX_MODE1: EXT INT4
                                                                        //CONFIG_PADMUX_MODE2: EXT INT4
#define PADS_EXTINT5                            DISABLE                 //CONFIG_PADMUX_MODE1: EXT INT5
#define PADS_EXTINT6                            DISABLE                 //CONFIG_PADMUX_MODE1: EXT INT6
                                                                        //CONFIG_PADMUX_MODE2: EXT INT6
#define PADS_EXTINT7                            DISABLE                 //CONFIG_PADMUX_MODE1: EXT INT7

  在kernel/fusion/mstar2/hal/m7642/gpio/mhal_gpio.c中有如下内容:

/* ext_gpio_int in nonPM FIQ page in interrupt table */
/* must check gpio_func_mux page in chiptop table */
/* extend pad mux in below struct */
const int gpio_IntPad[INT_COUNT]=
{
    132,     //PAD_PWM2
    133,     //PAD_SPDIF_IN
    79,      //PAD_I2S_OUT_MCK
    95,      //PAD_PCM2_RESET
    63,      //PAD_GPIO9
    64,      //PAD_GPIO10
    65,      //PAD_GPIO11
    66       //PAD_GPIO12
};
 
const int gpio_IRQnum[INT_COUNT]= {
                                E_FIQEXPL_EXT_GPIO0, /*E_INT_FIQ_GPIO0,*/
                                E_FIQEXPL_EXT_GPIO1, /*E_INT_FIQ_GPIO1,*/
                                E_FIQEXPL_EXT_GPIO2, /*E_INT_FIQ_GPIO2,*/
                                E_FIQEXPH_EXT_GPIO3, /*E_INT_FIQ_GPIO3,*/
                                E_FIQEXPH_EXT_GPIO4, /*E_INT_FIQ_GPIO4,*/
                                E_FIQEXPH_EXT_GPIO5, /*E_INT_FIQ_GPIO5,*/
                                E_FIQEXPH_EXT_GPIO6, /*E_INT_FIQ_GPIO6,*/
                                E_FIQEXPH_GPIOINIT7, /*E_INT_FIQ_GPIO7,*/
                                            };

在mhal_gpio.c文件中也有关于PM口的定义,如需使用到,请查阅该文件。

  从上面的代码,我们很清楚看到了非PM口IRQ的映射关系,以及哪些GPIO口可用于做为中断口。下面步骤2和3中以GPIO12口作为中断口为例说明相应的代码配置过程。

2.mboot部分

  目前,我们测试了GPIO12口作为IRQ功能,在mboot中需要修改bootable/bootloader/mboot-mtk/mboot/sboot/inc/M7642/board/BD_MT167B_10AT_MT5888_M7642.h文件,对应的设置项如下:

#define PADS_EXTINT7                            CONFIG_PADMUX_MODE1
#define PAD_GPIO12_IS_GPIO                      GPIO_IN

3.Kernel部分

  内核配置文件中,需要打开如下配置才能使用相关API:

CONFIG_EXT_INTERRUPT_SUPPORT=y

  Register IRQ:

static irq_handler_t handle_my_gpio_irq(unsigned int irq, void* device, struct pt_regs* registers) {
    /* TODO Something */
    return (irq_handler_t) IRQ_HANDLED;
}
 
static int my_gpio_irq = PAD_GPIO12;
 
ret = gpio_direction_input(my_gpio_irq);
 
ret = request_gpio_irq(
    my_gpio_irq,
    (irq_handler_t) handle_my_gpio_irq,
    IRQF_TRIGGER_FALLING,
    NULL);

  Get IRQ Num:

my_gpio_irq_num = MHal_GPIO_Get_Interrupt_Num(my_gpio_irq);

  Enable IRQ:

enable_irq(MHal_GPIO_Get_Interrupt_Num(my_gpio_irq));

  Disable IRQ:

disable_irq(MHal_GPIO_Get_Interrupt_Num(my_gpio_irq));

  Unregister IRQ:

MHal_GPIO_Disable_Interrupt(my_gpio_irq, NULL);

标签:MT9669,GPIO,IRQ,PADMUX,EXT,irq,gpio,CONFIG
From: https://blog.csdn.net/guochongxin/article/details/139754769

相关文章

  • 【MT9669】PM51代码编译环境安装及使用案例
    最近在调试GPIO开机时,发现一直配置不通,排查到最后是因为导入支持PMUART开机改到的PM.bin文件把GPIO开机功能屏蔽掉了,回退后验证配置GPIO唤醒开机是能实现的。于是综合确认后,需要改到PM.bin文件,下面是相应的编译环境安装及针对本需求做的处理流程:1.在Windows操作系统下,双击“c......
  • 泰山派学习12--GPIO_LED字符设备驱动
    一、GPIO寄存器1、对GPIO进行控制有以下步骤①:是能GPIO的时钟(默认开启,不用配置);②:设置引脚复用为GPIO(复位默认配置GPIO,不用配置);③:设置引脚属性(上下拉、速率、驱动能力,默认不用配置);④:控制GPIO引脚为输出,并且输出高低电平。2、GPIO功能引脚及寄存器rk3566有5个gpio控制器......
  • GPIO介绍+点灯(寄存器+HAL库)
    1.GPIO概述GPIO(General-purposeinput/output):通用型输入输出。简单理解就是我们可以控制输入输出的STM32引脚,统称为GPIO。GPIO存在的意义就是用程序控制或读取他们的输出或输入。1.1.GPIO总体说明STM32有多组GPIO,比如我们使用的芯片:STM32F103ZET6共有7组GPIO端口,他们......
  • STM32学习记录(二)————基本GPIO控制
    文章目录前言1.GPIO基础知识2.IO八种工作模式3固件库实现LED点灯前言一个学习STM32的小白有问题评论区或私信指出~1.GPIO基础知识GPIO(General-Purposeinput/output,通用输入/输出接口)用于感知外部信号(输入模式)和控制外部设备(输出模式)简单模块:LED,按键,蜂......
  • 【STM32F1例程2】GPIO外部中断输入
    1.实验说明无需连外部杜邦线,下载程序,全速运行,按右边按键看到LEDD1(PB4引脚驱动)亮暗能变化一次2.主要代码先上main.c#include"delay.h"#include"sys.h"//外部中断0配置,PA0脚产生外部中断是外部中断0voidEXTI0_Config(void){ EXTI_InitTypeDefEXTI_InitStructur......
  • MSPM0——GPIO的使用
    在dl_gpio.h库函数文件中,有三个函数可以控制引脚状态。__STATIC_INLINEvoidDL_GPIO_setPins(GPIO_Regs*gpio,uint32_tpins)该函数为控制引脚输出高电平,按照本例程中LED的引脚,则可以写为DL_GPIO_setPins(LED1_PORT,LED1_PIN_14_PIN);__STATIC_INLINEvoidDL_GPIO_c......
  • 【linux-IMX6ULL-pinctrl和gpio子系统】
    目录1.pinctrl子系统1.1pinctrl子系统简介1.2pinctrl子系统使用1.2.1追加pin节点1.2.2配置引脚信息节点2.GPIO子系统2.1GPIO子系统简介2.1gpio子系统API函数3.检查PIN是否被其他外设使用1.pinctrl子系统1.1pinctrl子系统简介  pinctrl和gpio子系......
  • STM32使用定时器在普通gpio上模拟pwm-红牛开发板LED1的亮度调节
    stm32F103zet只有固定的几个针脚可以输出tim定时器信号,在不支持tim输出的口上就没法输出pwm,在红牛开发版上的表现就是控制lcd屏幕亮度的a1针脚,可以输出pwm,屏幕亮度可以无极调节,但是4个led灯就只能控制开关。使用arduino的analogWrite函数,只能调节开关。可以用定时器的中断来控制......
  • 【STM32基础学习】--GPIO原理
    一.GPIO入门知识全称: generalpurposeintputoutpot(通用输入输出端口)。可以做输入也可以做输出。STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯,控制以及数据采集的功能。二.GPIO的八种工作模式1.4种输入模式(可以读取端口的高低电平或者电压,用于读取按键......
  • 【GD32F303红枫派使用手册】第二节 GPIO-流水灯实验
    2.1实验内容通过本实验主要学习以下内容:GPIO结构及原理;GPIO输出功能实现;LED驱动原理。2.2实验原理2.2.1GPIO外设原理GD32F303系列MCU最多可支持112个通用I/O引脚(GPIO),分别为PA0~PA15,PB0~PB15,PC0~PC15,PD0~PD15,PE0~PE15,PF0~PF15和PG0~PG15,各......