|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本文将介绍YoC系统硬件底层抽象组件 —— CSI组件。
4 G+ I) j) r6 z2 m3 i) z$ b% Z1 j8 t. ~. f' |) f) i
1、概述
6 [- d4 `5 \9 q. V YCSI (Chip System InteRFace)是针对嵌入式系统,定义了CPU内核移植接口、外围设备操作接口、统一软件接口规范,消除不同芯片的差异,简化软件的使用及提高软件的移植性。通过CSI 接口规范,可以快速实现芯片对接到YoC 平台。CSI 的具体内容包括:
& n. W6 \/ s" i ^( s' S- N: s-CSI-CORE:定义了CPU和相关紧耦合外设的接口规范
5 H+ k: H3 e2 k: n" O6 e; }-CSI-driver:定义了常用的驱动的接口规范
5 x# X) [0 v6 }; v-CSI-kernel:定义实时操作系统的接口规范) X$ s4 g- H( J+ x: i2 _
5 {' t. ~* N3 d: w Q: Z. o
8 a" \$ c- z% P2、CSI组件使用
+ b4 [2 @3 H3 X+ v, V1 u8 MCSI有两个版本,目前CSI1.0逐步启用,推荐使用CSI2.0。, D- M0 |+ x3 `% g) t& m
/ X A v7 p% z$ Z5 w: j
3、头文件包含7 d8 n! B2 l$ h v% T
3.1 GCC -I 路径
0 j0 H! M$ q9 k& r-I csi2/include/9 p7 \( q' k# g& y+ d- b3 W% y# x
5 ^5 p8 d. p! Q5 d* ]
3.2 CSI-Core头文件包含! X, ` M8 c2 S' _) G+ C
#include <csi_core.h>( w' M! ~ m# W& ?8 ]
! f$ f9 ]. m, a3 D, i) C! }3.3 CSI-Driver头文件包含
/ Z7 M+ Q* o) X) J3 V1 ^ a8 G#include <drv/UART.h> #include <drv/timer.h>, e4 R7 B6 k; ]
6 D5 |, L6 k6 x! [# i3.4 CSI-Kernel头文件包含& K7 g6 s+ |/ [( w* Y2 \1 D
#include <csi_kernel.h>
9 E# ]$ G: e! N5 F) i& m% ^. B! _& Q1 T9 B9 |
4、模块分述# h3 Q+ F/ S( j. g/ d7 e8 _6 e
4.1 CSI-Core
3 j7 b3 V% B! \3 \/ H) ?( L目前已针对RISCV、C-SKY架构做了接口的定义和实现。CSI-Core是驱动和RTOS程序的基础,CSI-Driver会基于CSI-Core的接口来定义外设寄存器描述和驱动实现。 p q# L- u; n- d
, g' p9 W2 |; n: B5 y5 y8 K2 ]
4.2 CSI-Driver: |9 a+ ^6 e( d! z \' U' `2 y
-CSI-Driver是应用接口,是对硬件功能的抽象,不会暴露所有硬件细节。 0 G6 f* }, j1 e. ?* D
-CSI-Driver具有统一的接口,不同硬件IP之间的差异会在这层做统一。2 k) c7 U0 {# [' T) L- P
-目前已规范了40+个模块的接口,包括IO类,加解密类,定时器类等。+ _- F! I, x. Z7 a7 h
4.2.1 统一的设备和中断管理' `+ h3 D4 ^2 }3 ]5 Q
! t; |, u. T+ ]" c. W
4.2.2 驱动程序的注册与注销
% Z$ Z1 z5 j; u' C4.2.2.1 注册: e% h7 J, H! @) V g
注册函数负责驱动的初始化和硬件的基本初始化。一般的,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_t8 S. G/ \. `+ Q) l4 E) s
4.2.2.2 注销
0 J8 x0 y8 f0 \注销函数负责驱动的反初始化和硬件的反初始化 一般的,CSI驱动注销函数形式为:void csi__uninit(csi_xxx_t *xxx); 以uart为例,其驱动函数的注销接口如下:void csi_uart_uninit(csi_uart_t *uart); 参数: uart:uart控制块 返回值: 注销函数没有返回值5 x: L, I( D& ` r$ v+ K1 x7 ~
) \2 J2 v+ i3 l# B9 E3 M. D" `5 @5 Y
4.3 中断、回调和事件处理6 d& x$ P) c4 O$ D$ `
CSI驱动接管设备中断处理,CSI接口用户无法直接编写中断处理函数。
6 o' f5 o/ i7 G用户可以通过回调函数的方式来接收中断事件。
- g2 ~6 n0 \4 p a/ o0 L# |4.3.1 回调注册
# a; `( h9 x$ ]0 d( sCSI驱动提供回调注册注销函数:csi_xxx_attach(...) 和 csi_xxx_detach(...) 用户要接收中断事件,必须先注册回调函数。
5 U. @2 @( p; Y8 k; `6 j! v3 k
8 w B9 o' s5 @( r) O
4.4 同步异步处理
& F1 @! g n' F& @8 `- Q/ |- g9 S: bCSI-Driver接口设计区分同步处理和异步处理模式,轮询、中断、DMA功能分开处理。同步读写:通过轮询的方式 异步读写:通过中断或DMA的方式- A. Q9 ?# Z$ K, E1 j
4.4.1 轮询模式
3 ^* _# }! k/ M# B& V不产生中断/ q) `4 O! n1 x# h5 _
不产生事件
% |6 p7 y1 y# _9 m9 l4.4.2 中断模式4 }3 [0 Z: ]0 b/ Z# W
产生设备中断
+ a% |3 u; O! K* r产生事件2 s: R4 M- a3 c; r' }
4.4.3 DMA模式3 C4 X3 i! b) n1 x( |/ V
不产生设备中断,而产生DMA中断+ N3 i. W$ |3 p
产生的事件类型和中断模式一致
: n; j1 |6 L' W: H6 f, p |
|