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裸板编程之按键相关推荐

  1. 【ARM】Tiny4412裸板编程之按键(C语言)

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 控制原理 03. 配置寄存器 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准 ...

  2. 【ARM】Tiny4412裸板编程之异常(软中断)

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 中断向量表 03. 中断向量表实现 04. 设置Vectors bit 05. 程序示例一 06. 程序示例二 07. 附录 01. 开 ...

  3. 【ARM】Tiny4412裸板编程之异常(中断向量表)

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 异常向量表 03. 异常向量表实现 04. 设置Vectors bit 05. 主函数实现 06. 附录 01. 开发环境 开发板:Ti ...

  4. 【ARM】Tiny4412裸板编程之异常

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 概述 03. ARM处理器模式 04. 异常类型 05. 异常处理 5.1 异常处理伪代码 5.2 复位异常 5.3 未定义指令异常 5 ...

  5. 【ARM】Tiny4412裸板编程之协处理器

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 协处理器简介 03. 获取Main ID 04. 获取CCSIDR 05. 获取SCTLR 06. ID_MMFR3 07. 附录 01 ...

  6. 【ARM】Tiny4412裸板编程之静态库(libc.a)

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 概述 03. 库的来源 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准版 「 ...

  7. 【ARM】Tiny4412裸板编程之蜂鸣器(C语言)

    00. 目录 文章目录 00. 目录 01. 控制原理 02. 配置寄存器 03. 程序示例一 04. 程序示例二 05. 程序示例三 06. 附录 01. 控制原理 咱们的蜂鸣器在底板上,所以需要看 ...

  8. 【ARM】Tiny4412裸板编程之蜂鸣器

    00. 目录 文章目录 00. 目录 01. 控制原理 02. 配置寄存器 03. 程序示例一 04. 程序示例二 05. 程序示例三 06. 附录 01. 控制原理 咱们的蜂鸣器在底板上,所以需要看 ...

  9. 配置eclipse为ARM嵌入式开发板编程

    配置eclipse为ARM嵌入式开发板编程 1-计算机环境 操作系统:window10 编程软件:Eclipse IDE for C and C++ Developers - 2022-09 Wind ...

最新文章

  1. 用JavaScript获取URL中的参数值
  2. 活动报名|“悟道之巅:AI创新应用大赛”发布会——体验未来技术,赢取百万奖金...
  3. 前端模块化--这是我看过讲得比较好的东东
  4. 在树莓派中开发 opencv 大型程序
  5. Java关键字——instanceof
  6. [svc][jk][mem]linux 内存清理/释放命令
  7. Spring Boot + Spring Security + Thymeleaf 举例
  8. php webservice 上传,PHP实现WebService服务
  9. 渣本毕业两年经验,看这一篇就够了!
  10. android R制作OTA包时报错
  11. 归一化处理公式_数学建模中的数据处理——归一化处理
  12. oc基础-protocol协议的使用
  13. qq拼音输入法下载|qq拼音输入法纯净版下载
  14. 安装Rational Rose所踩得坑
  15. Android 导出应用的数据库的两种常用方法,db查看器 SQLite Expert Personal下载
  16. java拼音_Java获取汉字对应的拼音(全拼或首字母)
  17. 为什么要升级PLM系统
  18. mlir toy 教程(1)
  19. 什么叫同步,什么叫异步?
  20. Spring的四种注入方式

热门文章

  1. 你用哪种工具进行iOS app自动化功能测试?
  2. 利用Android中的三大主件来实现一个码表
  3. python矩阵旋转函数_Python3算法之十:矩阵旋转
  4. C语言学习之利用指针将字符串a复制为字符串 b,然后输出字符串b
  5. buaaoo_fourth_assignment
  6. anaconda的简单使用教程(虚拟环境安装)
  7. [SDOI2013]直径 (树的直径,贪心)
  8. 创建calico网络报错client response is invalid json
  9. Java Error(三)
  10. HDOJ 1465 不容易系列之一 【错排公式 递推】