第九章我们使用汇编编写了 LED 灯的实验,在实际开发过程中大部分还是使用 C 语言,汇编只是用来完成 C 语言环境的初始化,本章我么就来实现用汇编完成 C 语言环境的初始化,然后用 C 语言实现 LED 的例程。

10.1 C 程序版LED例程简介

汇编完成 C 语言环境的初始化主要包括内存初始化,设置堆栈指针等等,当这些工作完成以后就可以跳转到 C 语言,执行 C 程序了,所以我们有两部分事情要做:

1.汇编文件,用来完成 C 语言的环境初始化

2.C 语言文件,主要实现我们的业务功能,比武我们本章的点亮 LED。

10.2 原理图分析 原理图分析

本章用到的硬件资源和第 6 章的一样,可以参照第六章的硬件原理分析。

10.3 程序编写

本实验对应的例程在光盘资料的:i.MX6UL 终结者光盘资料\04_裸机例程源码\2_led_C program 目录下,我们在 Ubuntu 系统建立“1_Led_C program”文件夹,然后在“Led_C program”文件夹下建立文件:start.S、main.c、main.h。其中 start.S 是汇编文件,main.c 和 main.h 是 C 语言文件。

我们在前面新建的“srart.S”文件中输入下面的代码:

1. global _start /* 全局标号 */

2. /*

3. * 描述: _start 函数,程序从此函数开始执行,此函数主要功能是设置 C

4. * 运行环境。

5. */

6. _start:

7. /* 进入 SVC 模式 */

8. mrs r0, cpsr

9. bic r0, r0, #0x1f /* 将 r0 寄存器中的低 5 位清零,也就是 cpsr 的 M0~M4 */

10. orr r0, r0, #0x13 /* r0 或上 0x13,表示使用 SVC 模式 */

11. msr cpsr, r0 /* 将 r0 的数据写入到 cpsr_c 中 */

12. ldr sp, =0X80200000 /* 设置栈指针 */

13. b main /* 跳转到 main 函数 */

第 1 行定义了一个全局标号_start

第 6 行是程序的入口、

第 8 行到第 11 行是设置处理器进入 SVC 模式

第 12 行通过 ldr 指令设置 SVC 模式下的 sp 指针(0x80200000),i.MX6 ULL 终结者开发板上的内存地址范

围是 0X80000000~0XA0000000(512MB)或 0X80000000~0X90000000(256MB),所以不论是 512MB 版本还是256MB 版本的,其内存起始地址都是 0X80000000,由于 i.MX6ULL 的堆栈是向下正常的,所以 SP 指针设置成 0X80200000(0X80200000-0X80000000,是 2MB 的栈空间,足够我们使用了)。

