gpio

【嵌入式Linux+ARM】GPIO操作

[亡魂溺海] 提交于 2020-02-10 03:03:32
1.GPIO介绍 GPIO(general purpose i/o ports)意思为通用输入/输出端口,通俗的说就是一些引脚。 我们可以通过它们输出高低电平 或 读入引脚的状态。 s3c2440中有130个I/O端口,分为A~J共9组,GPA、GPB、..... GPJ 2.GPIO寄存器 既然要操作GPIO,必须对相应的寄存器进行操作,2440中gpio寄存器有: GPxCON——选择引脚功能(输入、输出、保留等) GPxDAT——用来读写引脚 GPcUP ——某一位是1时,相应的引脚无内部上拉电阻;为0时,有内部上拉电阻 3.原理图 LED: 按键: 4.实验代码: >>使用汇编语言实现点灯: led_on.S [cpp] view plain copy print ? .text .global _start _start: LDR R0, =0x56000050 //GPFCON寄存器地址 MOV R1, #0x00001500 //见技术手册相应的配置,一般01为输出引脚 STR R1, [R0] //设置为输出 LDR R0, =0x56000054 //GPFDAT寄存器 MOV R1, #0x00000000 STR R1, [R0] //往GPFDAT寄存器写值 MAIN_LOOP: B MAIN_LOOP //循环等待 Makefile: [cpp] view

嵌入式GPIO接口及操作(一)

邮差的信 提交于 2020-02-10 02:59:20
  GPIO意思就是通用输入输出,一些引脚可以通过他们输出高低电平,或者通过它们读入引脚的状态。 对GPIO的操作是对所有硬件的操作最基本的技能。 一、通过寄存器来操作GPIO引脚,一个引脚可以用于输入、输出或者其他的特殊功能,那么一定有寄存器来配置这些功能, 对于输入,就是读取引脚的状态,一定可以从寄存器在中读取到引脚的状态;对于输出,也有相应的寄存器,向寄存器中 写入数据使引脚输出高低电平;其他特殊功能,有另外的寄存器来控制它。 对于S3C2440来说,同样的道理,也会有上面所说的寄存器,GPxCON用于配置引脚的功能的(输入、输出或其他功能), GPxDAT用于读/写引脚数据;另外GPxUP用于是否使用内部上拉电阻。 1、GPxCON寄存器-配置寄存器 对于S3C2440,除了GPACON特殊外(寄存器每一位对应一个引脚),其它都是寄存器的没2位控制一根引脚:00表示输入, 01表示输出、10表示特殊、11保留不用。 2、GPxDAT寄存器 用于读/写引脚:当引脚被设为输入时,从GPxDAT寄存器读取引脚的状态;当引脚被设为输出时,将数据写入GPxDAT寄存器 相应的引脚会输出相应的该低电平。 3、GPxUP寄存器 某位为1时,相应引脚无内部上拉电阻;某位为0时,相应引脚使用上拉电阻。 上拉电阻、下拉电阻的作用:GPIO为第三态时(相当于无外接芯片),引脚的电平状态有上拉电阻

GPIO学习笔记

你。 提交于 2020-02-10 02:09:58
用汇编点亮一个 led 1 看原理图 GPK4=0 ,led 亮 GPK4=1 , led 灭 2 怎么让 GPK4 输出高低电平 ( 看芯片手册,操作寄存器实现 ) 配置功能:输入 / 输出 / 其他 设置其输出高 / 低电平 3 查看芯片手册 GPK4 [19:16] 0000 = Input 0001 = Output 0010 = Host I/F DATA[4] 0011 = HSI TX READY 0100 = Reserved 0101 = DATA_CF[4] 0110 = Reserved 0111 = Reserved GPKDAT 在第 4 位写写 0 就对应 GPK4 GPK[15:0] [15:0] When the port is configured as input port, the corresponding bit is the pin state. When the port is configured as output port, the pin state is the same as the corresponding bit. When the port is configured as functional pin, the undefined value will be read. Register Address R/W

GPIO实验(二)

自古美人都是妖i 提交于 2020-02-10 02:07:07
=============第三个实验============用c语言轮流点亮3个LED=================== 1.crt0.S .text .global _start _start: ldr r0, =0x53000000 @ WATCHDOG寄存器地址 mov r1, #0x0 str r1, [r0] @ 写入0,禁止WATCHDOG,否则CPU会不断重启 ldr sp, =1024*4@ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K bl main @ 调用C程序中的main函数 halt_loop: b halt_loop 2.leds.c #define GPFCON (*(volatile unsigned long *)0x56000050) #define GPFDAT (*(volatile unsigned long *)0x56000054) #define GPF4_out (1<<(4*2)) #define GPF5_out (1<<(5*2)) #define GPF6_out (1<<(6*2)) void wait(volatile unsigned long dly) { for(; dly > 0; dly--); } int main

STM32学习笔记——点亮LED

