一、100ASK_IMX6ULL嵌入式裸板学习_LED实验(上)
LED实验
汇编的方式驱动LED
/*
*LED汇编实验
*创建者:Orange
*2021年03月04日
*/
.global _start @全局标号
_start:
/*使能所有外设时钟 */
ldr r0, =0x020c4068 @CCGR0的地址
ldr r1, =0xffffffff @要向CCGR0写入的数据
str r1, [r0] @将0xffffffff写入到CCGR0中
ldr r0, =0x020c406c @CCGR1的地址
str r1, [r0]
ldr r0, =0x020c4070 @CCGR2的地址
str r1, [r0]
ldr r0, =0x020c4074 @CCGR3的地址
str r1, [r0]
ldr r0, =0x020c4078 @CCGR4的地址
str r1, [r0]
ldr r0, =0x020c407c @CCGR5的地址
str r1, [r0]
ldr r0, =0x020c4080 @CCGR6的地址
str r1, [r0]
/*配置GPIO5_IO3的PIN复用为GPIO,也就是
*设置IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3 = 3
*IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3寄存器地址为0x02290014
*/
ldr r0, =0x02290014 @IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3的地址
ldr r1, =3 @关闭该口的软件输入功能,复用为GPIO,则应赋值0x1010,即3
str r1, [r0] @将0x00101写入IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3寄存器中
/*配置SNVS_TAMPER3的电气属性 也就是寄存器:
*IOMUXC_SNVS_SW_PAD_CTL_PAD_SNVS_TAMPER3
*IOMUXC_SNVS_SW_PAD_CTL_PAD_SNVS_TAMPER3寄存器地址为0x02290058
*
*bit0: 0 为低速率 压摆率设置
*bit5:3 110 R0/6的驱动能力 设置驱动能力(Drive Strength Field)
*bit7:6 10 medium(100MHz) 设置速度
*bit11 0 关闭开漏使能 设置开漏使能
*bit12 1 使能Pull/Keeper
*bit13 0 选择Keeper 选择Pull还是Keeper
*bit15:14 00 100K的下拉电阻 设置上/下拉电阻的大小
*bit16 0 关闭HYS使能 设置HYS磁滞使能
*综上该寄存器的值应设置为0x10b0
*/
ldr r0, =0x02290058 @IOMUXC_SNVS_SW_PAD_CTL_PAD_SNVS_TAMPER3的地址
ldr r1, =0x10b0
str r1, [r0] @将r1中的值
/*设置GPIO 设置是输入还是输出
*GPIO5_GDIR寄存器地址为0x020ac004
*设置GPIO5_GDIR寄存器的bit3为1
*也就是设置GPIO5_IO03为输出
*/
ldr r0, =0x0209c004
ldr r1, =0x8
str r1, [r0]
/*打开LED,也就是设置GPIO5_GPIO03为0
*具体要结合开发板原理图上LED的连接方式来操作
*由于此处LED另一端连接的是电源,所以设置为0为点亮
* */
ldr r0, =0x02090000
ldr r1, =1
str r1, [r0]
loop :
b loop
汇编驱动LED小结(代码分析):
- 全局标号
- 使能所有外设时钟(或在芯片手册中)
ldr r1, =0xffffffff
ldr r0, =CCGR(时钟控制寄存器)的地址
str r1, [r0]
- 配置对应的复用IO口为GPIO
/*配置GPIO5_IO3的PIN复用为GPIO,也就是
*设置IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3 = 3
*IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3寄存器地址为0x02290014
*/
/*配置GPIO5_IO3的PIN复用为GPIO,也就是
*设置IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3 = 3
*IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3寄存器地址为0x02290014
*/
ldr r0, =0x02290014 @IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3的地址
ldr r1, =3 @关闭该口的软件输入功能,复用为GPIO,则应赋值0x1010,即3
str r1, [r0] @将0x00101写入IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3寄存器中
- 配置此GPIO口的电气属性,比如压摆率、驱动能力、是否开漏、上下拉电阻的大小、是否使能PULL/Keeper、是否打开HYS磁滞使能等等
/*配置SNVS_TAMPER3的电气属性 也就是寄存器:
*IOMUXC_SNVS_SW_PAD_CTL_PAD_SNVS_TAMPER3
*IOMUXC_SNVS_SW_PAD_CTL_PAD_SNVS_TAMPER3寄存器地址为0x02290058
*
*bit0: 0 为低速率 压摆率设置
*bit5:3 110 R0/6的驱动能力 设置驱动能力(Drive Strength Field)
*bit7:6 10 medium(100MHz) 设置速度
*bit11 0 关闭开漏使能 设置开漏使能
*bit12 1 使能Pull/Keeper
*bit13 0 选择Keeper 选择Pull还是Keeper
*bit15:14 00 100K的下拉电阻 设置上/下拉电阻的大小
*bit16 0 关闭HYS使能 设置HYS磁滞使能
*综上该寄存器的值应设置为0x10b0
*/
ldr r0, =0x02290058 @IOMUXC_SNVS_SW_PAD_CTL_PAD_SNVS_TAMPER3的地址
ldr r1, =0x10b0
str r1, [r0] @将r1中的值
- 设置GPIO是输入还是输出
/*设置GPIO 设置是输入还是输出
*GPIO5_GDIR寄存器地址为0x020ac004
*设置GPIO5_GDIR寄存器的bit3为1
*也就是设置GPIO5_IO03为输出
*/
ldr r0, =0x0209c004
ldr r1, =0x8
str r1, [r0]
- 设置完后便可以对GPIO操作,设置0或1,控制GPIO的动作
/*打开LED,也就是设置GPIO5_GPIO03为0
*具体要结合开发板原理图上LED的连接方式来操作
*由于此处LED另一端连接的是电源,所以设置为0为点亮
* */
ldr r0, =0x02090000
ldr r1, =1
str r1, [r0]
- 最后设置一个循环,使程序持续进行
loop :
b loop
一、100ASK_IMX6ULL嵌入式裸板学习_LED实验(上)的更多相关文章
- 讯为iTop4412嵌入式开发板学习之-------前言
一.linux 工作的分类以及培养时间 Linux 作为一个庞大的体系,有很多相关的研究领域,总结起来大致有五个方向: 1.服务器维护:需要了解 Linux 服务,熟练使用 Shell,了解网络配置. ...
- 【4412嵌入式开发板学习笔记】认识uboot
转自迅为讨论群:http://www.topeetboard.com 重要说明:这份笔记不是4412开发配套的,是我在网上看视频的时候下载上课老师的笔记后修改的.所以我试了一下笔记上的uboot命令, ...
- 嵌入式开发板iTOP4412学习开发板
网站:http://www.topeetboard.com 淘宝:https://item.taobao.com/item.htm?_u=okcahs0f42a&id=38712193806 ...
- 【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705 参考博客 : [嵌入式开发]嵌入式 开发环境 (远 ...
- 【arm学习】我的第一个裸板程序
初学ARM感觉写个裸板程序还真的不容易,可能是没有用到ADS,keil之类的开发平台的缘故吧.编译,链接过程在linux平台上完成,这样学起来更有实感,还能顺便熟悉linux环境,以及命令,何乐而不为 ...
- 学习嵌入式开发板的Android平台体系结构和源码结构
本文转自迅为论坛资料:http://www.topeetboard.com 推荐学习嵌入式开发板平台:iTOP-4412开发板 下面这张图出自Google官方,展示了Android系统的主要组成部分. ...
- 嵌入式 hi3518c裸板uboot烧写、kernel烧写、fs烧写小结
1.在uboot中我可以添加自己的命令,添加的方法是找到一个uboot的命令,然后模仿着去增加属于自己的命令代码以及实现函数就可以 2.记住在使用printf进行调试的时候,在遇到指针或者字符串的时候 ...
- S5PV210裸板驱动:启动
以往2440和6410的启动方式,只要我们把裸板代码烧写到NAND FLASH的开始位置,当开发板上点启动时,处理器会自动从NAND FLASH上拷贝前面一段的代码到内部的RAM中执行.按照以前的方法 ...
- 裸板中中断异常处理,linux中断异常处理 ,linux系统中断处理的API,中断处理函数的要求,内核中登记底半部的方式
1.linux系统中的中断处理 1.0裸板中中断异常是如何处理的? 以s5p6818+按键为例 1)按键中断的触发 中断源级配置 管脚功 ...
- ARM裸板开发:04_MMU 链接地址与运行地址不一致时,(SDRAM)初始化程序地址无关码问题的分析
ARM裸板开发过程,程序的链接地址设置为为0x30000000,而前期的启动代码以及相关硬件的初始化代码需要在内部iRAM(steppingstone,起始地址0x0)的4K中运行.链接地址与运行地址 ...
随机推荐
- Flink1.15仅支持ZooKeeper3.5/3.6
这是一个验证贴,因为社区文档是错误的. 先说结论 Flink1.15仅支持ZooKeeper3.5/3.6,不再支持3.4.FLINK-25146 Drop support for Zookeeper ...
- 12月20日内容总结——ajax补充知识点、多对多外键的三种创建方式、django内置序列化组件、批量操作数据、分页器推导思路与自定义分页器的使用、form组件
目录 一.ajax补充说明 二.多对多三种创建方式 三.django内置序列化组件(drf前身) 四.批量操作数据 五.分页器思路 六.自定义分页器的使用 七.form组件 forms组件介绍 For ...
- 为什么sleeping的会话会造成阻塞
背景 客户反映HIS数据库每天22点后都会发生阻塞,阻塞的源头是一个sleeping的会话,越阻塞越多,只能通过手动KILL掉才能解决,十分不解为什么状态为sleeping的会话会造成阻塞. 现象 在 ...
- Cheat Engine 中文设置汉化教程
下载地址:https://www.cheatengine.org/downloads.php 下载windows 安装版本以及中文翻译包: 1.安装程序:一路NEXT即可 2.打开程序安装位置在在文件 ...
- Consul+SpringCloud微服务(入门三)
1.安装Consul 我是用的是docker进行安装: 拉取镜像 [root@VM-24-4-centos ~]# docker pull consul Using default tag: late ...
- 使用 DirectSound 播放 WAV 文件
使用 DirectSound 播放 WAV 文件 本文需要的前置知识可以在之前的这两篇文章找到. WAVE音频文件格式及其64位扩展格式的简要介绍 读写wav格式文件 基于本文介绍的方法,我们也可以用 ...
- yaml文件详解
一.yaml文件详解 前言 Kubernetes 支持 YAML 和 JSON 格式管理资源对象JSON 格式:主要用于 api 接口之间消息的传递YAML 格式:用于配置和管理,YAML 是一种简洁 ...
- H3C MS4300V2配置mac地址与接口绑定
配置mac地址与接口绑定 例: <h3c>system-view //进入系统视图 [h3c]int g 1/0/45 //进入45接口 [h3c-GigabitEthernet1 ...
- 安卓逆向 crmak的动态调试
1.java代码分析 检测是否输入密码,输入了就进行对比 由此,我们需要进入SO进行动态调试了 2.SO调试 过程太复杂,凌晨才搞出来,就直接给答案了,有文件检测和端口检测 还有调试检测,都需要干掉
- Java基础语法:注释、数据类型、字节
Java基础语法:注释.数据类型.字节 注释 单行注释:// 多行注释:/* 注释 */ 文档注释:/** 注释 */ 数据类型分为两大类:基本类型和引用类型 八大基本数据类型 整数类型 byte(占 ...