



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
详解内核驱动操作GPIO引脚API函数函数原型:void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function);unsigned int s3c2410_gpio_getcfg(unsigned int pin);void s3c2410_gpio_pullup(unsigned int pin, unsigned int to);void s3c2410_gpio_setpin(unsigned int pin, unsigned int to);unsigned int s3c2410_gpio_getpin(unsigned int pin);unsigned int s3c2410_modify_misccr(unsigned int clear, unsigned int change);int s3c2410_gpio_getirq(unsigned int pin);关于函数中用到的虚拟地址到物理地址转换的变量及算法可以参考/hefeng330467115126/blog/static/782058422010620511659/或/u3/102836/showart_2065945.html看简单led驱动程序是用到的文件及头文件可能有:linux/include/asm-arm/arch-s3c2410/map.hlinux/include/asm-arm/arch-s3c2410/regs-gpio.hlinux/arch/arm/plat-s3c24xx/gpio.clinux/include/asm-arm/io.h用Source Insight 打开这些文件,然后再看驱动程序,可以随意跳转到定义处,很是方便pin参数:gpio引脚及特殊功能寄存器助记符都在linux/include/asm-arm/arch-s3c2410/regs-gpio.h中定义:eg:S3C2410_GPACON S3C2410_GPADATS3C2410_GPA0 - S3C2410_GPA22 /引脚S3C2410_GPA0_OUT - S3C2410_GPA22_OUT /设置引脚为输出用到哪个不清楚的可以直接到这个文件去查找还有中断和GSTATUS:S3C2410_EXTINT0 - irq sense control for EINT0.EINT7S3C2410_EXTINT1 - irq sense control for EINT8.EINT15S3C2410_EXTINT2 - irq sense control for EINT16.EINT23function参数:指定引脚功能:输出、输入还是特殊功能,也在linux/include/asm-arm/arch-s3c2410/regs-gpio.h中定义。函数功能:1 原型:void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function);作用:配置GPIO引脚功能,即是配置相应的CON位eg: s3c2410_gpio_cfgpin(S3C2410_GPB0, S3C2410_GPB0_OUTP);/设置B5脚为输出功能函数原代码及注释:(这个函数注释的比较详细,后面类似的不再重复注释)void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function)void _iomem *base = S3C24XX_GPIO_BASE(pin); /取引脚基地址即是:GPA0、GPB0 的虚拟基地址unsigned long mask; unsigned long con;unsigned long flags;if (pin S3C2410_GPIO_BANKB) mask = 1 S3C2410_GPIO_OFFSET(pin);/用于查找对应的引脚位(端口A一位控制一个引脚) else mask = 3 S3C2410_GPIO_OFFSET(pin)*2;/除端口A外其他端口都是两位控制一个引脚/根据function值具体确定怎么来调整functionswitch (function) case S3C2410_GPIO_LEAVE:mask = 0;function = 0;break;case S3C2410_GPIO_INPUT:case S3C2410_GPIO_OUTPUT:case S3C2410_GPIO_SFN2:case S3C2410_GPIO_SFN3:if (pin S3C2410_GPIO_BANKB) / 当某位被设为0时,相应引脚为输出,此时可function -= 1; /以在GPADAT中相应位写入1或0;当某位被function &= 1; /设为1时,相应引脚为地址线或用于地址控制。function = S3C2410_GPIO_OFFSET(pin); /偏移量即是相应的引脚位 else function &= 3;function = S3C2410_GPIO_OFFSET(pin)*2; /除A端口以外的其他端口都是 /两位控制一个引脚/* modify the specified register wwith IRQs off */local_irq_save(flags); /调用该宏函数来保存IRQ 中断使能状态,并禁止IRQ 中断con = _raw_readl(base + 0x00);/ 基地址加偏移量得到相应端口的控制寄存器(GPxCON)地址,然后读取该寄存器的值 con &= mask; / 找到需要修改的引脚的控制位 con |= function; / 使对应的引脚的功能为function_raw_writel(con, base + 0x00); / 重写控制寄存器的值,实现引脚功能修改local_irq_restore(flags); /恢复IRQ 和FIQ 的中断使能状态2 原型:unsigned int s3c2410_gpio_getcfg(unsigned int pin);作用:该函数根据引脚获得指定引脚配置的功能值eg: s3c2410_gpio_getcfg (S3C2410_GPB5);/读取B5脚为的配置功能 输入00、输出01、特殊功能02 函数原代码及注释:unsigned int s3c2410_gpio_getcfg(unsigned int pin)void _iomem *base = S3C24XX_GPIO_BASE(pin);unsigned long val = _raw_readl(base);if (pin = S3C2410_GPIO_OFFSET(pin);val &= 1;val += 1; else val = S3C2410_GPIO_OFFSET(pin)*2;val &= 3;return val | S3C2410_GPIO_INPUT;3 原型:void s3c2410_gpio_pullup(unsigned int pin, unsigned int to);作用:设置相应GPIO口的上拉电阻eg s3c2410_gpio_pullup(S3C2410_GPB5,0)/设置S3C2410GPB5不要上拉电阻s3c2410_gpio_pullup(S3C2410_GPB5,1)/设置S3C2410GPB5要上拉电阻函数原代码及注释:void s3c2410_gpio_pullup(unsigned int pin, unsigned int to)void _iomem *base = S3C24XX_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); / /0x08是GPxUP寄存器的物理偏移量up &= (1L offs); up |= to offs;_raw_writel(up, base + 0x08);local_irq_restore(flags);4原型:void s3c2410_gpio_setpin(unsigned int pin, unsigned int to);作用:该函数给指定的引脚位写入0或1,即是配置相应的DAT位。egs3c2410_gpio_setpin (S3C2410_GPB5 ,0);/设置S3C2410GPB5的输出值为0s3c2410_gpio_setpin (S3C2410_GPB5 ,1);/设置S3C2410GPB5的输出值为1函数原代码及注释:void s3c2410_gpio_setpin(unsigned int pin, unsigned int to)void _iomem *base = S3C24XX_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); /0x04是GPxDAT寄存器的物理偏移量dat &= (1 offs);dat |= to offs;_raw_writel(dat, base + 0x04);local_irq_restore(flags);5原型:void s3c2410_gpio_getpin(unsigned int pin);作用:该函数读取指定引脚的状态 返回0或 1,即是读取相应的DAT位。egs3c2410_gpio_setpin (S3C2410_GPB5 );/ 读取S3C2410GPB5位的状态。函数原代码及注释:unsigned int s3c2410_gpio_getpin(unsigned int pin)void _iomem *base = S3C24XX_GPIO_BASE(pin);unsigned long offs = S3C2410_GPIO_OFFSET(pin);return _raw_readl(base + 0x04) & (1 offs);6原型:unsigned int s3c2410_modify_misccr(unsigned int clear, unsigned int change);作用:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校招文科笔试题目及答案
- 小学语音考试题目及答案
- 企业文化建设与传播方案执行落地标准化模板
- 健康办公环保家具采购合同
- 建筑公司工程结算审计合同
- 家政服务合同按月结算
- 我的老师800字左右初中作文14篇
- 早期创业培训课件
- 写景作文厦门夜景500字13篇
- 音乐基础知识巩固:小学音乐基础知识教学大纲
- 新课标解读丨《义务教育道德与法治课程标准(2022年版)》解读课件
- 三防培训课件
- 南昌航空笔试题库及答案
- 中学化学课程中整合地域文化特色的教学实践
- 舆论学复习测试卷附答案
- 高二年级培优措施及策略
- 2025年中国人寿:养老险上海分公司招聘笔试参考题库含答案解析
- 2025至2031年中国特种工业气体行业投资前景及策略咨询研究报告
- 2025年福建中闽海上风电有限公司招聘笔试参考题库含答案解析
- 合同能源管理
- 中国航空集团有限公司介绍
评论
0/150
提交评论