首页 » 互联网 » 低功耗蓝牙单芯片DA14580的软件体系-内核和消息处理机制_内核_接口

低功耗蓝牙单芯片DA14580的软件体系-内核和消息处理机制_内核_接口

萌界大人物 2024-12-10 07:09:32 0

扫一扫用手机浏览

文章目录 [+]

一、DA14580SOC硬件组成和软件体系组成

DA14580芯片硬件架构包括三个部分:

低功耗蓝牙单芯片DA14580的软件体系-内核和消息处理机制_内核_接口 低功耗蓝牙单芯片DA14580的软件体系-内核和消息处理机制_内核_接口 互联网

1)利用ARM公司的cortex M0作为CPUprocessor处理器。

低功耗蓝牙单芯片DA14580的软件体系-内核和消息处理机制_内核_接口 低功耗蓝牙单芯片DA14580的软件体系-内核和消息处理机制_内核_接口 互联网
(图片来自网络侵删)

2)利用RivieraWaves公司的IP核作为BLEcore和基带、射频部分。

3)集成时钟管理CMU、电源管理PMU、memory掌握存储和其他外围模块掌握器,如GPIO、UART、I2C、SPI和timer等等。

相应地,DA14580平台SDK的软件组成也包括以下组成部分:

1)ARMcortex M0平台干系的库文件,如启动、CMSIS(the cortex Microcontroller software interface standard)支持的寄存器访问、中断非常访问接口等。

2)RW公司的BLE驱动、射频驱动,此外RW BLE还集成了系统的内核部分,其供应处理、定时器和任务调度等核心功能。
以是DA14580平台SDK的开拓是基于RW公司研发的内核,而不是DIALOG公司研发的。
此部分大部分的代码都是固化在ROM里面。

3)SOC集成的其他模块的驱动,由DIALOG公司供应,如UART驱动等,此外其调用RW内核的干系接口来完成循环和低功耗功能。

4)运用程序,调用以上三个部分的接口来完成自定义功能。

我们重点剖析2)中的RW内核机制和功能。

二、RW内核

RW内核的辅导文档为《RW-BT-KERNEL-SW-FS.pdf》。
其紧张包括以下三个部分:

1)Message,处理机制。

2)Taskand Schedule,任务和调度。

3)Timer,定时器利用方法。

三、Task

RW在BLE协议栈层次的根本上抽象了多个任务task,每个task完成一个软件层次的功能。
以是说RW内核是支持多个任务task的,但实质上,RW内核也是一个单任务内核,以是各个task可以算作是能够完成特定功能的独立函数体或者函数凑集。

每个task都有一个task ID,其具有优先级功能,类似于UCOS的优先级。

RW内核和UCOS的差异是:UCOS是多任务内核,具有韶光片轮流实行,并具有互斥同步。

四、Message

4.1 标识

一个就要区分它是属于哪个task的,而且还要区分同一个task里面的不同。
以是一个Message包括两个部分:

TASK_TYPE即是task的ID。
在调度时,优先级高的task的会先得到实行处理。

4.2构造体元素

我们只须要关注赤色圈着的这五个元素,第一个元素可以看出构造体节点因此链表的形式来管理的。
HCI干系的是指USB dongle这种运用形式,由PC主机掌握蓝牙BLE,咱们不谈论这种运用。

赤色圈到的五个元素分别的是:

1)id,即第一点说到的标识。

2)由哪个目标task处理。

3)发出的task

4)参数的长度

5)参数的构造体地址

参数构造体是可以自定义的,这里通过void转换传入地址。

4.3 动态内存管理

RW内核专门给处理供应动态内存管理机制,接口是:

voidke_msg_alloc(ke_msg_id_t const id, ke_task_id_t const dest_id,

ke_task_id_t const src_id,uint16_t const param_len);

一样平常给运用供应一个宏,用于简化写法:

#defineKE_MSG_ALLOC(id, dest, src, param_str) \

(struct param_str) ke_msg_alloc(id, dest, src, sizeof(structparam_str))

