ARM裸机开发Day03|IMX6ULL汇编点亮LED,寄存器、内存、中断梳理

一、基础概念回顾

1.1 异常向量表 & SVC软中断

  • SVC指令:SVC<c ><imm24>,用于触发软中断,后面跟中断号,示例:svc 7。

  • 硬中断:IMX6ULL外设产生的硬件触发中断。

1.2 IMX6ULL GPIO分组

IMX6ULL的GPIO一共分为5组:GPIO1、GPIO2、GPIO3、GPIO4、GPIO5。

二、开发环境:Windows VSCode 连接Ubuntu

采用Windows端VSCode,Ubuntu作为编译服务器,配合FTP实现文件传输。

2.1 VSCode必备插件

|----------------------|-----------------|
| 插件名称 | 作用 |
| C/C++ | C 语言基础编译调试支持 |
| C/C++ Extension Pack | C/C++ 全套扩展包 |
| ARM Assembly | ARM 汇编语法高亮 |
| Makefile Tools | Makefile 工程编译管理 |

2.2 文件传输 FileZilla

  • Windows:FileZilla FTP Client

  • Ubuntu:搭建FTP Server

实现Windows写代码,Ubuntu进行交叉编译。

三、DDR3内存布局

IMX6ULL DDR3起始地址:0x80000000,总大小512MB。

内存范围:0x80000000 ~ 0xA0000000

内存栈划分:

  1. sp_system(系统模式栈):0x84000000起始

  2. sp_irq(中断模式栈):占用32MB空间,起始地址0x86000000

小知识点:32MB 换算字节:0x2000000

四、LED点灯的三种实现方式

IMX6ULL裸机点灯一共有3种方式:

  1. 汇编语言直接操作寄存器点灯

  2. C语言操作寄存器点灯

  3. 使用NXP官方固件库点灯

点灯开发需要操作三大模块:IOMUXC引脚复用、GPIO寄存器、CCM时钟控制器

4.1 模块1:IOMUXC 引脚复用与电气属性

IOMUXC负责配置引脚复用功能、引脚电气特性。

两个核心寄存器(以GPIO1_IO03为例):

  1. IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03:引脚复用功能寄存器,配置这个引脚复用为GPIO功能或者其他外设功能。

  2. IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03:引脚电气属性寄存器

  • 高压摆率:波形陡峭,适合高速设备

  • 低压摆率:波形平缓,适合低速场景

4.2 模块2:GPIO寄存器组(参考手册第28章)

GPIO模块负责引脚方向设置、输出电平、读取引脚状态、GPIO中断配置。

|----------------|---------------------------|
| 寄存器名 | 功能说明 |
| GPIOx_DR | 输出寄存器,写 0 输出低电平,写 1 输出高电平 |
| GPIOx_GDIR | 方向寄存器:0 = 输入,1 = 输出 |
| GPIOx_PSR | 只读,读取引脚外部输入电平状态 |
| GPIOx_ICR | 中断触发方式:高 / 低电平、上升沿、下降沿 |
| GPIOx_IMR | 中断屏蔽寄存器:开启 / 关闭该引脚中断 |
| GPIOx_ISR | 中断状态查询,判断引脚是否产生中断 |
| GPIOx_EDGE_SEL | 双边沿中断选择,上升下降沿都触发中断 |

4.3 模块3:CCM时钟控制器

外设寄存器如果没有时钟供给,寄存器无法读写。

寄存器CCM_CCGR0 ~ CCM_CCGR6,全部置0xFFFFFFFF,打开全部外设时钟门控。

注意:裸机开发必须先打开外设时钟,否则GPIO、IOMUXC寄存器读写全部无效!

、Day03学习总结

  1. SVC软中断指令格式svc 中断号,区分软中断、硬件中断;

  2. IMX6ULL GPIO分为5组,点灯必须操作IOMUXC、GPIO、CCM时钟三大模块;

  3. DDR内存从0x80000000开始,需要划分不同模式下的栈空间;

  4. 裸机点灯三种方式:汇编、C语言、NXP库;

  5. VSCode+Ubuntu+FileZilla是非常方便的裸机开发组合。

相关推荐
深圳市青牛科技实业有限公司 小芋圆1 小时前
D2025——双通道音频功率放大电路,可替代TEA2025
嵌入式硬件·笔记本电脑开合检测·太阳能逆变器·电动车控制器供电·智能家居位置传感
田径他爸来了1 小时前
嵌入式学习第四十天(imx6ull裸机——ADC)
嵌入式硬件
xx~t12 小时前
嵌入式学习——ARM1
linux·arm开发·嵌入式硬件·arm
xx~t12 小时前
嵌入式——ARM1(详细篇)
linux·arm开发·嵌入式硬件·arm
周洲083012 小时前
STM32 ADC 采集实战|电压采集、分压计算、数据滤波
stm32·单片机·嵌入式硬件
狂奔蜗牛(bradley)13 小时前
搞定100ns抖动:ARM+FPGA混合EtherCAT主站实战方案
嵌入式硬件·fpga开发
HZZD_HZZD14 小时前
CSDN_批发市场水电漏损归因算法LAM的原理与落地
嵌入式硬件·物联网·算法
H_oRIZoN_15 小时前
Linux入门DAY40(51 单片机入门:GPIO、中断、定时器、PWM、蜂鸣器完整梳理)
单片机·嵌入式硬件
LCG元16 小时前
STM32F103 复位来源诊断实战:RCC_CSR 标志位判优、BKP 复位计数持久化与六种复位源注入实测
stm32·单片机·嵌入式硬件