自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (1)
  • 收藏
  • 关注

原创 OS支持特性

cortex-m处理器架构实现了多个特性,保证了OS设计的方便和高效。例如:①影子栈指针。有两个栈指针可用,MSP用于OS内核以及中断处理,PSP则用于应用任务。②SysTick定时器。位于处理器内部的简单定时器,使得同一个嵌入式OS可用在多种cortex-m微控制器上。③SVC和PendSV异常。这两种异常对于嵌入式OS中的操作非常重要,如上下文切换的实现等。④非特权执行等级。可以利用其实现一种基本安全模型,限制某些应用任务的访问权限。特权和非特权等级的分离还可同存储器保护单元一起使用,进一步提高

2022-02-25 20:04:09 784

原创 存储器保护单元

一、MPU简介cortex-m3和cortex-m4处理器支持一种名为MPU的特性。MPU是一种可编程的部件,用于定义不同存储区域的存储器访问权限(如只支持特权访问或全访问)和存储器属性(如可缓冲、可缓存)。cortex-m3和cortex-m4处理器中的MPU支持多达8个可编程存储器的区域,每个都具有自己可编程的起始地址、大小及设置,另外还支持一种背景区域特性。MPU可以提高嵌入式系统的健壮性,可以使系统更加安全:①避免应用任务破坏其他任务或OS内核使用的栈或数据存储器②避免非特权任务访问对系统可靠

2022-02-25 20:00:51 1107

原创 深入了解异常处理

一、简介1.1 C实现的异常处理对于cortex-m处理器,可以将异常处理或ISR实现为普通的C程序/函数,为了深入了解这种机制,我们先来看一下C函数在ARM架构上是如何工作的。用ARM架构的C编译器遵循ARM的一个名为AAPCS的规范。根据这份标准,C函数可以修改R0R3、R12、R14(LR)以及PSR。若C函数需要使用R4R11,就应该将这些寄存器保存到栈空间中,并且在函数结束前将它们恢复,如下图所示:R0~R3、R12、LR以及PSR被称作调用者保存寄存器,若在函数调用后还需要使用这些寄存

2022-01-01 10:32:54 1563

原创 异常和中断

一、异常和中断简介中断一般由硬件(如外设和外部输入引脚)产生的事件,它会引起程序流偏离正常的流程(如给外设提供服务)。当外设或硬件需要处理器的服务时,一般会出现下面的流程:①外设确认到处理器的中断请求。②处理器暂停当前执行的任务③处理器执行外设的ISR,若有必要可以选择由软件清除中断请求。④处理器继续执行之前暂停的任务。所有的cortex-m处理器都会提供一个用于中断处理的嵌套向量中断控制器(NVIC)。除了中断请求,还有其他需要服务的事件,将其称为异常。按照ARM的说法,中断也是一种异常。co

2022-01-01 10:26:19 3626

原创 cortex-M3/M4存储器系统

一、存储器系统特性简介cortex-m 处理器可以对32位存储器进行寻址,因此存储器空间能够达到4GB。存储器空间是统一,这也意味着指令和数据共用相同的地址空间。根据架构定义,4GB的存储器空间被分为了多个区域。另外,cortex-M3和cortex-M4处理器的存储器系统支持多个特性:①多个总线接口,指令和数据可以同时访问(哈佛总线架构)②基于AMBA(高级微控制器总线架构)的总线接口设计,实际上也是一种片上总线标准:用于存储器和系统总线流水线操作的AHB(AMBA高性能总线)Lite协议,以及用于

2021-12-23 19:35:47 4783

原创 cortex-M3/M4 指令集

一、理解汇编语言用法ARM汇编(适用于ARM realview工具链 DS-5 Keil微控制器开发套件)指令格式如下:label​ mnemonic operand1,operand2, … ;注释label(标号)表示地址位置,是可选的。有些指令的前面可能会有标号,这样就可以通过这个标号得到指令的地址。标号也可以用于表示数据地址。例如,可以在程序内的查找表处放一个标号。mnemonic为助记符,也就是指令的名称,其后跟着的是多个操作数。对于在ARM汇编器中编写的数据处理指令,第一个操

2021-12-21 19:14:33 7004

