一、100ASK_IMX6ULL嵌入式裸板学习_LED实验(中)
以C语言方式驱动(例程与代码分析)
韦东山的例程:
start.s部分:
.text
.global _start @全局标号
_start:
//设置栈
ldr sp,=0x80200000 @设置SP指针,则栈大小为0x200000
bl clean_bss @清除BSS段
bl main @跳转到C语言的main函数
halt:
b halt @一个循环
/* 清除BSS段,就是在链接地址处将bss段清零 */
clean_bss:
ldr r1, =__bss_start //bss起始地址,r1的值作为内存地址
ldr r2, =__bss_end //bss结束地址
mov r3, #0
clean:
str r3, [r1] //将r3中的值放入r1所指向的内存地址
add r1, r1, #4 //然后r1加上4
cmp r1, r2
bne clean
mov pc, lr
led.h部分:
#ifndef __LED_H__
#define __LED_H__
/**********************************************************************
* 函数名称: led_init
* 功能描述: 初始化LED引脚,就是把它设置为输出引脚
* 输入参数: 无
* 输出参数: 无
* 返 回 值: 无
***********************************************************************/
void led_init(void); //定义LED初始化函数led_init(void)
/**********************************************************************
* 函数名称: led_ctl
* 功能描述: 设置LED状态
* 输入参数:
* on : 1-LED点亮, 0-LED熄灭
* 输出参数: 无
* 返 回 值: 无
***********************************************************************/
void led_ctl(int on); //定义LED点亮函数
#endif
main.c部分:
#include "led.h"
void delay(volatile unsigned int d)
{
while(d--);
}
int main()
{
led_init(); //LED初始化
while(1)
{
led_ctl(1); //点亮LED
delay(1000000);
led_ctl(0); //熄灭LED
delay(1000000);
}
return 0;
}
led.c部分:
#include "led.h"
static volatile unsigned int *CCM_CCGR1 ;
static volatile unsigned int *IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3;
static volatile unsigned int *GPIO5_GDIR ;
static volatile unsigned int *GPIO5_DR ;
/**********************************************************************
* 函数名称: led_init
* 功能描述: 初始化LED引脚,就是把它设置为输出引脚
* 输入参数: 无
* 输出参数: 无
* 返 回 值: 无
***********************************************************************/
void led_init(void)
{
unsigned int val;
CCM_CCGR1 = (volatile unsigned int *)(0x20C406C); //这一步是多余的操作,但是由于[31:30]是保留位,赋值0b11也不会造成什么影响
IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3 = (volatile unsigned int *)(0x2290014);
GPIO5_GDIR = (volatile unsigned int *)(0x020AC000 + 0x4);
GPIO5_DR = (volatile unsigned int *)(0x020AC000);
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
/* GPIO5_IO03 */
/* a. 使能GPIO5
* set CCM to enable GPIO5
* CCM_CCGR1[CG15] 0x20C406C
* bit[31:30] = 0b11
*/
*CCM_CCGR1 |= (3<<30); //这一步是多余的操作,但是由于[31:30]是保留位,赋值0b11也不会造成什么影响
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
/* b. 设置GPIO5_IO03用于GPIO
* set IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3
* to configure GPIO5_IO03 as GPIO
* IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3 0x2290014
* bit[3:0] = 0b0101 alt5
*/
val = *IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3;
val &= ~(0xf);
val |= (5);
*IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3 = val;
/* c. 设置GPIO5_IO03作为output引脚
* set GPIO5_GDIR to configure GPIO5_IO03 as output
* GPIO5_GDIR 0x020AC000 + 0x4
* bit[3] = 0b1
*/
*GPIO5_GDIR |= (1<<3);
}
/**********************************************************************
* 函数名称: led_ctl
* 功能描述: 设置LED状态
* 输入参数:
* on : 1-LED点亮, 0-LED熄灭
* 输出参数: 无
* 返 回 值: 无
***********************************************************************/
void led_ctl(int on)
{
if (on) /* on: output 0*/
{
/* d. 设置GPIO5_DR输出低电平
* set GPIO5_DR to configure GPIO5_IO03 output 0
* GPIO5_DR 0x020AC000 + 0
* bit[3] = 0b0
*/
*GPIO5_DR &= ~(1<<3); //置零操作,点亮LED
}
else /* off: output 1*/
{
/* e. 设置GPIO5_IO3输出高电平
* set GPIO5_DR to configure GPIO5_IO03 output 1
* GPIO5_DR 0x020AC000 + 0
* bit[3] = 0b1
*/
*GPIO5_DR |= (1<<3); //置1操作,关闭LED
}
}
小结(分析)
在led.c代码部分,static volatile unsigned int定义了所要使用的寄存器的指针变量,其中:
static:为静态局部变量
一、100ASK_IMX6ULL嵌入式裸板学习_LED实验(中)的更多相关文章
- 讯为iTop4412嵌入式开发板学习之-------前言
一.linux 工作的分类以及培养时间 Linux 作为一个庞大的体系,有很多相关的研究领域,总结起来大致有五个方向: 1.服务器维护:需要了解 Linux 服务,熟练使用 Shell,了解网络配置. ...
- uboot-tiny4412启动流程(下)----如何将自己的裸板测试程序加入uboot中启动测试
今天在工作上搞了一天高通的芯片uboot程序,目的是希望将一个裸板的程序移植到uboot中,并且开机让它运行.这个芯片是NXP4330,目前是高通的一个芯片,基于ARM-contexA9架构,那么就跟 ...
- 【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)按键中断的触发 中断源级配置 管脚功 ...
随机推荐
- 【分析笔记】Linux input 子系统原理分析
一.input 子系统简介 输入子系统主要用于支持各种输入设备,可大大简化这类设备驱动的开发难度.以下为个人的理解,可能不同的内核版本会略有差异,在这里分析的内核为 linux-4.9. 无论在 Li ...
- 软工综合实践课设——员工招聘系统(参考BOSS直聘);Pyhton实现
应用背景: 随着科学技术的发展,岗位数量越来越多,特别是每逢毕业季找工作的人数也很多,如果人们找工作或者企业招人靠纯手工的话,费时费力,仅仅是筛选简历和费劲,并且员工找工作投简历可能得需要克服时间和空 ...
- 工具-使用org.openjdk.jol查看对象在内存中的布局
1 添加依赖 <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core& ...
- 《关于我因为flink成为spark源码贡献者这件小事》
各位读者老爷请放下手上的板砖,我可真没有标题党,且容老弟慢慢道来. spark和flink本身相信我不用做过多的介绍,后端同学不管搞没搞过大数据,应该都多多少少听过. 如果没听过,简单说,spark和 ...
- soucrce insight4 使用
1.快捷键 F8 高亮 ctrl + 左击 进入函数定义或变量声明处 Alt + , 后退 Alt + . 前进 ctrl + g 跳到固定行 shift + F3 选中一个单词按下后,可按F3,F4 ...
- element表单嵌套检验+动态添加
在写表单的时候,容易碰到这种嵌套表单的数据校验,并且这种表单是动态添加的,网上大部分的做法是表单套表单,实际上只需要一个表单就可以了. 为了方便观看,这里只列举了两条数据 多级表单嵌套校验 <e ...
- vue axios请求中断的处理
https://blog.csdn.net/qiaoqiaohong/article/details/121014296
- 题解 [SCOI2008] 奖励关
为了这道题我学了期望 dp(? 为什么会有人期望 dp 入门是这道题啊歪(#`O′) wtx 一眼秒杀了这题,我们一起来膜拜他! 其实这题很水但是我之前没学过期望 dp 我是什么 nt. 显然我们以每 ...
- Linux操作命令(五)1.find命令 2.xargs命令
1.find命令(一) 查找,沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作 参数 描述 -print find 命令将匹配的文件输出到标准输出 -exec find 命令对匹配的文件 ...
- java学习日记20230301-API文档
JAVA API java application programming interinterface 应用程序编程接口,是java提供的基本编程接口 在线文档:https://www.matoo ...