隐身守侯 提交于 2020-02-09 19:08:18
STM32学习笔记——点亮LED 本人学习STM32是直接通过操作stm32的寄存器,使用的开发板是野火ISO-V2版本; 先简单的介绍一下stm32的GPIO; stm32的GPIO有多种模式:   1.输入浮空   2.输入上拉   3.输入下拉   4.模拟输入   5.开漏输出   6.推挽式输出   7.推挽式复用功能   8.开漏复用功能 stm32GPIO模式设置相关寄存器设置的介绍 stm32中文参考手册中对GPIO模式设置对应寄存器的详细介绍: 下图为开发板LED的接线图; 根据上面的电路图可知,将GPIOB_0,GPIOF_7和GPIOF_8设置为低电平时,LED将被点亮; 程序代码: LED.h 文件 1 #ifndef __LED_H 2 #define __LED_H 3 4 void GPIO_Init(void); 5 6 7 8 9 #endif stm32.h 文件 1 #ifndef __STM32_H 2 #define __STM32_H 3 4 //引脚寄存器定义 5 6 //GPIO对应寄存器起始地址 7 8 #define GPIOA 0x40010800 9 #define GPIOB 0x40010C00 10 #define GPIOC 0x40011000 11 #define GPIOD 0x40011400 12

beaglebone_black_学习笔记——(3)点亮LED之shell命令

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-09 19:06:38
这次改变一下笔记的结构,直接上图。点亮LED永远是学习MCU,ARM,FPGA的入门例程,可以说是经典例程。这里笔者也从点亮LED开始开始ARM学习之旅。 接下来就开始点亮LED之旅,在开始之前需要向读者说明:本文作者也是一个ARM初学者,学习过程中也是在网上查找各种资料,最后总结于此。可以确定实验的过程中有好多地方笔者自己也是没有搞明白的,所以请读者原谅不能写的太透彻。 第一步:要点亮LED,首先需要了解GPIO的硬件位置,这样才能去操作相应的IO口,实现点灯目的 1、连接好bb-black之后,等待系统启动之后在PC机的浏览器里面输入192.168.7.2就可以访问开发板的服务器了,在这里可以找到许多的硬件资料,同样也可以学习另外一种JS编程,总之,这里有好多对初学者有用的资料。 2、如下图,为开发板扩展口的GPIO分布。在本次实验中,笔者像其他初学者一样选择GPIO_44这个引脚作为本次实验的目标引脚。可以发现GPIO_44对应P8的12引脚,同时将P8的2脚作为接地引脚。 3、笔者喜欢从零开始搭建开发平台,手头也没有现成的LED灯模块,只好用面包板搭建一个简单的电路来实现了。如下图所示为LED灯的电路图,只需要一颗330的电阻和一颗红色发光二极管即可。 4、了解原理图之后,接下来开始在面包板上连线。如下图所示连接好电路图。完成这一步就可以操作LED了。 第二步

周立功IMX287开发套件之数码管驱动(linux下74HC595多级串联驱动,数码管驱动)

怎甘沉沦 提交于 2020-02-09 14:19:49
疫情待在家里很无聊,发现吃土的开发板。好久好久没干linux相关开发了,还是在安美数字的时候干的linux网络应用和部分内核开发,现在忘得差不多了,试着捡起来吧。 硬件:如上图短接帽接法 软件:驱动下面直接贴出来(直接同时驱动四个断码比较水),应用层直接write就行 如果要四位显示不同数据需要改驱动和应用层,驱动增加数码管位使能,应用层需要一个单独进程一直跑显示,另一个传数据。我太懒了,就不写了! #include <linux/cdev.h> #include <linux/init.h> #include <linux/module.h> #include <mach/gpio.h> #include <asm/io.h> #include "mach/../../mx28_pins.h" #include <mach/pinctrl.h> #include "mach/mx28.h" #include <linux/fs.h> #include <linux/io.h> #include <asm/uaccess.h> #include <linux/miscdevice.h> #include <linux/irq.h> #include <linux/sched.h> #include <linux/interrupt.h> #include <linux/timer

1-32、讯为驱动-字符类GPIO

雨燕双飞 提交于 2020-02-06 08:51:44
驱动源码 /*包含初始化宏定义的头文件,代码中的module_init和module_exit在此文件中*/ #include <linux/init.h> /*包含初始化加载模块的头文件,代码中的MODULE_LICENSE在此头文件中*/ #include <linux/module.h> /*定义module_param module_param_array的头文件*/ #include <linux/moduleparam.h> /*定义module_param module_param_array中perm的头文件*/ #include <linux/stat.h> /*三个字符设备函数*/ #include <linux/fs.h> /*MKDEV转换设备号数据类型的宏定义*/ #include <linux/kdev_t.h> /*定义字符设备的结构体*/ #include <linux/cdev.h> /*分配内存空间函数头文件*/ #include <linux/slab.h> /*包含函数device_create 结构体class等头文件*/ #include <linux/device.h> /*自定义头文件*/ #include "char_driver_leds.h" /*Linux中申请GPIO的头文件*/ #include <linux/gpio.h

Receiving data through uart in raspberry pi 3b

99封情书 提交于 2020-02-06 07:29:29
问题 I want to do real time voice transmission through uart of two raspberry pi 3b.Currently I am able to transmit the real time voice through uart by recording the audio in fifo file and at the same time writing that file to uart(Tx). But at receiving side I am not able to receive data properly.The code i am using is as below. import os import serial import select ser=serial.Serial('/dev/ttyS0',19200) os.system('mkfifo audio1.fifo') with open('audio1.fifo') as fifo: while True: select.select(

Receiving data through uart in raspberry pi 3b

半腔热情 提交于 2020-02-06 07:29:04
问题 I want to do real time voice transmission through uart of two raspberry pi 3b.Currently I am able to transmit the real time voice through uart by recording the audio in fifo file and at the same time writing that file to uart(Tx). But at receiving side I am not able to receive data properly.The code i am using is as below. import os import serial import select ser=serial.Serial('/dev/ttyS0',19200) os.system('mkfifo audio1.fifo') with open('audio1.fifo') as fifo: while True: select.select(