自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 资源 (3)
  • 收藏
  • 关注

转载 Linux学习——platform机制实现驱动层分离

1.输入子系统涉及到的分层概念如上图所示,分层就是将一个复杂的工作分成了4层, 分而做之,降低难度,每一层专注于自己的事情, 系统只将其中的核心层和事件处理层写好了,所以我们只需要来写驱动层即可,接下来我们来分析platform机制以及分离概念2.分离概念1.bus结构体:即platform总线是个全局变量,为platform_bus_type,属于虚拟设备总线,通过这个总线将...

2019-10-29 16:15:20 308

原创 Linux学习——同步、互斥、阻塞

若同一时刻只能有一个应用程序打开驱动程序,可以使用:1.原子操作原子操作是指在执行过程中不会被别的代码路径所中断的操作。常用代码:atomic_t v = ATOMIC_INIT(0); // 定义原子变量v并初始化为0atomic_read(atomic_t *v); // 返回原子变量的值void atomic_inc(atomic_t *v); // 原子变量...

2019-10-16 21:29:17 161

原创 Linux学习——异步通知机制

之前使用的中断+poll机制都是应用程序主动去调用read函数,有另外一种方法就是当按键按下时驱动触发应用程序取读取键值,该方法叫做异步通知。进程之间要发信号需要明确:①注册一个信号处理函数(在应用程序里)②哪个进程发信号(驱动程序)③哪个进程接收信号(应用程序,应用程序要告诉驱动程序PID即应用程序的进程号)④怎么发送信号(驱动程序里使用)1.代码2.用到的库函数...

2019-10-15 19:52:47 337

原创 Linux学习——poll机制

1.poll机制在上一节的程序中,用的是阻塞的方式,即当有按键按下时,中断服务程序唤醒read进程,然后read函数继续执行,否则就永远休眠下去,这个固然OK,但是有时候需要用到一个节点,当超过这个时间是,节输出错误信息或则是不等待了,继续执行执行其他程序去2.对sys_poll( )函数的分析asmlinkage long sys_poll(struct pollfd __user...

2019-10-11 22:20:14 379

原创 Linux学习——Linux的异常处理

在Linux内核的配置文件.config文件中可以知道Linux内核使用ARM架构CPU的异常向量基址为0xFFFF0000。1.内核对中断的处理流程arch/arm/kernel/entry-armv.S__vectors_start:@异常向量 swi SYS_ERROR0 b vector_und + stubs_offset ldr pc, .LCvswi + stub...

2019-10-09 22:46:02 504

原创 Linux学习——查询方式的按键驱动

1.套路1.搭建一个框架,具体为:a.定义结构体second_drv_fops:static struct file_operations second_drv_fops = { .owner = THIS_MODULE, /* 这是一个宏,推向编译模块时自动创建的__this_module变量 */ .open = second_drv_open...

2019-10-08 20:28:17 173

原创 Linux学习——LED字符设备驱动

1.应用程序的调用应用层去调用一些接口函数时,会进入内核,驱动也是内核的一部分。以C库函数中的open函数为例,open函数的实现绘制行一条swi val指令,执行之后会引发异常:内核的第一层:内核的系统调用接口。系统调用接口会根据发生异常的原因调用不同的异常处理函数,比如sys_open函数;内核的第二层:虚拟文件系统。比如sys_open函数内核的第三层:驱动。具体操作硬件的函...

2019-09-29 22:14:38 221

原创 Linux学习——根文件系统

通过之前的内容知道了u-boot是用来启动内核的,而内核会挂接根文件系统用以启动应用程序,那内核是怎样启动第一个应用程序的?1.内核启动第一个应用程序①在init_post( )中,打开dev/console设备,而后调用sys_dup(0)、sys_dup(0),即执行复制操作dev/console:printf( )、scanf( ) 都是从该文件里输出或输入的,dev/conso...

2019-09-29 20:52:07 239

原创 Linux学习——初浅的Linux内核分析

1.配置内核文件先把linux-2.6.22.6.tar.bz2以及补丁文件linux-2.6.22.6_jz2440.patch上传到服务器解压缩并打补丁,然后在arch/arm/config找到相似的配置文件:s3c2410_defconfig,然后执行makes3c2410_defconfig,最后执行make menuconfig修改配置项之后编译内核时,执行make uImag...

2019-09-26 20:34:06 255

原创 Linux学习——ARM芯片时钟体系

跟着视频学习了ARM芯片时钟体系,信息量有点大,做个笔记梳理梳理。1.时钟体系的结构图 有很多外设,一些工作在AHB总线,一些工作在APB总线CPU工作在FCLK,AHB总线工作在HCLK,APB总线工作在PCLK根据数据手册,我们可以知道FCLK、HCLK、PCLK的时钟频率,时钟源由12MHz的晶振经过锁相环PLL得到这些时钟频率2.时钟示...

2019-09-05 16:35:13 573

原创 Linux学习——GCC编译器常用选项

在之前的文章有提到在Ubuntu上写代码,编译时需要用到GCC编译器。今天跟着视频学习了GCC编译器的常用选项。1.编译过程比如,在Ubuntu终端使用命令vi hello.c,编写了一个Hello World程序,而后使用命令gcc -o hello hello.c生成了一个可执行文件hello,由.c到.exe,经过了预处理->编译->汇编->链接四个过程。2.常...

2019-09-03 20:09:33 540

原创 Linux学习——总结ARM裸机开发步骤

本文仅介绍一些基础概念。我们常用的开发平台是在x86,这个是Intel推出的架构。在x86平台上的开发步骤,不管是什么软件,无外乎建立工程->写代码->保存->编译->运行,这个是Windows程序。而如果我们在x86平台上是用虚拟机运行ubuntu程序,开发步骤是写代码->保存->编译->运行。与Window程序上有所不同的是编译器,Windows程...

2019-08-31 15:11:45 2397

原创 Linux学习——Linux进阶命令

今天学习了Linux的部分进阶命令,做个总结。1.find命令详解目的:查找符合条件的文件1)在哪些目录中查找2)查找的内容格式: find 目录名 选项 查找条件举例:1)find ~/Documents -name "test1.txt"说明: a)~/Documents指明了查找的路径 b)-name表明以名字来查找文件 ...

