s3c2410_gpio_setpin()等系列函数

发布者:轻松自在最新更新时间:2024-08-09 来源: cnblogs关键字:s3c2410  gpio 手机看文章 扫描二维码
随时随地手机看文章

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




(1)voids3c2410_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)voids3c2410_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)unsignedint s3c2410_gpio_getcfg(unsigned int pin);

获取相应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)unsignedint s3c2410_modify_misccr(unsigned int clear, unsigned intchange);

杂项设置,设置寄存器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)ints3c2410_gpio_getirq(unsigned int pin);

获取相应的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)ints3c2410_gpio_irqfilter(unsigned int pin, unsigned int on, unsignedint 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); 


关键字:s3c2410  gpio 引用地址:s3c2410_gpio_setpin()等系列函数

上一篇:S3C2440各类端口操作函数简介
下一篇:s3c2440学习笔记(上)-基于FL2440

推荐阅读最新更新时间:2026-03-25 10:47

S3C2410A的GPIO介绍及应用
一、GPIO的概念 GPIO的英文全称是General-Purpose Input/Output Ports,中文意思是通用I/O端口。在嵌入式系统中,经常需要控制许多结构简单的外部设备或者电路,这些设备有的需要通过CPU控制,有的需要CPU提供输入信号,GPIO就是满足这种需求的一种通用可编程I/O端口。 对于每个GPIO端口,其至少需要两个寄存器,一个是控制用的“通用I/O端口控制寄存器”,另一个是存放数据的“通用I/O端口数据寄存器”。数据寄存器的每一位是和GPIO的硬件引脚对应的,数据的传输方向是通过端口控制寄存器控制的。 二、S3C2410A芯片的GPIO特性 S3C2410A芯片内部集成了8组,共117
[单片机]
s3c2410_gpio_cfgpin()函数
函数原型:s3c2410_gpio_cfgpin(unsigned int pin,unsigned int function) 位置:/linux-2.6.32.2/arch/arm/plat-s3c24xx/gpio.c 函数内容: void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function) { void __iomem *base = S3C24XX_GPIO_BASE(pin); unsigned long mask; unsigned long con; unsigned long flags; if (pin S3C2410_GPIO_BANK
[单片机]
<font color='red'>s3c2410</font>_<font color='red'>gpio</font>_cfgpin()函数
Linux头文件中s3c2410 GPIO的宏
一、GPIO寄存器定义 1.#define GPCON(x) __REG2(0x56000000, (x) * 0x10) 这句是定义2410的GPIO的控制寄存器,注意:__REG2的参数是寄存器的物理地址,这个物理地址经_REG2宏转换为虚拟地址,对照2410的手册可以得到一下对应关系: GPCON(1) ------ PORT A 0x56000000 GPCON(2) ------ PORT B 0x56000010 GPCON(3) ------ PORT C 0x56000020 GPCON(8) ------ PORT H 0x56000070 2.#define GPDAT(x) __REG2(0x56
[单片机]
Linux头文件中<font color='red'>s3c2410</font> <font color='red'>GPIO</font>的宏
linux内核配置文件.config,基于s3c2410实现
下面的文件的使用方法是:将下面的文件保存在linux内核源码目录中,文件的名称是.config,然后make menuconfig,在出现 的配置界面中选择Load Configuratio选项,然后可以在这个基础上修改自己的kernel。下面的配置是基于s3c2410,支持yaffs2 文件系统。我看了一下编译出来的uImage大概在800k左右,呵呵么这是本人第一次成功裁减内核。 # # Automatically generated make config: don't edit # Linux kernel version: 2.6.22.6 # Tue Mar 16 20:42:20 2010 # CONFIG_
[单片机]
linux2.6.18内核S3C2410平台移植笔记
我使用的实验箱是Embest EDUKIT-III,板上资源CPU:SAMSUNG S3C2410A、FLASH:K9F5608U0(Samsung NAND 32MiB),烧录工具:embest flash programmer。因为厂家自带的是2.4的内核,目前学习开发用的基本上都是2.6内核,这两者改动还是比较大的。电话咨询过技术支持后,对方说只想在板子上跑系统的话还是比较好移植的。于是决心自己动手移植内核。不然今后的驱动编写,都没有合适的运行环境,影响进度。所以工欲善其事,必先 利其器,前期的这些准备还是很有必要的。那几天刚好ubuntu10.10发布,满怀期待的我升完级后,结果悲剧了,中文显示变得发虚模糊,主题颜色也极度
[单片机]
S3C2410看门狗驱动分析
根据linux中总线、设备和驱动这个模型来看,所有的设备驱动都挂在总线上,并且驱动应该是和平台无关的。唯一和平台有关的一类驱动应该是芯片内部的各个控制器的驱动,例如芯片内部I2C控制器,芯片内部LCD控制器,芯片内部看门狗等等。如果是一个外部的LCD控制器的驱动程序,它的实现一定要和平台无关,这样针对不同的平台只要修改板级文件即可,而不需要修改驱动程序本身。从linux内核源代码中的S3c2410_wdt.c(位于drivers/watchdog中)可以看出,从不同的角度看,看门狗分别可以属于:平台设备、字符设备和混杂设备。所以可以看到该驱动程序中不仅实现了平台设备驱动的probe, remove等函数,还实现了字符设备的file
[单片机]
<font color='red'>S3C2410</font>看门狗驱动分析
深度解读S3C2410A的嵌入式系统的U-Boot移植
0 引 言 ARM嵌入式处理器已被广泛应用于消费电子产品、无线通信、网络通信和工业控制等领域。其中,ARM9的芯片更是以其低价格、低功耗、高性能在手持设备中占据着重要市场。在嵌入式操作系统中,Linux,Vxworks,WinCE三足鼎立,其中Linux由于其开源性、稳定性、安全性、可裁减性更是一支独放。在嵌入式系统中,如何实现在ARM9平台下Linux操作系统的引导工作是嵌入式技术开发的重要环节。 1 嵌入式系统的软件组成 1.1 系统的软件组成 嵌入式的软件系统主要由Bootloader、操作系统、文件系统、应用程序等组成。其中,Bootloader是介于硬件和操作系统之间的一层,其作用就好像PC机中的BIOS。系统加电运
[单片机]
深度解读<font color='red'>S3C2410</font>A的嵌入式系统的U-Boot移植
基于S3C2410开发板的U-BOOT移植解决方案
引言 随着嵌入式系统的日趋复杂,它对大容量数据存储的需求越来越紧迫。而嵌入式设备低功耗、小体积以及低成本的要求,使硬盘无法得到广泛的应用。NAND闪存设备就是为了满足这种需求而迅速发展起来的。目前关于U-BOOT的移植解决方案主要面向的是微处理器中的NOR 闪存,如果能在微处理器上的NAND 闪存中实现U-BOOT的启动,则会给实际应用带来极大的方便。 U-BOOT简介 U-BOOT 支持ARM、 PowerPC等多种架构的处理器,也支持Linux、NetBSD和VxWorks等多种操作系统,主要用来开发嵌入式系统初始化代码bootloader。bootloader是芯片复位后进入操作系统之前执行的一段代码,完成由硬件启动到操
[单片机]
基于<font color='red'>S3C2410</font>开发板的U-BOOT移植解决方案
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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