微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 关于CC2640 UART的低功耗应用

关于CC2640 UART的低功耗应用

时间:10-02 整理:3721RD 点击:

1、 用的 Peripheral DEMO, 打开POWER_SAVING后就无法使用 UART。 请求响应的修改方法、资料

2、 用的SCS产生的DEMO, 是直接回传的。 然后发现每次发送的数据超过 712Bytes就 “回传漏码”; 还有SCS无法生成 带RTOS的UART驱动, 那应该怎样移植到实际应用中?

3、 如果 UART用 SCS接收, 那 SCIF_UART_RX_FIFO_MAX_COUNT 和 pRxBuffer[ ] 分别是存放在哪个RAM? 最大能设多大?

4、 如果在低功耗 Standby状态,Sensor Controller 是启动的, 但是 Peripherals 是off的, 如下图:

UART用的SCS接收, 那此时UART 是否能够接收呢

24兆晶振如果off 串口当然不能工作了!

你好,

首先你看得非常仔细和专业,指的表扬。

如果你在使用CC2640的过程当中需要一直打开UART,那你肯定是不能用主核M3去操作串口。而必须使用sensor controller engine.

Sensor Controller 是一个单独的操作MIPS协处理器的IDE工具,其生成的代码为二进制代码,你需要把这部分代码嵌入到IAR application 的程序当中,这是一段二进制代码。存放在scif.c文件里面。

/// Firmware image to be uploaded to the AUX RAM
static const uint16_t pAuxRamImage[] = {
/*0x0000*/ 0x1408, 0x040C, 0x1408, 0x042C, 0x1408, 0x0447, 0x1408, 0x044D, 0x4436, 0x2437, 0xAEFE, 0xADB7, 0x6442, 0x7000, 0x7C6B, 0x6870,
/*0x0020*/ 0x0068, 0x1425, 0x6871, 0x0069, 0x1425, 0x6872, 0x006A, 0x1425, 0x786B, 0xF801, 0xFA01, 0xBEF2, 0x786E, 0x6870, 0xFD0E, 0x6872,
/*0x0040*/ 0xED92, 0xFD06, 0x7C6E, 0x642D, 0x0451, 0x786B, 0x8F1F, 0xED8F, 0xEC01, 0xBE01, 0xADB7, 0x8DB7, 0x6630, 0x6542, 0x0000, 0x186E,
/*0x0060*/ 0x9D88, 0x9C01, 0xB60D, 0x1067, 0xAF19, 0xAA00, 0xB609, 0xA8FF, 0xAF39, 0xBE06, 0x0C6B, 0x8869, 0x8F08, 0xFD47, 0x9DB7, 0x086B,
/*0x0080*/ 0x8801, 0x8A01, 0xBEEC, 0x262F, 0xAEFE, 0x4630, 0x0451, 0x5527, 0x6642, 0x0000, 0x0C6B, 0x140B, 0x0451, 0x6742, 0x86FF, 0x03FF,
/*0x00A0*/ 0x0C6D, 0x786C, 0xCD47, 0x686D, 0xCD06, 0xB605, 0x0000, 0x0C6C, 0x7C6F, 0x652D, 0x0C6D, 0x786D, 0xF801, 0xE92B, 0xFD0E, 0xBE01,
/*0x00C0*/ 0x6436, 0xBDB7, 0x241A, 0xA6FE, 0xADB7, 0x641A, 0xADB7, 0x0000, 0x009C, 0x009F, 0x00CC, 0x0000, 0x0000, 0xFFFF, 0x0000, 0x0000,
/*0x00E0*/ 0x0000, 0x0000, 0x0000, 0x0008, 0x0009, 0x00F0, 0x00F1, 0x0078, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/*0x0100*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/*0x0120*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7001, 0x14CD, 0xADB7, 0x0000,
/*0x0140*/ 0x589B, 0xD001, 0x8D2D, 0xBE04, 0x5073, 0xFF1D, 0x14D1, 0x04AB, 0x5073, 0xFF1D, 0x14D9, 0x8801, 0x8A02, 0xAEF2, 0x089A, 0x189B,
/*0x0160*/ 0x2877, 0xA801, 0x9F3A, 0x089B, 0x8801, 0x0C9B, 0x089A, 0x8801, 0x0C9A, 0x089A, 0x8A10, 0xAE02, 0x0000, 0x0C9A, 0x089B, 0x8C0F,
/*0x0180*/ 0xBE08, 0x089B, 0x8DAC, 0x1877, 0x8F29, 0x7075, 0x6022, 0x5044, 0x14E1, 0x700A, 0x14CD, 0xADB7, 0xADB7, 0x686B, 0xE867, 0xFF2E,
/*0x01A0*/ 0xADB7, 0xED47, 0xEDAB, 0xE814, 0xF007, 0x5001, 0xDD87, 0xDF26, 0xADB7, 0xED47, 0xEDAB, 0xE816, 0xF007, 0x5001, 0xDD87, 0xDF26,
/*0x01C0*/ 0xADB7, 0xCF0F, 0xCD26, 0xED47, 0xE803, 0xEDA1, 0xED25, 0xCD2E, 0xAE02, 0xCD1D, 0xC401, 0xCF37, 0xEF17, 0xDD44, 0xDDA9, 0xDF2F,
/*0x01E0*/ 0x786B, 0x5001, 0xDD87, 0xCD2E, 0xBE01, 0xDDA0, 0x786C, 0xFD0D, 0x7C6C, 0xADB7
};

