ARM裸机开发-点亮LED灯

ARM裸机开发-bootloader—点亮LED灯 1、编写LED驱动的流程 a、原理图分析 b、芯片手册 c、思维导图 d、编写代码 2、为什么要点亮led 在嵌入式软件(bootloader、kernel)开发初期,由于串口等硬件尚未进行初始化,所以可以用来调试的手段很有限。这时通常运用点亮led作为调试的重要手段。也就是说不断改动led点亮程序的位置,来查看那段代码出现了问题,然后进行针对性的修改。 下面我用6410为例进行点亮 阅读详情

目录

背景介绍

底板原理图

一.引脚复用功能+引脚电气属性(IOMUXC 32)

1.IOMUXC_SW_MUX_CTL_PAD:引脚复用功能

2.IOMUXC_SW_PAD_CTL_PAD:电气属性

3.代码

二.GPIO模块(GPIO 28)

1.DR

2.GDIR

3.PSR

4.ICR与EDGE

5.IMR

6.ISR

7.总结

8.代码

三.时钟模块(CCM 18)

1.简介

2.代码

四.全局代码

五.环境搭建

1.安装FileZilla与SSH服务器

2.Ubuntu

3.编译

4.烧录


背景介绍

本文开始在VScode上使用IMX6ULL以真机进行学习,注意,创建的.S文件在本篇学习时注意大写,在编译时会进行部分预处理操作,小写则.s文件会跳过预处理阶段。

芯片原理图参考如下。

其中:

  • SOC IMX6ULL NXP(核心处理器):这是整块板子的“大脑”。NXP(恩智浦)的 IMX6ULL 基于 ARM Cortex-A7 架构,主频通常在 528MHz 或 800MHz。

  • DDR3 512MB(运行内存 / RAM):相当于电脑的内存条。它是掉电丢失的。当 Linux 系统启动时,内核(kernel)会被加载到这块 DDR3 里运行,它负责临时存放程序运行时产生的大量数据。

  • EMMC nand flash 8GB(存储 / ROM):相当于电脑的硬盘。它是掉电不丢失的。用来永久存放系统镜像(uboot、kernel、设备树、rootfs文件系统)和用户程序。

  • 蜂鸣器贴纸有“+”号,表示有源蜂鸣器,上电即可工作
  • 左下角BOOT拨码开关设置启动模式,将1,7位拉高则开机。

底板原理图

其中两列引脚通过板子的两列白色插座接入核心板,故核心板自然会将插座的引脚接入SOC内部

该芯片GPIO分为5组:GPIO1、GPIO2、GPIO3、GPIO4、GPIO5.若为图中LED0所在的GPIO  3则表示默认为GPIO1组(注意中间有空格)

其中,DCDC表示直流供电,LED1是物理设备编号,LED0则是引脚工作名称,由原理图可知被接入到GPIO1组的03号引脚,显然右边接入高电平,控制LED0输出低电平则灯亮,故本文后续点灯操作将围绕此展开。

一.引脚复用功能+引脚电气属性(IOMUXC 32)

点灯第一步,先配置引脚复用功能以及电气属性

1.IOMUXC_SW_MUX_CTL_PAD:引脚复用功能

SION为控制输入功能,1开启,0关闭。而当采用GPIO1_IO03功能时,输入输出默认打开,而当采用其他七种模式时默认关闭;MUX_MODE为引脚复用的功能,易知,共有八种模式,而该引脚默认为0101,即GPIO1_IO03功能

2.IOMUXC_SW_PAD_CTL_PAD:电气属性

HYS:仅输入功能使用,用于过滤波形,整形。(点灯为输出功能,故暂不使用)

PUS:仅输入可用,控制上拉下拉电阻。

PUE:仅输入可用,控制引脚使用上拉还是保持电压

PKE:打开PUE的开关,为1表示PUE上拉保持功能开

ODE:控制输出模式,默认为0,即推挽输出。

漏级开漏输出,引脚是高阻态,可以输出低电平,但无法输出高电平,除非外部接入上拉电阻;

推挽输出:驱动能力强,既可输出高电平,也可输出低电平

SPEED:控制输出速度,合适即可,高速EMI电磁干扰会增加功耗

DSE:驱动能力,表示驱动多强的外部设备,电阻越小,电流越大,驱动变强,但同时功耗变大,芯片发烫。(给高电平有效,对点灯无用,默认即可)

SRE:从低电平变为高电平需要时间,压摆率越高曲线越陡(适用高速设备,USB,CAN,网口)

对于点灯而言,电气属性设置为默认值即可,由图易知,默认值0X10B0,配置之后该引脚则为GPIO功能。

3.代码

_led_init:
    // 配置引脚复用功能:GPIO1_IO03
    ldr r0, =0x020E0068
    mov r1, #0x05
    str r1, [r0]

    // 配置引脚电气属性:默认属性(0x10B0)
    ldr r0, =0x020E02F4
    ldr r1, =0x10B0
    str r1, [r0]

二.GPIO模块(GPIO 28)

1.DR

GPIOx_DR:控制第几组的GPIO引脚

DR:控制引脚高低电平,例如,本篇要点亮的LED灯为GPIO1组的IO03引脚,则让bit3置0,灯亮

2.GDIR

GDIR(GPIO direction register):GPIO方向寄存器,即控制输入/输出模式,对应LED,GPIO_03显然该寄存器应置1

3.PSR

PSR:只读,读取引脚电平,(1为高,0为低电平),同时DR也可读

4.ICR与EDGE

ICR1:配置引脚中断方式的寄存器,从0-31,一共32位,每两位控制一个引脚的中断触发方式,寄存器编号即引脚编号,显然要配置GPIO03号引脚则应配置6.7位.对应具体设置位依次为低电平触发,高电平触发,上升沿触发,下降沿触发。

ICR1为0-15位引脚,ICP2为16-31位引脚。

ICR2原理同上,此外,EDGE寄存器则可控制为双边沿触发

5.IMR

IMR:控制中断是否屏蔽,显然要将LED灯对应的bit3为置1,表示开中断

6.ISR

ISR:查询引脚是否产生中断,1表示产生中断

7.总结

GPIOx_DR:向GPIOx组某个引脚写0或1(低电平/高电平)
GPIOx_GDIR:设置GPIOx组某个引脚方向(输入0和输出1)
GPIOx_PSR(只读):读取GPIOx组某个引脚的状态
GPIOxICR:设置GPIOx组某个引脚中断触发方式(低电平、高电平、下降沿、上升沿)
GPIOx_IMR:设置GPIOx组某个引脚中断屏蔽/允许
GPIOx_ISR:用来查询GPIOx组某个引脚是否产生中断
GPIOx_EDGE_SEL:设置中断触发方式为双边沿触发

以上则为GPIO模块的相关寄存器解析,对于点灯功能而言无需中断,此处了解即可,后续开发将会详细介绍。点灯仅需设置GPIOx_DR与GPIOx_GDIR寄存器,将引脚置低电平且设置为输出方向。

8.代码

_led_init:
    // 配置引脚方向(GDIR):输出模式
    ldr r0, =0x0209C004
    ldr r1, [r0]
    orr r1, r1, #(1 << 3)
    str r1, [r0]
    bx lr
    
_led_on:
    //给DR bit3位低电平
    ldr r0, =0x0209C000
    ldr r1, [r0]
    bic r1, r1, #(1 << 3)
    str r1, [r0]
    bx lr

三.时钟模块(CCM 18)

1.简介

外设工作需要时钟,不同外设工作频率不同,需要的时钟频率则也不同,故点灯则也需设置对应时钟频率。

右侧为外设,cg(clock gate)为控制外设开关,ARM处理器中,为了保证低功耗,每个外设门都是关闭的,要实现点灯,则首先打开对应的cg开关。

CCGRx即为控制外设cg的寄存器,每两位控制一个外设,置11即为开启。为方便后续开发,将CCM_CCGR0-CCM_CCGR6都置为全1,即0xFFFF FFFF,表示打开所有外设时钟门。

