搜档网
当前位置:搜档网 › DS AW9106 CN V1 0 I2C接口 可扩展GPIO 6路呼吸灯控制器

DS AW9106 CN V1 0 I2C接口 可扩展GPIO 6路呼吸灯控制器

DS AW9106 CN V1 0 I2C接口 可扩展GPIO 6路呼吸灯控制器
DS AW9106 CN V1 0 I2C接口 可扩展GPIO 6路呼吸灯控制器

I2C 接口实现通用 IO 扩展

Altera 公司 1AN-494-1.0 应用笔记494 利用MAX II CPLD 的I 2C 总线接 口实现GPIO 引脚扩展 引言本设计实例展示了Altera ? MAX ? II CPLD 通过工业标准I 2C 总线提供通 用I/O (GPIO) 引脚扩展的能力。为了减小封装尺寸和引脚数量,很多微 处理器系统限制了通用I/O 的数量。然而,如果系统有I 2C 接口,那么 本设计可以通过I 2C 总线来加入更多的 GPIO 引脚。借助于MAX II CPLD ,增加的这些GPIO 引脚要比微处理器的I/O 引脚功耗低。 GPIO 引脚扩展和I 2C 在某些情况下,可能需要通过较长的PCB 走线来访问系统中的GPIO 引 脚(例如蜂窝电话中不同部分的连接)。I 2C 接口是2线系统,本设计通 过普通的2线走线,在远端提供多个输入和输出引脚。这提高了设计灵活 性以及整个系统的物理紧凑性,还减小了封装尺寸和引脚数量。 可以通过这些通用输出引脚来连接并控制风扇控制器、LED 状态显示和 状态指示器等设备。同样的,复位引脚和按钮开关等设备可以直接连接到 CPLD 的通用输入上,实现各种应用。图1.通过I 2C 总线实现GPIO 引脚扩展 2007年12月,1.0版

利用MAX II CPLD的I2C总线接口实现GPIO引脚扩展 GPIO引脚扩展的I2C接口MAX II CPLD用作I2C总线从机,在其I2C接口上有两个引脚:I2C时钟SCL和I2C 数据线SDA。作为 I2C主机的主系统和MAX II(用作 I2C从机)进行通信。CPLD为主系统提供8个通用输入端口和8个通用输出端口。GPIO引脚并行接收 I2C总线串行发送的数据。这样,可以同时读写所有8个通用I/O。 I2C接口 对于I2C接口,CPLD(I2C从机)提供一个符合常用I2C 协议的内置7位地址。主机发送起始信号,然后是7位地址和一个R/W位。当I2C总线上广播的地址和从机设备的地址匹配时,根据主机发送的读或者写信号,设备发送一个ACK (应答)信号,然后是数据。随后是另一个ACK信号。以此不断进行数据交换,直到主机发送Stop (P)信号。 图2.I2C信号格式 表1.I2C接口引脚说明 信号目的方向SCL I2C时钟输出SDA I2C串行数据双向 2Altera公司

对GPIO的理解

对通用输入输出GPIO的深入理解 一.GPIO简介 I/O(Input/Output)接口是一颗微控制器必须具备的最基本外设功能。通常在ARM里,所有I/O都是通用的,称为GPIO(General Purpose Input/Output)。每个GPIO端口包含8个管脚,如PA端口是PA0~PA7。GPIO 模块支持多个可编程输入/输出管脚(具体取决于与GPIO复用的外设的使用情况)。GPIO模块包含以下特性: 1)可编程控制GPIO中断 ---屏蔽中断发生 ---边沿触发(上升沿、下降沿、双边沿) ---电平触发(高电平、低电平) 2)输入/输出可承受5V 3)在读和写操作中通过地址线进行位屏蔽 4)可编程控制GPIO管脚配置: ---弱上拉或弱下拉电阻 ---2mA、4mA、8mA驱动,以及带驱动转换速率(Slew Rate)控制的8mA 驱动 ---开漏使能 ---数字输入使能 二.GPIO的各种模式 GPIO管脚可以被配置为多种工作模式,其中有3种比较常用:高阻输入、推挽输出、开漏输出 1. 高阻输入(Input) 图1.1 GPIO高阻输入模式结构示意图 为减少信息传输线的数目,大多数计算机中的信息传输线采用总线形式,

