自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 Verilog与VHDL语法比较

可从整体框架上进行比较,比较如下:

2024-09-20 20:41:57 315

原创 Verilog中例化文件

2024-09-20 07:44:21 130

原创 Verilog中非阻塞赋值与阻塞赋值

一般用于组合逻辑。这种方式是马上执行,也就是说,执行找下一条语句时,b已经等于a。

2024-09-04 06:36:04 601

原创 Verilog中编写注意事项及代码风格

(1)大小写敏感;(2)编译指令中的前导符号;

2024-09-03 22:20:00 671

原创 Verilog中的编译指令

(1)用来定义参数,功能和parameter类似(2)定义一个名为name的变量,编译的时候将statements的内容包含进来,与条件生成语句类似若使用“或门”,则。

2024-09-03 20:32:17 233

原创 FreeRTOS(二)

假如使用全局变量,在任务1中,当执行到第二步时,目前r0的数据还没写入a中,被更高优先级的任务2打断,任务2执行了全部过程,此时a=1,再切换为执行任务一,然后r0=1赋给a,这样会造成数据的浪费。在任务A写队列的时候,关中断了,首先中断函数不能打断,其他任务也没办法执行,没办法进行任务调度,因为任务调度是由PendSV引起的,PendSV中断优先级是最低的,在这里中断关掉了,PendSV不可能触发,所以任务A在写的时候,任务B是没办法打断的,在队列中可以存储数量有限、大小固定的数据。

2024-08-30 10:43:27 858

原创 FreeRTOS(一)

/初始化列表//初始化列表项//列表末尾插入列表项//列表插入列表项//列表移除列表项参考文档:《FreeRTOS开发指南》第七章–“FreeRTOS列表和列表项”。列表项的插入:将列表项插入列表中,按照升序的方式。函数vListInsertEnd();是将待插入的列表项插入到列表pxIndex指针指向的列表项前面;无序的插入方法!

2024-08-30 10:43:01 978

原创 I.MX6U嵌入式Linux Platform设备驱动开发---块设备驱动

块设备驱动是Linux 三大驱动类型之一。

2024-08-30 10:35:15 338

原创 I.MX6U嵌入式Linux Platform设备驱动开发(6)I2C驱动

裸机驱动AP3216C:需要写2部分的驱动:(1)I2C主机驱动:bsp_i2c.c 和 bsp_i2c.h -------> I.MX6U的接口驱动(2)I2C设备驱动:bsp_ap3216c.c 和 bsp_ap3216c.h-------> AP3216C 这个 I2C 设备驱动文件。这个正好符合 Linux 的驱动分离与分层的思想,因此 Linux内核也将 I2C 驱动分为两部分:(1)I2C总线驱动:就是 SOC 的 I2C 控制器驱动,也叫做 I2C 适配器驱动;

2024-08-30 10:34:30 404

原创 I.MX6U嵌入式Linux Platform设备驱动开发(5)RTC驱动

RTC 设备驱动是一个标准的,应用程序通过 open、release、read、write 和 ioctl等函数完成对 RTC 设备的操作。Linux 内核将 RTC 设备抽象为 rtc_device 结构体,因此 RTC 设备驱动就是申请并初始化rtc_device,最后将 rtc_device 注册到 Linux 内核里面。用一个操作集合(结构体:rtc_device)来表示RTC 设备的操作,此结构体定义在 include/linux/rtc.h 文件中。

2024-08-30 10:33:35 872

原创 I.MX6U嵌入式Linux Platform设备驱动开发(3)INPUT子系统

和 pinctrl、gpio 子系统一样,都是 Linux 内核针对某一类设备而创建的框架。input核心层会帮我们注册input字符设备驱动。既然内核已经帮我们写好了input驱动,那我们要干啥呢?需要我们去完善具体的输入设备,完善输入设备的时候就要按照input子系统驱动框架的要求来。input 核心层会向 Linux 内核注册一个字符设备,大家找到 drivers/input/input.c 这个文件,input.c 就是 input 输入子系统的核心层。

2024-08-30 10:30:54 315

原创 I.MX6U嵌入式Linux Platform设备驱动开发(2)自带LED和杂项驱动

所有的 MISC 设备驱动的主设备号都为 10,不同的设备使用不同的从设备号。MISC 设备会自动创建 cdev,不需要像我们以前那样手动创建。需要向 Linux 注册一个 miscdevice 设备,miscdevice是一个结构体,定义在文件 include/linux/miscdevice.h 中。在miscdevice这个结构体中,定义一个 MISC 设备,以后我们需要设置 minor、name 和 fops 这三个成员变量。

2024-08-30 10:25:35 1005

原创 I.MX6U嵌入式Linux Platform设备驱动开发(1)初识驱动

需要写两部分:platform_driver, platform_device.打开leddevice.c文件,保留头文件,剩余的全删了。

2024-08-30 10:23:43 749

原创 I.MX6U嵌入式Linux驱动开发(13)异步通知实验

Linux 提供了异步通知这个机制来完成:驱动程序能主动向应用程序发出通知,报告自己可以访问,然后应用程序在从驱动程序中读取或写入数据。阻塞非阻塞与异步通知的区别:阻塞/非阻塞:需要应用程序主动的去查询设备的使用情况。通过阻塞方式访问的话应用程序会处于休眠态,等待驱动设备可以使用,非阻塞方式的话会通过 poll 函数来不断的轮询,查看驱动设备文件是否可以使用。异步通知:通过主动向应用程序发送信号的方式来报告自己可以访问了,应用程序获取到信号以后就可以从驱动设备中读取或者写入数据了。

