振南技术干货集:CPU,你省省心吧!(2)

简介: 振南技术干货集:CPU,你省省心吧!(2)

注解目录

1、石油测井仪器

1.1 背景知识

(了解一下石油行业。石油到底是怎么找到的?)

1.2 测井数据采传的实现

1.2.1 最直接的初级方案

1.2.2 加入 DMA 的优化方案

(看看一般工程师与高手在技术实现上到底有什么区别。充分利用硬件资源。)

2、巧驱摄像头

2.1 摄像头时序分析

2.2 使用 DCMI+DMA

2.3 自搭外部电路

(图像一闪而过,普通单片机你抓得住吗?那我们就给他配个“龙抓手”,硬件 FIFO。)

3、M0 单片机巧驱 7 寸液晶大屏

(CPU 就算跑冒烟也刷不过来。让 CPU 省省心,来看看振南的方法是否足够巧妙。)

M0 单片机巧驱 7 寸液晶大屏

通过上面几个实例,大家应该知道振南所谓“巧驱”的路数了吧,对,就是多让硬件说话,我们要做“软硬兼施”的工程师。

如果我问大家:“我能用51 或 MO 单片机,驱动 7 寸大屏液晶(800 * 480),如图 6.10 所示,并且流畅播放视频,你信不信?”你一定会说:“不太可能吧,刷屏速率不够。”但我既然这么问,那振南一定是已经实现了,这里我就把实现过程给大家讲一下。

图6.10 7寸 TFT液晶模块

先来看原理图,如图6.11~6.14所示。

图6.11 巧驱7寸液晶屏原理图之 MCU部分

图6.12 巧驱7寸液晶屏原理图之74HC595串转并部分

基本的实现逻辑如图 6.15 所示。

仔细观察上面的原理图与逻辑框图,估计很多人已经明白了振南的意思,振南再给出配套的流程图,逻辑就更清晰了,如图 6.16 所示。

两片 74HC595 用于将 16 位串行数据转换为并行,与 TFT 液晶的 16 位数据接口相连。74HC595 的串行数据输人同时与 MCU 的两个 GPIO 以及 spiFlash 的两个串行数据端口相连。当 spiFlash 失能时(即 CS 置高),其数据端口呈现高阻,此时 74HC595 可由 MCU 操作

图6.13 巧驱7寸液晶屏原理图之八进制计数与时序调理部分

图6.14 巧驱7寸液晶屏原理图之spiFlash与7寸 TFT接口部分

图6.15 巧驱7寸液晶屏之基本实现逻辑框图

而当 MCU 的 GPIO 设置为高阻时,两片 74HC595 可分别接收来自 spiFlash 的双位串行数据。这样的复用设计,可以使 MCU 对 TFT 液晶进行预先的初始化,使其工作在纯像素数据写入的模式;而在高速数据写人的阶段,MCU 退出而让 TFT 接收来自 spiFlash 的数据。两片 74HC595 实现串转并的要点在于 LC锁存信号的产生,每产生 8个 SCK 脉冲,则自动产生一个 LC上升沿,这是时序生成与逻辑调理的一部分。实现的根本在于 74HC161与74HC27 的组合运用,如图 6.13 所示。首先对 74HC161 复位清零,此时[Q2:Q0]= 000.74HC27 是三输人或非门,其输出 1Y,即 595-LC 为1;时钟的输人后[Q2:Q]随之自增 001、

图6.16 巧驱7寸液晶屏的基本流程图

在 010 之前 595-LC 均为 0,而 8 个时钟之后,595-LC 将变为 1,即产生了上升沿。010......这里振南给 595-LC 增加了两级 74HC1G32 作为缓冲,为的是增加一些延时,以使 74HC595的存锁数据输出更稳定。

然后是液晶的 WR信号的产生:从图 6.12 中可以看到.WR 信号是一个 GPIO 与8 位计数器输出最高位 Q2 的或非非(没错,是或非非)。当 Q2 为0 时,WR 受控于 GPIO,此时可用于 MCU 对 TFT 预先进行初始化操作。当GPIO 为0时,WR 受控于 Q2,每 8 个时钟会产生-个下降沿(前面那个或非非是为了推迟一下这个下降沿,以使 16 位并行数据写入液晶更稳定)并维持 4 个时钟周期。