原创 cortex-M3/cortex-M4架构

一、编程模型1.1 操作模式和状态cortex-m3和cortex-m4处理器有两种操作状态和两个模式。另外,处理器还可以区分特权和非特权访问等级,如下图所示。特权访问等级可以访问处理器中的所有资源,而非特权访问等级则意味着有些存储器区域是不能访问的,有些操作也是无法使用的。操作状态:调试状态:当处理器被暂停后(例如,通过调试器或触发断点后),就会进入调试状态,并停止指令执行。Thumb状态:若处理器在执行程序代码(Thumb指令),它就会处于Thumb状态。cortex-m不支持ARM指令集,

2021-12-08 09:25:08 7213

原创 cortex-M3/cortex-M4技术综述

一、cortex-m3和cortex-m4处理器的一般信息1.1 处理器类型ARM CORTEX-M 为32位RISC 处理器,其具有32位寄存器32位内部数据通路32位总线接口​ 除了32位数据,ARM处理器都还可以高效地处理8位数据和16位数据。m3和m4处理器还支持涉及64位数据的多种运算(如乘和累加)m3 m4处理器都具有三级流水线(取指、译码和执行),它们都基于哈佛总线架构,取指令和数据访问可以同时执行。​ ARM cortex-m 处理器的存储器系统使用32位寻址,地址空间最大

2021-12-03 10:55:39 3961

原创 cortex-M3/cortex-M4处理器简介

cortex-M3、cortex-M4简介cortex-M3、cortex-M4 处理器使用32位架构,寄存器组中的内部寄存器、数据通路以及总线接口都是32位的,cortex-m处理器使用的指令集架构(ISA)为Thumb ISA,其基于Thumb-2技术并同时支持16位和32位指令。因此无须在Thumb状态(16位指令)和ARM状态(32位指令)间来回切换,其具有以下特点:三级流水线设计。哈佛架构,且具有统一的存储器空间;指令和地址总线使用相同的地址空间。32位寻址,支持4GB存储器空间基于AR

2021-12-02 18:12:32 7263

原创 系统和进程

一、 /proc 文件系统​ /proc 虚拟文件系统为访问内核信息提供了方便, 该文件系统驻留于/proc 目录中,包含了各种用于展示内核信息的文件,并且允许进程通过常规文件 I/O 系统调用来方便地读取,有时还可以修改这些信息。之所以将/proc 文件系统称为虚拟,是因为其包含的文件和子目录并未存储于磁盘上,而是由内核在进程访问此类信息时动态创建而成。​ 对于系统中每个进程,内核都提供了相应的目录,命名为/proc/PID,其中 PID 是进程的ID。在此目录中的各种文件和子目录包含了进程的相关

2021-10-20 19:17:03 98

原创 进程-----初识

一 、进程与程序​ 进程是一个可执行程序的实例。是由内核定义的抽象的实体,并为该实体分配用以执行程序的各项系统资源。程序是包含了一系列信息的文件,这些信息描述了如何在运行时创建一个进程,所包括的内容如下所示:① 二进制格式标识:每个程序文件都包含用于描述可执行文件格式的元信息(metainformation)。内核(kernel)利用此信息来解释文件中的其他信息。② 机器语言指令:对程序算法进行编码。③ 程序入口地址: 标识程序开始执行时的起始指令位置。④ 数据:程序文件包含的变量初始值和程序

2021-10-16 10:28:31 288

原创 深入文件IO

一、文件控制操作#include <unistd.h>#include <fcntl.h>int fcntl(int fd, int cmd, ... /* arg */ );fcntl()的用途之一是针对一个打开的文件,获取或修改其访问模式和状态标志(这些值是通过指定 open()调用的 flag 参数来设置的)。要获取这些设置,应将 fcntl()的 cmd 参数设置为F_GETFL。举例如下:int flags;flags= fcntl(fd,F_GETFL);

2021-10-16 09:38:32 143

原创 通用文件IO

一、文件描述符​ 所有执行I/O操作的系统调用都以文件描述符,一个非负整数(通常是小整数),来指代打开的文件。文件描述符用以表示所有类型的已打开文件,包括管道(pipe)、FIFO、socket、终端、设备和普通文件。针对每个进程,文件描述符都自成一套。二、通用I/O的系统调用​ 通用I/O 可以使用四个同样的系统调用open、read、write、close对所有类型的文件执行I/O操作。要实现通用I/O,就必须确保每一个文件系统和设备驱动程序都实现了相同的I/O系统调用集。2.1 open