2.代码

_enable_clocks:
    // CCM_CCGR0 clock enable
    ldr r0, =0x020C4068
    ldr r1, =0xFFFFFFFF
    str r1, [r0]

    // CCM_CCGR1 clock enable
    ldr r0, =0x020C406C
    str r1, [r0]

    // CCM_CCGR2 clock enable
    ldr r0, =0x020C4070
    str r1, [r0]

    // CCM_CCGR3 clock enable
    ldr r0, =0x020C4074
    str r1, [r0]   

    // CCM_CCGR4 clock enable
    ldr r0, =0x020C4078
    str r1, [r0]

    // CCM_CCGR5 clock enable
    ldr r0, =0x020C407C
    str r1, [r0]

    // CCM_CCGR6 clock enable
    ldr r0, =0x020C4080
    str r1, [r0]
    bx lr

四.全局代码

系统初次复位时在SVC模式,复位异常(位于0x00地址),此时若执行一条跳转指令到复位异常函数处,则可完成一些初始化工作。此外SVC模式仅在刚复位时使用,此后大多时候在system进行工作,故再不做过多阐述。(可参考上篇启动代码的学习)

异常复位函数

    .global _start

    _start:
    ldr pc, =_reset_handler
	ldr pc, =_undefine_handler
	ldr pc, =_software_handler
	ldr pc, =_prefetch_abort_handler
	ldr pc, =_data_abort_handler
	ldr pc, =_reserved_handler
	ldr pc, =_irq_handler
	ldr pc, =_fiq_handler

_fiq_handler:
	ldr pc, =_fiq_handler

_irq_handler:
	ldr pc, =_irq_handler

_reserved_handler:
	ldr pc, =_reserved_handler

_data_abort_handler:
	ldr pc, =_data_abort_handler

_prefetch_abort_handler:
	ldr pc, =_prefetch_abort_handler
  
_software_handler:
    ldr pc, =_software_handler

_undefine_handler:
	ldr pc, =_undefine_handler

finished:
    b finished

复位函数:

其中 _enable_clocks,_led_init, _led_on函数均以在上述中实现。

_reset_handler:
    // 设置irq模式
    mrs r0, cpsr
    bic r0, r0, #0x1F
    orr r0, r0, #0x12  
    msr cpsr, r0
    // 设置irq模式下的栈(32M)
    ldr sp, =0x86000000

    // 设置system模式,相比user模式多了特权模式
    mrs r0, cpsr
    bic r0, r0, #0x1F
    orr r0, r0, #0x1F
    msr cpsr, r0
    // 设置system模式下的栈
    ldr sp, =0x84000000   
    // 打开所有外设时钟门
    bl _enable_clocks
    // 初始化led
    bl _led_init
    // led亮
    bl _led_on
    b finished

上篇由于是仿真学习,使用的是芯片内部的RAM,而本芯片SOC内部的RAM不允使用,故使用DDR3的内存,而该芯片规定该内存起始地址为0X8000 0000,大小512MB,即到0XA000 0000,在这中间可自行根据七种异常栈分配内存。

五.环境搭建

1.安装FileZilla与SSH服务器

由于在Ubuntu中运行VScode比较卡顿,故选择在Windows上的VScode进行代码编写,再将代码工程传输到Ubuntu中进行编译下载。首先为了方便从Windows和Ubuntu之间的文件传输,我们需要在Windows下安装FileZilla,该软件下载地址如下:https://www.filezilla.cn/download。 FileZilla作为客户端,Ubuntu作为服务端。

该软件底层通过采用应用层的FTP协议实现文件传输。

操作过程如下:

此外还需要在Ubuntu下安装SSH服务器: sudo apt-get install vsftpd ,并配置文件: sudo vi
/etc/vsftpd.conf 。使能本地功能和写入功能:
最后,执行 sudo /etc/init.d/vsftpd restart刷新,使配置文件生效

2.Ubuntu

1.设置NAT模式(分配了虚拟IP,只要Windows能上网,Ubuntu就能上网)

