专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
NXP
8.6 子模块分析之CM
2019-07-12 13:51
发布
生成海报
站内文章
/
NXP MCU
17860
0
1638
data/attach/1907/ylilv3t0ibvufczagvoh60u195vfq5ny.jpgdata/attach/1907/f8j1ur0s0sqs670472ntfyapkc1zx13b.jpgdata/attach/1907/dplbixpqbvizs9mxxe9h3vt3f0i7xvhc.jpg
(一)概述
Control Module(CM)
模块由以下几个部分构成:
CM
由
Frame Synchronization Unit (FSU)
,
Interrupt Generator (IG)
,
General Configuration Registers (GCR)
,
Clock and Reset Control Unit (CRCU)
和
Shadow Registers Block (SRM)
组成。
(二)各部分介绍
2.1 Frame Synchronization Unit(FSU)
2.1.1 FSU
概述
FSU
提供
IPU
内部各个子模块所进行的任务处理之间的同步,
IPU
就可以自动处理一些复杂的任务而不需要
ARM
平台提供同步。
FSU
支持外部内存设备上存储图像的双
buffer
模式,并且允许
IPU
处理流程自动链接起来。
2.1.2 Frame Synchronization Flow
1
)初始化
ARM
平台必须在使能一个任务之前对这个任务进行初始化,通过配置
GCR
中的寄存器和
IPU
内部各个子模块的参数内存来完成初始化。
2
)使能
当完成初始化以后,
ARM
平台通过向对应寄存器中的使能位写值来使能这个任务。
3
)触发
当任务使能以后,
FSU
等待触发信号的到来。触发信号是一系列信号的综合,包括使能信号,缓冲区准备好的信号
(DMA_CH_BUF<0/1>_RDY_<#>)
,和执行任务中的产生的信号如满页信号
(IDMAC_EOF_#
)等等。
当触发产生后,
FSU
会调用对应的处理函数来操作。
4
)操作
触发步骤导致任务进入活动状态,这就是所谓的操作步骤。在这一步中,
FSU
监听来自
ARM
平台,
IDMAC
和对应的处理单元所发出的同步信号,然后控制这些单元的操作。
FSU
同样控制
IDMAC
中
buffer
的开关,
FSU
在每一帧后面检测下一帧是否可用,如果下一帧可用的话,
FSU
就保持活动状态,继续发送
_NEW_FRM_RDY
信号,并且更新相应的标志位,如
DMA
_<#>_CUR_BUF
和
DMA
_<#>_BUF_RDY
等。如果下一帧不可用,
FSU
进入暂停模式,暂停当前任务,直到下一个可用的帧的到来。
5
)关闭
当
ARM
平台关闭一个任务的时候(通过将对应的使能位清零),
FSU
进入关闭状态。
2.1.3 FSU's fundamentals
(
FSU
基础)
Trigger source select
(触发源选择器)
一个
flow
被触发器所触发,这个触发器可能是通过
ARM
平台手工指定的,也可能是当前处理任务完成的结果。触发源选择器选择触发的来源,触发意味着数据可以被子模块所进行处理。触发源选择器是在对应的模块或任务的
SRC_SEL
位指定的。
Trigger destination select
(触发目的地选择器)
一个模块或者任务需要确保下一个模块或者任务已经做好接收数据的准备,用户需要指定数据的目的地是哪里。这一项工作是通过设置模块或者任务中对应的
DEST_SEL
位来实现的。
Double buffering
(双缓冲区模式)
IPU
支持系统内存中的双缓冲区模式。当一个
flow
一帧一帧地处理数据的时候,会从内存中存储
BUF0
的地址的地方读取地址,下一帧就会去内存中存储
BUF1
的地址的地方读取地址。而这两个位置就是对应的
IDMAC channel
的
CPMEM
中的
word[1]
中保存的
EBA0
和
EBA1
。既然有两个
buffer
,那么
IDMAC
怎么就知道使用的是哪一个
buffer
了?是根据
DMA_CH_CUR_BUF_#
位中指定的。
FSU
自动地将
DMA_CH_CUR_BUF_#
位指向当前正在使用的
buffer
。同样,如果使用双
buffer
模式的话,需要设置对应的
DMA_CH_DB_MODE_SEL_#
位。
Alternative flow
(可选的
flow
)
有些
IPU
内部的子模块可以处理两个
flow---
一个作为
main flow
,另一个就为
alternative flow
。为了使这些模块支持
alternative flow
,需要进行下面的设置:
1
)
SRM
中有关子模块的可选寄存器设置
2
)
IDMAC
中的可选设置:在对应的
CPMEM
中的
separate alpha
设置
3
)可选的
SRC_SEL
位
4
)可选的
FSU
设置
(CUR_BUF,BUF_RDY, DB_MODE_SEL)
FSU
控制
alternative flow
的开关,它负责更新
alternative flow
的配置,然后发送合适的信号到
IPU
的各个子模块中。
当处理完一帧的时候,将会有两个
buffer
处于准备好状态,其中一个是当前
flow
的下一个
buffer
,另一个就是
alternate flow
的
buffer
,
FSU
会自动地通过
round-robin
优先级选择器选择一个
buffer
进行处理。
IPU task chaining - Single flow
(单
flow
模式)
下面的图示中说明了单
flow
模式下的
task chaining
(任务链)。
单
flow
模式就是不包括上面提到的
alternative flow
,只有一个
main flow
,双
flow
模式肯定就是包括一个
main flow
,还包括一个
alternative flow
。
帧中的数据是从同一个子摄像头模块中来的,同时,是一帧一帧进行处理的。采集到的第一帧数据(
Frame0
)会通过
SMFC
保存到
"INPUT BUFFER"
中的
BUF0
中,当
BUF0
采集完成的话,下一步处理的子模块(如
IC
)就被触发,然后就会从
"INPUT BUFFER"
的
BUF0
读取数据。同时呢,从摄像头模块中来的下一帧数据(
Frame1
)就会填充到
"INPUT BUFFER"
的
BUF1
中。之后当
IC
对
Frame0
处理完成的话,就会将
Frame0
保存到
"OUTPUT BUFFER"
的
BUF0
中,之后显示子模块(如
DP/DC
)就会被触发,从
"OUTPUT BUFFER"
的
BUF0
中取数据发送到显示设备上面。各个处理子模块就会这样一帧一帧地对数据进行处理。
IPU task chaining - double flow
(双
flow
模式)
下面的图示中说明了双
flow
模式下的
task
chaining
(任务链)。
看这个图,这个图是基于上一个单
flow
模式下的。另一个
flow
被显示子模块所控制,即
DC
需要控制两个
flows
,当
Frame0
被发送到显示器上后,
FSU
将要决定下一步处理
Frame1
还是
Frame0_ALT
。这个决定需要根据其他
buffer
的就绪情况来觉得,如果两个
buffers(main flow and alternate)
都准备好的话,
FSU
就根据
round-robin
优先级选择器来选择。
2.1.4 IPU main flows
(
IPU
的主
flow
)
上面说了,
IPU
内部会执行一个
main flow
,一个
alternative flow
,这里先分析一下
main flow
。
IPU
内部的
flows
可以被分为
5
部分:
1
)
CF- capture flows
2
)
PF- processing flows
3
)
SF- synchronous display flows
4
)
AF- Asynchronous display flows
5
)
DF- Direct flow from IC to the display
其中每一部分可以看作是一个任务(
task
),而这些
task
可以被串成任务链(
tasks chain
)。如下图所示:
这些
flows
可以按照上图中的箭头来组合成
task flows chaining
。
对于每个
flow
,代表数据从摄像头采集到显示(或者保存在内存中)的过程中的一个分步骤,每个
flow
都对应一个或几个
channel
,而每个
channel
的数据流通过程中,是通过
DMA
传输的,所以每个
channel
里面又包含一个或几个
dma_channel
。在这不太好理解,看看手册中的介绍(
capture flow
):
其中上面和程序中所说的
channel
对应图中的
Tasks chain
,对于这个
channel
的理解需要根据
ipu
内部架构图来理解,如下所示:
以上面
CSI0-->SMFC-->MEM
这个
channel
为例,它代表数据从
CSI
经过
SMFC
到达内存
MEM
中,因为数据是从
CSI
中获得的,所以
physical DMA channel
中的
video input
为空,而数据从这个
channel
输出的话,就需要通过
DMA channel
了,从图上可以看出来,
physical DMA channel
中的
video output
可以为
IDMAC_CH_0~ IDMAC_CH_3
。
同样对于
capture flow
,还可以通过
CSI0-->SMFC--->MEM
和
CSI0-->VDIC-->MEM
这两种方式将摄像头采集到的数据存放到内存中。
再来看手册中的
Processingflows
的图:
以
MEM-->IC-->MEM
这个
channel
为例,根据
IPU
内部框架图可以看到,从内存中取出数据,经过
IC
处理以后再放入内存中,那么取出数据的时候,就使用到
DMA channel
了,从这个图中可以看出来,使用的是
IDMAC_CH12
,再次放入内存中的时候就使用到
IDMAC_CH20
。
下面再看看
synchronous display flows
,下面的就不分析了,参照上面的讲解就可以分析出来,同样,下面的图也只是截取一部分作为示例,具体完整的图查看芯片手册。
asynchronous display flows
还有几个
flow
,就不一一列举了。
2.1.5 Sub-Frame Double-Buffering (Band Mode)
双
buffer
模式使用的是整个帧作为缓冲区,当一个缓冲区填充满以后才会触发满页中断(
EOF
),然后切换到下一个缓冲区进行数据填充。
IPU
同样支持更小的缓冲区,每一个缓冲区都包含
4/8/16/32/64/128/256
行像素值,这种情况就可以使用系统内部内存来缓冲数据。
这种模式就称为
Band Mode
(个人理解,这个
band
的意思就是一个
buffer
的一部分),如果想使用这种情况的话,需要做以下修改:
1
)系统内存的地址是通过同样的公式来进行计算的,但是需要插入想要使用的行的数目
k
,只有
2^k
行被使用到。
2
)
Band Mode
情况下,当数据填充满对应的
2^k
行后,就会触发中断,而不是一页满后才触发中断。
3
)每一个
channel
是否工作在这个
Band Mode
模式下,是通过对应的
IDMAC_BNDM_EN_
位来指定的。而且相应的
dma channel
中的
BNDM
参数同样需要设置。
2.1.6 Automatic Window Refresh
通过设置
flow
相应的
<>_SRC_SEL
位进入自动刷新模式,那么智能显示设备就可以启动自动刷新模式。刷新周期在
AUTOREF_PER
中定义。
真正的刷新周期的计算公式是:
THSP* 217 * (AUTO_REF_PER+1).
2.1.7 IPU VDOA synchronization
Ta的文章
更多
>>
8.6 子模块分析之CM
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