2021-10-12 17:18:49 155

原创 系统编程概念

1. 系统调用​ 由操作系统操作系统实现提供的所有系统调用所构成的集合即程序接口程序接口或应用编程接口(Application Programming Interface,API)。是应用程序同系统之间的接口。​ 系统功能调用是操作系统提供给程序设计人员的一种服务。程序设计人员在编写程序时,可以利用系统调用来请求操作系统的服务。系统调用把应用程序的请求传给内核,调用相应的内核函数完成所需的处理,将处理结果返回给应用程序。​ 系统调用将处理器从用户态切换到内核态,以便CPU

2021-10-09 19:28:50 580

原创 imx6ull spi

一、overview​ IMX6ULL 自带的SPI控制器为ECSPI( Enhanced Configurable Serial Peripheral Interface) ,它为全双工四线串行通讯模块,有4路独立的控制器。ECSPI包含64x32接收buffer(RXFIFO)和一个64X32发送buffer(TXFIFO).使用数据fifo,ECSPI允许以更少的软件中断快速进行数据通信。ECSPI框图如下所示:1.1 特性①全双工同步串行接口②可配置为MASTER或SLAVE模式③支持多

2021-10-01 10:15:05 1874

原创 imx6ull i2c 控制器

备注:部分知识参考百问网手册一、overview1.1 特性① 兼容标准I2C总线,多主机运行。② 64种不同的串行时钟频率之一的软件可编程性。③ 软件可选择的应答位。④ 中断驱动,逐字节数据传输。⑤ 仲裁丢失中断与自动模式切换从主到从。⑥ 启动和停止信号生成/检测。⑦ 重复启动信号生成。⑧ 应答位生成和检测。⑨ 总线忙检测。1.2 模式和操作支持两种模式:标准模式和快速模式,标准模式下I2C数据传输速率最高是100Kbits/s,在快速模式下数据传输速率最高为400Kbits

2021-09-28 16:09:02 817

原创 imx6ull General Purpose Timer (GPT)

一、overviewGPT有一个32位的向上计数器,可以将外部引脚上的事件捕获到GPT寄存器中,捕获触发可以编程设置为上升沿或下降沿触发,甚至双边沿触发。GPT还可以在输出比较引脚上产生一个事件,并当计时器达到编程值时产生一个中断。GPT有一个12位的预分频,来对多个时钟源进行分频。1.1 特性① 一个带有时钟源选择的32位递增计数器,时钟源包括外部时钟。② 两个具有可编程触发沿的输入捕捉通道。③ 具有可编程输出模式的三个输出比较通道,还有一个“force compare”功能。④ 可以通过

2021-09-26 20:56:02 961

原创 imx6ull Enhanced Periodic Interrupt Timer (EPIT)

一、overviewEPIT是一个32位的计时器,能够在处理器很少干预的情况下以固定的时间间隔提供精确的中断。软件使能后,EPIT就开始计数。IMX6ULL有2个EPIT定时器。其框图如下所示:1.1 epit 特性EPIT具有以下主要特性:•可选择时钟源的32位递减计数器•12位预分频器,用于对输入时钟进行分频•可即时编程的计数器值•可以设置在低功耗和调试模式下,计数器仍然运行•计数器达到比较值时产生中断1.2操作模式EPIT可以设置为set-and-forget或free-runn

2021-09-26 20:29:20 286

原创 imx6ull gpio 中断

本文使用100ask_imx6ull_mini开发板来做实验,内容参考百问网开发手册一、整体流程GPIO 作为中断源,本实验使用KEY1(GPIO5_1)和KEY5(GPIO4_IO14)两个按键作为中断源,主要工作如下:设置GPIO模块设置GIC模块使能各个路径的中断编写中断函数二、GPIO模块相关设置1.设置gpio管脚模式为GPIO模式(alt5),并设置相应上下拉等特性。 /* KEY1 pins GPIO5_1 SNVS_TAMPER1 */ IOMUXC_SetPi

