CC2530定时器有BUG:定时器3,4,Modulo Mode无法产生中断。
CC2530定时器有BUG:定时器3,4,Modulo Mode无法产生中断。http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_544758.JPG
(原文件名:Image0008.JPG)
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_544759.JPG
(原文件名:Image0007.JPG) 点击此处下载 ourdev_544760.rar(文件大小:18K) (原文件名:cc2530_test_t3.rar)
#include <iocc2530.h>
typedef unsigned charuint8;
typedef unsigned short uint16;
typedef unsigned longuint32;
#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);
} 请问上官,CC2530比CC2430发射功率提高了2倍多,通讯距离提高了多少?
可否说说你的感觉,让我们也参考参考 没有两倍多空旷距离大概200米 左右 上官兄你的DMA用起来没有? 我卡在这里了~ 楼上拿DMA做什么? 回复【楼主位】voidx
-----------------------------------------------------------------------
楼主是自己做的板子还是买的实验板测的? 不错,可以作为入门的开始 代码写错了尽然说芯片有bug。。。
页:
[1]