即凡要传输的同类信息都在同一组传输线,且信息是分 时传送的。在计算机中一般有三组总线,即数据总线、地址总线和控制总线。为防止信息相互干扰,要求凡挂到总线上的寄存器或存储器等,它的输入输出端不仅能 呈现0、1两个信息状态,而且还应能呈现第三个状态----高阻抗状态,即此时好像它们的输出被开关断开,对总线状态不起作用,此时总线可由其他器件占用。三态缓冲器即可实现上述功能,它除具有输入输出端之外,还有一控制端。 如图1.1所示,为GPIO管脚在高阻输入模式下的等效结构示意图。这是一个管脚的情况,其它管脚的结构也是同样的。输入模式的结构比较简单,就是一个带有施密特触发输入(Schmitt-triggered input)的三态缓冲器(U1),并具有很高的输入等效阻抗。施密特触发输入的作用是能将缓慢变化的或者是畸变的输入脉冲信号整形成比较理想的矩形脉冲信号。执行GPIO管脚读操作时,在读脉冲(Read Pulse)的作用下会把管脚(Pin)的当前电平状态读到内部总线上(Internal Bus)。在不执行读操作时,外部管脚与内部总线之间是隔离的。 2. 推挽输出(Output) 图1.2 GPIO推挽输出模式结构示意图 推挽输出原理:在功率放大器电路中大量采用推挽放大器电路,这种电路中用两只三极管构成一级放大器电路, 两只三极管分别放大输入信号的正半周和负半周,即用一只三极管放大信号的正半周,用另一只三极管放大信号的负半周,两只三极管输出的半周信号在放大器负载 上合并后得到一个完整周期的输出信号。 推挽放大器电路中,一只三极管工作在导通、放大状态时,另一只三极管处于截止状态,当输入信号变化到另一个半周后,原先导通、放大的三极管进入截止,而原先截止的三极管进入导通、放大状态,两只三极管在不断地交替导通放大和截止变化,所以称为推挽放大器(https://www.sodocs.net/doc/dd1886954.html,)。

(完整)STM32中使用GPIO的总结(超强),推荐文档

STM32 GPIO使用 操作步骤: 1.使能GPIO对应的外设时钟 例如://使能GPIOA、GPIOB、GPIOC对应的外设时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOC , ENABLE); 2.声明一个GPIO_InitStructure结构体 例如: GPIO_InitTypeDef GPIO_InitStructure; 3.选择待设置的GPIO管脚 例如:/* 选择待设置的GPIO第7、8、9管脚位,中间加“|”符号 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; 4.设置选中GPIO管脚的速率 例如:/* 设置选中GPIO管脚的速率为最高速率2MHz */ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //最高速率2MHz 5.设置选中GPIO管脚的模式 例如:/* 设置选中GPIO管脚的模式为开漏输出模式*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出模式 6. 根据GPIO_InitStructure中指定的参数初始化外设GPIOX 例如:/* 根据GPIO_InitStructure中指定的参数初始化外设GPIOC */ GPIO_Init(GPIOC, &GPIO_InitStructure); 7.其他应用 例:将端口GPIOA的第10、15脚置1(高电平) GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15); 例:将端口GPIOA的第10、15脚置0(低电平) GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);

Linux内核文档:GPIO接口

原文:Documentation/gpio.txt 翻译:tekkamanninja@https://www.sodocs.net/doc/dd1886954.html, 翻译完成时间:2012年2月18日星期六 V1.0

目录 什么是GPIO? (3) GPIO公约 (3) 标识GPIO (3) 使用 GPIO (4) 访问自旋锁安全的GPIO (4) 访问可能休眠的GPIO (5) 声明和释放GPIO (5) GPIO映射到IRQ (7) 模拟开漏信号 (7) GPIO实现者的框架 (可选) (8) 控制器驱动: gpio_chip (8) 平台支持 (8) 板级支持 (9) 用户空间的Sysfs接口(可选) (9) Sysfs中的路径 (9) 从内核代码中导出 (10)

本文档提供了一个在Linux下访问GPIO的公约概述。 这些函数以gpio_* 作为前缀。其他的函数不允许使用这样的前缀或相关的__gpio_* 前缀。 什么是GPIO? "通用输入/输出口"(GPIO)是一个灵活的由软件控制的数字信号。他们可由多种芯片提供,且对于从事嵌入式和定制硬件的Linux开发者来说是比较熟悉。每个GPIO都代表一个连接到特定引脚或球栅阵列(BGA)封装中“球珠”的一个位。电路板原理图显示了GPIO与外部硬件的连接关系。驱动可以编写成通用代码,以使板级启动代码可传递引脚配置数据给驱动。 片上系统(SOC) 处理器对GPIO有很大的依赖。在某些情况下,每个非专用引脚都可配置为GPIO,且大多数芯片都最少有一些GPIO。可编程逻辑器件(类似FPGA) 可以方便地提供GPIO。像电源管理和音频编解码器这样的多功能芯片经常留有一些这样的引脚来帮助那些引脚匮乏的SOC。同时还有通过I2C或SPI串行总线连接的"GPIO扩展器"芯片。大多数PC的南桥有一些拥有GPIO能力的引脚(只有BIOS固件才知道如何使用他们)。 GPIO的实际功能因系统而异。通常的用法有: - 输出值可写(高电平=1, 低电平=0)。一些芯片也有如何驱动这些值的选项,例如只允许输出一个值、支持“线与”及其他取值类似的模式(值得注意的是“开漏”信号)。 - 输入值可读(1、0)。一些芯片支持引脚在配置为“输出”时回读,这对于类似“线与”的情况(以支持双向信号)是非常有用的。GPIO 控制器可能有输入去毛刺/消抖逻辑,这有时需要软件控制。 - 输入通常可作为IRQ信号,一般是沿触发,但有时是电平触发。这样的IRQ 可能配置为系统唤醒事件,以将系统从低功耗状态下唤醒。 - 通常一个GPIO根据不同产品电路板的需求,可以配置为输入或输出,也有仅支持单向的。 - 大部分GPIO 可以在持有自旋锁时访问,但是通常由串行总线扩展的GPIO不允许持有自旋锁。但某些系统也支持这种类型。 对于给定的电路板,每个GPIO都用于某个特定的目的,如监控MMC/SD卡的插入/移除、检测卡的写保护状态、驱动LED、配置收发器、模拟串行总线、复位硬件看门狗、感知开关状态等等。 GPIO公约 注意,这个叫做“公约”,因为这不是强制性的,不遵循这个公约是无伤大雅的,因为此时可移植性并不重要。GPIO常用于板级特定的电路逻辑,甚至可能随着电路板的版本而改变,且不可能在不同走线的板子上使用。仅有在很少的功能上才具有可移植性,其他功能是平台特定。这也是由于“胶合”的逻辑造成的。 此外,这不需要任何的执行框架,只是一个接口。某个平台可能通过一个简单的访问芯片寄存器的内联函数来实现它,其他平台可能通过委托一系列不同的GPIO控制器的抽象函数来实现它。(有一些可选的代码能支持这种策略的实现,本文档后面会介绍,但作为GPIO接口的客户端驱动程序必须与它的实现无关。) 也就是说,如果在他们的平台上支持这个公约,驱动应该尽可能的使用它。平台必须在Kconfig中声明对GENERIC_GPIO 的支持(布尔型true),并提供一个 文件。那些调用标准GPIO函数的驱动应该在Kconfig 入口中声明依赖GENERIC_GPIO。当驱动包含文件: #include GPIO函数是可用,无论是“真实代码”还是经优化过的语句。 如果你遵守这个公约,当你的代码完成后,对其他的开发者来说会更容易看懂和维护。 注意,这些操作包含所用平台的I/O 屏障代码,驱动无须显式地调用他们。 标识GPIO

王猛stm32_GPIO接口原理及使用LED流水灯

( 一) 在学习STM32芯片时,首先要接触的第(一)个内容就是对STM32_GPIO接口的配置和使用。 下面以一个LED流水灯的实验来进行说明。 首先看一下LED的原理图: 从图中可以看出4个LED一端分别连接 STM32芯片的PF6\PF7\PF8\PF9四个引脚,另一端共连一高电平,因此,当PF6\PF7\PF8\PF9分别输出低电平时,4 个LED点亮,输出高电平时LED熄灭,图中电阻主要起限流作用,防止LED或GPIO引脚因电流过大而损坏。 LED流水灯就是通过对STM32引脚的配置,将引脚配置成输出(高、低)电平来实现LED灯的亮灭。 程序实现步骤 1、LED.h头文件:主要用来定义各引脚的 规则(1) #ifndef _LED_H /*测试LED.h是否被定义过*/ (2) #define _LED_H /*如果没有定义则定义*/ (3) #endif /*如果定义了,则跳过(2)、(3)直接执 /*行语句(4)、(5)*/ (4)语句……… (5) 语句……… 备注:#ifndef与#endif要一起使用,否则可能报错 例:#ifndef _LED_H #define _LED_H #include “main.h”(其包含stm32f10x.h)注意位置要在 ifndef,与define后 #define RCC_APB2Periph_LED RCC_APB2Periph_GPIOF /*定义了LED的

使/失能时钟接口,即PF 口*/ #define GPIO_LED GPIOF/*定义LED对应的GPIO组即PF*/ /*定义了每个LED灯对应的引脚名称*/ #define GPIO_DS1_PIN GPIO_Pin_6 #define GPIO_DS2_PIN GPIO_Pin_7 #define GPIO_DS3_PIN GPIO_Pin_8 #define GPIO_DS4_PIN GPIO_Pin_9 #define LED_NUM 4 //定义了LED灯的个数4个 Void Turnon_LED(u8 LED_number);//函数声明 Void Delay(u32 nCount);//函数声明 #endif 自此LED.h文件定义完毕 2、LED.c程序文件:主要实现LED灯的流水闪烁 例:void LED(void) { u8 count=0;/*定义一个计数变量 GPIO_InitTypeDef GPIO_InitStructure;/*定义一结构 体用来初始化LED_GPIO 接口 RCC_APB2PeriphClockCmd(RCC_APB2Periph_LED,ENABLE);/* 开启LED的GPIO接口时 钟 /*对各LED所连接的引脚进行配置*/ GPIO_InitStructure.GPIO_Pin = GPIO_DS1_PIN|GPIO_DS2_PIN| GPIO_DS3_PIN| GPIO_DS4_PIN; /*选择引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/设置为 推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHZ;/输出速 率50MHZ,引脚作为输出时,则配置Speed,作为输入用时,可不 必配置 GPIO_Init(GPIOF,&GPIO_InitStructure)/初始化LED_GPIO接 口 下面就来给各LED对应的引脚配置高、低电平以使其亮、灭。其中所

GPIO

F2812 I/O配置与应用浅析 GPIO,英文全称为General-Purpose IO ports,也就是通用IO口。嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备/电路,对这些设备/电路有的需要CPU为之提供控制手段,有的则需要被CPU用作输入信号。而且,许多这样的设备/电路只要求一位,即只要有开/关两种状态就够了,比如灯亮与灭。对这些设备/电路的控制,使用传统的串行口或并行口都不合适。所以在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO。 接口至少有两个寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对这种寄存器中每一位的作用,即每一位的信号流通方向,则可以通过控制寄存器中对应位独立的加以设置。这样,有无GPIO接口也就成为微控制器区别于微处理器的一个特征。 一、 F2812 I/O端口概述 F2812提供了56个多功能引脚,这些引脚的第一功能是作为通用意义数字I/O口(GPIO),而第二功能则可以作为片内外设的输入/输出引脚。F2812通过专门的多路选择器(MUX)进行引脚功能的选择。如果作为通用数字I/O口,有专门的方向寄存器用于配置引脚作为输入还是输出,另外还有专门的数据寄存器、置位寄存器、清零寄存器以及触发寄存器用于对I/O口的状态进行读取或配置。 GPIO 引脚分配 GPIO A GPIOA0 / PWM1 GPIOA1 / PWM2 GPIOA2 / PWM3 GPIOA3 / PWM4 GPIOA4 / PWM5 GPIOA5 / PWM6 GPIOA6 / T1PWM_T1CMP GPIOA7 / T2PWM_T2CMP GPIOA8 / CAP1_QEP1 GPIOA9 / CAP2_QEP2 GPIOA10 / CAP3_QEPI1 GPIOA11 / TDIRA GPIOA12 / TCLKINA GPIOA13 / C1TRIP GPIOA14 / C2TRIP GPIOA15 / C3TRIP GPIO B GPIOB0 / PWM7 GPIOB1 / PWM8 GPIOB2 / PWM9 GPIOB3 / PWM10 GPIOB4 / PWM11 GPIOB5 / PWM12 GPIOB6 / T3PWM_T3CMP GPIOB7 / T4PWM_T4CMP GPIOB8 / CAP4_QEP3 GPIOB9 / CAP5_QEP4 GPIOB10 / CAP6_QEPI2 GPIOB11 / TDIRB GPIOB12 / TCLKINB GPIOB13 / C4TRIP GPIOB14 / C5TRIP GPIOB15 / C6TRIP GPIO D GPIOD0 / T1CTRIP_PDPINTA GPIOD1 / T2CTRIP / EVASOC GPIOD5 / T3CTRIP_PDPINTB GPIOD6 / T4CTRIP / EVBSOC GPIO E GPIOE0 / XINT1_XBIO GPIOE1 / XINT2_ADCSOC GPIOE2 / XNMI_XINT13 GPIO F GPIOF0 / SPISIMOA GPIOF1 / SPISOMIA GPIOF2 / SPICLKA GPIOF3 / SPISTEA

GPIO 接口测试

GPIO接口测试步骤 一、设置硬件环境 连接VS子板从dm8168扩展出来的GPIO连接到了VS子板的J1接口 二、配置编译linux内核 1》在linux-2.6.37-psp04.00.00.12/arch/arm/mach-omap2/ board-ti8168evm.c文件的558行添加TI816X_MUX(SC1_DATA, OMAP_MUX_MODE2), TI816X_MUX(SC0_DET, OMAP_MUX_MODE2), 配置GP0[24] GP1[9]管脚为GPIO管脚 2》配置linux内核使能Device Drivers –》GPIO Support –》/sys/class/gpio 三、启动开发板 四、创建GPIO节点 echo 24 > /sys/class/gpio/export echo 41 > /sys/class/gpio/export 五、设置GPIO方向 cd /sys/class/gpio/gpio24 echo "out" > direction cd /sys/class/gpio/gpio41 echo "out" > direction 六、改变GPIO值 cd /sys/class/gpio/gpio24 echo 1 > value cd /sys/class/gpio/gpio41 echo 1 > value 使用万用表测量VS子板–》JP1 –》1 或3管脚为高电平 cd /sys/class/gpio/gpio24 echo 0 > value

cd /sys/class/gpio/gpio41 echo 0 > value 使用万用表测量VS子板–》JP1 –》1 或3管脚为低电平 七、运行C测试程序 运行gpio0-24-test 或gpio1-9-test测试例程,使用示波器可以看到频率为1HZ的方波 一、Follow these steps for controlling the GPIO lines from sysfs entries a. Export, which GPIO pin you want to control. Below steps are done with respect to GPIO30 (an example $ echo 30 > /sys/class/gpio/export b. Change the GPIO pin direction to in/out $ echo "out" > /sys/class/gpio/gpio30/direction $ echo "in" > /sys/class/gpio/gpio30/direction c. Changing the value $ echo 1 > /sys/class/gpio/gpio30/value $ echo 0 > /sys/class/gpio/gpio30/value d. Unexport the GPIO pin $ echo 30 > /sys/class/gpio/unexport Sysfs entries are created from 0 - 63 in case of DM816X because it has two GPIO banks 0 and 1. Note: GPIO's which are used already in the drivers can not be control from sysfs, unless untill driver export that particular pin. Run these commands for knowing what are the GPIO's already requested in the drivers. $ mount -t debugfs debugfs /sys/kernel/debug $ cat /sys/kernel/debug/gpio

GPIO学习笔记

嵌入式Linux学习笔记(二)-GPIO接口 嵌入式Linux学习笔记(二)-GPIO接口 一、GPIO介绍 GPIO意为通用输入输出端口,简单说就是一些引脚,通过它们输出高低电平或者通过它们读取引脚高低电平状态 S3C2440有130个I/O端口,分为A-J共9组:GPA、GPB、、、、GPJ,可以通过设置寄存器来确定某个引脚用于输入、输出还是特殊功能。 比如:可以设置GPH6作为输入、输出、或者用于串口。 1、通过寄存器来操作GPIO引脚 1)GPxCON寄存器 它用于配置引脚的功能 端口A与端口B-J在功能上有所不同,GPACON中每一位对应一根引脚(共23根引脚) 当某位为0时,对应引脚为输出,此时在GPADAT中相应位写入0或1,让此引脚输出低电平或高电平;当某位被设为1时,对应引脚为地址线或用于地址控制,此时GPADAT保留不用。 GPACON通常被设为全1,以便访问外部存储设备 端口B-J在寄存器操作上完全相同,GPxCon中每两位控制一根引脚,00表示输入,01表示输出,10表示特殊功能,11保留不用 2)GPxDAT寄存器 它用于读写引脚,当引脚被设为输入时,读此寄存器得到对应引脚的电平状态是高还是低;当引脚被设为输出时,写此寄存器相应位可令此引脚输出高低电平。 3)GPxUP寄存器 GPxUP,某位为1时,相应引脚无内部上拉电阻;为1时,相应引脚使用内部上拉电阻 上拉电阻、下拉电阻的作用在于,当GPIO引脚出于第三态(非高低电平,而是高阻态,即相当于没接芯片)时,它的电平状态由上拉电阻和下拉电阻确定。 2、使用软件来访问硬件

