11.1 GPIO 介绍

11.1.1 GPIO 管脚

GPIO 即是输入输出端口,S3C2440A 包含了 130 个多功能输入/输出口引脚并且它们为如下显示的八个端口:

  • 端口 A(GPA):25 位输出端口
  • 端口 B(GPB):11 位输入/输出端口
  • 端口 C(GPC):16 位输入/输出端口
  • 端口 D(GPD):16 位输入/输出端口
  • 端口 E(GPE):16 位输入/输出端口
  • 端口 F(GPF):8 位输入/输出端口
  • 端口 G(GPG):16 位输入/输出端口
  • 端口 H(GPH):9 位输入/输出端口
  • 端口 J(GPJ):13 位输入/输出端口

GPIO 的功能即是用于 CPU 采集外设信号(INPUT),CPU 输出控制信号(OUTPUT),还有一种功能称为管脚复用功能,即是 GPIO 用于其他信号功能,比如地址,串口等共呢个,GPIO 属于 SOC 的内部外设。

GPIO 的使用需要寄存器配置。

11.1.2 GPIO 寄存器

  • 端口配置寄存器:GPACON --- GPJCON,即配置输入或是输出,还是配置为第三功能
  • 端口数据寄存器:GPADAT---GPJDAT,用于数据的写入或读取
  • 端口上拉寄存器:GPBUP---GPJUP,端口上拉寄存器控制每个端口组的使能/禁止上拉电阻。
    • 当相应位为 0 时使能引脚的上拉电阻。当为 1 时禁止上拉电阻。
    • 如果使能了上拉电阻,那么上拉电阻与引脚的功能设置无关(输入、输出、DATAn、EINTn 等等)
  • 杂项控制寄存器:
    • 此寄存器控制睡眠模式,USB 引脚和 CLKOUT 选择的数据端口上拉电阻。
  • 外部中断控制寄存器:
    • 24 个外部中断由各种信号方式触发。
    • EXTINT 寄存器为外部中断请求配置信号触发方式为低电平触发、高电平触发、下降沿触发、上升沿触发或双边沿触发。
    • 由于每个外部中断引脚包含一个数字滤波器,中断控制可以确认请求信号是否长于 3 个时钟。

11.2 GPIO 控制 LED

11.2.1 原理图

  

  

  • 从原理图上可以看出,三个灯的控制是由 GPF4 - GPF6 控制的。
  • 由于 LED 由 3.3V 高电平供电,则 GPF4- GPF6 引脚必须要设置为低电平,形成压差点亮 LED

11.2.2 GPF 控制寄存器

  • GPF 主要涉及到三个寄存器:

    • GPFCON:端口配置寄存器,配置各个 I/O 管脚是输入/输出功能,还是第三功能,此寄存器的地址是 0x56000050
    • GPFDAT:数据寄存器,用于管脚发送或是接收数据,地址是 0x56000054
    • GPFUP:上拉寄存器,地址为 0x56000058,需要才用这个寄存器
  • 注意 GPF 控制器的复位值,初始化值即是此值。
  • 具体配置查看芯片手册

11.3 汇编控制 LED

  • 指令的执行时间:

    • 一般单片机指令执行时间是固定的,参考手册,而在高性能的嵌入式 SOC 中,指令执行时间与各方面的因素有关,比如:缓存,内存,硬盘上的传输开销,指令开销,所以在高性能 SOC 上讨论指令的执行时间没有意义。
    • 考虑到多发射、超标量、超流水线、乱序执行、追踪缓存等设计越来越复杂,仅评价单条指令耗时比单片机要困难得多
    • 更由意义的指标是经过统计分析的 CPI、MIPS 数据。
    • 1MHz = 1us
    • 1GHz = 1ns
  • 一般情况下,裸机中精确延时采用定时器,如果延时在 20 us 下的话,定时器不是太合适,需要汇编辅助完成
  • 如果更小的时间要求,那么表示硬件无法满足当前需求

11.4 C语言控制 LED

makefile

 # 获取当前工作目录
CURRDIR = $(shell pwd) # 头文件所在目录
INCDIR = $(CURRDIR) # 交叉编译工具链的绝对路径
CROSS_COMPILE = ~/work/s3c2440/tools/gcc-3.4.-glibc-2.3./bin/arm-linux- # 编译器工具
AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E
AR = $(CROSS_COMPILE)ar
NM = $(CROSS_COMPILE)nm
STRIP = $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump # 编译器标识位设置
CFLAGS :=
AFLAGS :=
LDFLAGS :=
CFLAGS :=
AFLAGSL := # 目标文件设置
objs := startup.o led.o all: clean s3c2440.bin # 执行编译的过程
s3c2440.bin: $(objs)
$(LD) -Ttext 0x00000000 -o s3c2440_elf $^
$(OBJCOPY) -O binary -S s3c2440_elf $@
$(OBJDUMP) -D -m arm s3c2440_elf > s3c2440.dis %.o:%.c
$(CC) -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -ffreestanding -c -o $@ $< %.o:%.S
$(CC) -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -ffreestanding -c -o $@ $< clean:
rm -f *.bin *_elf *.dis *.o

startup.S

 .text
.global _start _start:
ldr r0, =0x53000000 @ WATCHDOG寄存器地址
mov r1, #0x0
str r1, [r0] @ 写入0,禁止WATCHDOG,否则CPU会不断重启 ldr sp, =* @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
@ nand flash中的代码在复位后会移到内部ram中,此ram只有4K bl main @ 调用 C 程序的 main 函数 halt_loop:
b halt_loop

