📄 main.c
字号:
//******************************************************************************
// 常州联力用户卡的测试程序
//******************************************************************************
#include "msp430x12x.h"
#include"MSP430.h"
#include"CC2500.h"
#include"MSP430.c"
//#include"CC2500LIB.C"
#include"CC2500.C"
#define wake_no 0
#define wake_ok 1
#define IntFlag_pulseA 0x02
#define IntFlag_pulseB 0x04
#define IntFlag_rf 0x08
#define IntFlag_power 0x10
//#define consump_write_en 0x01
#define main_delay 0x01
#define valve_delay 0x02
#define voice_delay 0x04
#define rf_delay 0x01
#define pulse_wakeup 0x01
#define rf_wakeup 0x02
#define power_wakeup 0x04
#define no_deal 0x00;
#define tx_en 0x01
#define max_uart_buffer_size 30
void InitAirInt();
void RF_DEAL();
void PULSE_DEAL(void);
void POWER_DEAL(void);
void timea_set(void);
void rx_delay(void);
void rx_delay_1(void);
void timea_set1(void);
void timea_off1(void);
void uart_send(void);
BYTE IntFlag[2] ;
//BYTE txBuffer_CC2500[] = {5, 1, 1,1,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
//BYTE rxBuffer_CC2500[0x5]={0};
unsigned char txBuffer_CC2500[8]={2,0,0,2,3,4,5,6};
unsigned char txBuffer_CC25001[30]={0x0a,0x18,0,1,2,3,0x18,2,1,0x39,0x16};
unsigned char rxBuffer_CC2500[30];
unsigned char uart_rx_buffer[30],uart_buffer_rx_idx,time_count,time_count_en;
unsigned char uart_tx_buffer[30],uart_buffer_tx_count,uart_rx_rf_tx_count;
unsigned char address[7],run_status,timer_status;
unsigned char packet_leng,tx_count;
unsigned int count_normal,count_main,count_valve,count_voice;
unsigned int count_main_max;
/*
//==============================================================================
//for software
void InitCC2500(void)
{
POWER_UP_RESET_CC2500();
halRfWriteRfSettings();
halSpiWriteBurstReg(CC2500_PATABLE,paTable,sizeof(paTable));
}*/
//==============================================================================
void main(void)
{
unsigned char i,k,temp;
InitMSP430F1232();
//i=0;
Dly1mS(6);
MCLK_HF();
// i=1;
InitCC2500();
//P3OUT |= VOICE_A;
//halSpiStrobe(CC2500_SCAL);
Dly1mS(60);
halSpiStrobe(CC2500_SIDLE);
//halSpiStrobe(CC2500_SRX);
InitAirInt();
address[0]=0x11;
address[1]=0x22;
address[2]=0x33;
//
// halSpiWriteReg(CC2500_MCSM2, 0x01); // RX_TIME = 3
// (duty cycle = 1.563% when WOR_RES = 0)
// halSpiWriteReg(CC2500_WOREVT1, 0xff); // EVENT0 = 800
// halSpiWriteReg(CC2500_WOREVT0, 0xff);
// halSpiWriteReg(CC2500_WORCTRL, 0xe8); // EVENT1 = 3
// RC_CAL = 1
// WOR_RES = 0
//--------------------------------------------------------------------------------
Dly1mS(3); // Wait for RCOSC calibration
//halSpiWriteReg(CCxxx0_WORCTRL, 0x30); // EVENT1 = 3
// RC_CAL = 0
// WOR_RES = 0
//calib1 = halSpiReadStatus(CCxxx0_RCCTRL1_STATUS);
//calib0 = halSpiReadStatus(CCxxx0_RCCTRL0_STATUS);
//halSpiWriteReg(CCxxx0_RCCTRL1, calib1);
//halSpiWriteReg(CCxxx0_RCCTRL0, calib0);
// halSpiStrobe(CC2500_SWORRST);
// halSpiStrobe(CC2500_SWOR);
time_count_en=0;
run_status=no_deal;
uart_buffer_rx_idx=0;
IntFlag[0]=0;
P3OUT |= TX_UART;
//P3OUT &= ~VOICE_A;
//--------------------------------------------------------------------------------
_EINT();
//============================================================================
timea_set();
while(1) //for RX
{
if(run_status==tx_en){
#if 1
for(k=0;k<uart_rx_rf_tx_count;k++){
txBuffer_CC25001[k+1]=uart_rx_buffer[k];
}
txBuffer_CC25001[0]=uart_rx_rf_tx_count;
txBuffer_CC2500[1]=txBuffer_CC25001[2];
txBuffer_CC2500[2]=txBuffer_CC25001[3];
run_status=no_deal;
#endif
// for(temp=0;temp<2;temp++){
Dly1mS(100);
halSpiWriteReg(CC2500_SYNC1,0xd3);/////
halSpiWriteReg(CC2500_SYNC0,0x91);/////
count_main=0;
count_main_max=76;
while(count_main<count_main_max){
//Dly1mS(1);
//halRfSendPacket(txBuffer_CC2500,(txBuffer_CC2500[0]+1));
halRfSendPacket(txBuffer_CC2500,3);
//Dly1mS(2);
halSpiStrobe(CC2500_SFTX);
}
Dly1mS(2);
halSpiWriteReg(CC2500_SYNC1, 0x91);/////
halSpiWriteReg(CC2500_SYNC0, 0xd3);/////
count_main=0;
count_main_max=10;
while(count_main<count_main_max){
halRfSendPacket(txBuffer_CC25001,txBuffer_CC25001[0]+1);
halSpiStrobe(CC2500_SFTX);
}
Dly1mS(2);
halSpiStrobe(CC2500_SIDLE);
halSpiStrobe(CC2500_SRX);
count_main=0;
count_main_max=40;
if(temp==2){
_NOP();
}
while(count_main<count_main_max){
if(IntFlag[0]&IntFlag_rf){
temp=3;
IntFlag[0]&=~IntFlag_rf ;
i=30;
halRfReceivePacket(rxBuffer_CC2500, &i);
//P3OUT |= VOICE_A;
temp=4;
for(k=0;k<packet_leng;k++){
uart_tx_buffer[k]=rxBuffer_CC2500[k];
}
uart_buffer_tx_count=packet_leng;
uart_send();
count_main=count_main_max;
}
}
//}
//}
//P3OUT &= ~VOICE_A;
//WDTCTL=0;
//run_status=tx_en;
halSpiStrobe(CC2500_SIDLE);
// halSpiStrobe(CC2500_SRX);
}
//run_status=tx_en;
}
}
//============================================================================
void InitAirInt()
{
P1IFG = 0;
P1IES |= BIT3+BIT1; // Int on falling edge (end of pkt)
P1IFG &= ~BIT3; // Clear flag
P1IFG &= ~BIT1; // Clear flag
P1IE |= BIT3+BIT1;
// P2IE |= BIT0; // Enable int on end of packet
//_BIC_SR(LPM3_bits);
}
#if 0
void RF_DEAL (void) {
BYTE length;
IntFlag[0] &= ~IntFlag_rf;
halSpiStrobe(CC2500_SIDLE);
length =sizeof(rxBuffer_CC2500);
if (halRfReceivePacket(&rxBuffer_CC2500[0],&length)) {
//halSpiStrobe(CC2500_SIDLE);
// P1OUT^=LED_RUN;
if(wakeup_status==wake_no){
if((rxBuffer_CC2500[0]==address[0])&&(rxBuffer_CC2500[1]==address[1])&&
(rxBuffer_CC2500[2]==address[2])){
wakeup_status=wake_ok;
Dly1mS(100);
halSpiStrobe(CC2500_SRX);
}else{
count_main=count_main_max;
}
}else{
Dly1mS(100);
halRfSendPacket(txBuffer_CC2500,(txBuffer_CC2500[0]+1));
Dly1mS(100);
halSpiStrobe(CC2500_SRX);
}
}
}
#endif
void timea_set(void)
{
TAR=0x0000;
CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = 20000;
TACTL = TASSEL_2 + MC_1+ID_3; // SMCLK, upmode
}
void timea_off(void)
{
CCTL0 = 0x0000;
TACTL = TASSEL_2 + MC_1;
TACTL &=~0xff3f;
TAR=0x0000;
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
count_normal++;
count_main++;
tx_count++;
if(time_count_en==1){
if(time_count++>3){
time_count=0;
time_count_en=0;
run_status=tx_en;
uart_rx_rf_tx_count=uart_buffer_rx_idx;
uart_buffer_rx_idx=0;
}
}
}
#pragma vector=PORT1_VECTOR
__interrupt void port1_ISR (void)
{
BYTE rx_buf,i;
if(P1IFG&BIT3){
IntFlag[0] |= IntFlag_rf;
P1IFG &= ~BIT3;
}
if(P1IFG&BIT1){
rx_delay();
rx_delay_1();
for(i=0;i<8;i++){
rx_buf=rx_buf>>1;
rx_buf&=0x7f;
if(P1IN&RX_UART){
rx_buf|=0x80;
}
rx_delay();
}
uart_rx_buffer[uart_buffer_rx_idx]=rx_buf;
if(uart_buffer_rx_idx++==0){
time_count_en=1;
}
if(uart_buffer_rx_idx>=max_uart_buffer_size ){
uart_buffer_rx_idx=0;
}
time_count=0;
P1IFG&=~BIT1;
}
}
void rx_delay(void){
BYTE i;
for(i=0;i<8;i++){
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
}
}
void rx_delay_1(void){
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
}
void uart_send(void){
BYTE i,j,tx_buf;
_DINT();
for(j=0;j<uart_buffer_tx_count;j++){
tx_buf=uart_tx_buffer[j];
P3OUT &= ~TX_UART;
rx_delay();
rx_delay_1();
for(i=0;i<8;i++){
if(tx_buf&0x01){
P3OUT |= TX_UART;
}
else{
P3OUT &= ~TX_UART;
}
tx_buf=tx_buf>>1;
rx_delay();
}
P3OUT |= TX_UART;
//for(i=0;i<10;i++){
rx_delay();
rx_delay();
rx_delay();
//}
}
_EINT();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -