📄 transmit.c
字号:
/*******************************************************************
CC2420 RF transmit
*******************************************************************/
#include <msp430x16x.h>
#include "stdlib.h"
#include "cc2420init.h"
#include "cc2420run.h"
#include "cc2420const.h"
void init_SPI()
{
if (U0CTL & SYNC)
return;
U0CTL |= SYNC; //disableUART
U0CTL &= ~I2C; //disableI2C
P4DIR |= 0x02; //p4.2->2420_CS
P3SEL |= 0x0E; //P3.1,2,3 MODFUNC;
//TOSH_SEL_SIMO0_MODFUNC();
//TOSH_SEL_SOMI0_MODFUNC();
//TOSH_SEL_UCLK0_MODFUNC();
IE1 &= ~(UTXIE0 | URXIE0); // interrupt disable
U0CTL = SWRST;
U0CTL |= CHAR | SYNC | MM; // 8-bit char, SPI-mode, USART as master
U0CTL &= ~(0x20);
U0TCTL = STC ; // 3-pin
U0TCTL |= CKPH; // half-cycle delayed UCLK
U0TCTL &= ~(SSEL1 | SSEL0 );
U0TCTL |= SSEL1; // use SMCLK, assuming 1MHz
U0MCTL = 0;
ME1 &= ~(UTXE0 | URXE0); //USART UART module disable
ME1 |= USPIE0; // USART SPI module enable
U0CTL &= ~SWRST;
IFG1 &= ~(UTXIFG0 | URXIFG0);
IE1 &= ~(UTXIE0 | URXIE0); // interrupt disabled
return;
}
void MCUInit(void)
{
//using 4M external oscillator crystal
volatile unsigned int i;
//DCOCTL=0;
_BIS_SR(SCG0);
_BIS_SR(OSCOFF);
BCSCTL1 =0;
BCSCTL1 &= ~XT2OFF; // XT2= HF XTAL
while ((IFG1 & OFIFG))
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 1; i--); // Time for flag to set
}
// OSCFault flag still set?
BCSCTL2=0;
//BCSCTL2 &=~(SELM_2 + SELS);
BCSCTL2 |= SELM_2 + SELS ; // SMCLK = MCLK= XT2 (safe) = 4M
//BCSCTL2 |= SELM_1 +DIVS_3;
}
void hardwareinit()
{
MCUInit();
init_SPI();
cc2420init();
}
void main()
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
hardwareinit();
Msg * data;
long int i,j;
data=(Msg*)malloc(sizeof(Msg));
P5DIR|=0X70;
P5OUT|=0X70;
data -> length = 12; //msg data length:10 last lqi&rssi:2
data -> fcflo = CC2420_DEF_FCF_LO;//destination address mode:10
data -> fcfhi = CC2420_DEF_FCF_HI_ACK;//ack request:1 frame type:10
// destination PAN is broadcast
data -> destpan = TOS_BCAST_ADDR;
// adjust the destination address to be in the right byte order
data -> addr = 0x0001;
// adjust the data type if need
data -> type = FRAME_TYPE_DATA;
// keep the DSN increasing for ACK recognition
data -> dsn = 1;
// reset the time field
data -> time = 0;
data -> group=0x00;
data -> Txdata[0]=0x55;
for(i=0;i<100;i++)
{
data->dsn =i;
sendAMessage(data -> length,(char*)data);
for(j=0;j<50000;j++);
}
free(data);
P5OUT|=0X10;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -