TMS320C6678平台函数接口要求

更新时间:2023-10-27 11:15:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

XXXXXX平台 软件函数接口要求

版本:1.2

拟制_______________ 审核_______________ 批准_______________

2015.11

目 录

目 录 ................................................................................................................................................................ i 版本信息 ........................................................................................................................................................ iii 1. 关于本文档 ............................................................................................................................................. 1 2. 概述 ......................................................................................................................................................... 1 3. 函数接口定义 ......................................................................................................................................... 2

3.1. 中断资源 ..................................................................................................................................... 2 3.2. 定时器资源 ................................................................................................................................. 4 3.3. DMA资源................................................................................................................................... 5 3.3.1. 创建DMA函数 ....................................................................................................................... 5 3.3.2. 设置DMA参数函数 ............................................................................................................... 6 3.3.3. 启动DMA函数 ....................................................................................................................... 6 3.3.4. 停止DMA函数 ....................................................................................................................... 7 3.3.5. 删除DMA函数 ....................................................................................................................... 7 3.3.6. 获取DMA概要信息函数 ....................................................................................................... 7 3.3.7. 显示DMA信息函数 ............................................................................................................... 8 3.3.8. 检验DMA传输结束信息函数 ............................................................................................... 8 3.4. 串口操作 ..................................................................................................................................... 8 3.4.1. 初始化串口模块函数 ............................................................................................................. 9 3.4.2. 打开串口函数 ......................................................................................................................... 9 3.4.3. 关闭串口函数 ....................................................................................................................... 10 3.4.4. 串口发送函数 ....................................................................................................................... 10 3.4.5. 串口接收函数 ....................................................................................................................... 10 3.4.6. 串口设置函数 ....................................................................................................................... 11 3.5. I2C接口操作 ............................................................................................................................ 11 3.5.1. 初始化I2c接口函数 ............................................................................................................ 12 3.5.2. 打开I2c接口函数 ................................................................................................................ 12 3.5.3. 关闭I2c接口函数 ................................................................................................................ 12 3.5.4. I2c接口操作函数 ................................................................................................................. 13 3.5.5. I2c接口空闲操作函数 ......................................................................................................... 13 3.6. SPI操作 .................................................................................................................................... 14 3.6.1. 初始化SPI接口函数 ............................................................................................................ 14 3.6.2. 打开SPI接口函数 ................................................................................................................ 14 3.6.3. 关闭SPI接口函数 ................................................................................................................ 15 3.6.4. SPI接口设置函数 ................................................................................................................. 15 3.6.5. SPI接口读操作函数 ............................................................................................................. 16 3.6.6. SPI接口写操作函数 ............................................................................................................. 16 3.7. GPIO接口操作 ......................................................................................................................... 17 3.7.1. 初始化GPIO接口函数 ......................................................................................................... 17 3.7.2. 打开GPIO接口函数 ............................................................................................................. 18

i

3.7.3. 关闭GPIO接口函数 ............................................................................................................. 18 3.7.4. GPIO接口方向设置函数 ...................................................................................................... 18 3.7.5. GPIO接口读操作函数 .......................................................................................................... 19 3.7.6. GPIO接口写操作函数 .......................................................................................................... 19 3.7.7. GPIO接口位设置操作函数 .................................................................................................. 19 3.7.8. GPIO接口位读操作函数 ...................................................................................................... 20 3.7.9. GPIO接口位中断使能函数 .................................................................................................. 20 3.7.10. GPIO接口位中断禁止函数 .................................................................................................. 21 3.7.11. GPIO接口信息显示函数 ...................................................................................................... 21 3.8. EMIF操作 ................................................................................................................................ 21 3.8.1. 初始化EMIF接口函数 ......................................................................................................... 22 3.8.2. EMIF接口设置函数 .............................................................................................................. 22 3.9. HyperLink操作 ........................................................................................................................ 23 3.9.1. 初始化HyperLink接口函数 ................................................................................................. 23 3.9.2. 打开HyperLink接口函数 ..................................................................................................... 24 3.9.3. 关闭HyperLink接口函数 ..................................................................................................... 24 3.9.4. HyperLink提醒操作函数 ...................................................................................................... 24 3.9.5. HyperLink窗口映射函数 ...................................................................................................... 25 3.9.6. HyperLink读操作函数 .......................................................................................................... 25 3.9.7. HyperLink写操作函数 .......................................................................................................... 25 3.10. 多核间消息操作 ................................................................................................................... 26 3.11. 多核间互斥操作 ....................................................................................................................... 27 3.11.1. 创建核间互斥锁函数 ........................................................................................................... 28 3.11.2. 删除核间互斥锁函数 ........................................................................................................... 28 3.11.3. 核间加锁函数 ....................................................................................................................... 28 3.11.4. 核间解锁函数 ....................................................................................................................... 29 3.11.5. 查询核间锁状态函数 ........................................................................................................... 29 3.12. Cache操作 ............................................................................................................................ 30 3.13. 内存操作 ............................................................................................................................... 30 3.14. RIO操作 ............................................................................................................................... 31

ii

版本信息

版本 1.0 1.1 1.2 修改内容 最初版本,xxxx 版本1.1,xxx 版本1.2,xxx,增加DMA设置函数,修改部分笔误

时间 2015-9-29 2015-10-10 2015-11-1 iii

1. 关于本文档

本文是XXXXXX平台软件函数接口需求规格书的说明文档。它对XXXXXX平台软件部分资源函数接口的功能、体系结构、接口定义等方面进行了详细叙述,约束操作系统研发人员、BSP包开发编程人员和用户程序开发人员,主要用于技术交流和二次开发。

2. 概述

为了保证XXXXXX平台软件测试工作的规范性,统一国产操作系统的测试接口要求,方便应用代码移植、调试与性能对比,对TMS320C6678芯片(后简称C6678芯片)相关硬件资源和多核应用机制的函数接口统一要求,并在此基础之上,搭建应用测试软件,检验操作系统的性能、效率与可靠性,保证测试的公平与公证性。

XXXXXX平台软件函数接口,主要包括SPI接口、I2C接口、串口、EMIF接口、GPIO接口、HyperLink接口、DMA、RapidIO接口(后简称RIO)、中断与定时器、内存与cache管理等硬件资源,核间消息和核间互斥等等应用资源。硬件资源的操作主要分两个层次,即基本接口、扩展接口。基本接口层次的软件函数接口负责硬件的基本操作,可用于应用或驱动的二次封装;扩展接口则相对复杂,是在基本接口的基础上,内核参与管理,保证多核、多进程互斥的函数接口。所以,多核多进程共享的硬件资源,譬如DMA资源,核间消息,Hyperlink接口,RIO资源需要考虑并建立在核间互斥机制的基础上保证上述两个层次的设计。

另外,C6678芯片的中断相对复杂,操作系统需要使用中断,用户也需要使用。所以,一方面,操作系统管理所有中断,对用户开发部分外部中断,提供方便简洁的中断外部挂载模式;另外一方面,操作系统对部分内部资源完全管理,如用户需要该资源的事件触发中断,操作系统提供函数接口,将用户中断代码通过回调函数的形式挂载到对应资源中断上。定时

1

器资源相对简单,除去操作系统占用的定时器外,剩余的需要操作系统管理,且提供函数接口方便用户使用。

3. 函数接口定义

XXXXXX平台测试软件模块函数接口要求,主要从两个方面的原则提出。一方面,在兼容POSIX接口的要求条件下,管理内存、cache、中断、定时器资源和DMA资源,提供简洁函数接口,方便用户管理使用资源,相关于中断服务的提供回调函数,方便用户挂载代码;另一方面,对POSIX接口中未涉及的资源,包括多核间消息,RIO操作提供简洁函数接口,为C6678芯片的多核应用与核间通讯,保证用户便捷开发与多核管理与维护。

下面就各个部分详细描述。 3.1.

中断资源

表3-1给出中断/异常管理编程接口列表。

表3-1 中断/异常管理编程接口表 序接口标识 接口名称 接口描述 号 1 int_install_handler() 安装中断处理函数 2 int_unstall_handler() 卸载中断处理函数 3 int_lock() 锁中断 4 int_unlock() 解锁中断 具体参看5 int_enable_pic() 使能指定中断号的中断 GJB7714-2012 P88 A.3 6 int_disable_pic() 屏蔽指定中断号的中断 7 exception_handler_set() 设置用户异常处理函数 8 shared_int_install() 安装共享中断的处理函数 9 shared_int_unstall() 卸载共享中断的处理函数

表3-1中所有函数均围绕硬件资源的中断管理与操作展开,其涉及资源包括GPIO中断资源,INTC中断控制器,各个核的中断资源,和PA(与网络资源)、QMSS(核间消息相关)、DMA、RIO、HyperLink、UART(即串

2

口)等外设与中断事件相关资源。

除使用标准BSP函数访问所述资源的硬件外,需要提供按照POSIX接口要求中断访问函数(见GJB7714-2012 7章中断/异常管理编程接口)。

考虑到与POSIX接口标准的兼容性,简化用户对中断操作,使用传统的中断向量实现中断的挂载(如图3-1)。

图3-1 基于中断向量的中断接口模型

中断挂载分两种模式,即直接中断和共享中断两种。直接中断模式下,用户使用int_install_handler函数和int_unstall_handler函数将中断挂卸载到操作系统内核上;共享中断模式下,用户使用shared_int_install函数和

shared_int_unstall函数将中断挂卸载到操作系统内核上。两种模式下,共同的

