搜索
bottom↓
回复: 8

CC2530定时器有BUG:定时器3,4,Modulo Mode无法产生中断。

[复制链接]

出0入0汤圆

发表于 2010-4-9 11:27:16 | 显示全部楼层 |阅读模式
CC2530定时器有BUG:定时器3,4,Modulo Mode无法产生中断。


(原文件名:Image0008.JPG)


(原文件名:Image0007.JPG)

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

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

出0入0汤圆

 楼主| 发表于 2010-4-9 13:03:38 | 显示全部楼层
点击此处下载 ourdev_544760.rar(文件大小:18K) (原文件名:cc2530_test_t3.rar)


#include <iocc2530.h>


typedef unsigned char  uint8;
typedef unsigned short uint16;
typedef unsigned long  uint32;

#define _BV(A)                           (1U<<(A))
#define _BVF(A,B)                        ((unsigned int)((1UL<<(B))-1)<<(A))
#define _BVF_DATA(A,B,C)                 (((A)<<(B)) & _BVF(B,C))

#define _PRAGMA_STR(A) _Pragma(#A)
#define PRAGMA_STR(A) _PRAGMA_STR(A)
#define __VECTOR__(A) vector=A

#define ISR(A)\
PRAGMA_STR(__VECTOR__(A))\
__near_func __interrupt void ISR##_##A(void)


#define CLKCONCMD_TICKSPD                _BVF(3,3)
#define CLKCONCMD_CLKSPD                 _BVF(0,3)
#define CLKCONCMD_TICKSPD_DIV_128        (0x07 << 3)

//SLEEPCMD (0xBE) – Sleep-Mode Control Command
#define SLEEPCMD_OSC32K_CALDIS           _BV(7)
#define SLEEPCMD_OSC_PD                  _BV(2)      /*datasheet 无*/
#define SLEEPCMD_MODE(A)                 _BVF_DATA(A,0,2)

//SLEEPSTA (0x9D) – Sleep-Mode Control Status
#define SLEEPSTA_OSC32K_CALDIS           _BV(7)
#define SLEEPSTA_XOSC_STB                _BV(6)       /*  datasheet 无    */
#define SLEEPSTA_HFRC_STB                _BV(5)       /*  datasheet 无    */
#define SLEEPSTA_RST(A)                  _BVF_DATA(A,3,2)
#define SLEEPSTA_CLK32K                  _BV(0)

//T3CTL (0xCB) – Timer 3 Control
#define T3CTL_DIV(A)                      _BVF_DATA(A,5,3)
#define T3CTL_START                       _BV(4)
#define T3CTL_OVFIM                       _BV(3)
#define T3CTL_CLR                         _BV(2)
#define T3CTL_MODE(A)                     _BVF_DATA(A,0,2)

//TIMIF (0xD8) – Timer 1/3/4 Interrupt Mask/Flag
#define TIMIF_OVFIM                       _BV(6)
#define TIMIF_T4CH1IF                     _BV(5)
#define TIMIF_T4CH0IF                     _BV(4)
#define TIMIF_T4OVFIF                     _BV(3)
#define TIMIF_T3CH1IF                     _BV(2)
#define TIMIF_T3CH0IF                     _BV(1)
#define TIMIF_T3OVFIF                     _BV(0)

//IRCON (0xC0) – Interrupt Flags 4
#define IRCON_STIF                        _BV(7)
#define IRCON_P0IF                        _BV(5)
#define IRCON_T4IF                        _BV(4)
#define IRCON_T3IF                        _BV(3)
#define IRCON_T2IF                        _BV(2)
#define IRCON_T1IF                        _BV(1)
#define IRCON_DMAIF                       _BV(0)

//IEN1 (0xB8) – Interrupt Enable 1
#define IEN1_P0IE                         _BV(5)
#define IEN1_T4IE                         _BV(4)
#define IEN1_T3IE                         _BV(3)
#define IEN1_T2IE                         _BV(2)
#define IEN1_T1IE                         _BV(1)
#define IEN1_DMAIE                        _BV(0)

//CLKCONCMD (0xC6) – Clock Control Command
#define CLKCONCMD_OSC32K                 _BV(7)
#define CLKCONCMD_OSC                    _BV(6)

#define CLKCONCMD_TICKSPD_DIV_1          (0x00 << 3)
#define CLKCONCMD_TICKSPD_DIV_2          (0x01 << 3)
#define CLKCONCMD_TICKSPD_DIV_4          (0x02 << 3)
#define CLKCONCMD_TICKSPD_DIV_8          (0x03 << 3)
#define CLKCONCMD_TICKSPD_DIV_16         (0x04 << 3)
#define CLKCONCMD_TICKSPD_DIV_32         (0x05 << 3)
#define CLKCONCMD_TICKSPD_DIV_64         (0x06 << 3)
#define CLKCONCMD_TICKSPD_DIV_128        (0x07 << 3)