2021-09-24 16:14:28 2017

原创 imx6ull中断体系之GICV2

本文不研究中断虚拟化相关内容,部分内容来自于百问网手册一、中断类型Peripheral interrupt :其包含以下两种类型的外围中断,它们可以边缘触发或者高低电平触发​ Private Peripheral Interrupt (PPI) :这是一个特定于单个处理器的外围中断。​ Shared Peripheral Interrupt (SPI) :共享中断,这部分中断所有的核都可以处理。Software-generated interrupt (SGI) :通过写入GICD_SGIR寄存器

2021-09-24 07:57:30 997

原创 imx6ull gpio

1、总览The GPIO is one of the blocks controlling the IOMUX of the chip.GPIO 功能通过8个寄存器、一个边缘检测电流以及中断产生逻辑来实现的。每个GPIO 输入有个专用的边缘检测电路,可以通过软件设置来进行检测上升沿、下降沿、逻辑高低电平。边缘检测电路的输出可以通过设置GPIO_IMR的相应位来屏蔽。GPIO内部框图如下所示:其有下面2个功能①:通用输入输出逻辑功能----使用GPIO_DR寄存器来驱动指定数据到输出----使

2021-09-17 14:43:01 860

原创 uboot imx6ull lcd初始化

lcd在uboot 中调用关系如下:board_init_r​ --->stdio_init_tables​ --->drv_video_init{ /* Check if video initialization should be skipped */ if (board_video_skip()) return 0; /* Init video chip - returns with framebuffer cleared */ if (cfg_video_

2021-09-16 16:30:38 683

原创 imx6ull LCD 控制器 -- elcdif

本知识点主要参考白问网手册以及imx6ull 用户手册,重点介绍常用的DotClk接口一、enhanced lcd interface overviewIMX6ULL的LCD控制器名称为eLCDIF(Enhanced LCD Interface,增强型LCD接口),主要特性如下:① 支持MPU模式:有些显示屏自带显存,只需要把命令、数据发送给显示屏即可;② 支持DOTCLK模式:RGB接口,本实验就是此模式;③ VSYNC模式:针对高速数据传输(行场信号);④ 支持ITU-R BT.656接口,

2021-09-14 16:28:43 1449

原创 lcd硬件原理

知识点参考百问网开发手册和正点原子驱动开发手册1. LCD硬件工作原理LCD屏幕是由一个个像素点组成,上述图片中每一个黑点都对应一个像素点。像素点就类似一个灯(在 OLED 显示器中,像素点就是一个小灯),这个小灯是 RGB 灯,也就是由 R(红色)、G(绿色)和 B(蓝色)这三种颜色组成的,而 RGB 就是光的三原色。LCD显示原理可以理解为:LCD每一行有若干个点,试想下有一个电子枪,电子枪位于某一个像素点的背后,然后向这个像素发射红,绿,蓝三种原色,这三种颜色按不同的比例组合成任意一种颜色。电子

2021-09-12 18:35:35 2008

原创 imx6ull ccm时钟体系

一、时钟管理在片上系统(SOC)中,不同的模块通常需要工作在不同的时钟频率。为了满足这些需求,芯片将时钟源信号进行稳定、倍频、分频、分发以及屏蔽(gate)等操作,产生不同频率的时钟信号。这些时钟信号和它们的管理电路构成了芯片的时钟体系,驱动着各种各样的功能模块协同工作。首先我们来看一下时钟管理系统:IMX6ULL有7个锁相环电路,它们的输入时钟信号称为源时钟信号,可通过寄存器选择,通常为XTALOSC24M产生的24MHZ时钟信号。它们的输出经过进一步选择和分频,形成不同的根时钟信号,分发到各个模

2021-09-09 19:36:48 2421

原创 imx6ull boot 启动

1.启动方式During reset, the chip checks the power gating controller status register.During boot, the core’s behavior is defined by the boot mode pin settings,When waking up from the low-power boot mode, the core skipsthe clock settings. The boot ROM checks

2021-09-07 15:29:02 1574

原创 bootcmd执行过程

通过日志打印或者打印环境变量,我们可以得到:bootcmd="run findfdt;run findtee;mmc dev ${mmcdev};mmc dev ${mmcdev}; if mmc rescan; then if run loadbootscript; then run bootscript; else if run loadimage; then run mmcboot; else run netboot; fi; fi; else run netboot; fi查看单板头文件inc

2021-09-05 09:30:28 1164

原创 main_loop以及命令行实现分析

//const char __weak version_string[] = U_BOOT_VERSION_STRING;//#define U_BOOT_VERSION_STRING U_BOOT_VERSION " (" U_BOOT_DATE " - " U_BOOT_TIME " " U_BOOT_TZ ")" CONFIG_IDENT_STRINGenv_set("ver", version_string);void cli_init(void){ if (top_vars == NUL

2021-09-03 15:35:47 134

原创 imx6ull u-boot启动流程分析

一、程序入口程序的链接由链接脚本决定的,所以可以通过u-boot.lds 来找到uboot的入口。从上图可以看出入口为_start,该标签在vector.S中(\arch\arm\lib\vectors.S) .macro ARM_VECTORS b reset ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ldr

2021-09-02 16:49:08 925

原创 imx6ull mini板子uboot移植

一、nxp 官方uboot初体验正常情况下芯片原厂的uboot支持度比较好,我们可以在此基础上将uboot移植到自己的板子上。获取NXP官网的uboot官网网址: https://source.codeaurora.org/external/imx/uboot-imx通过git来进行下载,然后选择合适的版本这里我们选择rel_imx_4.14.98_2.3.0 git checkout rel_imx_4.14.98_2.3.0下载后选择与我们cpu一样的公版进行编译操作make di

2021-08-31 16:21:25 522

原创 RISC-V CSR 相关指令集

CSRRW(Atomic Read/Write CSR) 指令原子性的交换CSR和寄存器中的值。 CSRRW指令读取在CSR中的旧值,将其零扩展到32位,然后写入整数寄存器rd中,rs1寄存器中的值将被写入CSR中。如果rd为x0,则不对csr执行读操作示例:csrrw t6,mscratch,t6 t6=mscratch mscratch=t6伪指令csrw csr rs <==> csrrw x0, csr.

2021-07-19 11:06:37 5954

原创 RV32I ISA 汇编指令详解

add rd, rs1, rs2示例:add x5,x6,x7 x5=x6+x7rd: 0b00101 rs1:0b00110 rs2:0b00111对应32位指令格式如下:0000000 00111 00110 000 00101 0110011即为:0x007302b3整数寄存器–寄存器指令(R类)RV32I定义了几种算术R类操作指令,所有操作都是读取rs1和rs2作为源寄存器,并把结果写入到rd寄存器中。示例:add rd, rs1, rs2 rd=rs1+r

2021-07-18 17:16:39 1908

原创 RISC-V汇编简介

RISC-V汇编简介汇编语言有3类指令组成:a.汇编指令:机器码的助记符,有对应的机器码,可以翻译成对应的二进制机器码。b.伪指令:没有对应的机器码,由汇编器解释执行,可以翻译成多条汇编指令,也可以没有对应汇编指令,c.其他符合:如+、-、*、/等,由编译器识别,没有对应的机器码。汇编语法介绍:[LABEL:][OP][COMM]LABEL:...

2021-07-18 14:55:34 2074

原创 RISC-V ISA 命名规范

RISC-V ISA 命名规范RISC-V ISA 采用模块化的方式进行组织,每一个模块使用一个英文字母表示,其命名格式可以参考如下:RV[字宽][指令集模块]RV:RISC-V字宽(处理器寄存器的宽度):32位,64位,128位指令集模块:标识该处理器支持的指令集模块集合基本整数(Integer)指令集: RISC-V唯一强制要求实现的基础指令集,其他指令集都 是可选的扩展模块。扩展模块指令集: RISC-V允许在实现中以可选的形式实现其他 标准化和非标准化的指令集扩展。特定组合“IMA

2021-07-18 10:07:25 598

Everything-1.4.1.895.x64-Setup.zip

Everything是速度最快的文件搜索软件,可以瞬间搜索到你需要的文件。如果你用过Windows自Everything是速度最快的文件搜索软件,可以瞬间搜索到你需要的文件

2019-06-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除