开释接口是:void ke_msg_free(struct ke_msg const param);. 在调度机制里面会通过判断处理的返回值对进行相应的处理,如开释的内存。
用户编程一样平常不用调用开释接口。

4.4 接口

1)带参数的发送

voidke_msg_send(void const param_ptr); param_ptr须要通过ke_msg_alloc接口申请动态内存。

一样平常的命令发送写法如下:

structgapm_set_dev_config_cmd cmd = KE_MSG_ALLOC(GAPM_SET_DEV_CONFIG_CMD,

TASK_GAPM, TASK_APP,gapm_set_dev_config_cmd);

ke_msg_send(cmd);

2)不带参数的发送

voidke_msg_send_basic(ke_msg_id_t const id, ke_task_id_t const dest_id,ke_task_id_t const src_id)

五、TIMER

5.1 定时单位

10ms,RW内核供应一个定时器,其并不是DA14580集成的TIMER1和TIMER3。
瞄准时器的初始化等事情是在BLE初始化内部的,不须要用户编程设置。
用户只须要调用RW内核的TIMER接口即可。

5.2设置timer

voidke_timer_set(ke_msg_id_t const timer_id, ke_task_id_t const task, uint16_tconst delay);

timer_id是定时器,其属于一种不带参数的MESSAGE,delay是定时韶光,10ms为单位,当时间到达时,RW内核会发送timer_id到目标task的行列步队。
当内核schedule时即会实行定时器相应的回调。

六、Schedule

1.先取出最高优先级task的事宜,该从行列步队中pop出来

2.根据task的状态和ID来得到对应的handler

3.实行该handler回调

4.根据回调的返回值对进行处理

1)如果返回KE_MSG_CONSUMED,则内核free掉该。

2)如果返回KE_MSG_NO_FREE,则内核不处理该,但该也不会重新放到行列步队,即内核不能再从行列步队中得到该。

3)如果返回KE_MSG_SAVED,则内核不free该,并且将该重新入列。

七、基于状态机的RW内核处理机制

Task数据构造如下:

RW内核是基于状态机对进行处理的。
从ke_task_desc看来,一个task包括显式的状态处理state_handler和默认的状态处理default_handler。

state是task的状态机变量,task可能有多个状态,那么state_handler是状态处理凑集,每个状态可能会处理多个回调,例如上层task会发送来实行调用,或者下层task发送来实行回调。

default_handler处理的代表该task在任意状态时都可能受到的,例如底层task发出的断开连接。

我们也可以得出,ke_state_handler代表一个状态下的多个处理。
因此,state_handler是一个ke_state_handler数组,而default_handler则是ke_state_handler元素。

八、参考文献:

《UM-B-015_DA14580 Software architecture v4.0.pdf》、

《RW-BT-KERNEL-SW-FS.pdf》。

下一篇,敬请期待:

环球最低功耗蓝牙单芯片DA14580的软件体系

-层次架构和BLE事宜处理过程

嵌入式企鹅圈原创团队由阿里、魅族、nvidia、龙芯、炬力、拓尔思等资深工程师组成,分享嵌入式、Linux、物联网、GPU、Android、自动驾驶等技能。
欢迎关注微信"大众号:嵌入式企鹅圈,获取近60篇原创历史文章!

标签:

相关文章

详解IC芯片对EMI控制的影响_暗记_旗子

其二:在考虑EMI掌握时,设计工程师及PCB板级设计工程师首先该当考虑IC芯片的选择。集成电路的某些特色如封装类型、偏置电压和芯片...

互联网 2024-12-28 阅读0 评论0

福州IT行业价格介绍,数字经济的璀璨明珠

近年来,随着我国经济的快速发展,信息技术(IT)行业逐渐崛起,成为推动社会进步的重要力量。福州作为东南沿海的重要城市,其IT行业发...

互联网 2024-12-28 阅读0 评论0

LG决定拆分芯片营业_韩国_团体

据路透社宣布,本日,韩国LG公司表示,其董事会已决定重组LG集团,将显示芯片设计厂商Silicon Works Co Ltd等一些...

互联网 2024-12-28 阅读0 评论0