函数输入形参是中断向量值vecnum ,中断向量是用户与操作系统内核共同约定的,由操作系统内核中断管理模块统一管理,并解释成C6678芯片的中断控制器(INTC)与各个C66x内核的中断映射拓扑,构建中断响应的硬件通道。直接中断是事件直接映射并挂载到C66x内核的中断输入;共享中断是由多个中断事件组合成,并约定挂载到C66x内核的某个中断输入(由操作系统设计时决定)上,响应中断时由操作系统内核软件查询各个事件对应状态,以确定发生中断的事件,并执行挂载的中断服务代码。

目前,暂定的直接中断通道有4个,暂定的共享中断有1个。表3-2给

3

出外部中断向量定义列表。

序号 1 2 … 16 17 18 … 32 … 向量值 0x00 0x01 … 0x0F 0x10 0x11 … 0x1F … 表3-2 外部中断向量定义表 向量标识 说明 GPIO0_VEC GPIO0中断 GPIO1_VEC GPIO1中断 … … GPIO15_VEC GPIO15中断 HTIMER0_VEC 硬件定时器0中断 HTIMER1_VEC 硬件定时器1中断 … … HTIMER 15_VEC 硬件定时器15中断 … 未定义,待定 3.2.

定时器资源

事件管理的定时器资源,主要包括看门狗、系统软件定时器、硬件定时器资源的利用。除使用标准BSP函数访问所述资源的硬件外,需要提供按照POSIX接口要求访问函数(见GJB7714-2012 8章时钟/定时器管理编程接口)。操作系统内核为用户方便使用内核未使用的定时器硬件资源,定义如表3-3所示的硬件定时器管理编程接口,用于管理与使用硬件定时器资源。

表3-3给出硬件定时器管理编程接口列表。

表3-3 硬件定时器管理编程接口 序号 1 2 3 4 5 6 7 接口标识 hwtimer_open() hwtimer_close() hwtimer_set() hwtimer_settime() hwtimer_gettime() hwtimer_start() hwtimer_stop() 接口名称 打开定时器 关闭定时器 设置定时器参数 设置定时器时间 获取定时器时间 启动定时器 停止定时器 接口描述 类型 仅提供硬件定时器访问与设置函数,中断参照3-1说明 基本 硬件定时器中断挂载参照3.1节外部中断管理的要求操作。

4

3.3. DMA资源

DMA资源是用户充分使用DSP芯片的关键,通过合理的DMA使用,实现数据搬移与程序运算代码分离,极大地发挥CPU的性能,提高CPU应用的效率。C6678的DMA资源(EDMA资源)具备强大能力,在无需CPU干预的情况下,可以轻易地实现数据搬移、矩阵专置等等功能。操作系统内核为保证用户便捷使用DMA硬件资源,定义如表3-4所示的DMA编程接口,用于管理与使用DMA资源。

表3-4给出DMA编程接口列表。

序接口标识 接口名称 号 1 dma_create() 创建DMA 2 dma_set() 设置DMA参数 3 dma_start() 启动DMA 4 dma_stop() 停止DMA 5 dma_delete() 删除DMA 6 dma_getinfo() 获取DMA的概要信息 7 dma_show() 显示DMA信息 8 dma_check() 检验DMA传输结束 表3-4 DMA编程接口

接口描述 具体参看3.3.1 具体参看3.3.2 具体参看3.3.3 具体参看3.3.4 具体参看3.3.5 具体参看3.3.6 具体参看3.3.7 具体参看3.3.8 类型 基本 扩展

3.3.1. 创建DMA函数

dma_t dma_create (void* param, void* func)

【功能】:

创建DMA对象(暂定)

【参数】:

void* param:创建参数设置结构体指针 void* func:回调函数参数指针

5

【返回值】:dma句柄类型, 不为零,创建成功;0,创建失败(暂定)

3.3.2. 设置DMA参数函数

int dma_set (dma_t handle, void* param)

【功能】:

重新设置DMA对象参数,在需要的场合使用。

【参数】:

dma_t handle:DMA句柄

void* param:创建参数设置结构体指针

【返回值】:int类型, 0,工作正常;其他,出错

3.3.3. 启动DMA函数

int dma_start (dma_t handle, void* psrc, void* pdst, int size_t, int len, int timout)

【功能】:

启动DMA工作

【参数】:

dma_t handle:DMA句柄 void* psrc:DMA源地址指针 void* pdst:DMA目的地址指针 int size_t,:DMA传送单位数据字节数 int len:DMA传送单位数据长度 int timout:超时时间

【返回值】:int类型, 0,工作正常;其他,出错(暂定)

6

3.3.4. 停止DMA函数

int dma_stop (dma_t handle)

【功能】:

停止DMA工作

【参数】:

dma_t handle:DMA句柄

【返回值】:int类型, 0,成功;其他,出错(暂定)

3.3.5. 删除DMA函数

int dma_delete (dma_t* phandle)

【功能】:

删除DMA对象

【参数】:

dma_t* phandle:DMA句柄指针

