📄 main.c
字号:
/*****************************************************************************
* *
* ********** *
* ************ *
* *** *** *
* *** +++ *** *
* *** + + *** *
* *** + CHIPCON CC1010 EXAMPLE PROGRAM *
* *** + + *** SIMPLE+FAST RX/TX SWITCHING *
* *** +++ *** *
* *** *** *
* *********** *
* ********* *
* *
*****************************************************************************
* This program makes the CC1010 automatically switch between RX/TX *
* at high rate. *
*****************************************************************************
* Author: TOS *
*****************************************************************************
* Revision history: *
* *
* $Log: main.c,v $
* Revision 1.2 2003/05/12 11:11:10 tos
* Configured TESTMUX to output frequency synthesizer clock on pin0.1.
*
* Revision 1.1 2003/04/28 14:24:54 tos
* Initial version in CVS.
*
*
* *
****************************************************************************/
#include <chipcon/reg1010.h>
#include <chipcon/cc1010eb.h>
#include <chipcon/hal.h>
// Note: Separation is set to zero for all RF settings, this is done so that the
// user can measure on an unmodulated carrier in TX mode
#ifdef FREQ868
// X-tal frequency: 14.745600 MHz
// RF frequency A: 868.277200 MHz Rx
// RF frequency B: 868.277200 MHz Tx
// RX Mode: Low side LO
// Frequency separation: 0 kHz
// Data rate: 2.4 kBaud
// Data Format: Manchester
// RF output power: 4 dBm
// IF/RSSI: RSSI Enabled
RF_RXTXPAIR_SETTINGS code RF_SETTINGS = {
0x4B, 0x2F, 0x0F, // Modem 0, 1 and 2
0x75, 0xA0, 0x00, // Freq A
0x58, 0x33, 0x63, // Freq B
0x00, 0x00, // FSEP 1 and 0
0x40, // PLL_RX
0x30, // PLL_TX
0x6C, // CURRENT_RX
0xF3, // CURRENT_TX
0x32, // FREND
0xFF, // PA_POW
0x00, // MATCH
0x00, // PRESCALER
};
#endif
#ifdef FREQ915
// X-tal frequency: 14.745600 MHz
// RF frequency A: 915.027455 MHz Rx
// RF frequency B: 915.027455 MHz Tx
// RX Mode: Low side LO
// Frequency separation: 0 kHz
// Data rate: 2.4 kBaud
// Data Format: Manchester
// RF output power: 4 dBm
// IF/RSSI: RSSI Enabled
RF_RXTXPAIR_SETTINGS code RF_SETTINGS = {
0x4B, 0x2F, 0x0F, // Modem 0, 1 and 2
0xAA, 0x80, 0x00, // Freq A
0x5C, 0xF4, 0xD7, // Freq B
0x00, 0x00, // FSEP 1 and 0
0x58, // PLL_RX
0x30, // PLL_TX
0x6C, // CURRENT_RX
0xF3, // CURRENT_TX
0x32, // FREND
0xFF, // PA_POW
0x00, // MATCH
0x00, // PRESCALER
};
#endif
#ifdef FREQ433
// X-tal frequency: 14.745600 MHz
// RF frequency A: 433.302000 MHz Rx
// RF frequency B: 433.302000 MHz Tx
// RX Mode: Low side LO
// Frequency separation: 0 kHz
// Data rate: 2.4 kBaud
// Data Format: Manchester
// RF output power: 10 dBm
// IF/RSSI: RSSI Enabled
RF_RXTXPAIR_SETTINGS code RF_SETTINGS = {
0x4B, 0x2F, 0x0A, // Modem 0, 1 and 2
0x58, 0x00, 0x00, // Freq A
0x41, 0xFD, 0xDC, // Freq B
0x00, 0x00, // FSEP 1 and 0
0x60, // PLL_RX
0x48, // PLL_TX
0x44, // CURRENT_RX
0x81, // CURRENT_TX
0x0A, // FREND
0xFF, // PA_POW
0xC0, // MATCH
0x00, // PRESCALER
};
#endif
// Calibration data
RF_RXTXPAIR_CALDATA xdata RF_CALDATA;
ulong timeout;
word tCounter;
char state;
int int_cntr;
void main() {
// Disable watchdog timer
WDT_ENABLE(FALSE);
// Set optimum settings for speed and low power consumption
MEM_NO_WAIT_STATES();
FLASH_SET_POWER_MODE(FLASH_STANDBY_BETWEEN_READS);
// Calibrate
halRFCalib(&RF_SETTINGS, &RF_CALDATA);
// Turn on RF for RX
halRFSetRxTxOff(RF_RX, &RF_SETTINGS, &RF_CALDATA);
// Enable bitmode, start RX
RF_SET_BITMODE();
RF_START_RX();
BLED_OE(TRUE); BLED = LED_OFF;
GLED_OE(TRUE); GLED = LED_OFF;
RLED_OE(TRUE); RLED = LED_OFF;
YLED_OE(TRUE); YLED = LED_ON;
// Set port0 pin 1 direction
halSetPortBitDir(0, 1, POUT);
// Set up so that internal synth.clock is present on p0.1
TESTMUX = 0x01;
// Configure timer 0 to generate an interrupt after 6 msec.
int_cntr = 0;
timeout = 5000; // usec
halConfigTimer01(TIMER0 | TIMER01_INT_TIMER, timeout, CC1010EB_CLKFREQ, &tCounter);
INT_ENABLE(INUM_TIMER0, INT_ON);
TIMER0_RUN(TRUE);
INT_GLOBAL_ENABLE(TRUE);
while(1){
}
}
//----------------------------------------------------------------------------
// Timer 0 interrupt service routine:
//----------------------------------------------------------------------------
void TIMER0_ISR() interrupt INUM_TIMER0 {
// Reset the timer to generate another interrupt
INT_SETFLAG (INUM_TIMER0, INT_CLR);
ISR_TIMER0_ADJUST(tCounter);
if(state == 1){
state=0;
halRFSetRxTxOff(RF_TX, &RF_SETTINGS, &RF_CALDATA);
RF_START_TX();
}else{
state=1;
halRFSetRxTxOff(RF_RX, &RF_SETTINGS, &RF_CALDATA);
RF_START_RX();
}
// Toggle LEDs
if(int_cntr-- < 0){
int_cntr = 0x0010;
RLED = ~RLED;
YLED = ~YLED;
}
} // TIMER0_ISR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -