欢迎光临
我们一直在努力

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是非常方便的裸机开发组合。

赞(0)
未经允许不得转载:171主机测评 » ARM裸机开发Day03|IMX6ULL汇编点亮LED,寄存器、内存、中断梳理
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址