【返回值】:int类型, 0,成功;其他,出错(暂定)

3.3.6. 获取DMA概要信息函数 int dma_ getinfo (dma_t handle)

【功能】:

删除DMA对象

【参数】:

dma_t handle:DMA句柄

【返回值】:int类型, dma工作状态代码(暂定)

7

3.3.7. 显示DMA信息函数

Int dma_show(dma_t handle, dma_info* pinfo)

【功能】:

删除DMA对象

【参数】:

dma_t handle:DMA句柄

dma_info* pinfo:DMA信息结构体指针

【返回值】:int类型, 0,成功;其他,出错(暂定)

3.3.8. 检验DMA传输结束信息函数 int dma_check(dma_t handle)

【功能】:

检验DMA传送工作是否完成

【参数】:

dma_t handle:DMA句柄

【返回值】:int类型, 0,成功;其他,出错(暂定)

3.4.

串口操作

串口是比较简洁的接口,一般用于诊断和维护接口,但也可开放给用户使用。所以,操作系统内核为保证用户便捷使用串口硬件资源,定义如表3-5所示的串口编程接口,用于管理与使用串口资源。

表3-5给出串口编程接口列表。

序 接口标识 表3-5 串口编程接口

接口名称 接口描述 类8

号 1 2 3 4 5 6 型 uart_init() uart_open() uart_close() uart_send() uart_recv() uart_set() 初始化串口模块 打开串口 关闭串口 串口发送操作 串口接收操作 串口设置 具体参看3.4.1 具体参看3.4.2 具体参看3.4.3 具体参看3.4.4 具体参看3.4.5 具体参看3.4.6 基本

3.4.1. 初始化串口模块函数 int uart_init (int baudrate)

【功能】:

初始化串口硬件资源模块,本函数不要求支持多核多进程操作,必须0核操作

【参数】:

int baudrate:波特率设置

【返回值】:int类型,0,初始化成功;不为零,失败

3.4.2. 打开串口函数

uart_t uart_open (void* param, void* func)

【功能】:

打开串口对象

【参数】:

void* param:创建参数设置结构体指针 void* func:中断回调函数参数指针

【返回值】:串口句柄类型, 不为零,打开成功;0,打开失败

9

3.4.3. 关闭串口函数

int uart_close (uart_t* phandle)

【功能】:

关闭串口对象

【参数】:

uart_t* phandle:串口句柄指针

【返回值】:int类型, 0,成功;其他,出错

3.4.4. 串口发送函数

int uart_ send (uart_t handle, char data)

【功能】:

串口发送数据

【参数】:

uart_t handle:串口句柄 char data:待发送的数据

【返回值】:int类型,0,成功;其他,出错

3.4.5. 串口接收函数

int uart_ read (uart_t handle, char* pdata)

【功能】:

串口接收数据

【参数】:

uart_t handle:串口句柄 char* pdata:接收数据存放指针

10

【返回值】:int类型, 0,成功;其他,出错

3.4.6. 串口设置函数

int uart_set (uart_t handle, int baudrate)

【功能】:

设置串口资源

【参数】:

uart_t handle:串口句柄 int baudrate:波特率设置

【返回值】:int类型,0,成功;不为零,失败

3.5.

I2C接口操作

i2c接口一般连接i2c接口的串行EPROM设备,用于存储启动代码和启动参数以及板卡的配置信息。考虑到用户外设多样性,操作系统内核提供如表3-5所示的访问i2c接口硬件资源的编程接口,用于管理与使用i2c接口硬件资源。

表3-6给出i2c接口编程接口列表。

序号 1 2 3 4 5 接口标识 i2c_init() i2c_open() i2c_close() i2c_write() i2c_idle() 表3-6 串口编程接口

接口名称 初始化I2c接口 打开I2c接口 关闭I2c接口 I2c接口写操作 I2c接口空闲操作 接口描述 具体参看3.5.1 具体参看3.5.2 具体参看3.5.3 具体参看3.5.4 具体参看3.5.5 类型 基本 11

3.5.1. 初始化I2c接口函数 int i2c_init (void)

【功能】:

初始化I2c接口硬件资源模块,本函数不要求支持多核多进程操作,必须0核操作

【参数】:

【返回值】:int类型,0,成功;不为零,失败

3.5.2. 打开I2c接口函数

i2c_t i2c_open (void* param, void* func)

【功能】:

打开i2c接口对象

【参数】:

void* param:创建参数设置结构体指针 void* func:中断回调函数参数指针

【返回值】:i2c句柄类型, 不为零,创建成功;0,创建失败

3.5.3. 关闭I2c接口函数 int i2c_close (i2c_t* phandle)

【功能】:

关闭i2c接口对象

【参数】:

i2c_t* phandle:i2c接口句柄指针

12

【返回值】:int类型, 0,成功;其他,出错

3.5.4. I2c接口操作函数