#define CLKCONCMD_CLKSPD_DIV_1           (0x00 << 0)
#define CLKCONCMD_CLKSPD_DIV_2           (0x01 << 0)
#define CLKCONCMD_CLKSPD_DIV_4           (0x02 << 0)
#define CLKCONCMD_CLKSPD_DIV_8           (0x03 << 0)
#define CLKCONCMD_CLKSPD_DIV_16          (0x04 << 0)
#define CLKCONCMD_CLKSPD_DIV_32          (0x05 << 0)
#define CLKCONCMD_CLKSPD_DIV_64          (0x06 << 0)
#define CLKCONCMD_CLKSPD_DIV_128         (0x07 << 0)


#define CC2530_WAIT_CLK_UPDATE()   \
do{ uint8 ____clkcon; \
    uint8 ____clkconsta; \
    ____clkcon = CLKCONCMD; \
    do { \
    ____clkconsta = CLKCONSTA; \
   } while (____clkconsta != ____clkcon); \
}while(0)


void CLK_RC_TO_XOSC(void)
{
    SLEEPCMD &= ~SLEEPCMD_OSC_PD;       //打开双震荡
   
    while((SLEEPSTA & SLEEPSTA_XOSC_STB)==0);  //等待XOSC稳定
    asm("nop");
   
    CLKCONCMD = (CLKCONCMD & ~(CLKCONCMD_CLKSPD | CLKCONCMD_OSC)) | CLKCONCMD_CLKSPD_DIV_1;
   
    CC2530_WAIT_CLK_UPDATE();
    SLEEPCMD |= SLEEPCMD_OSC_PD;
}

#define LED P1_2
void LED_Init(void)
{
  P1    &= ~_BV(2);
  P1DIR |=  _BV(2);
}

#define T1234_BASE_CLK    (32000000UL/128UL)

void T1234_BaseClkSet(void)
{
   CLKCONCMD = (CLKCONCMD & ~CLKCONCMD_TICKSPD) | CLKCONCMD_TICKSPD_DIV_128;
   CC2530_WAIT_CLK_UPDATE();
}

#define T3_CLK          (T1234_BASE_CLK/1)             //T3_CLK=T1234_CLK/1=250K


void T3_Init(void)      
{
    T3CC0 = T3_CLK/2000;

    //T3CTL  =  T3CTL_DIV(0) | T3CTL_OVFIM |  T3CTL_CLR | T3CTL_MODE(0);   //Free-Running Mode
    //T3CTL  =  T3CTL_DIV(0) | T3CTL_OVFIM |  T3CTL_CLR | T3CTL_MODE(1);   //Down Mode
    T3CTL  =  T3CTL_DIV(0) | T3CTL_OVFIM |  T3CTL_CLR | T3CTL_MODE(2);     //Modulo Mode
    //T3CTL  =  T3CTL_DIV(0) | T3CTL_OVFIM |  T3CTL_CLR | T3CTL_MODE(3);   //Up/Down Mode
   
    T3CTL |=  T3CTL_START ;
      
    TIMIF &= ~TIMIF_T3OVFIF;
   
    IRCON &= ~IRCON_T3IF;
   
    IEN1 |=   IEN1_T3IE;
}

ISR(T3_VECTOR)    //T3中断
{
    TIMIF &= ~TIMIF_T3OVFIF;
    IRCON &= ~IRCON_T3IF;
   
    LED=!LED;
}


int main()
{
    CLK_RC_TO_XOSC()   ;  //主时钟由RC切换到32M晶振
    T1234_BaseClkSet() ;  //定时器基时钟设置,128分频,250K
   
    LED_Init();         //LED初始化
    T3_Init();          //T3初始化
   
    EA=1;               //开全局中断
  
    while(1);
}

出0入0汤圆

发表于 2010-4-9 13:13:08 | 显示全部楼层
请问上官,CC2530比CC2430发射功率提高了2倍多,通讯距离提高了多少?
可否说说你的感觉,让我们也参考参考

出0入0汤圆

发表于 2010-5-10 15:00:59 | 显示全部楼层
没有两倍多  空旷距离大概200米   左右

出0入0汤圆

发表于 2010-5-10 15:02:04 | 显示全部楼层
上官兄  你的DMA用起来没有? 我卡在这里了~

出0入0汤圆

 楼主| 发表于 2010-5-10 20:09:38 | 显示全部楼层
楼上拿DMA做什么?

出0入0汤圆

发表于 2010-9-2 09:01:12 | 显示全部楼层
回复【楼主位】voidx
-----------------------------------------------------------------------

楼主是自己做的板子还是买的实验板测的?

出0入0汤圆

发表于 2012-8-27 15:45:33 | 显示全部楼层
不错,可以作为入门的开始

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-7-24 08:22

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

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