sudo /etc/init.d/networking restart
//执行此代码重启网络
  • 桥接模式:虚拟机就像你家里的另一台独立电脑。它和你的 Windows 宿主机平起平坐,共用同一个真实路由器(你之前连的手机热点)。

  • NAT模式:虚拟机就像一个住在你 Windows 宿主机里面的“租客”。它通过宿主机代理上网,外部网络(手机热点)根本看不见它。

对比维度桥接模式(VMnet0)NAT模式(VMnet8)
IP地址来源由外部路由器分配(你之前是手机热点给的 10.138.48.x)由VMware虚拟路由器分配(现在是 192.168.85.x)
网络地位和宿主机(Windows)是平等的同学是宿主机的下属
宿主机通信直接通过局域网通信(但受限于外部路由器)通过宿主机虚拟网卡 192.168.85.1 通信
外网通信直接暴露在局域网中,占用一个外部IP经过宿主机 NAT(网络地址转换)转发,共用宿主机IP
外部设备访问虚拟机 能(如果局域网没做隔离,比如你之前手机热点的问题)不能直接访问(除非在VMware里设置端口转发)
虚拟机访问宿主机能(但需要依赖外部路由器的配置) 能(直接 ping 192.168.85.1 即可)

2.安装ARM编译器

由于Ubuntu位X86架构,gcc为对应的编译指令,而要在ARM芯片上运行,则需要安装对应ARM架构的编译器 。

将该编译器拷贝至Ubuntu的家目录下,再切换至根目录的/usr/local目录下,创建arm文件夹,再将家目录的编译器安装包复制于当前arm文件夹,sudo mv ~/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz .再解压压缩包  sudo tar -xvf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz。解压后会产生对应文件夹,进入其中的bin目录,其中为arm编译的工具链,pwd打印出当前目录路径,复制保存,再sudo vim ~/.bashrc进入配置文件,配置刚才复制的路径如下,最后sudo reboot重启虚拟机即可,最后arm-linux-gnueabihf-gcc  -v查看安装编译器版本

3.编译

家目录下创建imx6ull/led_asm(对应的芯片文件夹保存编译文件),通过FileZilla上传VScode上写的start.S文件至此,编译三步骤:

  • 编译:arm-linux-gnueabihf-gcc -g -c start.S -o start.o,
    • 其中“-g”选项是产生调试信息,GDB 能够使用这些调试信息进行代码调试。“-c”选项是编译源 文件,但是不链接。“-o”选项是指定编译产生的文件名字,这里我们指定 start.s 编译完成以后的文件名字为 start.o。执行上述命令以后就会编译生成一个start.o 文件
  • 链接:arm-linux-gnueabihf-ld -Ttext 0X87800000 start.o -o start.elf
    • 本次课程中,我们所有的裸机例程都是烧写到 SD 卡中,上电以后 I.MX6U 的内部 boot rom 程 序会将可执 行文件拷贝 到链接地址 处,这个链 接地址可以 在 I.MX6U 的内部 128KBRAM 中 (0X900000~0X91FFFF),也可以在外部的 DDR 中。本次课程中所有裸机例程的链接地址都在 DDR中,链 接起始地址为 0X87800000。I.MX6U-ALPHA 开发板的 DDR 容量有两种:512MB 和256MB,起始地址都为 0X80000000,只不过 512MB 的终止地址为0X9FFFFFFF,而 256MB 容量的终止地址为 0X8FFFFFFF。之所以选择 0X87800000 这个地址是因为后面要讲的 Uboot 其链接地址就是 0X87800000, 这样我们统一使用 0X87800000 这个链接地址,不容易记混。
  • 格式转换:arm-linux-gnueabihf-objcopy -O binary -S -g start.elf start.bin
    • 我们需要用它将 start.elf 文件转换为start.bin 文件 。上述命令中,“-O”选项指定以什么格式输出,后面的“binary”表示以二进制格式输出,选项“-S”表示不要复制源文件中的重定位信息和符号信息,“-g”表示不复制源文件中的调试信息。上述命令执行完成以后,就会在工程目录下多一个 start.bin 文件。至此我们终于等到了想要的东西—start.bin 文件
  • 反汇编:arm-linux-gnueabihf-objdump -D led.elf > led.dis(可不用)
    • 大多数情况下我们都是用 C 语言写试验例程的,有时候需要查看其汇编代码来调试代码,因此就需要进行反汇编,当然这个工作目前对于我们不是必须的。一般来说可以将 elf 文件反汇编。上述代码中的“-D”选项表示反汇编所有的段,反汇编完成以后就会在当前目录下出现一个名为 start.dis 文件。我们可以打开这个文件,查看其中的内容可以发 现这里面都是汇编代码。注意通过 start.dis 这个反汇编文件可以明显的看出我们的代码已经链接到了以 ​​​​0X87800000 为起始地址的区域。