int i2c_oprate (i2c_t handle, char* pcmd, int cmdsize, char* pdata, int size)

【功能】:

i2c接口数据操作

【参数】:

i2c_t handle:i2c接口句柄 char* pcmd:命令数据存放地址 int cmdsize:命令数据长度 char* pdata:数据存放地址 int size:数据长度(按字节)

【返回值】:int类型,0,成功;其他,出错

3.5.5. I2c接口空闲操作函数 int i2c_idle (i2c_t handle)

【功能】:

i2c接口空闲操作

【参数】:

i2c_t handle:I2c接口句柄

【返回值】:int类型, 0,成功;其他,出错

13

3.6. SPI操作

SPI接口是C6678芯片的基本接口之一,为DSP芯片外围设备提供扩展接口。所以,为保证用户便捷使用SPI接口的硬件资源,操作系统需要提供定义如表3-7所示的SPI接口编程接口,用于访问SPI接口硬件资源。

表3-7给出SPI接口编程接口列表。

序号 1 2 3 4 5 6 接口标识 spi_init() spi_open() spi_close() spi_claim() spi_read() spi_write() 表3-7 SPI接口编程接口

接口名称 初始化SPI接口 打开SPI接口 关闭SPI接口 SPI接口设置 SPI接口读操作 SPI接口写操作 接口描述 具体参看3.6.1 具体参看3.6.2 具体参看3.6.3 具体参看3.6.4 具体参看3.6.5 具体参看3.6.6 类型 基本

3.6.1. 初始化SPI接口函数 int spi_init (void)

【功能】:

初始化SPI接口硬件资源模块,本函数不要求支持多核多进程操作,必须0核操作

【参数】:

【返回值】:int类型,0,成功;不为零,失败

3.6.2. 打开SPI接口函数

spi_t spi_open (void* param, void* func)

14

【功能】:

打开SPI接口对象

【参数】:

void* param:创建参数设置结构体指针 void* func:中断回调函数参数指针

【返回值】:spi句柄类型, 不为零,创建成功;0,创建失败

3.6.3. 关闭SPI接口函数 int spi_close (spi_t* phandle)

【功能】:

关闭SPI接口对象

【参数】:

spi_t* phandle:SPI句柄指针

【返回值】:int类型, 0,成功;其他,出错

3.6.4. SPI接口设置函数

int spi_ claim (spi_t handle, int cs, int freq)

【功能】:

SPI接口设置操作

【参数】:

spi_t handle:SPI接口句柄 int cs:片选选择 int freq:接口工作频率

【返回值】:int类型,0,成功;其他,出错

15

3.6.5. SPI接口读操作函数

int spi_read (spi_t handle, char* pcmd, int cmdsize, char* pdata, int size)

【功能】:

SPI接口读操作函数

【参数】:

spi_t handle:SPI接口句柄 char* pcmd:命令数据存放地址 int cmdsize:命令数据长度 char* pdata:读数据存放地址 int size:读数据长度(按字节)

【返回值】:int类型, 0,成功;其他,出错

3.6.6. SPI接口写操作函数

int spi_write (spi_t handle, char* pcmd, int cmdsize, char* pdata, int size)

【功能】:

SPI接口写操作函数

【参数】:

spi_t handle:SPI接口句柄 char* pcmd:命令数据存放地址 int cmdsize:命令数据长度 char* pdata:写数据存放地址 int size:写数据长度(按字节)

【返回值】:int类型, 0,成功;其他,出错

16

10 11 mmq_getinfo() mmq_show() 获取消息队列概要 显示消息队列信息 3.11.

多核间互斥操作

多核间互斥操作是基于硬件信号量,保证多核间资源共享与操作的扩展类自旋锁机制。多核访问共享缓冲区或资源时,访问操作前加锁,以避免交错访问导致不可预期后果,访问后释放锁。定义如表3-12所示的多核间互斥操作编程接口。

图3-2 多核间锁机制模型示意图

表3-12给出多核间互斥操作编程接口列表。

表3-12 多核间互斥编程接口 序号 1 2 3 4 5 接口标识 mmutex_create() mmutex_delete() mmutex_lock() mmutex_unlock() mmutex_status() 接口名称 创建核间互斥锁 删除核间互斥锁 核间加锁操作 核间解锁操作 核间互斥锁状态 接口描述

27

3.11.1. 创建核间互斥锁函数

mmutex_t mmutex_create (void* param, void* func)

【功能】:

创建核间自旋锁对象(暂定)

【参数】:

void* param:创建参数设置结构体指针,为空指针(即0),则

按照默认模式创建

void* func:回调函数参数指针,为空指针(即0),则不挂载

【返回值】:mmutex句柄类型, 不为零,创建成功;0,创建失败(暂定)

3.11.2. 删除核间互斥锁函数

int mmutex_delete (mmutex_t* phandle)

【功能】:

删除核间自旋锁

【参数】:

