一、GPIO介绍
GPIO(General-purpose input/output),通用型之输入输出的简称,其接脚可以供使用者由程控自由使用,PIN脚依现实考量可作为通用输入(GPI)或通用输出(GPO)或通用输入与输出。
1、优点(集成在CPU内部)
低功耗
小封装
成本低
操控简单
2、GPIO的寄存器
GPIOxCON 控制寄存器,用于配置GPIO管脚的功能,每两个二进制位控制一个GPIO管脚,一个寄存器可以最多控制16管脚。
00 输入
01 输出
10 特殊功能
11 保留
GPIOxDAT 数据寄存器,它的用法取决于控制寄存器
GPIOxCON 输入
此时外部设备会对该管脚输入高低电流,从GPIOxDAT寄存器中读取数据(1高,0低)可以知道外部设备的状态,如:可以获取到按键是按下还是弹起。
GPIOxCON 输出
此时向GPIOxDAT寄存器写入,如果写入的是0,该管脚输入低电流,如果写入的是1,该管脚输出高电流,根据外部设备的原理图决定。
GPIOxUP 上/下拉电阻寄存器
用于控制电阻上拉、下拉。
如果电阻上拉,GPIO管脚处于高阻状态,相当于没有接芯片。
二、点亮LED
1、查看电路原理图,找到对应的GPIO管脚:GPJ0
2、打开CPU数据手册,找到对应地址:
GPJ0CON 0xE0200240:
在不修改其它二进制位的前提下,把12~23设置为以下值
[12~15] 0001
[16~19] 0001
[20~23] 0001
GPJ0PUD 0xE0200248
在不修改其它二进制位的前提下,把6~11设置为以下值
[6~11] 000000
GPJ0DAT 0xE0200244
根据电路图得知,GPIO管脚处于低电流时,左边的高电流才会经过LED流向GPIO,LED才会亮。
在不修改其它二进制位的前提下,把3~5设置为以下值
[3~5] 000
练习1:点亮最后一个LED灯
练习2:开启峰鸣器
1、查看原理图 PWMTOUT2 ,根据核心板原理图得知 GPD0_2
2、阅读CPU数据手册:
GPD0CON 0xE020_00A0 [8~11]:0001
GPD0DAT 0xE020_00A4 [6~7]:00
GPD0UP 0xE020_00A8 [2]:1
三、ARM汇编与C代码混编
在裸机下使用C语言编程需要确定各内存段的位置,堆内存、栈内存在BL0中已经设置过了,因此还需要确定代码段、数据段、静态数据段,可以通过链接脚本来指定各内存段的位置及排列。
1、什么是链接地址
链接地址批的是希望程序执行时所在的地址,编译时通过-Ttext指定。
2、什么是运行地址
是程序在运行时,实际所处的位置。
如果运行地址和链接地址不匹配,代码在进行绝对跳转时就会出现错乱。
3、链接脚本中究竟要做什么
链接脚本是用来指挥链接器工作的,它是一个规则文件。
链接器会根据链接脚本中的规则来排列目标文件的代码段,谁排在第一个,谁的第一个函数就是入口函数。
链接脚本关键内存是:段名+地址
4、链接脚本的内容
SECTIONS{} 它是整个链接脚本的全部
.代表当前地址
=表示赋值
SECTIONS
{
. = 0xd0020010;
.text : {
start.o
*(.text)
}
.data : {
*(.data)
}
.bss : {
*(.bss)
}
}
5、链接脚本的使用