基本的要点已经描述清楚了。至于时钟的产生,唯一的要求是要产生特定数量的时钟,而不能是连续不断的。比如一顿图像的数据量为 800 * 480 半字,我们要输出 3 072 000 个时钟才能让一顿图像显示到液晶上。所以我们不能用 MCO 或者是 PWM,而要用 SPI,如果是 8位 SPI,要写384 000 次,如果是 16 位 SPI,则要写 192 00 次。当然,为了节省更多的 CPU资源,我们可以使用 DMA。当时钟不断地产生,一帧帧的图像显示到液晶上时,视频就流畅地播放出来了。

我曾经把我这个“巧驱大”的实验讲给了我的同事听,他们在赞叹的同时,还说:“你不做FPGA 真是浪费了!”其实我是做过一段时间的 FPGA 的,那还是在 2007 年在 Intel 中国研究院实习工作的时候。

好了,本章用 3 个实例阐述了本章最开头的那句话:CPU 时间是宝贵的,我们要把有限的CPU 时间投人到更有意义的事情中去。

在实际开发中,充分地利用硬件资源,自行灵活扩展一些硬件电路,通常可以达到意想不到的效果,甚至可以化不可能为可能。

永远记住:我们很多时候做的是嵌入式软件的工作,但归根结底我们搞的还是硬件。

相关文章
|
算法 编译器
【计算机架构】响应时间和吞吐量 | 相对性能 | 计算 CPU 时间 | 指令技术与 CPI | T=CC/CR, CC=IC*CPI
【计算机架构】响应时间和吞吐量 | 相对性能 | 计算 CPU 时间 | 指令技术与 CPI | T=CC/CR, CC=IC*CPI
1143 1
|
2月前
|
缓存 运维 监控
CPU被打满/CPU 100%:高效应对策略与技术干货分享
【10月更文挑战第3天】在信息技术高速发展的今天,无论是开发人员、运维人员还是数据分析师,都可能遇到CPU被打满(即CPU使用率达到100%)的情况。这不仅会影响系统的响应速度,严重时甚至会导致服务中断。本文将从诊断、分析与解决三个方面,详细介绍处理CPU 100%问题的技术干货。
104 3
|
2月前
|
安全 编译器 异构计算
在CPU设计中,为了提高能效比并减少能源消耗,采用了多种节能技术
【10月更文挑战第2天】在CPU设计中,为了提高能效比并减少能源消耗,采用了多种节能技术
55 4
|
2月前
|
安全 编译器 异构计算
现代CPU的节能技术
【10月更文挑战第2天】现代CPU的节能技术
38 3
|
3月前
|
KVM 虚拟化
KVM的热添加技术之CPU
这篇文章介绍了如何在KVM虚拟机中热添加CPU资源,包括查看当前CPU配置、修改CPU核心数、永久性修改CPU配置以及注意事项等操作步骤。
90 1
KVM的热添加技术之CPU
|
6月前
|
监控 Java API
使用Java检测当前CPU负载状态的技术博客
使用Java检测当前CPU负载状态的技术博客
100 0
|
存储 Linux Docker
跨cpu架构部署容器技术点:怎样修改Linux 的内核版本
在使用Docker 进行跨平台部署之后,我们还可以尝试进行跨架构部署。 从X86 架构上移植到 aarch64 上。
262 0
|
NoSQL Shell Linux
跨cpu架构部署容器技术点:怎么将容器启动时的1号进程挂载到systemctl
--privileged=true:是Docker中的一个参数,用于授予容器的特权权限。当一个容器被设置为特权容器时,它将拥有与主机操作系统相同的权限,可以执行一些高级操作,如访问主机设备、加载内核模块等。
95 0
|
关系型数据库 C语言
VT技术(二)检测CPU支持
1.CPUID指令检测 在进入VMX Opreation之前必须要检测CPU是否支持VMX技术,可以通过CPUID指令进行查询,在执行CPUID指令之后,返回值存入EAX,EBX,ECX,EDX中,查看ECX.VMX[5]位是否为1,否则不支持VMX技术,关于CPUID指令的介绍可以参考Intel白皮书卷二第三章第三节 Instruction-CPUID Identification详细介绍了CPUID的参数
454 0
|
20天前
|
弹性计算 Kubernetes Perl
k8s 设置pod 的cpu 和内存
在 Kubernetes (k8s) 中,设置 Pod 的 CPU 和内存资源限制和请求是非常重要的,因为这有助于确保集群资源的合理分配和有效利用。你可以通过定义 Pod 的 `resources` 字段来设置这些限制。 以下是一个示例 YAML 文件,展示了如何为一个 Pod 设置 CPU 和内存资源请求(requests)和限制(limits): ```yaml apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: example-container image:
115 1