当个引脚的操作有3种:输出高低电平、检测引脚状态、中断。对某个引脚的操作一般通过读写寄存器 实现 首先我们从点亮LED开始,下图选自mini2440原理图,LED1-4分别对应GPB5-8 如果要控制这些LED,那么我们首先要把GPBCON寄存器中GPB5-8对应的位设为输出功能,然后写GPBDAT寄存器的相应位,使这4个引脚输出高低电平 一般是低电平有效,即高电平时,对应LED熄灭,低电平时,对应LED点亮 访问寄存器的时候,通过S3C2440的数据手册查到GPBCON和GPBDAT寄存器的地址,附数据手册点击下载 GPBCON为0x56000010,GPBDAT为0x56000014 通过下面的代码让GPB5输出低电平,点亮LED1 #define GPBCON (*(volatile unsigned long *) 0x56000010) //volatile修饰符确保每次去内存中读取变量的值,还不是从cache或者寄存器中 #define GPBDAT (*(volatile unsigned long *) 0x56000014) #define GPB5_OUT (1<<(5*2)) //两位控制一个引脚,那么GPB5就是GPBCON的[11:10]位 ,1左移10位,则[11:10]为01,表示GPB5为输出

ARM学习笔记--GPIO接口

ARM学习笔记--GPIO接口 GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。 S3C2410共有117个I/O端口,共分为A~H共8组:GPA、GPB、...、GPH。S3C2440共有130个I/O端口,分为A~J共9组:GPA、GPB、...、GPJ。可以通过设置寄存器来确定某个引脚用于输入、输出还是其他特殊功能。比如:可以设置GPH6作为输入、输出、或者用于串口。 1 GPIO硬件介绍 1.1 通过寄存器来操作GPIO引脚 GPxCON用于选择引脚功能,GPxDAT用于读/写引脚数据;另外,GPxUP用于确定是否使用内部上拉电阻。x为B、...、H/J,没有GPAUP寄存器。 1.1.1 GPxCON寄存器 从寄存器的名字可以看出,它用于配置(Configure)-选择引脚功能。 PORTA与PORTB~PORT H/J在功能选择方面有所不同,GPACON中每一位对应一根引脚(共23根引脚)。当某位被设为0时,相应引脚为输出引脚,此时我们可以在GPADAT 中相应位写入0或是1让此引脚为低电平或高电平;当某位被设为1时,相应引脚为地址线或用于地址控制,此时GPADAT无用。一般而言,GPACON通常被设为全1,以便访问外部存储器件。 PORT B~ PORT H/J在寄存器操作方面完全相同。GPxCON中每两位控制一根引脚:00表示输入、01表示输出、10表示特殊功能、11保留不用。 1.1.2 GPxDAT寄存器 GPxDAT用于读/写引脚;当引脚被设为输入时,读此寄存器可知相应引脚的电平状态是高还是低;当引脚被设为输出时,写此寄存器相应位可以令此引脚输出高电平或是低电平。 1.1.3 GPxUP寄存器 GPxUP:某位为1时,相应引脚无内部上拉电阻;为0时,相应引脚使用内部上拉电阻。 上拉电阻的作用在于:当GPIO引脚处于第三态(即不是输出高电平,也不是输出低电平,而是呈高阻态,即相当于没接芯片)时,它的电平状态由上拉电阻、下拉电阻确定。 1.2 访问硬件 1.2.1 访问单个引脚 单个引脚的操作无外乎3种:输出高低电平、检测引脚状态、中断。对某个引脚的操作一般通过读、写寄存器来完成。 访问这些寄存器是通过软件来读写它们的地址。比如:S3C2410和S3C2440的GPBCON、GPBDAT 寄存器地址都是0x56000010、0x56000014,可以通过如下的指令让GPB5输出低电平。 #define GPBCON (*volatile unsigned long *)0x56000010) //long=int 4字节;char 1字节;short 2字节 #define GPBDAT (*volatile unsigned long *)0x56000014) #define GPB5_out (1<<(582)) GPBCON = GPB5_out; GPBDAT &= ~(1<<5); 1.2.2 以总线方式访问硬件

