关于驱动中调用内核函数实现gpio寄存器的设置

发布者:advancement4最新更新时间:2019-11-12 来源: 51hei关键字:驱动  调用内核函数  gpio寄存器 手机看文章 扫描二维码
随时随地手机看文章

系列函数

系列函数的定义在arch/arm/mach-s3c2410/gpio.c,相关的宏定义在include/asm-arm/arch-s3c2410/regs-gpio.h

(1)void s3c2410_gpio_setpin(unsigned int pin, unsigned intto);

设置相应GPIO口的输出值,例如:

pin=S3C2410_GPG2,to=0,则设置S3C2410_GPG2的输出值为0;

pin=S3C2410_GPG2,to=1,则设置S3C2410_GPG2的输出值为1。

函数定义:

viewplain


void s3c2410_gpio_setpin(unsigned int pin, unsigned int to)  

{  

    void __iomem *base = S3C2410_GPIO_BASE(pin);  

    unsigned long offs = S3C2410_GPIO_OFFSET(pin);  

    unsigned long flags;  

    unsigned long dat;  

  

    local_irq_save(flags);  

  

    dat = __raw_readl(base + 0x04);  

    dat &= ~(1 << offs);  

    dat |= to << offs;  

    __raw_writel(dat, base + 0x04);  

  

    local_irq_restore(flags);  

}  

EXPORT_SYMBOL(s3c2410_gpio_setpin);  



(2)unsigned int s3c2410_gpio_getpin(unsigned intpin);

获取相应GPIO口的值。

函数定义:

viewplain


unsigned int s3c2410_gpio_getpin(unsigned int pin)  

{  

    void __iomem *base = S3C2410_GPIO_BASE(pin);  

    unsigned long offs = S3C2410_GPIO_OFFSET(pin);  

  

    return __raw_readl(base + 0x04) & (1<< offs);  

}  

  

EXPORT_SYMBOL(s3c2410_gpio_getpin);  



(3)void s3c2410_gpio_cfgpin(unsigned int pin, unsigned intfunction);

设置相应GPIO口的工作模式,输入、输出、中断等。

函数定义:

viewplain


void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function)  

{  

    void __iomem *base = S3C2410_GPIO_BASE(pin);  

    unsigned long mask;  

    unsigned long con;  

    unsigned long flags;  

  

    if (pin < S3C2410_GPIO_BANKB) {  

        mask = 1 << S3C2410_GPIO_OFFSET(pin);  

    } else {  

        mask = 3 << S3C2410_GPIO_OFFSET(pin)*2;  

    }  

  

    local_irq_save(flags);  

  

    con  = __raw_readl(base + 0x00);  

    con &= ~mask;  

    con |= function;  

  

    __raw_writel(con, base + 0x00);  

  

    local_irq_restore(flags);  

}  

  

EXPORT_SYMBOL(s3c2410_gpio_cfgpin);  



(4)unsigned int s3c2410_gpio_getcfg(unsigned intpin);

获取相应GPIO口的工作模式,输入、输出、中断等。

函数定义:

viewplain


unsigned int s3c2410_gpio_getcfg(unsigned int pin)  

{  

    void __iomem *base = S3C2410_GPIO_BASE(pin);  

    unsigned long mask;  

  

    if (pin < S3C2410_GPIO_BANKB) {  

        mask = 1 << S3C2410_GPIO_OFFSET(pin);  

    } else {  

        mask = 3 << S3C2410_GPIO_OFFSET(pin)*2;  

    }  

  

    return __raw_readl(base) & mask;  

}  

  

EXPORT_SYMBOL(s3c2410_gpio_getcfg);  



(5)voids3c2410_gpio_pullup(unsigned int pin, unsigned intto);

设置相应的GPIO口的电平,例如:

pin=S3C2410_GPG2,to=0,则拉低S3C2410_GPG2,也就是设置S3C2410_GPG2的值为0;

pin=S3C2410_GPG2,to=1,则拉高S3C2410_GPG2,也就是设置S3C2410_GPG2的值为1。

函数定义:

viewplain


void s3c2410_gpio_pullup(unsigned int pin, unsigned int to)  

{  

    void __iomem *base = S3C2410_GPIO_BASE(pin);  

    unsigned long offs = S3C2410_GPIO_OFFSET(pin);  

    unsigned long flags;  

    unsigned long up;  

  

    if (pin < S3C2410_GPIO_BANKB)  

        return;  

  

    local_irq_save(flags);  

  

    up = __raw_readl(base + 0x08);  

    up &= ~(1L << offs);  

    up |= to << offs;  

    __raw_writel(up, base + 0x08);  

  

    local_irq_restore(flags);  

}  

  

EXPORT_SYMBOL(s3c2410_gpio_pullup);  



(6)unsigned int s3c2410_modify_misccr(unsigned int clear,unsigned int change);

杂项设置,设置寄存器MISCCR,具体看函数定义。