4.烧录

装入SD卡,插入读卡器,连接到虚拟机,

ls  /dev/sd*查看已有设备,

例如我这里看到的结果是/dev/sda /dev/sda1 /dev/sda2 /dev/sda3 四个文件,分别代 表Ubuntu下的磁盘和三个分区
然后将imxdownload文件上传至led_asm,执行chmod 0777 imxdownload给予权限
使用命令 ./imxdownload start.bin /dev/sdb烧录,注意不要写为 . /imxdownload led.bin /dev/sda,  sda是系统磁盘,会造成Ubuntu损坏.
当出现此界面时下载成功,注意下载速度为KB/S,若为MB/S单位则下载失败,拔卡重启虚拟机再插卡, 注意保证读卡器没有损坏,部分廉价读卡器在插入时易因为静电烧坏。

若是插入新读卡器则可能会出现自动挂载情况,输入lsblk查看,例如,sdb挂载到boot与rootfs文件。
执行下面指令卸载挂载,因为 Linux 系统为了安全, 不允许对已经挂载的分区进行 dd 裸写入。如果不卸载,你执行烧录会直接报 Device or resource busy 错误。
sudo umount /dev/sdb1
sudo umount /dev/sdb2
//或者一句
sudo umount /dev/sdb*
最后再进行烧录,看到进度条跑完、提示烧录成功后。然后安全弹出读卡器,把 SD 卡插回 i.MX6ULL 开发板,拨到 SD 卡启动模式,上电!
sudo ./imxdownload start.bin /dev/sdb

至此,灯亮了,路也就清晰了,前路漫漫亦灿灿,与所有在嵌入式路上摸黑前行的朋友共勉。

ARM(5)-IMX6ULL 裸机开发入门:从启动到点亮第一盏 LED 灯 ARM 异常处理:异常向量表是入口,复位异常是程序启动点,其他异常需后续扩展实际处理逻辑(如 IRQ 中断服务函数)。工作模式与栈:不同模式独立栈空间,SYS 模式适合主程序,IRQ 模式用于中断处理。GPIO 控制流程:复用配置→电气特性→方向设置→数据操作,需结合芯片手册和硬件原理图。交叉编译流程:汇编→编译(.o)→链接(.elf)→格式转换(.bin)→烧录,Makefile 自动化管理流程。 阅读详情

相关推荐

ARM裸机程序开发——按键控制LED灯

★TQ2440硬件连接 ★程序启动初始化 ★IO控制端口

喜欢哲学的女孩 6821

ARM 裸机开发学习笔记(1)基于sc2440点亮led灯

ARM 裸机开发学习笔记(1)基于sc2440点亮led灯 学习目的 经过点亮led灯的几个实验,初步的掌握了嵌入式开发的基本流程: 编译程序。 利用linux中的交叉编译对于源程序进行编译,才能编译出在ARM平台上运行的程序。 烧写。将编译好的可执行文件通过烧写工具烧写到sc2440开发板中。本次利用oflash进行烧写。 运行,观察结果。 通过GPIO控制点亮LED 基本步骤:首先查看sc2440原理图,找到led的电路图以及led与sc2440的哪个引脚相连接。其次查看芯片手册,根据手册信息判断通