GPIO的定义及应用举例

GPIO,英文全称为General-Purpose IO ports,也就是通用IO口。嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备/电路,对这些设备/电路有的需要CPU为之提供控制手段,有的则需要被CPU用作输入信号。而且,许多这样的设备/电路只要求一位,即只要有开/关两种状态就够了,比如灯亮与灭。对这些设备/电路的控制,使用传统的串行口或并行口都不合适。所以在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO。 接口至少有两个寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对这种寄存器中每一位的作用,即每一位的信号流通方向,则可以通过控制寄存器中对应位独立的加以设置。这样,有无GPIO接口也就成为微控制器区别于微处理器的一个特征。 在实际的MCU中,GPIO是有多种形式的。比如,有的数据寄存器可以按照位寻址,有些却不能按照位寻址,这在编程时就要区分了。比如传统的8051系列,就区分成可位寻址和不可位寻址两种寄存器。另外,为了使用的方便,很多mcu把glue logic等集成到芯片内部,增强了系统的稳定性能,比如GPIO接口除去两个标准寄存器必须具备外,还提供上拉寄存器,可以设置IO的输出模式是高阻,还是带上拉的电平输出,或者不带上拉的电平输出。这在电路设计中,外围电路就可以简化不少。 另外需要注意的是,对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的。如果系统结构支持独立的IO地址空间,并且是端口映射,就必须使用汇编语言完成实际对设备的控制,因为C语言并没有提供真正的“端口”的概念。如果是内存映射,那就方便的多了。 举个例子,比如像寄存器A(地址假定为0x48000000)写入数据0x01,那么就可以这样设置了。 #define A (*(volatile unsigned long *)0x48000000) ... A = 0x01; ... 这实际上就是内存映射机制的方便性了。其中volatile关键字是嵌入式系统开发的一个重要特点。上述表达式拆开来分析,首先(volatile unsigned long *)0x48000000的意思是把 0x48000000强制转换成volatile unsigned long类型的指针,暂记为p,那么就是#define A *p,即A为P指针指向位置的内容了。这里就是通过内存寻址访问到寄存器A,可以读/写操作。 二、S3C2410的GPIO的特点 s3c2410的GPIO有117pin,下面应该到9 IO ports看看详细部分了。 The S3C2410X has 117 multi-functional input/output port pins. The ports are: — Port A (GPA): 23-output port — Port B (GPB): 11-input/output port — Port C (GPC): 16-input/output port — Port D (GPD): 16-input/output port — Port E (GPE): 16-input/output port — Port F (GPF): 8-input/output port — Port G (GPG): 16-input/output port — Port H (GPH): 11-input/output port 这么多的IO口,其实很多是复合功能的,既可以作为普通的IO口使用,也可以作为特殊外设接口。在程序设计时,要对整体的资源有所规划,初始化时就应该把所有资源安排合理。这样才会避免出现问题。