2024-07-24 22:30:22 721

原创 I.MX6U嵌入式Linux驱动开发(12)阻塞与非阻塞IO

阻塞:当资源不可用的时候,应用程序就会挂起。当资源可用的时候,唤醒任务。应用程序使用open打开驱动文件,默认是阻塞方式打开。非阻塞:当资源不可用的时候,应用程序轮询查看,或放弃。会有超时处理机制。应用程序在使用open打开驱动文件的时候,使用O_NONBLOCK。在Ubuntu中输入:man 2 open 可以查询open的用法。

2024-07-24 22:29:01 993

原创 I.MX6U嵌入式Linux驱动开发(11)Linux中断实验

(1)先知道你要使用的中断对应的中断号。(2)再申请request_irq,此函数会激活中断。(3)如果不用中断了,那就释放掉,使用free_irq。(4)中断处理函数irqreturn_t (*irq_handler_t) (int, void *)。(5)使能和禁止中断。

2024-07-24 22:28:28 544

原创 I.MX6U嵌入式Linux驱动开发(10)内核定时器

HZ表示系统节拍率。采用 100Hz 的节拍率,时间精度就是 10ms,采用1000Hz 的话时间精度就是 1ms,精度提高了 10 倍。高节拍率会导致中断的产生更加频繁,频繁的中断会加剧系统的负担,1000Hz 和 100Hz的系统节拍率相比,系统要花费 10 倍的“精力”去处理中断。Linux 内核使用全局变量 jiffies 来记录系统从启动以来的系统节拍数。

2024-07-24 22:26:57 735

原创 I.MX6U嵌入式Linux驱动开发(9)按键输入

先找到节点,再获取GPIO(of_get_named_gpio),GPIO的属性是:key-gpios,参数里面的索引是0,这个0是指第一条,1是指第2条,2是指第3条。请求这个GPIO,请求成功的话,设置为输入。应用程序读,最终体现到内核里面就是key_read()这个函数,,读的话,得有一个按键存放它的值,按键值是全局的,我们在key_dev结构体里面添加。在调用key_read()函数的时候,肯定读取按键值,看原理图,没有按下去的时候,key0是高电平,如果读取的为0,说明读取到了,按下去了。

2024-07-24 22:24:41 333

原创 I.MX6U嵌入式Linux驱动开发(8)互斥

通过原子操作、自旋锁、信号量和互斥体这四个实验来学习如何在驱动中使用这四种机制。

2024-07-24 22:23:09 594

原创 I.MX6U嵌入式Linux驱动开发(5)pintcl和gpio子系统实验

打开芯片参考手册,找到iomux,Linux内核源码,打开imxull.dtsi,搜索iomux有3个寄存器地址:IOMUXC SNVS寄存器、IOMUXC控制器、gpr控制器。打开板子对应的设备树文件,imx6ull-alientek-emmc.dts,搜索iomux。

2024-07-24 22:20:39 876

原创 I.MX6U嵌入式Linux驱动开发(4)设备树下led驱动实验

属性#address-cells 和#size-cells 都为 1,表示 reg 属性中起始地址占用一个字长(cell),地址长度也占用一个字长(cell)。获取设备树属性内容,使用函数of_find_node_by_path(),返回值保存到nd中。打开灯、关灯,这两种操作在dtsled字符设备操作集合中实现,在open、release中设置一下私有数据,重点是write函数中,实现对灯的控制。使用vscode打开5_dtsled,修改Makefile文件,将其修改为:dtsled.o。

2024-07-24 22:18:34 378

原创 I.MX6U嵌入式Linux驱动开发(4)设备树

在裸机驱动程序里,比如W25QXX、SPI,速度都是在.c文件中写死的,板级信息都写到.c文件中,导致linux内核臃肿。因此 将板子信息做成独立的格式,文件扩展名为.dts。一个平台或者机器对应一个.dts。一般.dts 描述板级信息(也就是开发板上有哪些 IIC 设备、SPI 设备等),.dtsi 描述 SOC 级信息(也就是 SOC 有几个 CPU、主频是多少、各个外设控制器信息等)。

2024-07-24 22:15:18 1664

原创 I.MX6U嵌入式Linux驱动开发(3)新驱动框架

Linux驱动开发

2022-12-22 14:06:28 193 1

原创 I.MX6U嵌入式Linux驱动开发(2)led实验

Linux下字符设备驱动开发

2022-12-20 17:17:16 294

原创 I.MX6U嵌入式Linux驱动开发(1)chrdevbase 字符设备驱动开发实验

字符设备驱动开发

2022-12-12 15:15:06 613

原创 I.MX6U嵌入式Linux驱动——系统移植之根文件系统构建

根文件系统的构建

2022-12-08 09:25:40 219

原创 I.MX6U嵌入式Linux驱动——系统移植之Linux 内核

Linux内核移植

2022-12-07 16:40:20 847

原创 I.MX6U嵌入式Linux驱动——系统移植之uboot

U-Boot移植

2022-12-07 14:47:27 874

原创 ubuntu安装软件

ubuntu安装vscode软件

2022-12-06 14:16:50 2616

原创 485调试

串口调试

2022-12-06 14:09:04 2143

原创 I.MX6U嵌入式Linux驱动——Ubuntu 系统入门篇

Linux驱动下的开发常用的命令

2022-12-06 13:39:09 326

空空如也

空空如也

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

TA关注的人

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