那M3如何调用该段程序呢?

这里要说的是IAR需要相应的驱动,这个驱动函数由sensor controller生成。

因为你的CC2640代码都是带TI rtos,建议你参考戴TI-RTOS的例程,然后你在你CC2640的工程上新建一个task来初始化和操作SCE。

再来回答你问题二,

下图应该完全可以回答你的问题。

接着说,

SCE可以操控制定的外设。

所以UART你可以配置为SCE控制,配置如下所示,

buffer长度也是可改的。

所以,到这一步,你就可以独立用SEC操作UART了。

下面你需要采集一段数据通知M3,这里你需要另外一个函数。

这个函数的名字是fwSwitchOutputBuffer

如何开启见下L:

好了,

完整的工程可以参考ADC的例子,移植到你的工程里面,把SCE用起来把。

1、 就是说: 对于M3和SCE, 外设都是完全独立的!?

2、 对于 multiple-buffered, 我发现 SCS生成的 代码有误:

输出缓冲区在没有设置multiple-buffered的时候本来是 output, 设置后就应该为 pOutput[x]才对,并且处理代码也应该有相应的更改

你好,

你生成的是带TI RTOS的代码还是不带RTOS的代码?

我建议你直接拿ADC的demo移植到你的程序当中先把SCE的平台搭建起来。

拿ADC的demo是有点道理, 但是, 现在我留意到几个很严重的问题(对于我的项目,主要是串口应用,随时改变串口参数):

1、 SCE的 UART只有波特率可设置, 其余的校验位、停止位都无法设置;

2、 SCE的 UART Tx只能固定为2StopBits, 这点非常不能接受,一般开发人员都是先用串口助手测试的, 而串口应用默认就是1StopBits的, 而之前测试的所有漏码问题都是这个造成的。 真搞不懂, 为啥Tx是固定的2StopBits呢? 如果是Rx还有点解析得通。

经过一番折腾, 估计在我这项目里面SCE的UART是不适用的了,或者选择性使用

下面可能主要研究普通的UART

 你好

1、我也遇到了和你一样的问题,fwSwitchOutputBuffer函数是会自动生成的吗?我生成的代码里面怎么没有这个函数呢。我移植到工程中后,串口没有反应,目前正在调试中。

2、SCS串口的校验位只能是2位吗?能改不?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top