实验二 基本IO接口实验

实验二基本IO接口实验【实验目的】 1、熟悉“STM32F103CB实验开发板”上的LED电路; 2、掌握使用RealView MDK 创建一个GPIOx端口工程的方法; 3、掌握使用μVision4 MDK 编写GPIOx端口的C语言程序的方法; 4、学会延时子程序的编写和使用; 5、熟悉与GPIO有关的STM32F10x的固件库。 【实验仪器】 1、硬件:STM32F103CB开发板,ULINK(或JLINK)仿真器套件,PC机 2、软件: RealView MDK开发套件, WindowsXP。 【实验电路及连线】 L1,L3为通用发光二极管,分别连接GPIO的PB9和PC13。 【实验内容】 1、熟悉RealView MDK开发套件的使用 2、建立一个简单的GPIOx工程。 3、编程实现:在STM32F103CB单片机上,发光二极管L1,L3 闪烁。 【实验步骤、分析及结果(在下面写出你的代码)】 实验步骤: STM32单片机中配置片内使用的通用I/O口需经过以下设置: (1)配置输入的时钟; (2)初始化时钟; (3)配置相应的GPIO口; (4)配置各个PIN的模式和速度; (5)GPIO口初始化; 分析:

L1,L3为通用发光二极管,分别连接GPIO的PB9和PC13。可以利用端口GPIOB和GPIOC进行控制。 结果: 代码: #include"stm32f10x_lib.h" void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure ; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC,ENABLE); //使用按位或运算符“|”可以一次使能多个外设的时钟。 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9; //管脚 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz; //输出速度 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //Push-Pull,推挽输出 GPIO_Init(GPIOB,&GPIO_InitStructure);//GPIO初始化 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOC,&GPIO_InitStructure);

GPIO介绍

gpio百科名片General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,利用工业标准I2C、SMBus?或SPI?接口简化了I/O口的扩展。当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。简介分类:硬件/嵌入开发驱动开发/核心开发每个GPIO端口可通过软件分别配置成输入或输出。Maxim的GPIO产品线包括8端口至28端口的GPIO,提供推挽式输出或漏极开路输出。提供微型3mm x 3mm QFN封装。优点GPIO的优点(端口扩展器)低功耗:GPIO具有更低的功率损耗(大约1μA,μC 的工作电流则为100μA)。集成IIC从机接口:GPIO内置IIC从机接口,即使在待机模式下也能够全速工作。小封装:GPIO器件提供最小的封装尺寸―3mm x 3mm QFN!低成本:您不用为没有使用的功能买单!快速上市:不需要编写额外的代码、文档,不需要任何维护工作!灵活的灯光控制:内置多路高分辨率的PWM输出。可预先确定响应时间:缩短或确定外部事件与中断之间的响应时间。更好的灯光效果:匹配的电流输出确保均匀的显示亮度。布线简单:仅需使用2条就可以组成IIC总线或3条组成SPI总线。于ARM 的几组GPIO引脚,功能相似,GPxCON 控制引脚功能,

GPxDAT用于读写引脚数据。另外,GPxUP用于确定是否使用上拉电阻。x为A,B,,H/J,没有上拉电阻。ai 寄存器1.GPxCON 寄存器用于配置引脚功能。ConfigurePORT A 与PORT B~PORT H/J 在功能选择上有所不同,GPACON 中每一位对应一根引脚,共23 个引脚。当某位被设为0 时候,其为输出引脚。此时我们可以在GPADAT 中相应的写入1或者0 来让此引脚输出高电平或者低电平。一般而言GPACON 通常被设为1 ,以便访问外部器件。PORT B~PORT H/J在寄存器操作方面完全相同,GPxCON 中每两位控制一根引脚,00 输入01 输出10 特殊功能11 保留不用2. GPxDAT 寄存器GPxDAT用于读写引脚,当引脚被设为输入时候,读此寄存器可知道相应引脚的电平状态高还是低,当引脚被设为输出时候,写此寄存器的位,可令引脚输出高电平还是低电平。3. GPxUP寄存器GPxUP寄存器某位为1的时候,相应管脚没有上拉电阻;为0 时候相应管脚有上拉电阻。上拉电阻作用在于,当GPIO 引脚处于第三种状态时候,既不是输出高电平,也不是输出低电平。而是呈现高阻态,相当于没有接芯片。它的电平状态由上下拉电阻决定。

