|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本文将介绍YoC系统硬件底层抽象组件 —— CSI组件。
$ v: y, D9 c/ |2 x- w3 t! B% q2 o6 r
1、概述- g1 ~. p# I7 u5 t4 ^2 L2 e' |
CSI (Chip System InteRFace)是针对嵌入式系统,定义了CPU内核移植接口、外围设备操作接口、统一软件接口规范,消除不同芯片的差异,简化软件的使用及提高软件的移植性。通过CSI 接口规范,可以快速实现芯片对接到YoC 平台。CSI 的具体内容包括:2 k, Y/ q) a. o t4 D/ f
-CSI-CORE:定义了CPU和相关紧耦合外设的接口规范5 {9 v' K6 E/ l
-CSI-driver:定义了常用的驱动的接口规范# C- L1 V1 c$ w W
-CSI-kernel:定义实时操作系统的接口规范
) r. n5 z; {* L6 q( O4 F( u
& U# y+ I( U' U, W8 `) R3 ~. m. O& v9 p& `
2、CSI组件使用& L/ z2 u) z7 Z9 v- o" ?
CSI有两个版本,目前CSI1.0逐步启用,推荐使用CSI2.0。
% W2 a/ q `. W( G4 [1 x, w" `0 M& I6 P
3、头文件包含! _4 P5 Q# j. {* _/ l2 |5 Z! D
3.1 GCC -I 路径
, p! f/ f: ^( T) i1 P-I csi2/include/
! u5 I: K9 R+ ~4 F' A& {7 b1 K. S9 z/ G" X$ U) P+ O
3.2 CSI-Core头文件包含9 V2 l7 X/ P) E' m9 O* }7 U( v
#include <csi_core.h>( f- u3 _! n1 o' t7 n. ]$ O: d v
2 h$ Z$ S% {8 t
3.3 CSI-Driver头文件包含
- [! u. y. G4 c$ W3 P& G+ R#include <drv/UART.h> #include <drv/timer.h>4 j" ?0 n2 V; q1 N
% |+ p: ?9 G* m- E5 \, Y6 n8 b8 l7 g3.4 CSI-Kernel头文件包含# @& a# }' G. P+ d
#include <csi_kernel.h>0 f0 E7 s( Z4 S3 r
L; r" ^! p+ d
4、模块分述
. ~' y: R8 h. |4.1 CSI-Core, b ?- P+ ^1 k7 v& X4 v
目前已针对RISCV、C-SKY架构做了接口的定义和实现。CSI-Core是驱动和RTOS程序的基础,CSI-Driver会基于CSI-Core的接口来定义外设寄存器描述和驱动实现。; ^' Q0 O4 o' p1 ^9 r; M& K) z
9 A0 O# K$ [- h% L4.2 CSI-Driver: [( x S: F- b7 h) z* u% w
-CSI-Driver是应用接口,是对硬件功能的抽象,不会暴露所有硬件细节。
1 [" a6 j5 Q) s6 M! c- w-CSI-Driver具有统一的接口,不同硬件IP之间的差异会在这层做统一。- J) Q8 [2 U, s* {- J; f6 \. F# P
-目前已规范了40+个模块的接口,包括IO类,加解密类,定时器类等。7 ^% D% @, p+ v" }+ \2 |
4.2.1 统一的设备和中断管理
- i0 z1 @ K g
( d6 u `& a- Y4.2.2 驱动程序的注册与注销) ~" A4 k0 s- w2 w4 i. b- {
4.2.2.1 注册
% a( J, E2 h, P9 i7 \注册函数负责驱动的初始化和硬件的基本初始化。一般的,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_t
1 ~( l1 z8 ]& K# n" J5 v4.2.2.2 注销4 N) c5 [' f# A5 C5 `
注销函数负责驱动的反初始化和硬件的反初始化 一般的,CSI驱动注销函数形式为:void csi__uninit(csi_xxx_t *xxx); 以uart为例,其驱动函数的注销接口如下:void csi_uart_uninit(csi_uart_t *uart); 参数: uart:uart控制块 返回值: 注销函数没有返回值
$ W0 F* k: K8 r" U) h0 Z! G) `* u: [
4.3 中断、回调和事件处理
) F; n4 ~/ M8 F+ W8 R+ pCSI驱动接管设备中断处理,CSI接口用户无法直接编写中断处理函数。
/ ^) s8 g% _5 c- X# q用户可以通过回调函数的方式来接收中断事件。$ Z9 m7 s) O5 y# i
4.3.1 回调注册; F/ |# H' _+ S, b4 V
CSI驱动提供回调注册注销函数:csi_xxx_attach(...) 和 csi_xxx_detach(...) 用户要接收中断事件,必须先注册回调函数。6 l# A0 M+ `! H( z
* b; \, M( s4 w8 g
4.4 同步异步处理
9 u4 p! y' L/ y* R( LCSI-Driver接口设计区分同步处理和异步处理模式,轮询、中断、DMA功能分开处理。同步读写:通过轮询的方式 异步读写:通过中断或DMA的方式; }, |- t% {: m% v9 `: w6 H. }7 ~
4.4.1 轮询模式
' G% |: R0 [1 R% G不产生中断1 K) T6 Y* s, R7 x) A
不产生事件5 N) q Q/ v) ~5 F) w1 A
4.4.2 中断模式
7 j7 n, `& } [8 K1 x/ O& T7 H, D9 v产生设备中断$ A& M4 N( F E- Q
产生事件2 b4 `$ x# O7 H$ v1 ]! r
4.4.3 DMA模式
) @2 Z6 O, H! X' A7 i2 X不产生设备中断,而产生DMA中断% S7 Y2 e9 }- i6 s# x
产生的事件类型和中断模式一致/ i8 J& P6 P1 m# R
|
|