一、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中运行.链接地址与运行地址 ...
随机推荐
- 一把梭:REST API 全用 POST(转载)
一把梭:REST API 全用 POST(转载) 原文链接: https://coolshell.cn/articles/22173.html 写这篇文章的原因主要还是因为V2EX上的这个贴子,这个贴 ...
- IOS12 + Xscode12 报错:Building for iOS Simulator, but linking in dylib built for iOS, file '/Users/XXX/Desktop/XXXX/XXX.framework/JSSDK' for architecture arm64
问题描述:编译过程出现错误,Building for iOS Simulator, but linking in dylib built for iOS, file '/Users/XXX/Deskt ...
- 2021级《JAVA语言程序设计》上机考试试题2
以下是学生页面 首先先给上数据库 在准备准备工作 以下为代码: package Bean; public class Student { private String StuID; private S ...
- NETAPP硬盘更换
netapp硬盘新增 一.找到坏盘,插上新盘# 1.登陆到想要点亮的硬盘相对应的控制器上,并进去高级模式. priv set advanced 2.利用disk show -v 查看想要点亮的硬盘名字 ...
- 2022年4月第十三届蓝桥杯省赛C组C语言 习题解析(每日一道)
本题总分:5 分[问题描述]小蓝要把一个字符串中的字母按其在字母表中的顺序排列.LANQIAO 排列后为 AAILNOQ.//用的冒泡排序 https://blog.csdn.net/superman ...
- 【Vue】Vue开源样式库 Vuex的使用 vuex的执行流程 Vue-router的使用 路由跳转 路由守卫
目录 昨日回顾 纯净的Vue项目 今日内容 0 开源样式库 1 Vuex 的使用 1.1 vuex的执行流程图 Vuex的使用 购物车案例 2 Vue-router的使用 2.1 基本使用 2.2 路 ...
- Philips and Calculator
代码 #include<cstdio> #include<algorithm> using namespace std; const int N = 3 * 1e6; int ...
- openfoam UPstream类探索(二)
前言 接上次的博文,本篇补全以下几个函数的介绍: Pstream::nProcs() Pstream::parRun() UPstream::exit() 简述几个常用的函数如下: Pstream:: ...
- 彰显个性│github 和 gitlab 之自定义首页样式
目录 个性首页 制作步骤 修改内容 个性首页 相信很多小伙伴在逛 github 和 gitlab 的时候 会发现很多开发者的首页异常的炫酷,如 https://github.com/autofelix ...
- Eureka服务治理
Eureka是由Netflix开发的一款服务治理开源框架,Spring-cloud对其进行了集成.Eureka既包含了服务端也包含了客户端,Eureka服务端是一个服务注册中心(Eureka Serv ...