|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本文将介绍YoC系统硬件底层抽象组件 —— CSI组件。9 ~5 i8 |0 _" u' M" F3 R+ p( d+ a
9 P2 b* n2 j4 J5 \4 O1、概述9 ~" c% b% W& g+ e8 W
CSI (Chip System InteRFace)是针对嵌入式系统,定义了CPU内核移植接口、外围设备操作接口、统一软件接口规范,消除不同芯片的差异,简化软件的使用及提高软件的移植性。通过CSI 接口规范,可以快速实现芯片对接到YoC 平台。CSI 的具体内容包括:
6 I* w0 Y" D- @! D& h, D-CSI-CORE:定义了CPU和相关紧耦合外设的接口规范0 f3 @, O; m6 v( i& ]
-CSI-driver:定义了常用的驱动的接口规范) u) s C" o* N! r! G
-CSI-kernel:定义实时操作系统的接口规范 _9 h1 ]% S3 u& B- u6 D8 o8 Y
& V4 t# u7 |/ O# s
. h, m, f( h2 u6 Z3 k3 e! A( w0 W* K
2、CSI组件使用; d* Z" ?3 v) _- a4 p
CSI有两个版本,目前CSI1.0逐步启用,推荐使用CSI2.0。
" z* Q( E$ R* E( @. @4 x# J/ C* T. W- A/ d5 t! G
3、头文件包含# y7 T; Y* Z* v, f/ ~& @; T u* @
3.1 GCC -I 路径
& M7 x2 d- ?" W$ N2 g$ c-I csi2/include/
% e$ N# v+ P c% ^5 ^: a
: G" B3 a% O! T3 k, Y, f3.2 CSI-Core头文件包含3 U+ g* U! a% `$ @! a& d* m
#include <csi_core.h>' X$ H* b; p! ^3 b3 L& k
) H6 ~8 R* |0 B- K3 s% r7 o( P' a* U
3.3 CSI-Driver头文件包含* _0 Z D2 g) A, m/ q9 B. c
#include <drv/UART.h> #include <drv/timer.h>6 j4 I+ k2 s6 Y9 {; {2 S: v
9 ]% K9 i$ O: C' ^0 i- j; u4 Q
3.4 CSI-Kernel头文件包含
+ y. z) z9 H+ O3 J( u#include <csi_kernel.h>
% E' i3 W4 q1 {. q7 }: {
- d6 u6 |/ W% F4 d! S0 B4、模块分述2 @! k% L- U: v. z5 o' \' r
4.1 CSI-Core3 A$ e6 h8 j: \% j3 k
目前已针对RISCV、C-SKY架构做了接口的定义和实现。CSI-Core是驱动和RTOS程序的基础,CSI-Driver会基于CSI-Core的接口来定义外设寄存器描述和驱动实现。5 Y" z. h9 F* N
: `4 Y ~! {" O. J/ A3 R4.2 CSI-Driver+ A( C! k1 `, _* j( s
-CSI-Driver是应用接口,是对硬件功能的抽象,不会暴露所有硬件细节。 . Z% X! ^4 a' N# N, M* R1 _* v4 ]8 ]
-CSI-Driver具有统一的接口,不同硬件IP之间的差异会在这层做统一。0 J/ L$ k6 \# \. n- T/ E9 m/ W
-目前已规范了40+个模块的接口,包括IO类,加解密类,定时器类等。9 v$ O& v7 |; i: _3 a: S* d
4.2.1 统一的设备和中断管理! m" T" p/ N3 P* N3 u
8 A* F6 K' `4 p5 l4.2.2 驱动程序的注册与注销
( _, w( X. ~9 Q% @3 B6 ?; s4.2.2.1 注册
' z- x4 P! a2 O. q( C$ @8 o; c注册函数负责驱动的初始化和硬件的基本初始化。一般的,CSI驱动注册函数形式为: csi_error_t csi__init(csi_xxx_t *xxx, uint32_t idx); 以uart为例,其驱动函数的注册接口如下:csi_error_t csi_uart_init(csi_uart_t *uart, uint32_t idx); 参数: uart:uart控制块 idx:uart设备号。如uart0,则idx = 0;返回值: 错误号:csi_error_t0 {4 _# O- v8 b6 s
4.2.2.2 注销. P" M' |# j W
注销函数负责驱动的反初始化和硬件的反初始化 一般的,CSI驱动注销函数形式为:void csi__uninit(csi_xxx_t *xxx); 以uart为例,其驱动函数的注销接口如下:void csi_uart_uninit(csi_uart_t *uart); 参数: uart:uart控制块 返回值: 注销函数没有返回值
% m# p l9 ]; |% e
( [: a5 n0 m" E0 }4.3 中断、回调和事件处理8 o7 C. S6 H* o7 q X- g
CSI驱动接管设备中断处理,CSI接口用户无法直接编写中断处理函数。
: Q- l" K* s& c, W" K8 H用户可以通过回调函数的方式来接收中断事件。
2 j5 V* w1 }( y4.3.1 回调注册0 `, [( m' X* _% d3 w
CSI驱动提供回调注册注销函数:csi_xxx_attach(...) 和 csi_xxx_detach(...) 用户要接收中断事件,必须先注册回调函数。* X" }" x2 t, V& X/ \0 B# Q
/ l2 r; e: j7 I* ~
4.4 同步异步处理" O/ J2 D, y9 O& c" }0 k4 R
CSI-Driver接口设计区分同步处理和异步处理模式,轮询、中断、DMA功能分开处理。同步读写:通过轮询的方式 异步读写:通过中断或DMA的方式& y1 v; u7 d) ]& w
4.4.1 轮询模式
! Y4 Y& L( a0 J9 r) V不产生中断
, k, B. H p8 N4 q不产生事件
! i6 T' t" ~/ x) K: W1 ~! B4.4.2 中断模式7 k2 o% h+ b p: C" K! p
产生设备中断
9 `. @; e. ]6 O: Q; v& I产生事件5 b7 l! P: o$ v9 T3 _6 \
4.4.3 DMA模式8 z" C& q8 I# ^
不产生设备中断,而产生DMA中断
* J# ? @7 d! g产生的事件类型和中断模式一致
: b# v j% N x- x |
|