找回密码
 注册
关于网站域名变更的通知
查看: 205|回复: 2
打印 上一主题 下一主题

RISC-V生态全景解析11——YoC组件的CSI组件介绍

  [复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-2 10:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

该用户从未签到

2#
发表于 2022-6-2 13:06 | 只看该作者
来了来了,学习学习

该用户从未签到

3#
发表于 2022-6-2 13:47 | 只看该作者
来了来了,学习学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-23 00:15 , Processed in 0.156250 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表