GPIO应用

1概述 1.1术语、缩略语及相关定义 1.1.1缩略语 GPIO General Purpose Input Output 通用输入输出 OPB on-chip peripheral bus 片上外围总线 MSB most significant bit 最高有效位 LSB least significant bit 最低有效位 1.1.2相关定义 输入输出类型约定如下: O 输出 I 输入 寄存器访问方式约定如下: RO 只读 R/W 可读可写 N/A 不确定、不关心 寄存器复位值表达方式约定如下: 0x 其后所跟的数值为16进制 其他术语约定如下: 字节指8位数据 半字2个字节,即16位数据 字4个字节,即32位数据 2GPIO模块功能描述 2.1特性 GPIO模块具有以下特性: a.可通过OPB总线访问可编程寄存器来直接控制GPIO模块的输入输出功能; b.寄存器为大端格式; c.支持32位双向GPIO模块管脚。 2.2信号描述 所有的GPIO模块信号如图1所示。2.2.1至2.2.4小节按功能类别分别介绍了这些信号。

OPB_SELECT OPB_RNW OPB_FWXFER GPIO_SELECT GPIO_IN[0:31] GPIO_DBUSEN GPIO_XFERACK GPIO_FWACK GPIO_ERRACK SYSCLK SCG_SYSCLK GPIO_CLKGATE_SYSCLK 图1 GPIO 模块信号 2.2.1 OPB 接口信号 GPIO 模块通过OPB 接口来与系统处理器和其它内部逻辑收发数据。GPIO 模块的寄存器都可以通过OPB 接口来访问。OPB 接口信号描述见表1。 表1 OPB 接口信号

