搜索
bottom↓
回复: 8

蛋痛的cc1110之2,用软FIFO的方式无线收发,要避免MOVX

[复制链接]

出0入0汤圆

发表于 2010-8-9 10:25:58 | 显示全部楼层 |阅读模式
我在接收无线字节时,把收到的字节放到FIFO队列中,最开始发现速率不能超过100K,不然要出错。
我定义的FIFO结构体如下。
struct
{
  UINT8 In;
  UINT8 Out;
  Uint8 Fifo[128];
}RfFifo

在仿真的时候发现产生了很多MOVX指令,而且读写FIFO的函数有48条指令。
cc1110的MOVX指令最快3个周期,最慢可以达到10个周期。
我后来优化了结构体。如下

type struct
{
    uint8_t In;
    uint8_t Out;
    uint8_t __xdata* Fifo;
}RfFifo_t;

uint8_t RxFifoBuf[RF_FIFO_SIZE];
uint8_t TxFifoBuf[RF_FIFO_SIZE];

RfFifo_t __data RfRxFifo = {0,0,RxFifoBuf};
RfFifo_t __data RfTxFifo = {0,0,TxFifoBuf};


static inline bool WtRfFifo(RfFifo_t __data* fifo,uint8_t d)
{
  uint8_t temp;
  temp = fifo->In;
  ++temp;
  temp &= (RF_FIFO_SIZE-1);
  if(temp == fifo->Out)
  {
    return false;
  }
  fifo->Fifo[fifo->In] = d;
  fifo->In = temp;
  return true;
}

static inline bool RdRfFifo(RfFifo_t __data* fifo,uint8_t* d)
{
    uint8_t temp;
    temp = fifo->Out;
    if(fifo->In == temp)
    {
        return false;
    }
    *d = fifo->Fifo[temp];  
    ++temp;
    temp &= (RF_FIFO_SIZE-1);
    fifo->Out = temp;
    return true;
}

编译仿真的时候,发现读写FIFO只有34条指令,而且MOVX只有一条。

我的经验是:中断中要表示标志的全局变量,用__data申明,而DataBuf放在__xdata中。任何一次中断,只许操作一次buf。对串口我也采用同样的优化方式。
对于cc1110这样的51内核芯片,每条指令的消耗周期比其它51都要长一点。

CC1110有128B的__data可用,一般可以把64B甚至32B的分配给中断。

出0入42汤圆

发表于 2010-8-9 10:51:57 | 显示全部楼层
看了楼主的两个CC1110的单痛贴,我不禁想问一下LZ:你开发CC1110全部是自己写这些底层的驱动吗?

CHIPCON有提供操作底层函数库的


(原文件名:未命名.JPG)

出0入0汤圆

 楼主| 发表于 2010-8-9 10:53:49 | 显示全部楼层
你那个东西我两年前就在玩,那个底层驱动也玩的蛋痛,我当时是做语音采集通讯。居然8K采样率无法全双工

出0入42汤圆

发表于 2010-8-9 10:59:00 | 显示全部楼层
回复【2楼】luoyiming1984  罗菜鸟
你那个东西我两年前就在玩,那个底层驱动也玩的蛋痛,我当时是做语音采集通讯。居然8k采样率无法全双工
-----------------------------------------------------------------------

问题出在哪里呢?

出0入0汤圆

发表于 2010-8-9 11:51:08 | 显示全部楼层
mark ,都蛋疼2了-_-|||

出0入0汤圆

 楼主| 发表于 2010-8-9 13:24:14 | 显示全部楼层
回复【3楼】my_avr
回复【2楼】luoyiming1984  罗菜鸟
你那个东西我两年前就在玩,那个底层驱动也玩的蛋痛,我当时是做语音采集通讯。居然8k采样率无法全双工
-----------------------------------------------------------------------
问题出在哪里呢?
-----------------------------------------------------------------------

1,我设置到500K的速率,但是实际无线速率只有不到100K

出0入42汤圆

发表于 2010-8-9 14:49:34 | 显示全部楼层
CC1110只有在915MHz频率、MSK调制方式下的最高速率是500K,其他的最高速率是250K

出0入0汤圆

 楼主| 发表于 2010-8-9 15:08:01 | 显示全部楼层
回复【6楼】my_avr
cc1110只有在915mhz频率、msk调制方式下的最高速率是500k,其他的最高速率是250k
-----------------------------------------------------------------------

原来是这样啊,谢谢咯。
我以前好像连250K都达不到!

出0入0汤圆

发表于 2011-6-1 17:19:26 | 显示全部楼层
MARK
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 23:04

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表