This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC1110-CC1111:1111:CC1110时间中断问题

Guru**** 1785650 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/589169/cc1110-cc1111-cc1110-time-interrupt-issue

部件号:CC1110-CC1111</s>1111

TI专家,您好!

我在CC1110芯片组上开发了射频接收器程序,该程序通过ISR例程持续接收射频数据包。 在这个问题中,我还启用了timer0作为时间间隔计数,它每800ms生成一次中断。 但是,我注意到,只要对计时器中断提供服务,CC1110就不再接收数据包(从未再次生成RF数据包接收中断)。 如果我禁用time0中断,RF数据包接收功能将再次恢复正常。 我试图操纵其他计时器,结果也一样。 我只是想知道计时器和RF数据包接收之间是否存在任何连接?  计时器中断处理会对RF接收功能产生什么影响? 以下是计时器例程的快照,供您参考。

#include <ioCC1110.h>

#include <ioCCxx10_bitdef.h>

char flag_1s;

无符号int计数1;

void Timer1_init(void)

// 1.清除计时器1通道0中断标志

//硬件会自动清除计时器1的CPU中断标志(IRCON_T1IF)。

T1CTL &=~T1CTL_CH0IF;//0000和 1101 1111111=0

// 2.外围设备SFR中的单个中断启用位

T1CCTL0 |= T1CCTL0_IM;   //在通道0上启用中断

T1CCTL1 &=~T1CCTL1_IM;  //禁用通道1上的中断

T1CCTL2 &=~T1CCTL2_IM;  //禁用通道2上的中断

OVFIM = 0;          //禁用溢出中断

// 3.时间1通过设置[IEN1.T1IE=1]启用计时器1中断

T1IE = 1;

//通过设置[IEN0.EA=1]启用全局中断

//EA = 1;

// 5.将通道0设置为比较模式并切换为比较。

T1CCTL0 =(T1CCTL0和~T1CCTL0_CMP)| T1C0_TOG_ON_CMP | T1CCTL0_MODE;// 0101 0100

// 6.将预分频器的值设置为128,以获得的tickspeed  

//并将计时器1设置为自由运行模式0000 1101 10us

T1CTL =(T1CTL和~(T1CTL_MODE | T1CTL_DIV))| T1CTL_MODE_FREERUN

  | T1CTL_DIV_128;

// 7.将通道0的比较寄存器设置为3.2767万 (0xFFFF / 2)

T1CC0L = 0xFF;

T1CC0H = 0x7F;

}

//----------- 1毫秒---------------------------

#pragma vector = t1_vector

__interrupt void Timer1_ISR(void)

{  

T1CTL &=~T1CTL_CH0IF;

IF (++count1>=20)

 计数1=0;

 flag_1s=1;

}

  //p1_0 ^= 1; //切换SRF04EB LED1

}

/*******************************************************************************

 文件名:  radio_carrier_freq.c

 说明:此示例显示如何使对讲机发射未调制信号

        承运人。 对讲机设置使用SmartRFÆ Studio进行计算。

        通过设置实现非调制载波的连续发送

        偏差为零并在TX中设置对讲机。

***************** /

/*******************************************************************************

*包括

*/

#IF (芯片== 2510)

#include <ioCC2510.h>

#endif

#IF (芯片== 1110)

#include <ioCC1110.h>

#endif

#IF (芯片== 2511)

#include <ioCC2511.h>

#endif

#IF (芯片== 1111)

#include <ioCC1111.h>

#endif

#include <ioCCxx10_bitdef.h>

#include "hal_interrupT_mgmt.h"

#include "dma.h"

#include<stdio.h>

无符号字符计数=0,i=0,j;

//#include <ioCC1110.h>

#define NOP() ASM("NOP")(定义NOP() ASM [NOP])

#define DMAIF_0       0x01 // DMAIRQ寄存器中的DMA通道0中断标志

#define IRQ_done           0x10 // RFIF-中的IRQ_done位

                      //和RFIM寄存器

#define packet_length         12.

#define IEN0_RFTXRXIE   0x01

#define bitset(var, bitno)(var)|=(1<<(bitno))

#define bitclr (var,bitno)((var)&=(~(1<<(bitno))))//«Â 0

