【ARM】Tiny4412裸板编程之按键
00. 目录
文章目录
- 00. 目录
- 01. 开发环境
- 02. 控制原理
- 03. 配置寄存器
- 04. 程序示例一
- 05. 程序示例二
- 06. 附录
01. 开发环境
- 开发板:Tiny4412SDK标准版 「Tiny4412 SDK 1506」
- 工具:「arm-linux-gcc-4.5.1」 「minicom」 「dnw」
- 平台:Ubuntu 20.04
02. 控制原理
试过了GPIO的输出功能,再来测试下GPIO的输入功能。开发板上有四个用户按键,使用这四个按键来控制四个LED的状态。
咱们的按键在底板上,所以需要看底板的原理图
打开底板原理图(Tiny4412SDK-1506-Schematic.pdf)
用户按键KEY1、KEY2、KEY3、KEY4分别对应了GPX3_2、GPX3_3、GPX3_4、GPX3_5,并且按键引脚平常是高电平,按键被按下变为低电平。
03. 配置寄存器
由原理图可知,程序只进行了两步操作。
第一步:GPX3CON功能配置寄存器,地址为0x11000000+0x00000C60=0x11000C60,每四位控制一个引脚,0输入,1输出等等,这里我们用到的是输入功能。
Base Address: 0x1100_0000
Address = Base Address + 0x0C60, Reset Value = 0x0000_0000
第二步:GPX3DAT数据寄存器,读取对应的位即可。
04. 程序示例一
Key控制对应的LED
led.s文件内容如下
.section .text.align 2.global led_init
led_init:@配置为输出ldr r0, =0x110002E0 ldr r1, [r0]ldr r2, =0xffffbic r1, r1, r2ldr r2, =0x1111orr r1, r1, r2str r1, [r0]mov pc, lr.align 2.global led_allon
led_allon:ldr r0, =0x110002E4 ldr r1, [r0]bic r1, r1, #0xfstr r1, [r0]mov pc, lr.align 2.global led_alloff
led_alloff:ldr r0, =0x110002E4 ldr r1, [r0]orr r1, r1, #0xfstr r1, [r0]mov pc, lr.align 2.global led_on
led_on:ldr r1, =0x110002E4 ldr r2, [r1]mov r3, #1bic r2, r2, r3, LSL r0str r2, [r1]mov pc, lr.align 2.global led_off
led_off:ldr r1, =0x110002E4 ldr r2, [r1]mov r3, #1orr r2, r2, r3, LSL r0str r2, [r1]mov pc, lr.align 2.global led_set
led_set:ldr r1, =0x110002E4 ldr r2, [r1]orr r2, r2, #0xfand r2, r2, r0str r2, [r1]mov pc, lr
key.s内容如下
.section .text.align 2.global key_init
key_init:ldr r0, =0x11000C60ldr r1, [r0]ldr r2, =0xffff00bic r1, r1, r2str r1, [r0]mov pc, lr.align 2.global key_get
key_get:ldr r1, =0x11000C64ldr r0, [r1]lsr r0, #2mov pc, lr
test.s文件内容如下
.section .text.align 2.global _start
_start:stmfd sp!, {lr}bl key_initbl led_init1:bl key_getbl led_setb 1bldmfd sp!, {pc}
05. 程序示例二
led控制蜂鸣器 key1控制蜂鸣器开,key2控制蜂鸣器关
bell.s文件内容如下
.section .text.align 2.global bell_init
bell_init:@GPD0_0ldr r0, =0x114000A0ldr r1, [r0]bic r1, r1, #0xforr r1, r1, #0x1str r1, [r0]mov pc, lr.align 2.global bell_on
bell_on:ldr r0, =0x114000A4ldr r1, [r0]orr r1, r1, #0x1str r1, [r0]mov pc, lr.align 2.global bell_off
bell_off:ldr r0, =0x114000A4ldr r1, [r0]bic r1, r1, #0x1str r1, [r0]mov pc, lr
key.s文件内容如下:
.section .text.align 2.global key_init
key_init:ldr r0, =0x11000C60ldr r1, [r0]ldr r2, =0xffff00bic r1, r1, r2str r1, [r0]mov pc, lr.align 2.global key_get
key_get:ldr r1, =0x11000C64ldr r0, [r1]lsr r0, #2mov pc, lr
test.s文件内容如下:
.section .text.align 2.global _start
_start:stmfd sp!, {lr}bl key_initbl bell_init1:bl key_getmov r4, r0tst r4, #1bleq bell_ontst r4, #0b10bleq bell_offb 1bldmfd sp!, {pc}
06. 附录
Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary0.pdf
【ARM】Tiny4412裸板编程之按键相关推荐
- 【ARM】Tiny4412裸板编程之按键(C语言)
00. 目录 文章目录 00. 目录 01. 开发环境 02. 控制原理 03. 配置寄存器 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准 ...
- 【ARM】Tiny4412裸板编程之异常(软中断)
00. 目录 文章目录 00. 目录 01. 开发环境 02. 中断向量表 03. 中断向量表实现 04. 设置Vectors bit 05. 程序示例一 06. 程序示例二 07. 附录 01. 开 ...
- 【ARM】Tiny4412裸板编程之异常(中断向量表)
00. 目录 文章目录 00. 目录 01. 开发环境 02. 异常向量表 03. 异常向量表实现 04. 设置Vectors bit 05. 主函数实现 06. 附录 01. 开发环境 开发板:Ti ...
- 【ARM】Tiny4412裸板编程之异常
00. 目录 文章目录 00. 目录 01. 开发环境 02. 概述 03. ARM处理器模式 04. 异常类型 05. 异常处理 5.1 异常处理伪代码 5.2 复位异常 5.3 未定义指令异常 5 ...
- 【ARM】Tiny4412裸板编程之协处理器
00. 目录 文章目录 00. 目录 01. 开发环境 02. 协处理器简介 03. 获取Main ID 04. 获取CCSIDR 05. 获取SCTLR 06. ID_MMFR3 07. 附录 01 ...
- 【ARM】Tiny4412裸板编程之静态库(libc.a)
00. 目录 文章目录 00. 目录 01. 开发环境 02. 概述 03. 库的来源 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准版 「 ...
- 【ARM】Tiny4412裸板编程之蜂鸣器(C语言)
00. 目录 文章目录 00. 目录 01. 控制原理 02. 配置寄存器 03. 程序示例一 04. 程序示例二 05. 程序示例三 06. 附录 01. 控制原理 咱们的蜂鸣器在底板上,所以需要看 ...
- 【ARM】Tiny4412裸板编程之蜂鸣器
00. 目录 文章目录 00. 目录 01. 控制原理 02. 配置寄存器 03. 程序示例一 04. 程序示例二 05. 程序示例三 06. 附录 01. 控制原理 咱们的蜂鸣器在底板上,所以需要看 ...
- 配置eclipse为ARM嵌入式开发板编程
配置eclipse为ARM嵌入式开发板编程 1-计算机环境 操作系统:window10 编程软件:Eclipse IDE for C and C++ Developers - 2022-09 Wind ...
最新文章
- 用JavaScript获取URL中的参数值
- 活动报名|“悟道之巅:AI创新应用大赛”发布会——体验未来技术,赢取百万奖金...
- 前端模块化--这是我看过讲得比较好的东东
- 在树莓派中开发 opencv 大型程序
- Java关键字——instanceof
- [svc][jk][mem]linux 内存清理/释放命令
- Spring Boot + Spring Security + Thymeleaf 举例
- php webservice 上传,PHP实现WebService服务
- 渣本毕业两年经验,看这一篇就够了!
- android R制作OTA包时报错
- 归一化处理公式_数学建模中的数据处理——归一化处理
- oc基础-protocol协议的使用
- qq拼音输入法下载|qq拼音输入法纯净版下载
- 安装Rational Rose所踩得坑
- Android 导出应用的数据库的两种常用方法,db查看器 SQLite Expert Personal下载
- java拼音_Java获取汉字对应的拼音(全拼或首字母)
- 为什么要升级PLM系统
- mlir toy 教程(1)
- 什么叫同步,什么叫异步?
- Spring的四种注入方式
热门文章
- 你用哪种工具进行iOS app自动化功能测试?
- 利用Android中的三大主件来实现一个码表
- python矩阵旋转函数_Python3算法之十:矩阵旋转
- C语言学习之利用指针将字符串a复制为字符串 b,然后输出字符串b
- buaaoo_fourth_assignment
- anaconda的简单使用教程(虚拟环境安装)
- [SDOI2013]直径 (树的直径,贪心)
- 创建calico网络报错client response is invalid json
- Java Error(三)
- HDOJ 1465 不容易系列之一 【错排公式 递推】