mmutex_t* phandle:核间自旋锁句柄指针

【返回值】:int类型, 0,工作正常;其他,出错(暂定)

3.11.3. 核间加锁函数

int mmutex_lock(mmutex_t handle, int level)

【功能】:

核间加锁。正常加锁,解锁前,其他加锁进程挂起;进程级,解锁前,关闭进程调度,不可以在中断中使用;中断级,解锁前,关闭全局中断,用于中断中,且仅在加锁时间短的场合使用。

28

【参数】:

mmutex_t handle:核间自旋锁句柄

int level:加锁层级,0,正常(默认),1,进程,2,中断

【返回值】:int类型, 0,成功;其他,出错(暂定)

3.11.4. 核间解锁函数

int mmutex_unlock(mmutex_t handle)

【功能】:

核间解锁。解锁,并依据加锁时的层级,回复状态。正常级,无操作;进程级,解锁后开启进程调度;中断级,解锁后打开全局中断。

【参数】:

mmutex_t handle:核间自旋锁句柄

【返回值】:int类型, 0,成功;其他,出错(暂定)

3.11.5. 查询核间锁状态函数

int mmutex_status(mmutex_t handle)

【功能】:

获取核间锁工作状态

【参数】:

mmutex_t handle:核间自旋锁句柄

【返回值】:int类型, 0,解锁;1,加锁;其他,出错(暂定)

29

3.12.

Cache操作

cache操作是用户需要使用cache有特殊要求时,对cache管理的手段。表3-13给出cache管理编程接口列表。

表3-13 cache管理编程接口列表 序号 1 2 3 4 5 6 7 接口标识 cache_init() cache_enable() cache_disable() cache_set() cache_flush() cache_invalidate () cache_data_sync () 接口名称 初始化cache 全局允许cache功能 全局禁止cache功能 内存cache设定 内存cache回写函数 禁止内存cache功能 内存cache数据同步函数 接口描述 3.13.

内存操作

内存操作是用户经常使用的。除去POSIX接口外,对内存有特殊要求时,设置和管理内存。表3-14给出内存管理编程接口列表。

表3-14 内存管理编程接口列表 序号 1 2 3 4 5 6 接口标识 ms_alloc() ms_free() l2_alloc() l2_free() ddr_alloc() ddr_free() 接口名称 MSM内存分配 MSM内存释放 L2SRAM内存分配 L2SRAM内存释放 DDR内存分配 DDR内存释放 接口描述

30

3.14.

RIO操作

RIO接口是C6678高速数据交换的关键途径之一。操作系统内核管理与初始化RIO接口,并按照表3-15要求提供RIO访问函数,实现RIO读写操作、消息操作及门铃操作。

表3-15给出RIO编程接口列表。表中函数为基于基本rio操作的函数接口,还需要提供类似以太网Socket套接字操作的rapidIO操作接口(即扩展socket的类别,提供rapidIO类别)。

表3-15 RIO编程接口 序接口标识 接口名称 号 1 rio_init() 初始化RapidIO 模块 2 rio_open() 打开RapidIO对象 3 rio_close() 关闭RapidIO对象 4 rio_config() 配置RapidIO 模块 5 rio_dread() dio模式RapidIO读 6 rio_dwrite() dio模式RapidIO写 7 rio_nread() nread模式RapidIO读 8 rio_nwrite() nwrite模式RapidIO写 9 rio_mread() RapidIO维护读 10 rio_mwrite() RapidIO维护写 11 rio_doorbell_send() RapidIO门铃发送 12 rio_db_handle() RapidIO门铃回调函数挂载 13 rio_msg_receive () RapidIO消息接收 14 rio_msg_send () RapidIO消息发送 15 rio_msg_handle () RapidIO消息回调函数挂载 16 rio_status() RapidIO硬件状态 17 rio_swrite() swrite模式RapidIO写 18 rio_datastream() 数据流模式RapidIO操作 19 rio_id_get() RapidIO接口ID读取 20 rio_id_set() RapidIO接口ID设置 21 rio_seach() 主RapidIO节点枚举操作 接口描述 类型 基本接口

31

3.7.

GPIO接口是C6678芯片的基本接口,提供外部中断输入。操作系统提供GPIO接口的硬件资源编程接口,用于访问GPIO接口硬件资源。

表3-8给出GPIO接口编程接口列表。

序接口标识 接口名称 号 1 gpio_init() 初始化GPIO 2 gpio_open() 打开GPIO 3 gpio_close() 关闭GPIO 4 gpio_data_dir() GPIO方向设置 5 gpio_data_read() GPIO读操作 6 gpio_data_write() GPIO写操作 7 gpio_pin_set() GPIO位设置操作 8 gpio_pin_get() GPIO位读操作 9 gpio_int_en() GPIO位中断使能操作 10 gpio_int_dis() GPIO位中断禁止操作 11 gpio_show() GPIO寄存器信息显示 表3-8 GPIO编程接口

