CC2640R2F低功耗蓝牙芯片相关设计分享

电路设计简介

  1. CC2640 的 RF 差分线越短越好,做差分 100Ω 阻抗匹配。
  2. 天线部分阻抗 50 欧姆匹配,本次设计采用了陶瓷天线 AN9520-245 减少天线面积。
  3. 蓝牙芯片在底层,阻抗参考平面第三层,在天线部分下方覆铜(GND),使用嘉立创的阻抗匹配计算器计算线宽。
  4. 巴伦采用分立设计,参考官方文档。ST 公司的 BlueNRG-2 BLE 芯片可采用 BALF-NRG-02D3 巴伦封装。
  5. 天线部分转角做弧线。
  6. 可将天线线路做包地处理,减少信号干扰。

嵌入式开发

这里说的所有内容都是基于 ProjectZero 项目进行二次开发的

关于在 RTOS 中创建 Task 的一点灵感

CC2640 中分配内存主要使用的是:

void *ICall_malloc(uint_least16_t size);

配套用于释放内存的函数是:

void ICall_free(void *msg);

在这个灵感中会用到动态内存的创建和释放,所以可以稍微包装下:

mem.c 文件

#include "mem.h"
#include <icall.h>

void* c_malloc(uint_least16_t size) {
   
    return ICall_malloc(size);
}

void c_free(void* ptr) {
   
    ICall_free(ptr);
}

因为很多时候创建任务的一些结构体还有 Task 所需的缓存大小都差不多,主要是想偷偷懒,所以提前分配好一些 Task 的结构体和相关的缓冲区是否能少写一点代码呢?(我不确定这是不是个好办法但确实可以偷懒)

这是 task.c 的实现方式

#include "task.h"
#include "mem.h"
//#include <uartlog/UartLog.h>

static TASK_FACTORY _G_TASK_FACTORY = {
   0, 0, 0, 0, 0, false};

void task_init(uint32_t task_num, uint32_t stack_size) {
   
    if (_G_TASK_FACTORY.is_init) return;
    _G_TASK_FACTORY.is_init = true;
    _G_TASK_FACTORY.task_capacity = task_num;
    _G_TASK_FACTORY.stack_capacity = stack_size;
    _G_TASK_FACTORY.tasks = (Task_Struct*)c_malloc(task_num * sizeof(Task_Struct));
    _G_TASK_FACTORY.stack = (uint8_t*)c_malloc(task_num * stack_size);
}

int task_run(uint8_t priority, Task_FuncPtr func) {
   
    if (!(_G_TASK_FACTORY.is_init) || _G_TASK_FACTORY.task_size >= _G_TASK_FACTORY.task_capacity) {
   
        return -1;
    }
    Task_Params taskParams;
    Task_Params_init(&taskParams);
    taskParams.stack = _G_TASK_FACTORY.stack + _G_TASK_FACTORY.stack_capacity * _G_TASK_FACTORY.task_size;
    taskParams.stackSize = _G_TASK_FACTORY.stack_capacity;
    taskParams.priority = priority - 1;
    Task_construct(_G_TASK_FACTORY.tasks + _G_TASK_FACTORY.task_size, func, &taskParams, NULL);
    _G_TASK_FACTORY.task_size++;
    return 0;
}

以闪烁 LED 灯为例使用这两个函数:

led_task.c

#include "led_task.h"
#include "../core/task.h"
#include "ti/drivers/PIN.h"
#include "driverlib/ioc.h"
#include 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值