函数定义:

viewplain


unsigned int s3c2410_modify_misccr(unsigned int clear, unsigned int change)  

{  

    unsigned long flags;  

    unsigned long misccr;  

  

    local_irq_save(flags);  

    misccr = __raw_readl(S3C2410_MISCCR);  

    misccr &= ~clear;  

    misccr ^= change;  

    __raw_writel(misccr, S3C2410_MISCCR);  

    local_irq_restore(flags);  

  

    return misccr;  

}  

  

EXPORT_SYMBOL(s3c2410_modify_misccr);  



(7)int s3c2410_gpio_getirq(unsigned intpin);

获取相应的GPIO口所对应的中断号。

函数定义:

viewplain


int s3c2410_gpio_getirq(unsigned int pin)  

{  

    if (pin < S3C2410_GPF0 || pin > S3C2410_GPG15_EINT23)  

        return -1;   

  

    if (pin < S3C2410_GPG0 && pin > S3C2410_GPF7)  

        return -1;   

  

    if (pin < S3C2410_GPF4)  

        return (pin - S3C2410_GPF0) + IRQ_EINT0;  

  

    if (pin < S3C2410_GPG0)  

        return (pin - S3C2410_GPF4) + IRQ_EINT4;  

  

    return (pin - S3C2410_GPG0) + IRQ_EINT8;  

}  

  

EXPORT_SYMBOL(s3c2410_gpio_getirq);  



(8)int s3c2410_gpio_irqfilter(unsigned int pin, unsignedint on, unsigned int config);

中断过滤配置,具体看函数定义。

函数定义:

viewplain


int s3c2410_gpio_irqfilter(unsigned int pin, unsigned int on,  

               unsigned int config)  

{  

    void __iomem *reg = S3C2410_EINFLT0;  

    unsigned long flags;  

    unsigned long val;  

  

    if (pin < S3C2410_GPG8 || pin > S3C2410_GPG15)  

        return -1;  

  

    config &= 0xff;  

  

    pin -= S3C2410_GPG8_EINT16;  

    reg += pin & ~3;  

  

    local_irq_save(flags);  

  

      

  

    val = __raw_readl(reg);  

    val &= ~(0xff << ((pin & 3) * 8));  

    val |= config << ((pin & 3) * 8);  

    __raw_writel(val, reg);  

  

      

  

    val = __raw_readl(S3C2410_EXTINT2);  

    val &= ~(1 << ((pin * 4) + 3));  

    val |= on << ((pin * 4) + 3);  

    __raw_writel(val, S3C2410_EXTINT2);  

  

    local_irq_restore(flags);  

  

    return 0;  

}  

  

EXPORT_SYMBOL(s3c2410_gpio_irqfilter); 

关键字:驱动  调用内核函数  gpio寄存器 引用地址:关于驱动中调用内核函数实现gpio寄存器的设置

上一篇:让arm开发板的mnt文件夹可以显示linux虚拟机中的成为挂载
下一篇:ARM for ADS1.2

推荐阅读最新更新时间:2024-11-09 13:38