2019-08-30 19:52:09 320 1

原创 Linux学习——VI编辑器

1.从txt文本编辑器开始从Windows的txt文本编辑器来看,一个编辑器应该具有以下功能:1)打开文件、新建文件、保存文件2)光标移动3)文本编辑4)(多行间|多列间)复制、粘贴、删除5)查找和替换Linxu上的VI编辑器一样也具有这几种功能。vi编辑器有三种模式:1)一般模式(光标移动、复制、粘贴、删除)2)编辑模式(编辑文本)3)命令行模式(查找和替换)注意:...

2019-08-28 22:15:47 104

原创 Linux学习——Linux常用命令

1.终端输入命令到执行的过程:在终端中输入字符串并回车的过程:1. 回车之后shell应用程序通过终端接收字符串命令2. shell根据第1个字符串去环境变量PATH所指定的目录中找到同名的应用程序3. 然后执行它我们可以设置PATH环境变量添加我们的目录:export PATH=$PATH:/my/dir2.绝对路径和相对路径绝对路径:从根目录一级级找下去,需要填写完整路...

2019-08-27 22:25:24 305

原创 基于有限状态机与STM32实现按键扫描

一开始学习单片机编程时,都是用十分简单的软件延时实现按键检测。以stm32为例,uint8_t key_scan(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin){ if( GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == ON ) { while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin...

2019-07-14 01:13:59 2794 2

原创 HT32F52352学习笔记之六

花了好多的时间算是把软件I2C协议的代码写出来了。然后进阶,把HT32F5232利用I2C读写AT24C02的程序写出来了。这个过程中很坑的地方就是数据线SDA要一直在输入和输出这里切换,因为这个HT32输入时需要输入使能,就很麻烦。鉴于I2C之前有学过,这里就不贴出来关于I2C的详细解释了。另外在调试时有用到串口,详见学习笔记之五https://blog.csdn.net/Unlimited_B...

2019-02-02 14:25:08 4400 11

原创 HT32F52352学习笔记之五

经过一小段时间的奋战,终于是把串口通信的相关代码编写并调试完成了。可以实现接收中断、发送数据、经过重定向的printf、puts、getchar、scanf都可以通过串口的方式实现输出输入。另外,由于使用的是HT32F52352的最小系统板,在发送数据时可不外接CH340模块,但是要实现接收数据一定一定要外接CH340模块,我也不知道为什么会这样,真的服了,被这个不需要外接CH340模块就能发送数...

2019-01-30 16:23:22 5495 10

原创 HT32F5232学习笔记之四

今天编写的是利用系统计时器SysTick编写us级精确延时函数和ms级精确延时函数。参考了一下以前写的STM32的SysTick的程序完成了此项工作,就是初始化不太一样,核心代码还是一样的。另外,由于STM32有的是Cortex-M3,且选择是的时钟是72MHz,而HT32F52352用是Cortex-M0,且选择的是外部参考时钟HSI(8MHz),因此在程序内部相关库函数的形参值设定的也不一样。...

2019-01-28 22:07:00 2799 2

原创 HT32F52352学习笔记之三

接着学习F52352芯片。这次写的是触发外部中断控制LED亮灭的程序。这个外部中断有15个中断号,即EXTI0-15,还是很多的。初始化过程中需要配置EXTI 来源选择寄存器 0 – ESSR0或是EXTI 来源选择寄存器 1– ESSR1选择中断来源。这个是一一对应的关系,比如选着了GPIOA的引脚4,那么就同时选择了EXTI4中断,同时中断服务函数也是要写EXTI4。相关引脚也需要复用模式才能...

2019-01-28 02:07:24 6245 5

原创 HT32F52352学习笔记之二

参考之前自己写的STM32的程序中利用按键控制LED亮灭完成了HT32F52352版的按键控制,经过昨天写点亮LED的程序觉得顺手多了。这个程序是在之前的LED(https://blog.csdn.net/Unlimited_Bit/article/details/86651974)的基础上加入了按键控制,在初始化过程中与STM32不同的是STM32只需选择浮空输入模式即可,而HT32F52352...

2019-01-26 15:32:42 5777 4

原创 HT32F52352学习笔记之一

第一次尝试点亮一个LED,花了不少时间在找官网资料,终于算是完成了点亮LED这个大项目了。用的是最小系统板上附带的LED,最小系统板型号是ESK32-30501v2.0。主要的代码:#include "led.h"static void LED_CKCU_Config(){ CKCU_PeripClockConfig_TypeDef CCLOCK; CCLOCK.Bit...

2019-01-25 21:15:49 7363 17

k7project(定时器中断).rar

HT32F52352的定时器中断,已配置好相关参数,具体的见代码,请测可用!

2020-03-27

k5project(串口通信).rar

HT32F52352的串口通信,使用串口1与电脑通信,亲测可用。!

2020-03-27

HT32F52352工程模板

HT32F52352工程模板,自己建立的,亲测可用,可以配合本人的其他关于HT32F52352的博客使用。

2019-03-22

空空如也

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

TA关注的人

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