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

【ARM-day05-led实验】

IOMUXC寄存器地址表-----参考手册1542页

MUX复用功能

PAD电器特性

I.MX6ULL: 管脚名字:PAD BOOT MODE0,

管脚的复用功能:IOMUXC SNVS SW MUX CTL PAD BOOT MODEO.

IOMUXC SNVS SW_PAD_CTL PAD BOOT MODEO.

对于 6ULL,查看管脚复用的步骤:
1、打开参考手册。
2、找到 32 章,10 复用章节,
3、查找对应的管脚。

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


1、需要用汇编初始化一些 SOC 外设。
2、使用汇编初始化 DDR,I.MX6U 不需要。
3、设置 sp指针,一般指向 DDR(可以理解为内存),设置好C语言运行环境。

1.MX6ULLIO 初始化:

①、使能时钟,CCGRO~CCGR6这7个寄存器控制着6ULL所有外设时钟的使能。为了简单,设置CCGRO~CCGR6这7个寄存器全部为0XFFFFFFFF,相当于使能所有外设时钟。

②、IO复用:

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

③、电气特性设置:

将寄存器IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03是设置GPIO1_IO03的电气属性。   

重点设置压摆率SRE、驱动能力DSE、速度SPEED、上下拉PUS、开漏

④、配置GPIO功能,设置输入输出。  设置GPIO1_DR寄存器Bit 3 为1, 也就是设置为输出模式。设置GPIO1_GDIR寄存器的bit 3,为1表示高电平,为0表示低电平。

ICR1 / ICR2寄存器:一组ICR寄存最多只能配置16个10,一组GPIO最多有32个I0,因此需要两个ICR寄存器也就是ICR1和ICR2。ICR1负责低16个I0,ICR2负责高16高16个I0

1.链接脚本的作用?各个段存放什么类型数据

自己写的imx6ull.lds文件

链接脚本作用:

链接脚本决定了程序中各个段(代码段、数据段、只读数据段、bss 段)的 存放地址,最终把所有目标文件 .o 链接成一个可执行镜像 .elf,再由 objcopy 转成 .bin 下载到开发板。

在裸机开发里,必须精确指定起始地址(代码中 . = 0x87800000),因为 MCU/SoC 没有操作系统来做内存映射,CPU 上电后会从固定地址取指令。

各个段存放的内容

  • .text:存放代码(函数体、指令)。
    比如 mainclock_initled_init 等函数编译后的指令。

  • .rodata:存放只读数据(常量、字符串字面值)。
    例如 const char *p = "Hello"; 中的 "Hello" 就在这里。

  • .data:存放已初始化的全局变量或静态变量。

  • .bss:存放未初始化的全局变量和静态变量,程序启动时清零。

总结:链接脚本就是告诉链接器 把程序放到什么地址、各个段怎么排布

  • .text → 代码

  • .rodata → 常量

  • .data → 已初始化全局变量

  • .bss → 未初始化全局变量

2.编译过程需要哪些工具,分别什么作用?

  • gcc (arm-linux-gnueabihf-gcc)

    • .c 文件编译成 .o 目标文件。

  • as(隐含在 gcc 里)

    • .S 汇编文件编译成 .o

  • ld (arm-linux-gnueabihf-ld)

    • 链接所有 .o,按照 imx6ull.lds 脚本,把它们放到指定的段地址,生成可执行文件 .elf

  • objcopy (arm-linux-gnueabihf-objcopy)

    • .elf 转成纯二进制 .bin,用于烧写到开发板。

  • objdump (arm-linux-gnueabihf-objdump)

    • 反汇编 .elf 文件,生成 .dis 文件,便于调试查看。

  • imxdownload

    • 自己写的下载工具,把 .bin 文件下载到指定设备 /dev/sdb(TF 卡/U 盘/SD 卡)。

总结:

  • gcc/as → 编译 C/汇编成目标文件

  • ld → 按链接脚本把目标文件拼成 .elf

  • objcopy → 生成 .bin

  • objdump → 反汇编,供分析

  • imxdownload → 下载到板子


文章转载自:

http://V1WFDrta.ybgyz.cn
http://UHx014En.ybgyz.cn
http://UyMSnmEj.ybgyz.cn
http://8pWEN0Ob.ybgyz.cn
http://hvQlCIer.ybgyz.cn
http://Ygvv0sud.ybgyz.cn
http://1HO0UXD0.ybgyz.cn
http://ptSjMOHy.ybgyz.cn
http://uwIsFMDA.ybgyz.cn
http://IAPvF4Un.ybgyz.cn
http://dVPtF4Yd.ybgyz.cn
http://zoJmTakz.ybgyz.cn
http://s7rWfNQN.ybgyz.cn
http://TksrmkTD.ybgyz.cn
http://majrOutl.ybgyz.cn
http://foWvw7DH.ybgyz.cn
http://q3LWdSzi.ybgyz.cn
http://X1FgWUYp.ybgyz.cn
http://2I0cjp6N.ybgyz.cn
http://7mtFkffV.ybgyz.cn
http://bmyb6OZr.ybgyz.cn
http://4Nmg3kGX.ybgyz.cn
http://XoOBiG4s.ybgyz.cn
http://e9HBn4V1.ybgyz.cn
http://2HMvdBcy.ybgyz.cn
http://kMjpx76c.ybgyz.cn
http://8K0ruISc.ybgyz.cn
http://2I0EwWM4.ybgyz.cn
http://ac3Ph05b.ybgyz.cn
http://5YOInYEm.ybgyz.cn
http://www.dtcms.com/a/380289.html

相关文章:

  • 低版本Chrome 内核兼容性问题的优美解决
  • 模型部署:(四)安卓端部署Yolov8-v8.2.99实例分割项目全流程记录
  • 使用自定义LLM和Embedding模型部署Vanna:基于RAG的Text-to-SQL生成
  • DataCollatorForCompletionOnlyLM解析(93)
  • 淘宝RecGPT:通过LLM增强推荐
  • Vue3 中使用 DOMPurify 对渲染动态 HTML 进行安全净化处理
  • 比较 iPhone:全面比较 iPhone 17 系列
  • 【Doris】集群介绍
  • 从“能写”到“能干活”:大模型工具调用(Function-Calling)的工程化落地指南
  • golang程序内存泄漏分析方法论
  • Go 语言 MQTT 消息队列学习指导文档
  • 基于数据挖掘技术构建电信5G客户预测模型的研究与应用
  • 【AI】pickle模块常见用途
  • 智慧园区,智启未来 —— 重塑高效、绿色、安全的产业新生态
  • MySQL 8新特性
  • 腾讯开源Youtu-GraphRAG
  • QT M/V架构开发实战:QStringListModel介绍
  • 【数据结构】Java集合框架:List与ArrayList
  • 开发避坑指南(48):Java Stream 判断List元素的属性是否包含指定的值
  • postgresql 数据库备份、重新构建容器
  • 大数据电商流量分析项目实战:Spark SQL 基础(四)
  • vmware ubuntu18设置共享文件夹的几个重要点
  • 每日一题(5)
  • Lumerical licence center 无法连接的问题
  • Java网络编程(2):(socket API编程:UDP协议的 socket API -- 回显程序)
  • Java 类加载机制双亲委派与自定义类加载器
  • OpenLayers数据源集成 -- 章节九:必应地图集成详解
  • 前端调试工具有哪些?常用前端调试工具推荐、前端调试工具对比与最佳实践
  • 【C++练习】16.C++将一个十进制转换为二进制
  • 公司本地服务器上搭建部署的办公系统web项目网站,怎么让外网访问?有无公网IP下的2种通用方法教程