一、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中运行.链接地址与运行地址 ...
随机推荐
- Spring配置类理解(Lite模式和Full模式)
Spring中的注解大家在开发中都常常用到,但是如果我说我们常常用的注解修饰了一个类,表示这个类就是一个配置类很多开发者都会有点迷糊了.具体配置类在开发中有什么样的用途我就不多说了,相信很多人都知道, ...
- 安装云崽Bot+GPT3插件
安装云崽Bot+GPT3插件 这次我们来搭建云崽Bot,云崽Bot其实是一个用于原神的机器人,不过众多大佬开发出了很多有趣的插件供我们使用,这次我们就是用其中的一个插件Chat-gpt(其不是正宗的C ...
- JAVA虚拟机20-基于栈的解释器执行过程示例
1.准备代码 public int calc() { int a = 100; int b = 200; int c = 300; return (a + b) * c; } 2.使用javap -v ...
- 学习Java Day11
今天学习了二维数组:
- 【译】.NET 7 中的性能改进(二)
原文 | Stephen Toub 翻译 | 郑子铭 堆栈替换 (On-Stack Replacement) 堆栈替换 (OSR) 是 .NET 7 中最酷的 JIT 功能之一.但要真正了解 OSR, ...
- vue还可以这样写
1.这两种写法都可以: var vm = new Vue({ data(){ return { scaleFlag:'big', } }, //data:{}, created: function ( ...
- Atcoder题解:Arc156_c
数据范围 \(10^5\),但是介绍一个 \(O(n\log n)\) 做法. 我们考虑观察样例,发现样例都很小,而且 \(\text{LCS}\) 的长度都是 \(1\),那么我们就猜答案最多为 \ ...
- LeetCode-2038 如果相邻两个颜色均相同则删除当前颜色
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-colored-pieces-if-both-neighbors-are-the-s ...
- 五子棋 framebuffer版
要在家目录下 makefile 1 main : main.o fun.o input.o fb_draw.o 2 gcc -Wall -o $@ $^ 3 clean : 4 rm -rf *.o ...
- android 投屏
https://blog.csdn.net/aa464971/article/details/83349215