嵌入式
文章平均质量分 72
Mnnk
这个作者很懒,什么都没留下…
展开
-
pl2303.ko
PL2304驱动 /lib/modules/4.2.0-27-generic/kernel/drivers/usb/serial/下的pl2303.ko原创 2018-06-25 09:57:30 · 516 阅读 · 0 评论 -
S5P4418裸机开发(十三):GIC
GIC系列文章:arm GIC介绍之一arm GIC介绍之二GIC由Distributor和CPU interface组成;Group0,Secure accesses,FIQ驱动Group1,Non-secure accesses,IRQ驱动VIC和GIC:VIC可以用传统单片机中断的思维去理解,GIC应该从Linux系统的角度去考虑。VIC中外设的中断号n 对应到GIC中是 ...原创 2018-10-02 23:04:48 · 928 阅读 · 0 评论 -
S5P4418裸机开发(十):Undef异常处理
上一帖总结了异常中断处理过程,当未定义指令异常发生时,PC最终会跳到0xFFFF0204,该地址上也是一条跳转指令。为了执行我们自定义的异常处理函数,让这条指令跳向我们的函数即可;接着 5_lds 写;在启动文件中加入一条未定义指令;.text.global _start_start: // 地址 0x42C00000 bl bss_init ...原创 2018-09-21 22:30:09 · 626 阅读 · 0 评论 -
S5P4418裸机开发(十四):TIMER
概述S5P4418,5个定时器Timers 0, 1, 2, and 3有连接GPIO,可以输出PWM时钟源PCLK,2nboot默认配置为200MHzTimers 0 and 1共享一个预分频器,Timers 2, 3, and 4共享另外一个…相关寄存器寄存器功能TCFG0死区,预分频TCFG1DMA,分频TCON自动重装载,手动更新,...原创 2018-10-05 13:26:33 · 736 阅读 · 0 评论 -
S5P4418裸机开发(十二):IRQ (按键中断) & 串口中断
S5P4418 64个中断源,按键的GPIO口是GPIOB28-30,中断号为54;Interrupt Controller相关寄存器寄存器功能VICIRQSTATUSR,相关位为1表示该IRQ中断发生且未被屏蔽VICFIQSTATUSR,相关位为1表示该FIQ中断发生且未被屏蔽VICRAWINTRR,表示屏蔽之前的中断状态VICINTSELECT...原创 2018-09-29 18:31:32 · 1701 阅读 · 0 评论 -
S5P4418裸机开发(十五):SDIO
参考SD4.0协议标准完整版[1-6章中文翻译]sd 协议解析S5P4418,3个SD/MMC控制接口。SDIO协议3.0。寄存器寄存器名功能留坑···原创 2018-10-18 18:23:05 · 572 阅读 · 1 评论 -
S5P4418裸机开发(十六):ache & MMU
指令cache原创 2018-11-09 23:37:23 · 629 阅读 · 0 评论 -
RT-Thread移植到S5P4418(一):调度器
S5P4418,Cortex-A9系列。结合了 RT-Thread内核实现(六):时间片 和 S5P4418裸机开发(十四):TIMER 的代码。SysTick & PendSVRT-Thread实现线程调度两个比较核心的中断。SysTick更新系统时基。PendSV做上下文切换。SysTick在S5P4418中用timer0代替。周期10ms,注意中断服务函数要清除中断标志位...原创 2019-01-28 20:25:27 · 805 阅读 · 0 评论 -
RT-Thread移植到S5P4418(三):静态内存池管理
内存堆管理器可以分配任意大小的内存块,非常灵活和方便。但其也存在明显的缺点:一是分配效率不高,在每次分配时,都要空闲内存块查找;二是容易产生内存碎片。为了提高内存分配的效率,并且避免内存碎片,RT-Thread 提供了另外一种内存管理方法:内存池(Memory Pool)。内存池是一种内存分配方式,用于分配大量大小相同的小内存块,它可以极大地加快内存分配与释放的速度,且能尽量避免内存碎片化。此外...原创 2019-02-21 16:49:55 · 704 阅读 · 0 评论 -
RT-Thread移植到S5P4418(二):动态内存管理
内存管理在RT-Thread中分为动态内存管理和静态内存管理。静态的又称为内存池管理,动态的称为内存堆管理。内存堆:官方提供了三种管理方式。小内存管理。申请时在一块大的、连续的内存中按需求分割出相匹配的小内存块;释放时,归还给堆管理系统。每个内存块都包含一个管理用的数据头,通过双向链表来管理使用块和空闲块。slab 管理算法。TODO!memheap 管理算法。适用于系统含有多个地址...原创 2019-02-17 19:19:21 · 901 阅读 · 0 评论 -
RT-Thread移植到S5P4418(五):线程通信
RT-Thread实现了三种线程间通信方式,邮箱(mailbox)、消息队列(messagequeue)、和信号(signal)。邮箱邮箱中的每一封邮件只能容纳固定的 4 字节内容。任何线程都可以发送或接受邮件消息。邮箱控制块struct rt_mailbox{ struct rt_ipc_object parent; rt_uint32_t* msg_pool; ...原创 2019-03-10 23:21:50 · 825 阅读 · 0 评论 -
RT-Thread移植到S5P4418(四):线程同步
同步是指按预定的先后次序进行运行,线程同步是指多个线程通过特定的机制(如互斥量,事件对象,临界区)来控制线程之间的执行顺序,也可以说是在线程之间通过同步建立起执行顺序的关系,如果没有同步,那线程之间将是无序的。线程的同步方式有很多种,其核心思想都是:在访问临界区的时候只允许一个 (或一类) 线程运行。RT-Thread实现了三种线程间同步方式,信号量(semaphore)、互斥量(mutex)...原创 2019-02-26 14:36:22 · 366 阅读 · 0 评论 -
S5P4418裸机开发(九):异常中断处理概述
ARM体系结构中对异常中断的一些概述七种异常CPU对异常的响应过程从异常中断中返回SWI或Undef:发生该异常时,PC值未更新,它指向当前指令后面的第2条指令,进入中断时,CPU将(PC-4)保存到lr_mode中,(PC-4)指向的是当前指令的下一条指令;异常处理完后应返回当前指令的下一条指令;即MOV PC, LRIRQ或FIQ:通常,CPU执行完...原创 2018-09-20 22:49:30 · 965 阅读 · 0 评论 -
S5P4418裸机开发(十一):FPU使能 & SWI异常
FPU使能心血来潮想优化一下UART初始化部分,之前是固定的115200,改成根据传入的参数值来设定波特率;// 设置UART0时钟,一般设置为10MHz UARTCLKENB |= (1 << 2); UARTCLKGEN0L &= ~((3 << 2) | (0xFF << 5)); p = (PLLSETREG0 &am原创 2018-09-23 13:43:03 · 577 阅读 · 0 评论 -
S5P4418裸机开发(一):相关工具准备
交叉编译器摘自官方wiki:http://wiki.friendlyarm.com/wiki/index.php/Smart4418/zh 首先下载并解压编译器: git clone https://github.com/friendlyarm/prebuilts.git sudo mkdir -p /opt/FriendlyARM/toolchain sudo ...原创 2018-08-25 23:39:45 · 1707 阅读 · 0 评论 -
S5P4418裸机开发(二):LED点灯
板子原理图:Smart-1608 S5P4418芯片手册:Pi2_SOC_DS_0.1.pdf查看原理图:PDF中搜LED; 以LED1为例,连接引脚是W24(GPIOB12),低电平点亮;芯片手册第15.3.2节,对引脚输出模式的描述; 大致意思是配置GPIOx. Alternate Function Select register(GPIOxAL...原创 2018-08-27 16:31:00 · 2194 阅读 · 3 评论 -
S5P4418裸机开发(四):按键(轮询模式)点灯
底板按键原理图:三个按键,按下是引脚为低电平; 使用K1,K2来分别控制LED1,LED2; 按键引脚要配置为输入模式;查看用户手册对GPIO输入模式的说明:GPIOxALTFN寄存器选择GPIO功能;GPIOxOUTENB相应位设置为0,表示输入模式;GPIOxPAD查询引脚高低电平;轮询模式配置上面三个寄存器就好,GPIOxINTENB,GPIOxDETMODE...原创 2018-08-30 17:02:12 · 1309 阅读 · 0 评论 -
S5P4418裸机开发(三):运行裸机程序
参考: ①.S5P4418启动镜像分析 ②.S5P4418裸机编程的实现(替换2ndboot) ③.【NanoPi2试用体验】-6 S5PV4418的启动过程分析-(结合原理图&datasheet) ④.【NanoPi2试用体验】-7 在 pi2上用裸机程序点亮LED的原理详细分析与实验学习了大牛们的操作,自己再整理一下;系统内存分布:内部ROM(IROM,20...原创 2018-08-27 23:56:38 · 1666 阅读 · 1 评论 -
嵌入式基本概念
. Uboot 和 BootLoader BootLoader:引导程序,在嵌入式linux中,没有BIOS,而是直接从flash中运行,来装载内核。它可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备。 Uboot:是BootLoader中的一种. NorFlash、NandFlash和eMMC Nor:NOR地址线和数据线分开,来...原创 2018-08-23 20:51:47 · 722 阅读 · 0 评论 -
Makefile使用细节
变量及通配符A := $(C) # 即时变量,此时C未定义,A为空B = $(C) # 延时变量,用到B时再确定具体的值C = abcC ?= 123 # C不是第一次定义,被忽略C += 789D ?= xyz # D是第一次定义all: @echo A = $(A) @echo B = $(B) @echo C = $(C) ...原创 2018-08-31 12:51:11 · 419 阅读 · 0 评论 -
S5P4418裸机开发(五):时钟
还没理解透,留坑原创 2018-09-04 21:59:08 · 1497 阅读 · 0 评论 -
S5P4418裸机开发(六):串口初试,简单回显(轮询模式)
手册上对S5P4418串口的概述UART0 ~ 4,五个串口可编程FIOFUART0,1,2支持DMAIrDA(红外数据组织)SIR ENDEC…UART配置基本流程TX引脚配置为输出模式,RX引脚配置为输入模式配置UART时钟配置波特率,数据位,停止位,校验位等使能以UART0为例,GPIO配置...原创 2018-09-05 16:49:06 · 2006 阅读 · 5 评论 -
S5P4418裸机开发(七):SDRAM
Smart4418 板载 1GB DDR3 SDRAM; 芯片型号 K4B4G1646D-BCK0; 16bit位宽,单片容量256Mbit * 16 = 4Gbit,即 512Mbyte; 板载两块,U6,U7;SDRAM基本原理: ARM 内存SDRAM 讲解 DDR SDRAM基本原理详细介绍 SDRAM-高手进阶,终极内存技术指南-完整进阶版SDRAM的全称是...原创 2018-09-15 22:38:44 · 566 阅读 · 0 评论 -
S5P4418裸机开发(八):lds链接脚本的使用
前几个程序编译链接时, 会使用ld -Ttext=0x42C00000指定.text段的起始地址; 以串口回显的工程为例,查看编译后的文件大小; 再看看.elf文件的段表,arm-linux-objdump -h LMA: load address,加载地址; VMA: virtual address,在RAM中的运行地址; Loader,装载器的作用: 1。...原创 2018-09-17 00:05:34 · 955 阅读 · 0 评论 -
S5P4418裸机开发(零):小问题记录
一、裸机没有除法和取模运算针对ARM裸机环境,当除数是变量是时,报错信息:undefined reference to `__aeabi_uidivmod'undefined reference to `__aeabi_uidiv'参考:交叉编译之__aeabi_uidiv问题 ARM芯片没有实现除法的硬件结构,因此是采用软件去实现除法。编译器支持软浮点,软浮点的实现是在li...原创 2018-09-10 23:55:50 · 560 阅读 · 0 评论 -
Linux驱动开发(一):字符设备
**目的:**实现最简单的点灯操作。Linux一切皆文件,应用程序访问某个物理设备(文件)时,首先通过open, read, write等库函数调用系统调用接口(System call interface),系统调用通过传进来的系统调用号操作虚拟文件系统(Virtual File System),VFS再根据目标文件类型去找相应的驱动程序。应用程序和VFS之间的接口是系统调用,而VFS与文件系...原创 2019-04-09 22:06:58 · 308 阅读 · 0 评论