当前位置: 首页 > news >正文

阿尔法开发板 IMX6ULL 说明

一.  IMX6ULL开发板

IMX6ULL开发板即正点原子的阿尔法(ALPHA)开发板,采用恩智浦芯片,cortex-A7架构的。

二.  IM6ULL开发板说明

1.  IO说明

对于IMX6ULL芯片,一个IO对应两个寄存器,第一个寄存器负责配置其复用功能,第二个寄存器负责配置其电器特性。

如下命名方式:

IOMUXC_SNVS_SW_MUX_CTL_PAD_BOOT_MODE0  //配置其复用功能
IOMUXC_SNVS_SW_PAD_CTL_PAD_BOOT_MODE0   //配置电器特性

查找IO 复用功能的方法:

(1)  打开IMX6ULL芯片的参数手册。

(2)  第32章IO复用章节。

(3)  查找对应的管脚。

2.   cortex 汇编存在的作用

为什么要学习Cortex-A汇编?

(1)  需要用汇编初始化一些SOC外设。

(2)  使用汇编初始化DDR,I.MX6U不需要。

(3) 设置 sp 指针,一般指向 DDR,配置好 C 语言运行环境。

3.  IMUX6ULL的 IO 初始化

(1)  使能时钟。

CCGR0~CCGR6这7个寄存器控制着6ULL所有外设时钟的使能。

为了简单,设置CCGR0~CCGR6这7个寄存器全部为0XFFFFFFFF,相当于使能所有外设时钟。

(2) 设置GPIO复用

将寄存器IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03的bit3~0设置为0101,这样GPIO1_IO03就复用为GPIO。

(3)  设置GPIO的电器属性。

寄存器IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03是设置GPIO1_IO03的电气属性。包括压摆率、速度、驱动能力、开漏、上下拉等。

(4)  配置GPIO功能,设置输入输出。

设置GPIO1_GDR寄存器bit3为1,也就是设置为输出模式。设置GPIO1_DR寄存器的bit3,为 1 表示输出高电平,为 0 表示输出低电平(由电路原理图可知)

三.  编译链接

编译

(1)  使用 arm-linux-gnueabihf-gcc将.c 文件或 .s 文件变为 .o文件。

(2)  将所有的.o文件链接为elf格式的可执行文件。

(3)  将elf 文件转为 bin 文件。

链接

链接就是将所有.o文件链接在一起,并且链接到指定的地方。本实验链接的时候要指定链接起始地址。链接起始地址就是代码运行的起始地址。

对于IMX6ULL来说,链接起始地址应该指向RAM地址。RAM分为内部RAM和外部RAM,也就是 DDR。IMX6ULL内部RAM地址范围0X900000~0X91FFFF。也可以放到外部DDR中。

对于I.MX6U-ALPHA开发板,512MB字节DDR版本的核心板,DDR范围就是0X80000000~0X9FFFFFFF。对于256MB的DDR来说,那就是0X80000000~0X8FFFFFFF。

这里我们选择外部 DDR 地址作为 .bin 文件的运行地址。
对于 I.MX 来说bin 文件不能直接运行,需要添加一个头部,这个头部信息包含了 DDR 的初始化参数,I.MX 系列 SOC 内部 boot rom 会从 SD 卡,EMMC 等外置存储中读取头部信息,然后初始化 DDR,并且将 bin 文件拷贝到指定的地方。
编译 .s 文件命令如下:
arm-linux-gnueabihf -g -c leds.s -o led.o

确定了链接地址以后就可以使用 arm-linux-gnueabihf-ld 来将前面编译出来的 led.o 文件链
接到 0X87800000 这个地址,使用如下命令:
arm-linux-gnueabihf-ld -Ttext 0X87800000 led.o -o led.elf
上述命令中 "-Ttext"  就是指定链接地址,"-o" 选项指定链接生成的 elf 文件名,这里我们命名
led.elf。上述命令执行完以后就会在工程目录下多一个 led.elf 文件。

注意:Bin 的运行地址一定要和链接起始地址一致。位置无关代码除外。


格式转换

我们需要用它将 led.elf 文件转换为 led.bin 文件,需要使用 arm-linux-gnueabihf-objcopy 工具。命令如下:
arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin

http://www.lryc.cn/news/28031.html

相关文章:

  • Altium Designer19 #学习笔记# | 基础应用技巧汇总
  • Python 元类编程实现一个简单的 ORM
  • 《C++ Primer Plus》第18章:探讨 C++ 新标准(7)
  • Redis学习(二):Redis安装测试
  • Vector - CAPL - 简介及数据结构
  • 20230304英语学习
  • 【基础算法】单链表的OJ练习(3) # 移除链表元素 # 相交链表 #
  • 【自用】SpringBoot项目通用类整理
  • 动态规划法(总述)多阶段决策最优化问题
  • MySQL跨服务器数据映射
  • 利用反射实现通过读取配置文件对类进行实例化-课后程序(JAVA基础案例教程-黑马程序员编著-第十二章-课后作业)
  • 1.2 CSS文本属性
  • SpringCloud之认识微服务
  • 【go语言之thrift协议二之server端分析】
  • 【办公类05-03】Python批量修改文件名前面的序号(已有的序号错了,需要改成正确的号码)
  • 定向模糊测试工具Beacon基本用法
  • 《程序员面试金典(第6版)》面试题 02.01. 移除重复节点
  • 如何对web系统开展无障碍测试
  • 使用vite+vue3.0 创建一个cesium基础应用 ----01 项目搭建
  • 【Python学习笔记】第二十七节 Python 多线程
  • 【id:18】【20分】B. DS顺序表--连续操作
  • vi编辑器操作指令分享
  • OSPF与BFD联动配置
  • jQuery基础
  • day39|139.单词拆分 背包问题ending
  • Shell脚本编程
  • ChatGPT解答:JavaScript保存当前网页页面图片为pdf文件或者word文件,前端用vue2,给出详细的方案和代码
  • Python基础学习11——文件
  • 外网用户打不开公司的网站?web服务器端口映射到公网
  • 【CS224W】(task9)图神经网络的表示能力(更新中!!)