GPIO(输入输出端口)

GPIO GPIO,通用I/O端口。 在嵌入式系统中,经常需要控制许多结构简单的外部设备或者电路,这些设备有的需要通过CPU控制,有的需要CPU提供输入信号。 对设备的控制,使用传统的串口或者并口就显得比较复杂,所以,在嵌入式微处理器上通常提供了一种“通用可编程I/O端口”,也就是GPIO。 一个GPIO端口至少需要两个寄存器,一个做控制用的“通用IO端口控制寄存器”,还有一个是存放数据的“通用I/O端口数据寄存器”。 数据寄存器的每一位是和GPIO的硬件引脚对应的,而数据的传递方向是通过控制寄存器设置的,通过控制寄存器可以设置每一位引脚的数据流向。

扩展资料 GPIO的优点(端口扩展器) ?低功耗:GPIO具有更低的功率损耗(大约1μA,μC的工作电流则为100μA)。 ?集成I2C从机接口:GPIO内置I2C从机接口,即使在待机模式下也能够全速工作。 ?小封装:GPIO器件提供最小的封装尺寸—3mm x 3mm QFN! ?低成本:您不用为没有使用的功能买单! ?快速上市:不需要编写额外的代码、文档,不需要任何维护工作! ?灵活的灯光控制:内置多路高分辨率的PWM输出。 ?可预先确定响应时间:缩短或确定外部事件与中断之间的响应时间。 ?更好的灯光效果:匹配的电流输出确保均匀的显示亮度。 ?布线简单:仅需使用2条I2C总线或3条SPI总线。 S3C2410共有117个I/O端口,共分为A~H共8组:GPA、GPB、...、GPH。S3C2440共有130个I/O端口,分为A~J共9组:GPA、GPB、...、GPJ。可以通过设置寄存器来确定某个引脚用于输入、输出还是其他特殊功能。比如:可以设置GPH6作为输入、输出、或者用于串口。

STM32中使用GPIO的总结(超强)

STM32中使用GPIO的总结(超强) 1、使能GPIO对应的外设时钟例如://使能GPIO A、GPIO B、GPIOC对应的外设时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOC , ENABLE); 2、声明一个GPIO_InitStructure结构体例如: GPIO_InitTypeDef GPIO_InitStructure; 3、选择待设置的GPIO管脚例如:/* 选择待设置的GPIO第7、8、9管脚位,中间加“|”符号 */GPIO_InitStructure、GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; 4、设置选中GPIO管脚的速率例如:/* 设置选中GPIO管脚的速率为最高速率2MHz */GPIO_InitStructure、GPIO_Speed = GPIO_Speed_2MHz;//最高速率2MHz 5、设置选中GPIO管脚的模式例如:/* 设置选中GPIO管脚的模式为开漏输出模式*/GPIO_InitStructure、GPIO_Mode = GPIO_Mode_Out_OD;//开漏输出模式 6、根据GPIO_InitStructure中指定的参数初始化外设GPIOX例如:/* 根据GPIO_InitStructure中指定的参数初始化外设GPIOC */GPIO_Init(GPIOC, &GPIO_InitStructure); 7、其他应用例:

将端口GPIOA的第 10、15脚置1(高电平)GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);例:将端口GPIOA的第 10、15脚置0(低电平)GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);GPIO寄存器:寄存器描述CRL端口配置低寄存器 CRH 端口配置高寄存器 IDR 端口输入数据寄存器ODR 端口输出数据寄存器 BSRR 端口位设置/复位寄存器 BRR 端口位复位寄存器LCKR 端口配置锁定寄存器 EVCR 事件控制寄存器MAPR 复用重映射和调试I/O配置寄存器 EXTICR 外部中断线路0-15配置寄存器 GPIO库函数: 函数名描述 GPIO_DeInit 将外设GPIOx寄存器重设为缺省值 GPIO_AFIODeInit 将复用功能(重映射事件控制和EXTI设置)重设为缺省值 GPIO_Init 根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器 GPIO_StructInit 把 GPIO_InitStruct中的每一个参数按缺省值填入 GPIO_ReadInputDataBit 读取指定端口管脚的输入 GPIO_ReadInputData 读取指定的GPIO端口输入 GPIO_ReadOutputDataBit 读取指定端口管脚的输出 GPIO_ReadOutputData 读取指定的GPIO端口输出 GPIO_SetBits 设置指定的数据端口位 GPIO_ResetBits 清除指定的数据端口位GPIO_WriteBit 设置或者清除指定的数据端口位 GPIO_Write 向指定GPIO数据端口写入数据 GPIO_PinLockConfig 锁定GPIO管

相关主题