搜索
bottom↓
回复: 6

求助:CC2430进入不了RF中断

[复制链接]

出0入0汤圆

发表于 2008-8-14 11:02:18 | 显示全部楼层 |阅读模式
求助:CC2430进入不了RF和DMA中断。

程序是如果在同信道有包发送,测试一下能否进入RF和DMA中断,至少应该可以进入RF SFD中断。
初学CC2430,不知道问题出在那里。

#define DMA_RX_CHINNEL 0               //RFRX DMA 通道0
#define DMA_TX_CHINNEL 1               //RFTX DMA 通道1

static DMA_DESC DMA_RX_DESC;          // DMX RX 控制结构体
static DMA_DESC DMA_TX_DESC;          // DMA TX 控制结构体

int main()
{
    __disable_interrupt();
    RF_Init(18,0,0);      //18信道
    __enable_interrupt();
        while(1)
        {
               
        }
}

#pragma vector=RF_VECTOR
__interrupt static void rf_IRQ(void)
{

   INT_GLOBAL_ENABLE(INT_OFF);         //关闭总中断
   
   RFIF = 0x00;                        // 清除RF 子中断标志位
   INT_SETFLAG(INUM_RF, INT_CLR);      //清除RF 通用中断标志位
                                       
   INT_GLOBAL_ENABLE(INT_ON);
}

#pragma vector=DMA_VECTOR
__interrupt void dma_IRQ (void)
{
   INT_GLOBAL_ENABLE(INT_OFF);

   DMAIF = 0;
   DMAIRQ= 0;

   INT_GLOBAL_ENABLE(INT_ON);
}

void RF_Init(uint8 chinnel,uint8 addr_h,uint8 addr_l)  //初始化RF,并进入接收状态
{
   HARD_ADDR[0]=addr_h;                     //设置地址                    
   HARD_ADDR[1]=addr_l;                    //设置地址
  
   memset((void*) &DMA_TX_DESC, 0, sizeof( DMA_TX_DESC));   //清零DMA TX 控制结构体
   memset((void*) &DMA_RX_DESC, 0, sizeof( DMA_RX_DESC));   //清零DMA RX 控制结构体
   
   DMAARM = 0;
   DMAREQ = 0;
   DMAIRQ = 0;

   culDmaToRadio(&DMA_TX_DESC, 255, (void *)&PacketSend, TRUE);  
   //设置DMA通道关联到 RF TX
   //TX DMA由手动触发
   
   culDmaFromRadio(&DMA_RX_DESC, (void *)&PacketRecv, TRUE);                     
   //设置DMA通道关联到 RF TX,
   //RX DMA由 RF接收包触发

   DMA0CFGH=(uint16)(&DMA_RX_DESC)/256;   //设置DMA通道0 控制结构体地址
   DMA0CFGL=(uint16)(&DMA_RX_DESC)%256;
   DMA1CFGH=(uint16)(&DMA_TX_DESC)/256;   //设置DMA通道1 控制结构体地址
   DMA1CFGL=(uint16)(&DMA_TX_DESC)%256;
   
   DMA_ABORT_CHANNEL(DMA_RX_CHINNEL);     //DMA通道停止,并装载DMA RX配置

   INT_SETFLAG(INUM_DMA, INT_CLR);        //清除 DMA中断标志位
         
   INT_ENABLE(INUM_DMA, INT_ON);          //打开DMA中断
  
   
   
   RFIF = 0;                                 //清除RF中断标志
   RFIM = 0;                                 //禁止所有RF中断
   
   halRfConfig(((chinnel-10)*5+2400)*1000);   //设置信道频率
   
   IOCFG0 = 7;                                //设置RX FIFO 阈值
   TXCTRLL = 0xE7;                            //发射功率 -15 dbm
   
   INT_SETFLAG(INUM_RF,INT_CLR);             //清除RF总中断标志
   INT_ENABLE(INUM_RF,INT_ON);               //打开RF中断

   INT_SETFLAG(INUM_RFERR, INT_CLR);        //清除RF ERR中断标志
   INT_ENABLE(INUM_RFERR, INT_ON);          //打开RF ERR中断
   
    RFIM = IRQ_SFD |IRQ_TXDONE |IRQ_FIFOP;   //允许RF SFD,TXDONE和FIFOP中断
   
    SRXON;          //使能RX和频率校准合成器+  
    SFLUSHTX;       //清空 TX FIFO
    SFLUSHRX;       //清空 RX FIFO ,复位解调器
    SFLUSHRX;       //清空 RX FIFO ,复位解调器
    STXCALN;        //使能 TX 频率校准合成器  
    ISSTART;        //开始运行   
}