第 13 行是挑喜欢到 main 函数(C 语言的入口函数。

至此汇编部分的程序我们就完成了,主要用来设置处理器在 SVC 模式下运行,然后初始化 SP 指针,最后跳转到 C 程序的 main 入口函数。如果大家有接触过三星的 S3C2440

开发板实现645协议C语言,迅为-imx6ull开发板之C语言实现LED例程相关推荐

  1. [教程]北京迅为iMX6ULL开发板上配置 AP 热点

    本文转自迅为iMX6ULL开发板使用手册第九十九章,使用的资料已经放到了开发板网盘资料中,路径为:11_Linux 系统开发进阶\99_章节使用资料. 关注公众号"迅为电子" , ...

  2. 迅为iMX6ULL开发板-创建 ap 热点

    本文转自迅为iMX6ULL开发板使用手册第九十九章,使用的资料已经放到了开发板网盘资料中,路径为:11_Linux 系统开发进阶\99_章节使用资料. 关注公众号"迅为电子" ,  ...

  3. 迅为imx6ull开发板板载RTL8723wifi模块创建AP热点(一)

    1.实验环境 硬件平台:迅为电子 imx6ull 终结者开发板(板载 RTL8723wifi 模块) 开发板运行的操作系统: yocto 文件系统(如果大家使用的是其它的文件系统,需要注意的是搭建交叉 ...

  4. 迅为IMX6ULL开发板Linux学习教程

    1800+页使用手册(持续更新)+入门视频教程+实战视频教程 关注VX公众号:迅为电子 ,  回复 :终结者,免费获取产品资料  让教程更细致,终结入门难! 所有教程由迅为原创,是迅为工作多年的工程师 ...

  5. 迅为IMX6ULL开发板NFS服务器的搭建

    基于迅为IMX6ULL开发板 (1)在 ubuntu 安装 nfs 服务:在管理员的身份下运行 apt-get install nfs-kernel-server (2) 在/home 下创建一个名为 ...

  6. 北京迅为IMX6ULL开发板 DHT11网络编程实战练习

    转自:[北京迅为i.mx6ull终结者开发板使用手册]第六十三章 QT 实战项目 硬件平台:IMX6ULL开发板   63.1 DHT11&网络编程实战练习 本项目为阶段性练习,内容简洁实用, ...

  7. lighttp支持PHP移植到imx6,FFmpeg移植-迅为IMX6ULL开发板

    FFmpeg(Fast Forward Mpeg)是一种可以用来记录.转换数字音频.视频,并能将其转化为流的多媒体视频处理工具,拥有视频采集功能.视频格式转换.视频抓图等功能.本文介绍如何将ffmpe ...

  8. 迅为iMX6ULL开发板使用手册资料下载地址

    i.MX6ULL终结者资料介绍:https://www.bilibili.com/video/BV1ny4y1h7gQ i.MX6ULL终结者三大手册,加速学习和开发速度,一秒化无形! 你能想到的知识 ...

  9. 嵌入式核心板研发之路_启动迅为4412核心板_稳定运行_超强扩展能力

    TOP-4412核心板配置全新的Cortex-A9架构1.4GHz四核处理器,三星exynos 4412处理器拥有32nm HKMG(高K金属栅极技术)制程,支持双通道LPDDR2 1066.整体效能 ...

最新文章

  1. python中case的用法_用 Python 实现简单的 switch/case 语句
  2. .NET Core 2.0迁移技巧之MemoryCache问题修复
  3. kvm虚拟化网卡、virbr0、网段修改
  4. (1)Linux进程调度
  5. 打造面向时代的“云中广科”,广科牵手华为探索校企合作新范式
  6. COSClient上传图片失败
  7. Java基础教程笔记
  8. 2017年sfdc工作总结_Schema Builder
  9. 风变编程学习笔记0-3关【纯代码版】
  10. mail 465邮件配置
  11. BBEdit—HTML文本编辑器
  12. 实现微信扫描二维码关注公众号,直接注册登录网站
  13. 广和通5G模组FM650-CN在Win11下的短信和通话演示
  14. 网络编程(wireshare抓数据包及分析、三次握手与四次挥手、数据库sqlite3及操作)笔记-day15
  15. STM32掌机教程3,工程模板与带灯按键测试
  16. 数据驱动产品增长 - 收藏集 - 掘金
  17. python 全栈开发,Day57(响应式页面-@media介绍,jQuery补充,移动端单位介绍,Bootstrap学习)...
  18. 飞天网络月刊:2018年5月
  19. [IOS APP]有声小说support
  20. Permute for Mac破解版永久激活教程

热门文章

  1. 程序员的情人节礼物:当天微软开始Build 2017登记
  2. [转]cmd 设置环境cmd环境变量命令set 设置永久环境变量命令setx
  3. stringcstdlibctimecstdargctimectypecmathclimits
  4. 用非递归方式实现二叉树中序遍历
  5. Android之集成友盟推送功能
  6. android上传图片被旋转,input上传照片旋转解决办法
  7. import 别名_Python基础找茬系列09--import和from-import的引用区别
  8. 豆瓣9.6分!再一次被BBC的纪录片震惊!
  9. 勾股定理的面积证明法,形象又好记!
  10. 12年前的高考到底有多难,只在这一道题上就看出来了...