led.c

 /**
* 将0x56000050 强转为 unsigned long 型指针,并取这个地址的值
* volatile 关键字:防止编译器优化,在应用层上多线程变量,在嵌入式中外设寄存器
*/
#define GPFCON (*(volatile unsigned long *)0x56000050)
#define GPFDAT (*(volatile unsigned long *)0x56000054)
#define GPFUP (*(volatile unsigned long *)0x56000058) /** 设置 GPFCON 的 4 5 6 引脚为输出 */
#define GPF4_OUT (1 << (4 * 2))
#define GPF5_OUT (1 << (5 * 2))
#define GPF6_OUT (1 << (6 * 2)) static void delay_ms(unsigned long ms); int main(void)
{
/** 将LED1-3对应的GPF4/5/6三个引脚设为输出 */
GPFCON = GPF4_OUT | GPF5_OUT | GPF6_OUT; unsigned long i = ;
while(){
delay_ms();
GPFDAT = (~(i<<)); // 根据i的值,点亮LED1,2,4
if(++i == )
i = ;
}
} static void delay_ms(unsigned long ms)
{
unsigned int i; while(ms--) {
for(i = ; i < ; i++);
}
}

十一、S3C2440 裸机 — GPIO的更多相关文章

  1. 【转载】s3c2440裸机开发调试环境(MDK4.6,Jlink v8,mini2440)

    用于arm裸机程序开发的IDE基本有 以下3个:MDK,IAR,还有ADS.具体它们的具体情况在这里我就不多说了,百度一下就明白了.由于之前开发c51,stm32时候都使用了MDK开发环境,而且MDK ...

  2. linux上使用J-Link调试S3C2440裸机代码

    linux上使用J-Link调试S3C2440裸机代码 工具: segger的jlink仿真器 segger的jlink for linux 交叉编译工具链里面的arm-xx-linux-xx-gdb ...

  3. s3c2440裸机-时钟编程(二、配置时钟寄存器)

    s3c2440裸机编程-时钟编程(二.配置时钟寄存器) 1.2440时钟时序 下图是2440时钟配置时序: 1.上电后,nRESET复位信号拉低,此时cpu还无法取指令工作. 2.nRESET复位信号 ...

  4. S3C2440的GPIO编程

    一.初步认识S3C2440A [S3C2440A简介] S3C2440A是三星公司推出的基于ARM920t内核的32/16位RISC微处理器.主要用于手持设备和中高端电子产品中.它内部集成16k数据c ...

  5. s3c2440的GPIO驱动

    多个通用的GPIO,同时这些端口也拥有一些复用功能(如ADC输入),有部分端口只能输入,有部分端口只能输出,今天我们来看看如何设置一个GPIO的输出电平以及如何获取一个端口的GPIO电平 对GPIO进 ...

  6. s3c2440裸机-内存控制器(一、内存控制器的原理)

    1.内存接口概念 S3C2440是个片上系统,有GPIO控制器(接有GPIO管脚(GPA-GPH)),有串口控制器 (接有TXD RXD引脚),有memory controller内存控制器,有Nan ...

  7. s3c2440裸机-时钟编程(一、2440时钟体系介绍)

    1.总线框架 下图是2440的总线框架,其中有AHB(Advanced High performance Bus)高速总线,APB(Advanced Peripheral Bus)外围总线. 不同总线 ...

  8. 十三、S3C2440 裸机 — 初始化代码及MMU

    13.1 NOR FLASH 搬运 把程序从 nor flash 上搬运到 SDRAM 中 程序存储在 nor flash 上,运行时将程序搬运到 SDRAM 中运行 nor flash 启动:nor ...

  9. S3C2440 裸机程序之音频

     mini2440之Main分析 2012-03-17 20:51:29 分类: 嵌入式 /****************************************************** ...

随机推荐

  1. css中相对定位和绝对定位

    相对定位: #box_relative { position: relative; left: 30px; top: 20px; } 绝对定位: #box_relative { position: a ...

  2. React 之form表单、select、textarea、checkbox使用

    1.案例如下 import React from 'react'; /** * 非约束性组(类似defaultValue等属性,不可以程序修改): <input type="text& ...

  3. python接口测试之mock(二)

    上一篇对mock-server已经做了初步的介绍,今天这里继续接着之前的介绍进行,我们先看之前的mock-server部分,之前编写了一个登录的mock,具体json文件见如下的内容: 小王子1110 ...

  4. Python学习之==>数组(一)

    1.定义数组 city = [] # 定义一个空数组 name = ['Jack','Panda','Bob','Franck'] # 根据下标找元素,最前面一个元素的下标是0,最后一个元素下标是-1 ...

  5. Elasticsearch 6.2.3版本 Windows环境 简单操作

    背景描述 Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎.无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库. El ...

  6. Netflix颠覆HR:我们只雇“成年人”

    员工的最佳福利,是与优秀者一起工作 ● Patty McCord / 文 李钊/译 担任Netflix的首席人才官时,我与CEO里德·黑斯廷斯一起做了一份127页的PPT,命名为<自由& ...

  7. Pytorch笔记 (2) 初识Pytorch

    一.人工神经网络库 Pytorch ———— 让计算机  确定神经网络的结构 +   实现人工神经元 + 搭建人工神经网络 + 选择合适的权重 (1)确定人工神经网络的 结构: 只需要告诉Pytorc ...

  8. c++ 引用 日期&时间

    日期时间[点击进入看吧,没啥可后期拓展的] 引用 引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字.一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量. 一.引用和指针的 ...

  9. python__007内置函数

    本文摘自:https://docs.python.org/3/library/functions.html?highlight=built#ascii     内置功能     abs() delat ...

  10. DJANGO MODEL FORMSETS IN DETAIL AND THEIR ADVANCED USAGE

    Similar to the regular formsets, Django also provides model formset that makes it easy to work with ...