接口描述 具体参看3.7.1 具体参看3.7.2 具体参看3.7.3 具体参看3.7.4 具体参看3.7.5 具体参看3.7.6 具体参看3.7.7 具体参看3.7.8 具体参看3.7.9 具体参看3.7.10 具体参看3.7.11 类型 GPIO接口操作

基本

3.7.1. 初始化GPIO接口函数 int gpio_init (void)

【功能】:

初始化GPIO接口硬件资源模块,本函数不要求支持多核多进程操作,必须0核操作

【参数】:

【返回值】:int类型,0,成功;不为零,失败

17

3.7.2. 打开GPIO接口函数 gpio_t gpio_open (void* param)

【功能】:

打开GPIO接口对象

【参数】:

void* param:创建参数设置结构体指针

【返回值】:gpio句柄类型, 不为零,创建成功;0,创建失败

3.7.3. 关闭GPIO接口函数 int gpio_close (gpio_t* phandle)

【功能】:

关闭GPIO接口对象

【参数】:

gpio_t* phandle:GPIO句柄指针

【返回值】:int类型, 0,成功;其他,出错

3.7.4. GPIO接口方向设置函数

int gpio_data_dir (gpio_t handle, int dir)

【功能】:

GPIO接口各位的方向设置操作

【参数】:

gpio_t handle:GPIO接口句柄

int dir:方向数据,0~15位对应GPIO0~15,0,输出,

18

,输入1

【返回值】:int类型,0,成功;其他,出错

3.7.5. GPIO接口读操作函数

int gpio_data_read (gpio_t handle, int* pdata)

【功能】:

GPIO接口读操作函数

【参数】:

gpio_t handle:GPIO接口句柄 int*

pdata:读数据存放地址

【返回值】:int类型, 0,成功;其他,出错

3.7.6. GPIO接口写操作函数

int gpio_data_write (gpio_t handle, int data)

【功能】:

GPIO接口写操作函数

【参数】:

gpio_t handle:GPIO接口句柄 int data:待写数据

【返回值】:int类型, 0,成功;其他,出错

3.7.7. GPIO接口位设置操作函数

int gpio_pin_set (gpio_t handle, int pin, int val)

【功能】:

GPIO接口对位设置操作函数

【参数】:

19

gpio_t handle:GPIO接口句柄

int pin:GPIO的pin号,0~15对应GPIO0~15 int val:0:清空,1:置位

【返回值】:int类型, 0,成功;其他,出错

3.7.8. GPIO接口位读操作函数

int gpio_pin_get (gpio_t handle, int pin, int* pval)

【功能】:

GPIO接口对位设置操作函数

【参数】:

gpio_t handle:GPIO接口句柄

int pin:GPIO的pin号,0~15对应GPIO0~15 int* pval:读处位数据存放地址

【返回值】:int类型, 0,成功;其他,出错

3.7.9. GPIO接口位中断使能函数

int gpio_int_en (gpio_t handle, int pin, int edge)

【功能】:

GPIO接口对应位中断使能设置操作函数

【参数】:

gpio_t handle:GPIO接口句柄

int pin:GPIO的pin号,0~15对应GPIO0~15

int edge:中断模式,0:电平触发,1:上升沿触发,2:下降沿

触发,3:双沿触发

20

【返回值】:int类型, 0,成功;其他,出错

3.7.10. GPIO接口位中断禁止函数 int gpio_int_dis (gpio_t handle, int pin)

【功能】:

GPIO接口对应位中断禁止操作函数,禁止该位响应中断,并清除对应中断标志

【参数】:

gpio_t handle:GPIO接口句柄

int pin:GPIO的pin号,0~15对应GPIO0~15

【返回值】:int类型, 0,成功;其他,出错

3.7.11. GPIO接口信息显示函数 int gpio_show (void)

【功能】:

按照格式打印GPIO接口当前信息

【参数】:

【返回值】:int类型, 0,成功;其他,出错

3.8.

EMIF操作

EMIF接口是C6678芯片外部内存扩展的重要接口,可用于用户FPGA设备扩展和寄存器空间的拓展。所以,操作系统内核提供如表3-9所定义的EMIF编程接口,用于管理与使用EMIF接口硬件资源。

21

表3-9给出EMIF接口编程接口列表。

序号 1 2 接口标识 emif_init() emif_set() 表3-9 EMIF接口编程接口

接口名称 初始化EMIF接口 EMIF接口设置 接口描述 具体参看3.8.1 具体参看3.8.2 类型 基本

3.8.1. 初始化EMIF接口函数 int emif_init (void)

【功能】:

初始化EMIF接口硬件资源模块,本函数不要求支持多核多进程操作,必须0核操作

【参数】:

【返回值】:int类型,0,成功;不为零,失败

3.8.2. EMIF接口设置函数

int emif_set (int cs, void* param)