意法半导体VIPower M0-7 H桥驱动器:有效降低EMI
作者:意法半导体意大利Catania公司Sebastiano Grasso, Leonardo Agatino Miccoli, Giusy Gambino, Filippo Scrimizzi, 随着汽车市场不断发展,车企对自动化、安全性和功率优化的需求日益增长。在这种背景下,直流电机在车身应用中发挥着重要作用。在油车和电动车门锁、车窗升降、油液泵、方向盘调节、电动后备箱等各种功能设备都会用到直流电机。在可靠性、易用性、监测和保护方面,用专用驱动芯片控制直流电机具有优势,并且能够提供先进的驱动功能,例如,用PWM输入信号驱动电机,通过改变占空比调节电机转速和转矩,最终实现高级的功能。但是,PWM信号会引起明显的电磁干扰
[电源管理]
意法半导体VIPower M0-7 H桥<font color='red'>驱动</font>器:有效降低EMI
SC2121兼容AD2S1205在永磁同步电机驱动系统中的应用
永磁同步电机由于结构简单可靠,维护性好,功率密度和工作效率高、控制性能好,广泛应用于高速大功率的调速系统中,并且在大部分场合中采用转子磁场定向矢量控制策略。因此,需要实时检测电机定转子的相对位置以及转子速度,来实现转矩、速度和位置的闭环控制。 常用的位置检测传感器有光电编码器和旋转变压器。光电编码器虽然测量精度高,但是起动时需要进行转轴定位,抗震性差,难以适应恶劣工况;而旋转变压器具有抗震性好、工作可靠、寿命长、对机械和电气噪声不敏感,耐腐蚀、耐高温和易实现高速位置检测的优点,非常适合需要快速响应和抗冲要求高的调速系统。 不过旋转变压器需要外加励磁信号作为输入信号,其输出为含位置信息的模拟信号,因此必须将模拟位置信号转换成
[嵌入式]
SC2121兼容AD2S1205在永磁同步电机<font color='red'>驱动</font>系统中的应用
基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据
概述 STHS34PF80传感器项目种修改 Arduino 脚本,重新移植到STM32的MCU中。 该项目基于STHS34PF80 IR温度传感器,能够检测环境和物体温度,并且在最大4米范围内检测存在和运动。有一个Arduino脚本,显示如何为基本环境和物体温度测量配置传感器,并如何配置嵌入式功能算法,并使用它们检测存在和运动。脚本允许连续或一次性模式,允许更改低通滤波器和检测阈值以实现各种检测行为。脚本利用内嵌的中断引擎来检测温度数据的就绪状态,以及通知存在和运动事件。 本节将在上节代码中继续配置,通过获取模块的状态标志位来检测是否有人体存在。 最近在弄ST和瑞萨RA的课程,需要样片的可以加群申请:6_15061293 。 视
[单片机]
基于STM32CUBEMX<font color='red'>驱动</font>TMOS模块STHS34PF80(6)----获取状态数据
老查的ARM学习笔记:chapter-2(linux总线设备驱动详解)
1 总线设备驱动模型概述 随着技术的不断进步,系统的拓扑结构也越来越复杂,对智能电源管理,热插拔的支持要求也越来越高,2.3内核已经难以满足这些要求,为了适应这种形势需要,linux2.6内核提供了全新的内核设备模型。 总线的作用就是感知设备是否连接上usb,网卡等等,总线设备驱动模型更好的支持热插拔的设备,也更好的提供移植性。 在设备模型中,我们将看到,设备驱动主要是由总线,驱动程序,设备三个部分构成,通过这三个标准部件,把各种纷繁杂乱的设备归结过来,达到简化设备驱动编写的目的,下面我们就将按三个部分总线,驱动和设备来学习一下。 2 总线 1 总线的描述 在Linux 内核中, 总线由bus_type 结构表示,在这个结构中
[单片机]
老查的ARM学习笔记:chapter-2(linux总线设备<font color='red'>驱动</font>详解)
视频驱动电路
[嵌入式]
视频<font color='red'>驱动</font>电路
micro2440写的第一个驱动-LED
这是学习驱动开发中,在MICRO 2440开发板上写的第一个驱动程序。实现对S3C2440的GPIO的控制,是一个ARM-LINUX上最简单的驱动。本驱动通过S3C2440的GPB5~8控制4个LED,属MISC(混杂)驱动,其实MISC也是一种特殊的字符驱动,只不过是把主设备号为10的字符驱动归类为MISC类驱动。 MISC类驱动结构如下: static struct miscdevice misc = { .minor = MISC_DYNAMIC_MINOR, .name = DEVICE_NAME, .fops = &dev_fops,   }; minor为指定次设备号,等于MISC_DYNAMI
[单片机]
STM32F407ZGT6学习之串口驱动学习
工程代码:https://pan.baidu.com/s/1Qlfg1_br0tN6yy0fcDwCjg,密码:fhh2 (一)、概述 STM32的通用同步异步收发器 (USART),相当于一座桥梁,外界设备和通过串口协议和STM32进行数据的交互。MCU把数据写到串口的数据寄存器中,串口把数据封装成符合串口协议的数据帧,发送给接收设备;或者发送设备发送数据帧给MCU,串口在接收到数据帧之后,去掉封装的位数据,并把数据放在串口的数据寄存器中,等到MCU的读取。 1、串口框架图 2. 串口的数据帧格式 串口通信需要遵循一定的帧格式,串口传输的每个字节,都是通过把该字节封装成下面图所示的数据帧,再进行传输的。空闲状
[单片机]
STM32F407ZGT6学习之串口<font color='red'>驱动</font>学习
直流马达驱动芯片、低压、大电流、单全桥驱动-瑞盟MS31211
产品简述 MS31211 是一款低压、大电流、单全桥驱动。它可应用于低电压及电池供电的运动控制场合,并且内置电荷泵来提供内部功率 NMOS 所需的栅驱动电压。 MS31211 可以提供最高 3.2A 的峰值电流,其功率电源供电范围从 1.8V 到 10V,逻辑电源供电范围从1.8V 到 6V。 两个输入脚可以控制直流电机工作在正转、反转、刹车以及滑行模式。全桥由 IN1/IN2 逻辑控制,并且当所有的 INx=0V 超过 3ms 时,进入待机模式。 主要特点 ①单个全桥驱动器,低输出导通电阻,240m (HS+LS) ②3.2A 峰值电流能力 ③功率电源供电范围:1.8V 到 10V ④逻辑电源供电范围:1.8V 到 6V ⑤IN
[机器人]
直流马达<font color='red'>驱动</font>芯片、低压、大电流、单全桥<font color='red'>驱动</font>-瑞盟MS31211
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved