一、100ASK_IMX6ULL嵌入式裸板学习_LED实验(上)
2024-10-20 17:28:48
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
最新文章
- 使用CSS3的box-shadow实现双透明遮罩层对话框
- 给UIWebView调整UserAgent字段
- 安卓界面控件屏幕居中Layout例子
- DA - 信息分析思路概要
- 实现仿知乎的开场动画,图片zoomin的效果,实现原理,没加动效
- 数据库同步工具HKROnline SyncNavigator SQL Server互同步MySQL
- 【USACO】calfflac
- jquery $.ajax方法
- jquery文字左右滚动
- jQuery判断页面滚动条滚动方向
- raw和字符串的转换。
- Elasticsearch 安装与集群配置
- qt运行库
- hadoop-ha组态
- lambda 怎么传递ref参数
- cinder-volume报错vmdk2 is reporting problems, not sending heartbeat. Service will appear ";down";.
- 使用 ping++做支付的流程
- Hdoj 1176.免费馅饼 题解
- js 判断js,css是否引入,确保不重复引入
- Eclipse实现数据库反向生成实体类(pojo)-------(插件安装和实现步骤的说明)
热门文章
- immutable.js 学习笔记(三)----- Map
- 1月3日内容总结——bbs项目登陆页面和主页、个人站点页的搭建
- Grafana 系列文章(十二):如何使用Loki创建一个用于搜索日志的Grafana仪表板
- XMind 2022软件 及2000+最全模板素材大全 ( 12.5 亲测有效 )
- LeetCode HOT 100:乘积最大子数组(动态规划)
- debug补充、员工管理系统、字符编码、文件操作
- 【ARM架构】armv8 系统安全概述
- Hexo系列(三):Hexo主题
- CF884E - Binary Matrix
- PYTHON编写程序练习-打印99乘法表