#define BITXOR (var,bitno)((var)^=(1<<(bitno)))//»°∑¥

#define bit_test( x, y)(((x)&(1<(y))!=0)

extern void inituarttest(void);

extern void uartTX_Send_word(car word);

extern void UartTX_Send_String( char *Data,int len);

extern void Timer1_init(void);

//extern void Timer1_init(void);

静态无符号字符pktRcvdFlag =0;       //每当接收数据包时设置标志

//static DMA_DESC dmaConfig;          // DMA配置的结构

静态int RxBufCount =0;       //每当接收数据包时设置标志

//unsigned char Recdata[4]="ok!";

/*******************************************************************************

*常量

*/

 Char rxBuffer[packet_length];//Œfiœfl ˝æ›

void delayus (无符号int u)

  无符号int I;

  对于(i=0;i<u*13;i++);

}

//-----------  “±÷”≥ı ºªØ-----------------------

作废Clock_Init (void)

//将系统时钟源设置为HS XOSC和最大CPU速度,

//参考号 [CLK]=>[clk_xosc.c]

睡眠&=~SLEED_OSC;

while (!(Sleep & Sleep_XOSC S));

CLKCON =(CLKCON &~(CLKCON_CLKSPD | CLKCON_OSC)| CLKSPD_DIV_1;

While (CLKCON & CLKCON_OSC);

睡眠|=睡眠_OSC;

}

//----------- RF≈‰÷√-----------------------

void radioConfigure(void)(作废无线电  

SYNC1  = 0x2D;

SYNC0  = 0xD4;

PKTLEN  =数据包长度; //数据包长度。

PKTCTRL1 = 0x00; //数据包自动化控制。

PKTCTRL0 = 0x00;   

//ADDR   = 0x00;   

//CHANNR  = 0x00;

FSCTRL1 = 0x08;  

FSCTRL0 = 0x00; //频率合成器控制。

FREQ2  = 0x21; // 868.3

FREQ1  = 0x65; //频率控制字,中间字节。

FREQ0  = 0x6A; //频率控制字,低字节。

MDMCFG4 = 0x66; //符号率

MDMCFG3 = 0x83; //  

MDMCFG2 = 0x02; //灵敏度更佳2-FSK  

MDMMCFG1 = 0x12;   

MDMCFG0 = 0xf8;   

DEVIATN = 0x51; //…Ë÷√∆´≤Ó

//MCSM2  = 0x07; //÷˜øÿ◊¥Ã¨ª˙≈‰÷√

MCSM1  = 0x1F; // º÷Ω” ◊¥Ã¨    

MCSM0  = 0x18; //¥“Ø”œ“µΩΩ” ◊¥Ã¨ª·–£◊º…Ë÷√Ω” à•ºı“”

//FOCCFG  = 0x1D; //∆µ∆´≤π≥•≈‰÷√

//BSCFG  = 0x1C; //ŒªÕ¨≤Ω≈‰÷√   

//AGCCTRL2 = 0xC7; // AGC控制。

//AGCCTRL1 = 0x00; // AGC控制。

//AGCCTRL0 = 0xB2; // AGC控制。

//FREND1  = 0xB6; //«∞∂ÀΩ” ≈‰÷√

//FREND0  = 0x10; //前端RX配置。

//FSCAL3  = 0xE9; //∆µ¬ ∫œ≥…∆˜–£◊º

//FSCAL2  = 0x2A; //频率合成器校准。

//FSCAL1  = 0x00; //频率合成器校准。

//FSCAL0  = 0x1F; //频率合成器校准。

//TEST2  = 0x81; //各种测试设置。

//TEST1  = 0x35; //各种测试设置。

//TEST0  = 0x09; //各种测试设置。

//PA_TABLE0 = 0x50; // PA输出功率设置。

返回;

}

//----------- IO≥ı ºªØ----------------------------------

void init_io(void)