qq_38037674的博客 1107

从Blender舞步到夜空画卷:基于Pix飞控的无人机编队灯光秀全链路开发实践

本文详细介绍了基于Pixhawk飞控的无人机编队灯光秀全链路开发实践。从Blender三维动画设计、QGroundControl地面站二次开发与MAVLink通信桥接,到PX4飞控的OFFBOARD模式路径控制与LED灯光驱动实现,最后通过Gazebo仿真验证并完成真机组装与首飞。文章为无人机爱好者提供了一套完整的、从创意设计到夜空执行的开源解决方案,重点阐述了多机同步与灯光控制的核心技术挑战与应对策略。

zeta9的博客 585

【ARM裸机开发】IMX6ULL平台点亮一个LED灯

主要介绍了IMX6ULL平台如何初始化一个GPIO,并介绍了如何编写汇编代码搭建C语言环境,简单介绍了一种LED灯的点亮方式。

qq_43984063的博客 1471

Linux内核同步原语之队列自旋锁(Queued Spin Lock)深度解析

本文深度解析了Linux内核中的队列自旋锁(Queued Spin Lock)机制。通过对比传统自旋锁的瓶颈,详细阐述了队列自旋锁如何利用紧凑的4字节结构、每CPU节点数组和pending位优化,有效解决多核(SMP)系统中的缓存行乒乓和惊群效应,实现公平、高效的锁等待队列,从而显著提升内核在高并发场景下的可扩展性与性能。

weixin_29205061的博客 305

Cryptomatte For Nuke的安装

进入官网https://github.com/Psyop/Cryptomatte,下载文件代码。 将Cryptomatte/nuke里的文件内容复制粘贴到 .nuke文件夹内。 在我们复制粘贴的内容中可以看到两个文件。 同时,我们进入nuke的下载目录,打开plugins文件夹,看到和插件中一样python文件——init.py和menu.py。 我们将Cryptomatte里的init.py和menu.py里的python代码复制粘贴到Nuke/plugins下的init...

qq_41627587的博客 9062

S3C2440裸机程序开发点亮LED

与学习单片机一样,学习arm裸机开发的第一个程序,点亮lED灯; 我们使用三星的S3C2440,fl2440开发板做实验 电路图如下: 主要寄存器: 各寄存器详情: 程序流程: 1.设置GPBCON对应位为output工作模式。 2.设置GPBUP对应位上拉电阻有效。 3.设置CPBDATA对应为有效电平。 附:

Will的大食堂 919

2023-ICCV-隐式神经网络实现低光照图像增强(NeRCo)论文解读+代码解析

NeRCo()提出了一种名为NeRCo的隐式神经表示方法,用于合作式低光图像增强。现有的低光图像增强方法存在以下三个限制:不可预测的亮度降低和噪声、度量友好版本和视觉友好版本之间的固有差距,以及有限的配对训练数据。为了解决这些限制,论文提出了NeRCo方法,它以无监督的方式稳健地恢复感知友好的结果。具体而言,NeRCo通过一个可控的拟合函数统一了现实场景中多样的退化因素,从而提高了鲁棒性。对于输出结果,论文引入了来自预训练视觉-语言模型的先验信息,采用语义导向的监督方法。

weixin_45595504的博客 3185

ARM9/ARM11裸机开发笔记1之MDK开发环境和点亮LED

很多从单片机或者从CM3转到ARM9/ARM11的时候,一开始就讲得是Uboot,Linux,然后就是什么QT等高级玩意,不像单片机有什么裸机开发的概念,的确,这些高级ARM本来就是用来跑系统,谁用来它做裸机开发呢。但是如果我们要更好了解ARM的工作原理,,尤其是想进阶嵌入式中最难的一层,驱动层的话,甚至想把其它的非Linux系统移植到ARM9/ARM11上。我们就无法避免要跟ARM跟底层的寄存器

mzwhhwj的专栏 1820

MounRiver Studio实战:像管理个人项目一样整理沁恒MCU的EVT例程(附文件结构图)

