首页
学习
活动
专区
圈层
工具
发布

OpenHarmony 内核源码分析(字符设备篇) | 字节为单位读写的设备

也包括虚拟设备(不依赖于特定的物理硬件,仅是内核自身提供的模拟/虚拟功能). 例如:虚拟控制台是输入和输出设备。.../dev/null 空设备。也叫黑洞设备,任何写入都将被直接丢弃(但返回"成功");任何读取都将得到EOF(文件结束标志)。...NULL, /* poll */ #endif NULL, /* unlink */ }; // 注册/dev/mem...SPI读写: 从SPI设备读取或写入指定长度数据。SPI自定义传输:通过消息传输结构体执行任意读写组合过程。SPI设备配置:获取和设置SPI设备属性。...UART 串口通信有几个重要的参数,分别是波特率、起始位、数据位、停止位和奇偶检验位,对于两个使用 UART 串口通信的端口,这些参数必须匹配,否则通信将无法正常完成。

38610
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux系统驱动之使用GPIO模拟I2C的驱动程序分析

    资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 使用GPIO模拟I2C的驱动程序分析 参考资料: i2c_spec.pdf Linux文档 Linux-5.4\Documentation\devicetree\bindings...主芯片通过一根SDA线既可以把数据发给从设备,也可以从SDA上读取数据,连接SDA线的引脚里面必然有两个引脚(发送引脚/接受引脚)。...在9个时钟里, 前8个时钟由主设备发送数据的话,第9个时钟就由从设备发送数据; 前8个时钟由从设备发送数据的话,第9个时钟就由主设备发送数据。...使用GPIO模拟I2C的要点 引脚设为GPIO GPIO设为输出、开极/开漏(open collector/open drain) 要有上拉电阻 3.

    3.9K32

    Linux内核时钟系统和定时器实现

    Linux内核时钟系统和定时器实现 Linux 2.6.16之前,内核只支持低精度时钟,内核定时器的工作方式: 系统启动后,会读取时钟源设备(RTC, HPET,PIT…),初始化当前系统时间; 内核会根据...前面可以知道,hrtimer是基于事件的,不会周期性出发tick中断,所以为了实现周期性的tick中断(dynamic tick):系统创建了一个模拟 tick 时钟的特殊 hrtimer,将其超时时间设置为一个...当前内核同时存在新旧timer wheel 和 hrtimer两套timer的实现,内核启动后会进行从低精度模式到高精度时钟模式的切换,hrtimer模拟的tick中断将驱动传统的低精度定时器系统(基于时间轮..., (fd_set *) NULL, (fd_set *) NULL, &delay); } nanosleep: nanosleep()glibc的API是直接调用linux内核的...posix_timer进行实现,但glibc对POSIX timer进行了一定的封装,例如如果POSIX timer到期通知方式被设置为 SIGEV_THREAD 时,glibc 需要自己完成一些辅助工作,因为内核无法在

    4.2K30

    zephyr笔记 2.2.2 定时器

    1 前言 计时器是一个内核对象,它使用内核的系统时钟来度量时间的流逝。 当达到定时器的指定时间限制时,它可以执行应用程序定义的操作,或者它可以简单地记录到期并等待应用程序读取其状态。...计时器具有以下关键属性: duration,指定定时器到期前的持续时间,以毫秒为单位。它必须大于零。 period ,指定定时器到期后的时间间隔(以毫秒为单位)。它必须是非负的。...该功能由系统时钟中断处理程序执行。如果不需要到期函数,则可以指定NULL函数。 stop function,如果定时器在运行时过早停止,则执行停止功能。该函数由停止定时器的线程执行。...如果不需要停止功能,则可以指定NULL功能。 status,状态值,指示自从状态值上次读取以来定时器已经过期的次数。 定时器必须在使用前初始化。...如果线程需要测量执行操作所需的时间,它可以直接读取系统时钟或硬件时钟,而不是使用定时器。

    2K30

    技术猿 | 室外移动机器人组合的导航定位系统设计

    SCLK信号的第一个上升沿至少要有21ns的时间延迟,否则命令无法正确写入芯片; 3、8位的ADC读取命令之后,必须保持CS片选信号持续为低,再产生24位时钟信号输入,将24位的ADC结果读取出来(即一个命令字为...8位,但实际需要32个连续的时钟周期才能完整读取ADC结果); 4、对于PROM读取命令同ADC读取命令,一共需要24个连续的时钟周期完成,其中8位命令字输入,16位数据读出。...程序按照SPI逻辑关系使用上述的宏定义,可以在选定的IO端口产生SPI信号,并且可以灵活的控制每个CS有效期间的时钟数。使用GPIO模拟的SPI具有操作直观、灵活可变等优点。...相比较模拟得到的SPI,控制器上自带的SPI接口基本不占用控制器资源,发送和接收的移位、时钟信号的产生都交由内部SPI模块处理。...而GPIO模拟的SPI需要控制器不断对IO进行操作,因此会占用控制器处理时间。时钟信号也因对电平操作消耗机器周期,导致时钟信号速度有限。

    1.8K50

    RGMII接口调试使用VIO读取PHY寄存器值

    用VIO方法读取或配置PHY芯片的寄存器 在没有CPU的情况下,对PHY芯片中寄存器在线读取的最好办法使用VIO通过MDIO接口对PHY芯片中的寄存器进行读取。...具体方法可以查看本公众号之前文章: 一种动态调整RGMII接口时序的方法 Vivado进行FPGA调试“犯罪现场”,在仿真环境中重现方法 使用VIVADO中VIO模拟CPU接口进行在线寄存器读写调试(...RGMII接口都无法正常工作。...无法完美实现6802时间同步一文中就曾指出netFPGA就疑似存在此问题,由于抖动过大,多个端口无法实现6802同步); RGMII接口与GMII接口 在MAC核与PHY芯片的通信过程中,存在多种接口形式...(2)BUFIO 一种特殊的时钟buffer,该buffer独立于全局时钟之外,适合用作接收源同步数据,但需要之处的是,该buffer输出的时钟无法直接驱动逻辑资源,适合驱动IDDR等专用组件。

    5.5K22

    基于FPGA的图像边缘检测系统(一)-原理

    模拟摄像头就三根线(RGB),通过AD转换为数字信号,终端接收信号并解码,便能得到视频图像。...CMOS 摄像头,其实也是通过模拟采样, AD 转换,然后在经过 DSP 等信号处理, 最终得到 D[0…8]这几个摄像头数据接口。...3.2.2 I2C 时序 读取设计   读取比写入稍微复杂那么一点点儿, 因为在发送从机地址, 指定寄存器地址之后,还需要再次发送从机地址(末位置 1),才能读取制定寄存器的地址。...有点无法理解,就是如下“正常” 是手册得出的结果,但实际上是“实验”的结果。郁闷!! ? 时钟输入设置   这里直接使用了外部时钟,即 FPGA 给的 25MHz,如下: ? ?...PCLK 像素时钟设置   通过这个寄存器的配置,可以改变采样时钟,同时改变输出图像的大小, 不过我 FPGA 当然用了全屏最大,如下: ?

    1.2K10

    【译文】【第一章③】Mindshare PCI Express Technology 3.0

    1.4.9.2 并行PCI总线模型在66MHz以上时出现的信号时序问题 鉴于PCI总线上的实际负载以及信号渡越时间(signal flight times),PCI总线的时钟频率无法在66MHz上继续增加了...如果在66MHz的基础上进一步提高频率,那么总线上传输的信号将会因为无法及时到达接收端,无法在接收端被正确采样,从而导致传输失败。...1.5.3.3 事务属性(Transaction Attributes) 最后,我们来介绍一下PCI-X在每个事务开始时新加入的一个阶段,称之为属性阶段(如图 1‑16所示)。...这是因为强排序模型可以解决有相互联系的事务之间的依赖问题,例如对同一个位置先进行写入再进行读取,按照强排序模型就可以使得读取操作读取到写入后的正确数据,而不是写入前的旧数据。...图 1‑19源同步时钟模型 需要再次强调的是,这种非常高速的信号时序使得共享总线模型无法被使用,它只能被设计为点对点的传输形式。因此,想要增加更多的设备就需要更多的Bridge来产生更多的总线。

    1.5K10

    STM32通信模拟SPI

    当CPOL=0,即空闲时为低电平,从低电平变为高电平再变为低电平,第二个时钟边沿(下降沿)即进行采样。 有了以上基础知识,基本可以想象出如何使用GPIO模拟SPI通信时序。...当纸有内容时(bit=0),这时往纸上写东西只能让数据越乱,也就无法正常写数据。此时需要橡皮檫,进行擦除操作,将有内容的纸(bit=0)变为白纸(bit=1),使得以后可以重新写入数据。...最低位,8次循环后,read_data将高位在前; – 41行:拉低时钟,即空闲时钟为低电平; – 44~49行:拉高时钟,此时从设备会发送数据,主机稍微延时一会,再读取MISO电平,得知传入数据;...52行:最后SPI读取完后,拉低时钟,进入空闲状态; 前面提到SPI传输可以看作一个虚拟的环形拓扑结构,即输入和输出同时进行。...,即空闲时钟为低电平; – 21行:根据temp值,设置MOSI引脚的电平; – 23行:拉高时钟,此时从设备会读取MOSI的数据,并写数据到MISO; – 25~28行:读取MISO上的数据,保存到当前

    1.8K20

    ADALM1000-模拟,数字转换系统设计

    为了从数字连接的设备中获得模拟输出,需要将波形的二进制表示转换为模拟近似值。...确实 使用一个单独的时钟线来指定数据有效的时刻。通过同步线触发,交替传输随后的24位数据字。 通过锁存线触发将存储在设备内存中的数据字转换为模拟电压输出。...RSC(Read/Write Spanning Conversion):跨越转换周期进行读取/写入。 读取的状态有三种。...SCK:串行时钟信号,用于数据的同步传输。 上电阶段 在上电后的最初几次读写周期(图中第一个“Phase n”),ADC 的转换结果是不确定的(undefined)。...CFG 数据通过 DIN 端输入,在时钟 SCK 的上升沿或下降沿同步写入。 配置必须在当前转换周期结束之前完成(即在 EOC 之前),否则会被丢弃。

    20410

    STM32CubeMX6.0 + HAL + LittleVGL7.6 等学习

    对于底层的寄存器操作(如读取捕获/比较寄存器),还有修改外设的某个配置参数(如改变输入捕获的极性),HAL库会使用宏定义来实现。而且会用__HAL_作为这类宏定义的前缀。...HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN); // 读取日期 if(second_tmp !...修改Project Manager->Project->Linker Setting中的最小堆栈大小,太小就会无法挂载SD卡或者读写时失败,基本上默认值都是无法正常运行的 ?...但printf函数又需要MicroLib支持,所以需要添加以下函数,否则会开机无法运行!!!...docs.lvgl.io/latest/en/html 官方推荐方法学习路线: 点击在线演示以查看LVGL的运行情况(3分钟) 阅读文档的介绍页面(5分钟) 熟悉Quick overview页面的基础知识(15分钟) 设置模拟器

    2.9K41

    LLM又曝致命缺陷:根本不会看时钟!博士惊呆,准确率不及50%

    图1:在测试实例中,6款大模型均无法正确读取指针式时钟,仅2款能理解日历 来自英国爱丁堡大学等机构的研究者,揭示了这个令人深思的AI现象。...他们模拟了时钟和年历,系统考察了多模态语言大模型(MLLM)解读时间与日期的能力。 结果令人失望: AI系统读取时钟的准确率仅为38.7%,判断日历日期的准确率则只有26.3%。...ClockQA涵盖了六类模拟时钟图像(含罗马数字、缺失秒针及不同表盘颜色等变体)及其对应的时间问题; CalendarQA包含了十年的年历图像,问题设置从简单到复杂: 元旦是星期几?...初步发现表明:尽管某些模型在时钟读时或日历问答中展现潜力,但根本问题依然存在。 其中,在时钟读时中,Gemini-2.0的时分针误差较低;在日历问答中,o1模型的准确率最高。...尽信AI,不如无AI AI系统正确读取时钟的准确率仅为38.7%,判断日历日期的准确率则只有26.3%。 早期的系统通过标注样本进行训练,但读取时钟需要的是另一种能力——空间推理。

    22610

    System Generator系列之建立异步通道

    前言 上一篇将创建的设计模块分成了三个时钟层次的子系统,此时子系统之间的数据由于时钟未同步,导致数据在传播时,采样所得的数据会有错误,因此需要建立一个异步通道,使得各时钟通道之间的数据可以准确的被传输。...此时就已经将不同时钟域的数据链接完成,接下来就是连接控制信号,以实现数据的安全传输,Ctrl需要提供一个FIFO的写入使能信号,DDC也是如此,Gain Control则需要分别对两个FIFO有个读取数据的使能信号...首先Ctrl模块,在当前的设计中,是无所需的信号线,因此还需要加以创建,双击该模块,进入其内部,按添加FIFO的方式再添加两个模块:Delay和Relational,并且双击Relational进行属性编辑...这部分的将来自顶层的FIFO的empty信号作为反向,若数据不是空的,该变量的值是0,做反向为1,可用作Ctrl数据的读取使能信号,相同的,来自FIFO1的empty信号也可以用作DDC数据的读取使能信号...返回顶层将各模块之间的控制信号连接起来,然后再Run,不过在运行前有个错误需要更改下,上一篇将System Generator那个生成器也不小心弄到了DDC模块里,需要剪切到顶层,不然无法运行……: ?

    70540
    领券