Skip to main content

HWSPINLOCK

文档说明

正文按原始 PDF 的文本层、书签层级和页面顺序转换,仅移除重复页眉、页脚与水印,不改写技术内容。

1 前言

1.1 文档简介

本文档介绍AW 平台RTOS 中Hwspinlock 驱动的接口及使用方法。

1.2 目标读者

  • RTOS Hwspinlock 模块开发工程师

  • RTOS Hwspinlock 模块使用工程师

1.3 适用范围

表1-1: 适用产品列表

产品名称内核版本驱动文件
T153FreeRTOShal_spinlock.c
T536FreeRTOShal_spinlock.c

1.4 文档约定

1.4.1 标志说明

! 注意

  • 提醒操作中应注意的事项。不当的操作可能会损坏器件,影响可靠性、降低性能等。

说明

为准确理解文中指令、正确实施操作而提供的补充或强调信息。

技巧

一些容易忽视的小功能、技巧。了解这些功能或技巧能帮助解决特定问题或者节省操作时间。

1.4.2 地址与数据描述方法约定

本文档在描述地址、数据时遵循如下约定:

表1-2: 地址与数据描述方法约定

符号例子说明
0x0x0200,0x79地址或数据以16 进制表示。
0b0b010,0b00 000 111数据采用二进制表示(寄存器描述除外)。
X00X,XX1数据描述中,X 代表0 或1。

例如,00X 代表000 或001;XX1 代表001,011,101 或111。

1.4.3 数值单位约定

本文档在描述数据容量(如NAND 容量)时,单位词头代表的是1024 的倍数;描述频率、数据速率等时则代表的是1000 的倍数。具体如下:

表1-3: 数值单位约定