【功能】:

设置EMIF接口参数,本函数不要求支持多核多进程操作,必须0核操作

【参数】:

int cs:EMIF的CS号,0~3对应CS0~3 void* param:设置参数结构体指针

【返回值】:int类型, 0,成功;不为零,失败

22

3.9.

HyperLink操作

HyperLink接口是C6678芯片特有的高速点到点接口,本地物理地址映射为远程目的地址方式,通过DMA或直接内存操作实现数据交换。为保证接口传输效率与使用的便捷性,操作系统内核提供如表3-9所定义的HyperLink接口编程接口,用于管理与使用HyperLink接口硬件资源。

表3-10给出HyperLink接口编程接口列表。

序接口标识 接口名称 号 1 hyplnk_init() 初始化HyperLink接口 2 hyplnk_open() 打开HyperLink 3 hyplnk_close() 关闭HyperLink 4 hyplnk_notify() HyperLink提醒操作 5 hyplnk_window() HyperLink窗口映射 6 hyplnk_read() HyperLink读操作 7 hyplnk_write() HyperLink写操作 表3-10 HyperLink编程接口

接口描述 具体参看3.3.1 具体参看3.3.2 具体参看3.3.3 具体参看3.3.4 具体参看3.3.5 具体参看3.3.6 具体参看3.3.7 类型 基本 扩展

3.9.1. 初始化HyperLink接口函数 int hyplnk_init (void)

【功能】:

初始化HyperLink接口硬件资源模块,本函数不要求支持多核多进程操作,必须0核操作

【参数】:

【返回值】:int类型,0,成功;不为零,失败

23

3.9.2. 打开HyperLink接口函数

hyplnk_t hyplnk_open (void* param, void* func)

【功能】:

打开HyperLink接口对象

【参数】:

void* param:创建参数设置结构体指针 void* func:中断回调函数参数指针

【返回值】:hyplnk句柄类型, 不为零,创建成功;0,创建失败

3.9.3. 关闭HyperLink接口函数 int hyplnk_close (hyplnk_t* phandle)

【功能】:

关闭HyperLink接口对象

【参数】:

hyplnk_t* phandle:HyperLink接口句柄指针

【返回值】:int类型, 0,成功;其他,出错

3.9.4. HyperLink提醒操作函数 int hyplnk_notify (hyplnk_t handle)

【功能】:

通过HyperLink接口向目的设备发送提醒中断操作

【参数】:

hyplnk_t handle:HyperLink接口句柄指针

24

【返回值】:int类型, 0,成功;其他,出错

3.9.5. HyperLink窗口映射函数

int hyplnk_window (hyplnk_t handle)

【功能】:

HyperLink接口窗口映射操作

【参数】:

hyplnk_t handle:HyperLink接口句柄指针

【返回值】:int类型, 0,成功;其他,出错

3.9.6. HyperLink读操作函数

int hyplnk_read (hyplnk_t handle, unsigned int raddr, unsigned int* pdata,

unsigned int size, int mode)

【功能】:

HyperLink接口读操作

【参数】:

hyplnk_t handle:HyperLink接口句柄指针 unsigned int raddr:目的地址(全局地址) unsigned int* pdata:本地存储空间指针 unsigned int size:读取数据长度(字节计数) int mode:传输模式,0,正常模式,1,DMA模式

【返回值】:int类型, 0,成功;其他,出错

3.9.7. HyperLink写操作函数

int hyplnk_write (hyplnk_t handle, unsigned int raddr, unsigned int* pdata,

25

unsigned int size, int mode)

【功能】:

HyperLink接口写操作

【参数】:

hyplnk_t handle:HyperLink接口句柄指针 unsigned int raddr:目的地址(全局地址) unsigned int* pdata:本地存储空间指针 unsigned int size:写数据长度(字节计数) int mode:传输模式,0,正常模式,1,DMA模式

【返回值】:int类型, 0,成功;其他,出错

3.10.

多核间消息操作

多核间消息队列是核间通讯的主要手段。的另外一个关键资源为DMA资源。通过对共享缓冲区的访问与QMSS的操作,实现核间无缝的消息队列通讯,保证核间进程的实时通讯。操作系统内核为方便用户使用QMSS硬件资源,构建核间消息通讯,定义如表3-11所示的核间消息操作编程接口。

表3-11给出核间消息操作编程接口列表。

表3-11 核间消息编程接口 序号 1 2 3 4 5 6 7 8 9 接口标识 mmq_create() mmq_delete() mmq_open() mmq_close() mmq_unlink() mmq_send() mmq_receive() mmq_setattr() mmq_getattr() 接口名称 创建未命名消息队列 删除未命名消息队列 打开命名消息队列 关闭命名消息队列 删除消息队列 发送消息 接收消息 设置消息队列属性 获取消息队列属性 接口描述 26

本文来源:https://www.bwwdw.com/article/mll2.html

Top