void culDmaToRadio(DMA_DESC* pDmaChannel, WORD length, BYTE* pSrcAddr, BOOL generateInterrupt)
{
   SET_WORD(pDmaChannel->SRCADDRH, pDmaChannel->SRCADDRL,   pSrcAddr); // The start address of the segment
   SET_WORD(pDmaChannel->DESTADDRH, pDmaChannel->DESTADDRL, &X_RFD);   // Tx FIFO address
   SET_WORD(pDmaChannel->LENH, pDmaChannel->LENL, length);             // Setting the length of the transfer (bytes)
   pDmaChannel->VLEN           = VLEN_USE_LEN;                         // Using the length field
   pDmaChannel->PRIORITY       = PRI_HIGH;                             // High priority
   pDmaChannel->M8             = M8_USE_8_BITS;                        // Transferring all 8 bits in each byte.
   pDmaChannel->IRQMASK        = generateInterrupt;                    // The DMA complete interrupt flag is set at completion.
   pDmaChannel->DESTINC        = DESTINC_0;                            // DMA 写目的地址固定
   pDmaChannel->SRCINC         = SRCINC_1;                             // DMA 读地址 每次加1
   // after each transfer.
   pDmaChannel->TRIG           = DMATRIG_NONE;                         // DMA is started by writing the DMAREQ register.
   pDmaChannel->TMODE          = TMODE_BLOCK;                          // The whole block is transferred.
   pDmaChannel->WORDSIZE       = WORDSIZE_BYTE;                        // One byte is transferred each time.

   return;
}

void culDmaFromRadio(DMA_DESC* pDmaChannel, BYTE *pDstAddr, BOOL generateInterrupt)
{
   SET_WORD(pDmaChannel->SRCADDRH, pDmaChannel->SRCADDRL,   &X_RFD);   // The start address of the segment
   SET_WORD(pDmaChannel->DESTADDRH, pDmaChannel->DESTADDRL, pDstAddr); // Tx FiFo address
   SET_WORD(pDmaChannel->LENH, pDmaChannel->LENL, 255);                // Maximum of the Tx FiFo.
   pDmaChannel->VLEN       = VLEN_1_P_VALOFFIRST;// The first byte indicates transfer length
   pDmaChannel->PRIORITY   = PRI_HIGH;
   pDmaChannel->M8         = M8_USE_7_BITS;

   pDmaChannel->IRQMASK    = generateInterrupt; // The DMA complete interrupt flag is set at completion.
   pDmaChannel->DESTINC    = DESTINC_1;         // The destination is constant
   pDmaChannel->SRCINC     = SRCINC_0;          // The address for data fetch is incremented by 1 byte after each transfer.
   
   pDmaChannel->TRIG       = DMATRIG_RADIO;     // DMA 由RF 接受包触发
   
   pDmaChannel->TMODE      = TMODE_SINGLE;      // One byte is transferred at each DMA trigger.
   pDmaChannel->WORDSIZE   = WORDSIZE_BYTE;     // Byte transfer.

   return;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2008-8-14 11:50:29 | 显示全部楼层
发现进入了RF错误中断RFERR_VECTOR。

配置RF错误在哪里呢?

出0入0汤圆

发表于 2008-8-14 12:28:23 | 显示全部楼层
你这个是精简协议栈的例子吗?
无线龙很无耻,所谓的自主研发精简协议栈其实是美国一个大学教授写的,他的网站在
http://www.ece.msstate.edu/~reese/msstatePAN/
对比一下,完全一样,除了无线龙写了个12864液晶驱动

出0入0汤圆

 楼主| 发表于 2008-8-14 12:46:04 | 显示全部楼层
中国人就是弄虚做假,吹嘘浮夸,抄袭,不尊重知识产权。

这中现状也决定:中国的技术永远落在老外后面!!

出0入0汤圆

发表于 2011-8-29 08:35:30 | 显示全部楼层
嘿!老兄,两年过去了,你还在吗?我在搞CC2430!

出0入0汤圆

发表于 2012-12-3 09:51:37 | 显示全部楼层
我也在搞这个。不过用的是simpliciTi 协议。也碰到了这个了。

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-7-24 01:26

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

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