ARM与裸机开发
文章平均质量分 72
ARM芯片基本架构与基于开发单板做非操作系统的外设驱动开发工作
生活需要深度
这个作者很懒,什么都没留下…
展开
-
ARM SIMD 指令集:NEON 简介
NEON 还提供了数组向量数据类型,命名模式如下:xx_t,eg:int8x16x4_t 是一个长度为 4 的数组,每一个数据的类型为 int8x16_t。w:表示 wide,第一个输入向量和输出向量类型一样,且是第二个输入向量元素长度的 2 倍,uint16x8_t vsubw_u8(uint16x8_t a, uint8x8_t b);// 将 a, b 向量的相邻数据进行两两和操作。原创 2024-10-22 21:27:43 · 102 阅读 · 0 评论 -
处理器核设计之存储器架构
由于ITCM和DTCM并不是缓存机制,不存在着缓存不命中的情况,其访问的延迟是明确可知的,因此程序的执行过程能够得到明确的性能结果。此领域中的软件代码规模一般较小,所需要的数据段也较小,使用几十KB的片上SRAM或者ITCM、DTCM便可以满足其需求,因此缓存能够缓存空间巨大的存储器数据的优点在此变得无用武之地了。RISC-V架构定义了7条存储器读指令和存储器写指令,分别为LH,LHU,LB,LBU,LW,SB,SH,SW,用于支持以一个字节、半字、单字为单位的存储器读写操作。原创 2023-08-03 19:53:11 · 220 阅读 · 0 评论 -
ARM Cortex-M85
版权声明:本文来源网络,免费传达知识,版权归作者所有,如涉及作品版权问题,请联系我进行删除。可以通过SIMD指令集提供强大的DSP性能。就在今天,Arm发布了新一代的Cortex-M处理器,实际上,在最新发布的的。原创 2023-06-28 17:58:40 · 551 阅读 · 0 评论 -
ARM Cortex-R8:5G 之路
ARM CPU 部门,高级产品经理。新的 ARM Cortex-R8 是一款四核高性能实时处理器,基于先进的 R 系列 ARMv7-R 架构构建,这款处理器完全继承了 Cortex-R4、Cortex-R5 和 Cortex-R7 处理器的优点。它在同级别处理器中具有最高的实时处理性能。Cortex-R8 不但性能更高,而且引入了新特性,可满足下一代存储设备控制器和移动通信的需求,特别是即将到来的 5G 蜂窝无线标准。原创 2023-05-05 17:23:55 · 1476 阅读 · 0 评论 -
芯片厂家GitHub库
大家好,我是ZhengN。本次给大家分享一些芯片原厂的代码仓库,这些资源已收录到咱们嵌入式大杂烩的资源仓库里了:https://gitee.com/zhengnianli/EmbedSummary我们用到一个新的芯片时,一般在它们的官网都可以找到一些入门、上手的资料。除此之外,有些原厂也有在维护其GitHub仓库,我们也可以从中获取得到一些相关源码。下面列举了一些芯片原厂的GitHub仓库:意法半导体(ST)仓库链接:https://github.com/STMicroe原创 2022-03-16 11:14:55 · 479 阅读 · 0 评论 -
Linux驱动|rtc-hym8563移植笔记
RTC:实时时钟的缩写是(Real_Time Clock)。RTC 是集成电路,通常称为时钟芯片。HYM8563是一款低功耗CMOS实时时钟/日历芯片,由武汉昊昱公司设计生产。它提供一个可编程的时钟输出,一个中断输出和一个掉电检测器,所有的地址和数据都通过I2C总线接口串行传递。最大总线速度为400Kbits/s,每次读写数据后,内嵌的字地址寄存器会自动递增。原创 2023-02-02 16:42:08 · 719 阅读 · 0 评论 -
《嵌入式 – GD32开发实战指南》第16章 RTC
第 3 位为寄存器同步标志位,我们在修改控制寄存器之前,必须先判断该位,是否已经同步了,如果没有则等待同步,在没同步的情况下修改RTC_INTEN/RTC_CTL的值是不行的。总共也是 32 位,用来标记闹钟产生的时间(以秒为单位),如果 RTC_CNT 的值与 RTC_ALR 的值相等,并使能了中断的话,会产生一个闹钟中断。在开启了 RTC 时钟之后,我们要做的就是设置 RTC 时钟的分频数,通过 RTC_PSCH 和RTC_PSCL 来设置,然后等待 RTC 寄存器操作完成,并同步之后,设置秒钟中断。原创 2023-02-02 16:27:02 · 2409 阅读 · 1 评论 -
深入浅出DDR系列(二)--DDR工作原理
如果没有采用bank,假设我们现在要读取01-08地址的数据,当读取01的地址后,要等这个bank自刷新后才能读取02地址的值,而采用8个bank之后,没有这类问题,例如我们读取完01地址之后,那么读取02,因为02与01的控制方式不同,所以对于这段时间01可以后台的完成自刷新,依次类推,那么就可以很好的解决动态内存需要刷新的问题。同时,由于内部的一些部件可能会被多个操作使用,例如读数据和写数据都需要用到部分 IO 电路,因此多个不同的操作通常不能同时进行,也需要遵守一定的时序。原创 2023-01-09 11:24:54 · 2790 阅读 · 0 评论 -
深入浅出DDR系列(一)--DDR原理篇
对于个人电脑,个人电脑上是没有内存条的,内存是直接以DIP芯片的形式安装在主板的DRAM插座上面,需要安装8到9颗这样的芯片,容量只有64KB到256KB,要扩展相当困难,但这对于当时的处理器以及程序来说这已经足够了,直到80286的出现硬件与软件都在渴求更大的内存,只靠主板上的内存已经不能满足需求了,于是内存条就诞生了。这是个DDR3一个Rank的示意图。主要的原因是作为嵌入式工程师的我们,这部分主要是配置参数,而这些参数都是由芯片厂商已经提供好了,硬件工程师都会基于厂商认证的DDR选型,减少开发周期。原创 2023-01-09 11:23:11 · 7734 阅读 · 0 评论 -
Linux内核与SMP(对称多处理)
SMP的全称是“对称多处理“(Symmetrical Multi-Processing)技术,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。它是相对非对称多处理技术而言的、应用十分广泛的并行技术。在这种架构中,一台电脑不再由单个CPU组成,而同时由多个处理器运行操作系统的单一复本,并共享内存和一台计算机的其他资源。虽然同时使用多个CPU,但是从管理的角度来看,它们的表现就像一台单机一样。系统将任务队列对称地分布于多个CPU之上,从而极大地提高了整个系统的数据处理能力原创 2022-12-09 11:04:52 · 1523 阅读 · 0 评论 -
JZ2440烧写uboot/内核/根文件系统步骤
jz2440烧写开发板uboot,内核和文件系统等的相关命令下载文件{ftpget -u 1 -p 1 192.168.2.110 a.out a.outnfs 30000000(destination) 192.168.2.109:/home/fs/work/kernel/linux-2.6.22.6/arch/arm/boot/uImage(source)nfs 30000000 192.168.2.109:/home/fs/work/kernel/linux-2.6.22.6/arch/a原创 2022-04-03 21:02:04 · 2064 阅读 · 0 评论 -
轮询、中断、DMA和通道
对I/O设备的程序轮询的方式,是早期的计算机系统对I/O设备的一种管理方式。它定时对各种设备轮流询问一遍有无处理要求。轮流询问之后,有要求的,则加以处理。在处理I/O设备的要求之后,处理机返回继续工作。尽管轮询需要时间,但轮询不比I/O设备的速度要快得多,所以一般不会发生不能及时处理的问题。当然,再快的处理机,能处理的输入输出设备的数量也是有一定限度的。而且,程序轮询毕竟占据了CPU相当一部分处理时间,因此程序轮询是一种效率较低的方式,在现代计算机系统中已很少应用。...原创 2022-07-24 15:31:29 · 5991 阅读 · 0 评论 -
UART、I2C、USB、SPI、CAN、Jtag、PCI/PCIE协议汇总
协议 通信方式 UART 串行全双工 I2C原创 2022-03-10 22:08:14 · 4410 阅读 · 1 评论 -
CAN总线 - SOC裸机
一、引言 SPI接口是Motorola首先提出的全双工三线同步串行外围接口,采用主从模式(master slave)架构。支持多Slave模式应用,一般仅支持单Master。时钟由master提供,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first)二、使用步骤1.引入库代码如下(示例):import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn a..原创 2021-11-01 17:22:14 · 218 阅读 · 0 评论 -
SPI与SPIFlash - SOC裸机
1. 协议1.1 硬件连接方式SPI总线必须有一个主机,可以包含多个从机,硬件具体连接的方式包含两种。第一种方式多NSS第二种方式菊花链1.2. 数据格式模式0:CPOL= 0,CPHA=0。SCK串行时钟线空闲是为低电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换模式1:CPOL= 0,CPHA=1。SCK串行时钟线空闲是为低电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换模式2:CPOL= 1,CPHA=0。SCK串..原创 2022-03-10 22:19:00 · 571 阅读 · 0 评论 -
I2C与I2CEEProm - SOC裸机
I2C总线最初是由Philips提出的,协议文档《I2C-bus specification and user manual》,目前协议由NXP维护。I2C实际生活中可以找到类似的例子进行说明。上体育课,体育老师与学生进行传球训练。老师发球给学生或者从学生那里接球,现在有多个学生分别是A/B/C/D发球和接球的大致流程如下老师告知提醒学生现在开始发接球活动,start 老师说A同学注意,我要扔球给你,地址和方向确定下来 老师把球扔出去,数据传输 A同学接到球以后告诉老师说我接到球了,应答 老师确原创 2022-03-09 20:02:30 · 312 阅读 · 0 评论 -
Direct Memory Access DMA - SOC裸机
DMA用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输。可以在无需任何 CPU 操作的情况下通过 DMA 快速移动数据。这样节省的 CPU 资源可供其它操作使用。我们用一个现实例子来做个类比。有一家冶炼公司,每天要不断的从矿场拉矿石进入厂区冶炼,以前通过公路运送的,但是这个公路除了他家的货运车以外,还有其他车,所以一般堵车严重,交通事故频发,影响工厂生产,货运成为该公司提高产能的一大瓶颈。公司思量再三,决定出资在矿场和公司间修建一条专用铁路来运矿石。原创 2023-06-20 09:47:55 · 2114 阅读 · 0 评论 -
代码重定位 - SOC裸机
1. 段概念与重定位chegnxu原创 2022-03-06 20:08:27 · 565 阅读 · 0 评论 -
内存控制器与SDRAM - SOC裸机
S3C2440统一编制包含了GPIO,串口、I2C、SDRAM等数据,但是这个芯片发现Nandflash不是在统一编址范围内,Nandflash控制器是在统一编址中的。通过这个寄存器,可以使能片选型号,然后将对应的Nandflash选中,进而保证对应的地址总线和Nandflash总线链接的线上数据是有效的。读写效率问题后续讨论...原创 2022-03-05 09:29:05 · 669 阅读 · 0 评论 -
UART与Printf - SOC裸机
1. 串口(物理)2. 串口(协议)串口是计算机上一种非常通用的设备通信的协议(不要与通用串行总线Universal Serial Bus或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单..原创 2022-03-04 19:22:49 · 5463 阅读 · 0 评论 -
S3C2440时钟体系 - SOC裸机
1. 系统时钟体系1.1. 时钟源外部时钟源分两种,晶振OSC或者外部时钟EXTCLK,由om3-2选择具体输入哪个时钟源信息表:1.2. 频率控制经过选定开关OM选定以后的输入时钟MPLL_IN有三个去向MPLL、UPLL、USBCNTL。其中USBCNTL这些控制模块一开始控制室中都是来自选定后的时钟,这些控制模块给定时钟以后,我们才能进行后期复杂锁相环和分频器寄存器配置,产生需要的时钟。UPLL环和MPLL都包含了P/M/S配置用来实现频率倍增,DIVN分频器则实现频率成倍降.原创 2022-03-04 17:05:20 · 456 阅读 · 0 评论 -
ARM汇编程序设计实例
10.5ARM汇编程序设计举例在本节中通过一些例子来说明ARM中伪操作及指令的基本用法。10.5.1条件跳转及循环1.ALU状态标志所有ARM指令都可以条件执行。大部分ARM指令集和Thumb-2指令集的数据处理指令都可以选择是否根据指令的执行结果设置ALU的状态标志位。 注意 较早的ARM体系结构中使用的Thumb指令不能选择是否更新ALU的标志位。当数据处理指令执行完后,处理器自动根据指令的执行结果更新状态标志。...原创 2022-03-01 14:54:28 · 7213 阅读 · 0 评论 -
汇编基础内容
MOV(MOVe) 传送指令PUSH 入栈指令POP 出栈指令XCHG(eXCHanG) 交换指令XLAT(TRANSLATE) 换码指令LEA (Load Effective Address) 有效地址送寄存器指令LDS(Load DS with pointer) 指针送寄存器和DS指令LES(Load ES with pointer) 指针送寄存器和ES指令LAHF(Load AH with Flags) 标志位送AH指令SAHF(Store AH int...原创 2022-02-28 15:36:56 · 3463 阅读 · 0 评论 -
C与汇编互相调用 - C与汇编混合编程(二)
寄存器的使用改规则,堆栈的使用方时赫参数传递。原创 2022-03-18 18:32:53 · 151 阅读 · 0 评论 -
汇编程序设计 - ARM汇编指令(六)
寻址方式是根据指令中给定的地址码字段来实现寻找真实操作数地址的方式,ARM处理器共包含9中寻址方式。1. 寄存器寻址原创 2022-03-08 15:28:09 · 783 阅读 · 0 评论 -
GNU内嵌汇编 - C与汇编混合编程(一)
一、格式 asm volatile (“asm code”:output:input:changed); //必须以‘;’结尾,不管有多长对C都只是一条语句 asm 内嵌汇编关键字 volatile 告诉编译器不要优化内嵌汇编,如果想优化可以不加 ANSI C规范的关键字: (ANSI C把asm用于其它用途,不能用于内嵌汇编语句,GCC可以) __asm__ __volatile__ //前面和后面都有两个下划线,它们之间没有空格 如果后面部分没有内容,‘:’可以省略,原创 2022-02-28 15:33:22 · 904 阅读 · 0 评论 -
APCS - ARM汇编指令(五)
ARM procedure call standard(APCS),ARM过程调用标准提供了原创 2022-03-04 15:48:06 · 915 阅读 · 0 评论 -
伪指令 - ARM汇编指令(四)
汇编器提供的伪指令,编译过程会转换为实际的某种行为或者汇编指令组合,伪指令存在能够是编程过程更加简单。ALIGN对齐指令能够将对应的字节按照给定的方式完成直接对齐。OPT:设置汇编选项...原创 2022-03-04 10:48:33 · 1766 阅读 · 0 评论 -
流控制 - ARM汇编指令(三)
条件循环if在汇编中是不存在的,其只有通过CMP,配合jmpeq等这种跳转判断指令。在ARM汇编语言中循环通过loop指令来实现,再复杂的while和for循环也是基于loop循环来实现。2.1. Loop2.2. for2.3. while...原创 2022-02-28 15:06:48 · 1501 阅读 · 0 评论 -
操作符指令 - ARM汇编指令(二)
加减乘除基本计算指令原创 2022-03-04 10:26:04 · 2099 阅读 · 0 评论 -
处理器寻址 - ARM汇编指令(一)
1.2.15.ARM汇编指令集1两个概念:指令与伪指令 (汇编)指令是CPU机器指令的助记符,经过编译后会得到一串10组成的机器码,可以由CPU读取执行。 (汇编)伪指令本质上不是指令(只是和指令一起写在代码中),它是编译器环境提供的,目的是用来指导编译过程,经过编译后伪指令最终不会生成机器码。两种不同风格的ARM指令 ARM官方的ARM汇编风格:指令一般用大写、Windows中IDE开发环境(如ADS、MDK等)常用。如: LDR R0, [.........原创 2022-03-01 18:08:34 · 2326 阅读 · 0 评论 -
ARMv8内存属性与类型(Memory types and attributes)简介 - ARM内核
device内存区域通常是给一些外设,比如USB uart之类的模块用的,首先是non-cacheable的,也就是不能走cache,直接访问内存,数据只存在内存中,其他地方没有备份,这样可以保证数据的唯一性,准确性。观察者访问某一级缓存内的内存系统时,对该级缓存的Write-Through cache或non -cacheable的内存位置的完整写入,对于所有访问该一级缓存外的内存系统的观察者来说都是可见的,而不需要显式的缓存维护。此外也需要额外的内存屏障操作来保证内存的处理顺序。原创 2023-09-22 11:30:32 · 174 阅读 · 0 评论 -
ARM 浮点计算单元 FPU (FPA,VFP,NEON)介绍 - ARM内核扩展
ARM 的 FPU支持IEEE 754标准的浮点数格式,并能够执行各种浮点数的基本运算,如加法、减法、乘法、除法等,以及一些更复杂的运算,如平方根、绝对值等。对于支持硬件浮点运算的系统,这是非常重要的,因为如果不正确地保存和恢复VFP的状态,可能会导致浮点运算的结果错误。但是在现代的ARM处理器中,如Cortex系列处理器,浮点单元通常是内置的,对于执行浮点数运算有极大的帮助。对于VFP,有几种可能的值,例如vfp、vfpv3、vfpv4等,这取决于你的处理器支持哪种版本的VFP。原创 2023-08-16 16:17:50 · 2873 阅读 · 0 评论 -
协处理接口 - ARM内核扩展(三)
协处理指令是。原创 2022-08-17 19:57:53 · 91 阅读 · 0 评论 -
内存管理单元MMU - ARM内核扩展(一)
了解物理地址和虚拟地址的关系 掌握如何通过设置MMU来控制虚拟地址到物理地址的转化 了解MMU的内存访问权限机制 了解TLB、Cache、Writebuffer的原理,使用时的注意事项在计算机开始阶段实际应用程序功能简单,程序文件较小,可以全部装在机器的内存中。随着技术的不断推进逐渐出现如下三个问题:1. 程序逻辑越来越复杂,程序文件不断扩充,对应的需要实际物理内存大小也在增加,甚至很多时候一个程序都无法全部装载到内存当中。2. 多道系统由很多程序需要同时执行,各个程序之间的在执行过程中数据原创 2022-03-28 21:22:09 · 2438 阅读 · 0 评论 -
Cache与紧耦合存储器TCM - ARM内核扩展(二)
CPU最基本的cache。原创 2022-08-17 19:56:48 · 608 阅读 · 0 评论 -
一文搞懂AMBA总线工作原理 与AHB总线 - ARM内核
本文主要介绍总线相关的知识,会从以下几个方面展开:什么是总线,为什么需要总线,总线的组成,总线的分类,ARM中常见的总线协议是什么,然后后面的部分会着重介绍一下ARM中常见的总线协议及工作原理。什么是总线呢?总线是计算机各种功能部件(运算器、控制器、内存、输入、输出等)之间传送信息的公共通信干线,它是由导线组成的传输线束。简单来说总线也是导线,是连接两个以上计算机部件的专用信号线,在各个部件之间传送信息的公共通路。为什么需要总线呢?原创 2023-11-14 16:02:54 · 2201 阅读 · 0 评论 -
ARM中断 - ARM内核(五)
中断指令是在编程内部非常重要的一个内容,其可以实现的原创 2022-02-28 15:58:52 · 2546 阅读 · 0 评论 -
ARM异常处理(3):Bus faults、Memory management faults、Usage faults、Hard faults详解
或者要POP已经在堆栈中的PC值,而LSB为0。如果想更精确地定位Bus fault,可以通过堆栈程序计数器来定位错误的指令,且如果BFSR中的BFARVALID位为1的话,则还可以通过读取总线错误地址寄存器(Bus Fault Address Register,BFAR)来确定导致Bus fault的内存位置。如果没有使能Bus fault的处理程序或总线错误发生在其它的比Bus fault优先级高的异常的异常处理程序时,Hard fault的中断处理函数会取代bus fault执行。原创 2023-09-12 16:43:48 · 1678 阅读 · 0 评论 -
ARM异常处理(2):中断的输入和挂起的6种情况分析
但是,如果挂起状态在处理器开始响应挂起中断之前被清除(例如,因为PRIMASK/FAULTMASK被设置为1,中断没有被立即执行,且挂起状态需要通过软件写NVIC中断控制寄存器来清除),此时中断是可以被取消的。当一个中断输入时,它将被挂起,然后被置于等待处理器处理请求的状态,此时即使失能该中断源,挂起的中断最后仍会触发其相应的中断处理程序,而一旦中断处理程序开始执行,该挂起状态将被自动清除。如果一个中断的请求被取消,然后在中断服务程序中再次被触发,它将再次被挂起。即使中断被失能,挂起的中断仍然可能产生。原创 2023-09-12 16:43:07 · 190 阅读 · 0 评论