/************************************************************************

 *常量

 */

 /*

//LED_Bp 2.0 LED_Gp 2.3 LED_Rp 2.4

P1SEL &=~(BIT4 | BIT3 | BIT0);// 0通用I/O

IO_DIR_PORT_PIN (2,0,IO_OUT);//LED_B

IO_DIR_PORT_PIN (2,3,IO_OUT);//LED_G

IO_DIR_PORT_PIN (2,4,IO_OUT);//LED_R

//P2INP &=~(BIT4 | BIT3 | BIT0);// 0上拉/下拉

//relay_EN p 1.1

P1SEL &=~BIT1;//通用I/O

P1DIR || BIT1;//输出

// P1INP // 0Pull-up / pull-down

// TEMP_ADp 0.1 RT1_ENp 0.0

P0SEL || BIT0;// 1外设功能

//P0INP

// key pg 0.6

P1SEL &=~BIT6;

IO_DIR_PORT_PIN(2,0,IO_IN);// 0输入

//P0INP

*/

  

//1. P2SEL端口2功能选择

P1SEL &=~(0x01);//𶃋-°'Ò

P1DIR |= 0x01;//输出

P1_0 = 1;//ƒ¨»œ ‰≥ˆ∏fl

//p1_1 = 1;//ƒ¨»œ ‰≥ˆ∏fl

//P1DIR || BIT0;// 1输出

}

/*******************************************************************************

*@fn.      主

*

*@brief   按照数据表中的建议设置系统时钟源。

*        使用n ü SmartRFÆ Studio中的设置设置对讲机。 放置对讲机

*        在TX中,即让对讲机发射未调制载波。

*

*@参数   无效

*

*@返回   0

***************** /

内部主(无效)

  Clock_Init();  

  radioConfigure();

  inituarttest();

  init_io();

   

    RFIF = 0;

    RFTXRXIF = 0;// RF TX/RX完全中断标志。  

    RFIM = IRQ_done;  

    //HAL_INT_ENABLE (INM_RF,INT_ON);//启用RF常规中断

    //IEN0 |=IEN0_RFTXRXIE;

    IEN0 |= 0x01;// RF÷–∂œ πƒ‹

  //4.  πƒ‹»´æ÷÷–∂œ

    //INT_GLOBAL_ENABLE (INT_ON);

    EA=1;

     

  RFST = RFST_Sidle;  

  RFST   = RFST_SRX;

  /*等待对讲机进入RX。 */

  while (((MARCSTATE & MARCSTATE_MARC_STATE)!= MARC_STATE);

    

  /*无线电现在位于TX中。 无限循环。 */

  同时(1)

  {

   IF (pktRcvdFlag)

   {

    pktRcvdFlag=0;

     RFST = RFST_Sidle; // RF Ø'œ–◊¥Ã¨

    UartTX_Send_String (rxBuffer,12);

    德莱尤斯(2万);

    

    // RFST = RFST_Sidle; // RF Ø Ω œ Ω–◊¥Ã¨Ω

    NOP ();

    NOP ();

    NOP ();

    NOP ();

    NOP ();

    RFST = RFST_SRX; // RF接收模式

   }

  }

}

//-----------  ˝æ›Ω” ÕÍ≥… ÷–∂œ-------------------------------

#pragma vector=RF_vector

__interrupt void RF_IRQ (void)

{  

 IF (RxBufCount<packet_length)

 {

  rxBuffer[RxBufCount]= RFD;

  RxBufCount++;

  //pktRcvdFlag = 0;

 }

  

S1CON &=~0x03;

IF (RFIF & 0x40)// RX FLOLOW Ω” ≥˝“÷–∂œ IRQ_RXOVF”Tm«Â

 //IRQ_rxovf();//处理RX溢出

 bitclr (RFIF,6);// RX溢出

 // RFIF &=~0x10; // 0x10∞¸Ω” ªÚ∑¢…˙ÕÍ≥…±Í÷æ

 //RFIF &=~0x40;// RX溢出

»Áπ˚Ω IF (RFIF和0x10)//“ ÕÍ≥…

 bitclr (RFIF,4);// 0x10∞¸Ω” ÕÍ≥…±Í÷æ

}

如果(RxBufCount >= packet_length)//接收所有RF缓冲区,重置计数器并将RF设回IDLE & RECEIFT(空闲并接收)

  RxBufCount = 0;

  pktRcvdFlag = 1;

}     

}