- 博客(14)
- 收藏
- 关注
原创 Linux驱动学习---互斥和竞争
摘要 本文介绍了Linux驱动开发中处理竞态的几种主要方法:自旋锁、seqlock和RCU。自旋锁适用于不可休眠代码,在不同系统配置下行为不同但需按多核标准使用。seqlock实现无锁读,写入者优先,读取者通过版本号验证数据一致性。RCU通过读取-复制-更新机制实现高效读取,但仅适用于读多写少场景。文章还对比了睡眠等待型(信号量/互斥锁)、原地打转型(自旋锁)和无锁型(kfifo/seqlock)同步机制的特点及适用场景,强调正确使用锁的重要性以避免死锁。
2026-05-19 22:05:54
673
原创 Linux驱动开发学习---移植uboot、内核及根文件系统
这里使用的开发板是正点原子IMX6ULL的mini板,使用的LCD是4.3寸800x480的。移植是为了后续的驱动开发,这里就不分析代码了,直接用正点原子给的代码移植即可。
2025-08-10 23:10:44
939
原创 正点原子imx6ull裸机学习---12、4.3寸触摸屏驱动以及pwm背光
看视频说4.3寸屏幕的触摸芯片是GT9147,但是无论怎么修改上电后的RST和INT时序,I2C地址一直是0x14(七位地址),还以为是RST和INT脚接了上拉电阻的原因。最无语的是,包括它视频例程中写的寄存器映射值也是对应GT1151,但文件命名是GT9147。我说怎么寄存器映射对不上,原来是GT1151Q的。仍然会继续进行坐标计算,并输出下降沿, 但不更新坐标信息区的内容。若主控一直未读走坐标,则。GT1151是基于I2C通信的,当有坐标数据时会触发中断,需要注意的是。,B站视频居然也没修改过来。
2025-07-27 13:41:28
805
原创 正点原子imx6ull裸机学习---11、SPI驱动MPU6500
这里使用mini板配置SPI,来驱动MPU6500,采用的是。尝试配置过硬件片选,很容易出问题,不建议使用硬件片选。软件片选可以支持更多的设备,而且配置简单。
2025-07-18 13:47:50
804
原创 正点原子imx6ull裸机学习---10、I2C实验驱动MPU6500
由于我使用的是mini板,没有AP3216C,又刚好手头上有一个MPU6500,所以本次实验使用I2C驱动MPU6500,并在LCD屏幕上实时显示。我看视频中有些地方逻辑不是很明白,所以自己照着手册改了一版I2C程序。
2025-07-12 00:01:43
655
原创 正点原子imx6ull裸机学习---9、lcd实验
屏幕接口关键信号线如下:RGB LCD 一般有两种驱动模式:DE 模式和 HV 模式,这两个模式的区别是 DE 模式需要用到 DE 信号线,而 HV 模式不需要用到 DE 信号线,在 DE 模式下是可以不需要 HSYNC 信号线的,即使不接 HSYNC 信号线 LCD 也可以正常工作。屏幕一帧图像的扫描图如下:屏幕每次发送一行或一帧图像时需要一定的反应时间,其中VBP(tvb)、HBP(thb)、VFP(tvf)、HFP(thf)都是等待反应的时间,保证图像有效显示。
2025-06-27 22:37:45
1526
原创 正点原子imx6ull裸机学习---7、定时器中断实验
EPIT定时器结构图如下:1、EPIT是32位的一个向下计数器。2、EPIT有三个时钟源,本实验选择选择ipg_clk(前面时钟实验已将其设置为66MHz)。3、可以对时钟源进行分频,12位的分频器,0~4095分别代表1~4096分频。
2025-06-23 21:38:03
569
原创 正点原子imx6ull裸机学习---6、外部中断
其中Cortex-A 内核 CPU 的所有外部中断都属于这个 IRQ 中断,当任意一个外部中断发生的时候都会触发 IRQ 中断,并通过中断ID来区分不同的中断。其中中断ID在imx6ull中,一共有160个,ID号分别是0~159,
2025-06-18 11:36:52
1763
原创 正点原子imx6ull裸机学习---5、时钟配置
IMX6ULL的时钟源有两个:24M外部晶振和32.768K晶振,其中32.768K晶振用于内部RTC模块使用。24M外部晶振用于内核和各种外设使用,是时钟树的根源。
2025-06-14 21:44:54
831
原创 正点原子imx6ull裸机学习---3、Cmake构建BSP工程
二、CMakeLists.txt文件编写。imx6ul_bsp.cmake文件。三、编写run.sh执行脚本。
2025-06-11 22:20:49
367
原创 正点原子imx6ull裸机学习---4、led灯、蜂鸣器、按键实验
模式时),启用 SION 可以确保你也能读取到输出驱动后的实际引脚状态(即“回读”功能)。但在输出模式下,回读的通常是输出缓冲器的状态,不一定反映外部引脚的真实状态(如果外部电路很强)。_CTL_PAD_GPIO1_IO03是设置GPIO1_IO03的电气属性。_CTL_PAD_GPIO1_IO03的bit3~0设置为0101=5,这样GPIO1_IO03就复用为GPIO。设置GPIO1_DR寄存器的bit3,为1表示输出高电平,为0表示输出低电平。消除输入信号抖动(如按键抖动),在噪声环境中稳定信号。
2025-06-11 13:09:40
435
原创 正点原子imx6ull裸机学习---2、C语言环境设置并采用cmake构建
Sp可以指向内部RAM,也可以指向DDR,我们将其指向DDR。处理器栈增长方式,对于A7而言是向下增长的(栈指针地址是减小的,故不能设置sp为0x80000000),设置sp指向0x80200000。需要在脚本中手动删除,并且cmake中会指定start.S和main.c的链接顺序,无需再脚本中再指明。在操作系统上开发GCC默认链接系统提供的脚本,而裸机开发则需要自己设定。.note.gnu.build.-id:标识可执行文件的构造信息。链接脚本描述了要连接的文件,以及链接顺序,和链接首地址。
2025-06-10 20:54:19
319
原创 正点原子imx6ull裸机学习---1、从USB口进行代码烧录
本次学习的开发版是正点原子的,由于没有SD卡的缘故,在进行裸机开发学习时采用来USB烧录代码。按如下步骤进行。
2025-06-06 19:36:00
943
8
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