类型符号对应数值
数据容量(如NAND 容1 K1024
1 M1 048 576
1 G1 073 741 824
频率,数据速率等1 k1000
1 M1 000 000
1 G1 000 000 000

1.5 相关术语介绍

1.5.1 软件术语

术语解释说明
hwspinlock在多核系统中,hwspinlock 提供一种硬件锁同步机制
HALHardware Abstraction Layer,硬件抽象层

2 模块介绍

2.1 模块功能

hwspinlock 提供一种硬件同步机制,lock 操作可以防止多处理器同时处理共享数据。保证数据的一致性。

2.2 模块配置

2.2.1 menuconfig 配置说明

-> Drivers Options-> soc related device drivers

-> Drivers V2 Config-> Hwspinlock Driver

[*] Enable Allwinner Hwspinlock Controller Unit Driver
[*] Enable HWSPINLOCK hal APIs test command

2.3 源码结构介绍

  1. 驱动源码
hal/source/hwspinlock/
├──hal_spinlock.c
├──Kconfig
├──Makefile
├──platform
│ └──hwspinlock-sun55iw6.h
─platform-hwspinlock.h
  1. 驱动APIs 声明头文件
include/hal/
└──hal_hwspinlock.h
  1. 驱动APIs 测试代码
hal/examples/hwspinlock/
├──hwspinlock_block_test.c
├──hwspinlock_noblock_test.c
├──hwspinlock_timeout_test.c
└──Makefile

2.4 模块配置介绍

配置路径如下:

Symbol: DRIVERS_V2_HWSPINLOCK [=y]
Type : boolean
Prompt: Enable Allwinner Hwspinlock Controller Unit Driver
ation:

-> Drivers Options-> soc related device drivers

-> Drivers V2 Config-> Hwspinlock Driver

3 模块接口说明

表3-1: 模块接口列表

API解释说明
hwspinlock_puthwspinlock解锁(非阻塞)
hal_hwspinlock_get_noblockhwspinlock 上锁(非阻塞)
hal_hwspinlock_check_takenhwspinlock 获取上锁状态
hal_hwspinlock_get_blockhwspinlock 上锁(阻塞)
hal_hwspinlock_get_timeouthwspinlock 带超时上锁

3.1 hal_hwspinlock_put

  • 作用:hwspinlock解锁(非阻塞)

  • 参数:

-num:锁序号

  • 返回:

-非0:失败-0:成功

3.2 hal_hwspinlock_get_noblock

  • 作用:hwspinlock 上锁(非阻塞),无论上锁是否成功都会立即返回

  • 参数:

-num:锁序号

  • 返回:

-非0:失败-0:成功

3.3 hal_hwspinlock_check_taken

  • 作用:hwspinlock 检查上锁状态

  • 参数:

-num:锁序号

  • 返回:

-非0:已上锁-0:未上锁

3.4 hal_hwspinlock_get_block

  • 作用:hwspinlock 上锁(阻塞),直到上锁成功才会返回

  • 参数:

-num:锁序号

  • 返回:

-非0:失败-0:成功

3.5 hal_hwspinlock_get_timeout

  • 作用:hwspinlock 上锁(阻塞),直到上锁成功或超时后才会返回

  • 参数:

-num:锁序号-ms_timeout:上锁超时时间

  • 返回:

-非0:超时-0:成功

4 功能开发

4.1 开发流程

步骤1 根据需求调用其中一个接口上锁,int hal_hwspinlock_get_noblock(int num)(非阻塞上锁)/hal_hwspinlock_get_block(阻塞上锁)/hal_hwspinlock_get_timeout(超时上锁)

执行需要保护的代码。

步骤3 执行hal_hwspinlock_put 解锁。

4.2 编程示例

  1. 测试demo 路径

lichee/rtos/drivers/hal_v2/hal/examples/hwspinlock/

动调用示例

非阻塞上锁应用

void app_lock_unblock(void)
{
/* hwspinlock0 lock unblock */
if (hal_hwspinlock_get_noblock(0)) {
/* hwspinlock0 lock fail */
return ;
}
/* code need to protect */
...

...

/* hwspinlock0 unlock */
hal_hwspinlock_put(0);
}

阻塞上锁应用

void app_lock_block(void)
{

/* hwspinlock0 lock block */

hal_hwspinlock_get_block(0)

/*codeneedtoprotect*/
...
...
...
/* hwspinlock0 unlock */
hal_hwspinlock_put(0);
}

超时上锁应用

void app_lock_timeout(void)
{
/* hwspinlock0 lock 1s timeout */
if (hal_hwspinlock_get_timeout(0, 1000)) {
hwspinlock0locktimeout*/
return ;
}
/* code need to protect */
...
...
...
/* hwspinlock0 unlock */
hal_hwspinlock_put(0);
}

5 调试方法

5.1 调试节点

5.1.1 hal_hwspinlock_get

_hwspinlock_getXX

  • 用途:hwspinlock 上锁测试

使用示例:

uart>hal_hwspinlock_get 0
hwspinlock get success

5.1.2 hal_hwspinlock_put

_hwspinlock_putXX

  • 用途:hwspinlock 解锁测试

使用示例:

uart>hal_hwspinlock_put 0
hwspinlock put success

6 FAQ

6.1 一号通FAQ列表

暂无

权声明

本文档及内容受著作权法保护,其著作权由珠海全志科技股份有限公司(“全志”)拥有并保留一切权利。

本文档是全志的原创作品和版权财产,未经全志书面许可,任何单位和个人不得擅自摘抄、复制、修改、发表或传播本文档内容的部分或全部,且不得以任何形式传播。

商标声明

(不完全列

举)均为珠海全志科技股份有限公司的商标或者注册商标。在本文档描述的产品中出现的其它商标,产品名称,和服务名称,均由其各自所有人拥有。

免责声明

您购买的产品、服务或特性应受您与珠海全志科技股份有限公司(“全志”)之间签署的商业合同和条款的约束。本文档中描述的全部或部分产品、服务或特性可能不在您所购买或使用的范围内。使用前请认真阅读合同条款和相关说明,并严格遵循本文档的使用说明。您将自行承担任何不当使用行为(包括但不限于如超压,超频,超温使用)造成的不利后果,全志概不负责。

本文档作为使用指导仅供参考。由于产品版本升级或其他原因,本文档内容有可能修改,如有变

恕不另行通知。全志尽全力在本文档中提供准确的信息,但并不确保内容完全没有错误,因

使用本文档而发生损害(包括但不限于间接的、偶然的、特殊的损失)或发生侵犯第三方权利事件,全志概不负责。本文档中的所有陈述、信息和建议并不构成任何明示或暗示的保证或承诺。

本文档未以明示或暗示或其他方式授予全志的任何专利或知识产权。在您实施方案或使用产品的过程中,可能需要获得第三方的权利许可。请您自行向第三方权利人获取相关的许可。全志不承担也不代为支付任何关于获取第三方许可的许可费或版税(专利税)。全志不对您所使用的第三方许可技术做出任何保证、赔偿或承担其他义务。