本文详细介绍了如何使用MounRiver Studio重构沁恒MCU的EVT例程,实现工程化管理。通过分析官方EVT设计的局限性,提出标准化的目录结构和迁移步骤,帮助开发者提升代码可维护性和团队协作效率。文章还提供了MounRiver Studio的关键配置参数和常见问题排查指南,适用于沁恒MCU开发者。

weixin_33940469的博客 356

39、信号流图:解决线性代数方程组的图论方法

本文介绍了信号流图理论在求解线性代数方程组中的应用,重点阐述了Coates方法和Mason方法的原理、步骤及对比分析。通过图论视角,将矩阵运算转化为对有向图结构的分析,利用1-因子、1-阶连接、前向路径和反馈回路等概念,推导出方程组解的拓扑公式。文章结合具体实例演示两种方法的计算过程,并总结其在电路分析、控制系统和通信系统等领域的拓展应用,展示了信号流图理论的直观性与有效性。

pear55的博客 88

【ARM裸机开发(IMX6ULL-mini)】arm上的点灯大师:环境配置、基础知识学习及点亮LED灯

本文基于正点原子 I.MX6ULL‑MINI 开发板进行 ARM 裸机点灯实战。搭建 Windows 与 Ubuntu 文件传输环境,配置 Linaro 交叉编译工具链。基于 Cortex‑A7 异常向量表构建汇编启动框架,配置各模式栈空间;讲解 IO 复用、GPIO 寄存器、外设时钟配置,通过汇编操作 GPIO1_IO03 实现 LED 点亮。完整介绍编译、链接、格式转换及 SD 卡烧录启动流程,适合嵌入式裸机入门。

2403_89702754的博客 540

使用R语言整理GEO数据的简易教程

本教程介绍了使用R语言从GEO数据库下载数据并进行数据整理的基本步骤。根据实际研究问题,你可能需要进行更复杂的数据处理和分析。R语言作为一种强大的生物信息学工具,为GEO数据的整理、分析和可视化提供了丰富的功能和工具。希望这个教程能够帮助你入门GEO数据整理和R语言的应用。如果你在使用过程中遇到问题,或需要进一步的指导,请随时向我询问。祝你在GEO数据分析的旅程中取得成功!

Mrrunsen的博客 3743

基于Cortex-A7架构的嵌入式linux ARM裸机开发<1>——点亮第一个LED灯(汇编版本)

为什么要学习Cortex-A汇编? ①、需要用汇编初始化一些SOC外设。 ②、使用汇编初始化DDR(I.MX6U不需要) ③、设置sp指针,一般指向DDR,设置好C语言运行环境。 一、本节汇编语法知识 1、汇编入口标号 汇编程序的默认入口标号是_start,不过我们也可以在链接脚本中使用 ENTRY 来指明其它的入口点,下面的代码就是使用_start 作为入口标号: .global _start _start: ldr r0, =0x12 //r0=0x12 2、处理器内部数据传输指令 使用处理器.

嵌入式点灯砖家的博客 3690

芯片研发完整全流程

芯片研发全流程可分为需求与架构设计、前端逻辑设计、后端物理设计、晶圆制造、封装测试五大阶段,涉及16个核心步骤。研发过程需要多学科交叉协作,包括微电子、物理、材料、计算机等。关键注意事项包括验证优先、工艺约束遵循、可测性设计等。芯片设计需要绘制纳米级精度的物理版图,而非传统工程图纸,需使用专业EDA工具而非KiCad这类PCB设计软件。完整研发流程具有高投入、高风险特点,需严格遵循行业标准和规范。

weixin_44520581的博客 230

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

星星点灯(点亮LED灯)

1、点亮LED灯 学习单片机的第一件事就是点亮LED灯,学习ARM开发,也不例外,先拿LED来开刀 我们如何开始呢?我们分为3步: 看原理图 ----- 确定引脚连线 看芯片手册 ----- 确定引脚功能 写程序 ----- 完成功能开发 以后每个裸板程序都是按照这个步骤来的。 Ⅰ、打开原理图 原理图需要看懂哪一些东西呢?对于LED灯,只需要知道点亮LED是高电平还是低电...

Jiaying888168的博客 1898

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【ARM裸机开发】如何编写Makefile和链接脚本

如何编写makefile和链接脚本文件

qq_43984063的博客 1849

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ARM嵌入式linux系统学习之裸机(一)

1.裸机学习什么?裸机主要是学习对通过arm处理器的寄存器的操作来实现其内部资源和外部设备的控制及通信。学习裸机主要有两个目的,第一是熟悉其硬件的资源配置,学会编写bootloader;第二就是学习硬件驱动程序的工作原理,为内核驱动打下基础。2.裸机学习需要具备哪些基础?由于裸机程序主要是通过对核心处理器寄存器的操作来实现开发板外部设备、接口的功能,即主要和硬件打交道,因此首先你应该能看懂开发板的原

开坦克的飞行员 2243

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-9.1-LED灯(模仿STM32驱动开发实验):用TaoToken统一Key跑通寄存器点亮流程

正点原子MX6U裸机第9.1讲,用C结构体封装I.MX6ULL寄存器,模仿STM32驱动方式点亮LED。文中给出imx6u.h与Makefile可复制片段,并用TaoToken统一Key集中管理调试期模型调用,官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 可注册使用。

weixin_42509888的博客 18

【ARM】led·fs2410流水灯

开发环境1、硬件平台:FS2410(s3c2410)2、主机:Ubuntu 12.04 LTSLED原理图650) this.width=650;" src="http://img1.51cto.com/attachment/201306/214317385.jpg" title="led原理图.jpg" />LED的GPIO的配置配置GPFCON寄存器,设置GPF4-7为输出配置GPFDAT,设

成鹏致远的专栏 738

网上收集的一些教程地址

记录一下: https://www.cnblogs.com/hbtmwangjin/articles/9018758.html s3c2440裸机开发环境的搭建 https://blog.youkuaiyun.com/mybelief321/article/details/8910528 一起学mini2440裸机开发(一)--第一个led灯点亮 https://blog.youkuaiyun.com/weibo1230123/article/details/83959848 ARM模拟器-skyeye(天目...

weixin_43120264的博客 201

【ARM】2410裸机系列-流水灯

开发环境   1、硬件平台:FS2410(s3c2410) 2、主机:Ubuntu 12.04 LTS     LED原理图     LED的GPIO的配置   配置GPFCON寄存器,设置GPF4-7为输出 配置GPFDAT,设置LED灯亮与灭         主要步骤   通过设置GPFCON...

weixin_34107955的博客 308

ARM裸机开发(三)SDRAM编程

     以下裸机程序基于GT2440,编译器为arm-linux-gcc-4.4.3。       程序结构:程序由sdram.S和main.c两个文件组成,sdram.S文件完成一些初始化工作,如时钟初始化,内存控制器初始化,拷贝第二阶段代码到sdram等;main.c负责循环点亮、熄灭四个LED。       程序流程:上电时,cpu自动跳到复位异常向量入口,在复位异常处理里首先关闭看门...

weixin_33895475的博客 205

ARM裸机开发:C语言点亮LED

ARM裸机开发:C语言点亮LED

嵌入式学习记录站点 2947

stm32mp1 Cortex M4开发篇2:通过GPIO点亮LED灯详解

写在前面: 本文章为《STM32MP1系列教程之Cortex-M4开发篇》系列中的一篇,全系列总计11篇。笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板)。针对该开发平台,后续会陆续出更多系列教程,包括Cortex-A7开发篇、Cortex-M4开发篇、Linux应用开发篇、Linux系统移植篇、Linux驱动开发篇、硬件设计篇、项目实战篇等。欢迎关注,更多stm32mp157开发教程及视频,可加技术交流Q群459754978,感谢关注。 FS-MP1A开发板详情介绍:ht

华清远见IT实验室专栏 3205
上一篇: ARM裸机开发-汇编基础
下一篇: ARM裸机开发-蜂鸣器与按键
剑指offer.
博客等级 码龄3年 15粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值