?? 2401a.c
字號:
#include "msp430x12x2.h"
#include "timer.h"
#include "flash.h"
/*pin connection description
CE P1.3 out
CS P1.2 out
DR1 P1.0 in *****
CLK1 P2.4 out *****
DATA P2.3 inout, defaut is out *****
POWER P3.4 out
*/
struct RFConfig
{
unsigned char n;
unsigned char buf[15];
};
struct RFConfig RxTxConf =
{
15,
0xd0, 0xd0,
0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x66, 0x88, 0x88, 0x66,
0x83, 0x6f, 0x64
};
//設置包長為26個字節,第2通道接收地址為
//1通道當為接收時地址設為0x8866
//接收地址為32bit長,使能crc,16位
//只有接收通道1工作,ShockBurst模式,1 Mbps,16M晶陣
//輸出功率0dBm
//工作頻段2.45G,默認為發射模式
void intPORT()
{
P1DIR = 0xfe; //*********
P1SEL = 0x00;
P1OUT = 0x00;
P2DIR = 0xff;
P2SEL = 0x00;
P2OUT = 0x00;
P3DIR = 0xff;
P3SEL = 0x00;
P3OUT = 0x00;
}
void powerUP2401A()
{
P3OUT = 0x10;
//power up,wait 3ms
delayNms(4);
}
void powerOFF2401A()
{
P3OUT = 0x00;
}
void setCE()
{
P1OUT = P1OUT | 0x08;
}
void clrCE()
{
P1OUT = P1OUT & 0xf7;
}
void setCS()
{
P1OUT = P1OUT | 0x04;
}
void clrCS()
{
P1OUT = P1OUT & 0xfb;
}
void setCLK1()
{
P2OUT = P2OUT | 0x10;
}
void clrCLK1()
{
P2OUT = P2OUT & 0xef;
}
void setDATA()
{
P2OUT = P2OUT | 0x08;
}
void clrDATA()
{
P2OUT = P2OUT & 0xf7;
}
void ReadDR1(unsigned char *state)
{
if((P1IN & 0x01))
*state = 1;
else
*state = 0;
}
void ReadData(unsigned char *state)
{
if((P2IN & 0x08))
*state = 1;
else
*state = 0;
}
void Nrf2401Send8bit(unsigned char data)
{
unsigned char i;
for(i=0;i<8;i++)
{
clrCLK1();
if(data & 0x80)
setDATA();
else
clrDATA();
//Delay100us(1);
//j++;
//j++;
setCLK1();
//Delay100us(1);
data = data<<1;
}
clrCLK1();
}
void Nrf2401Read8bit(unsigned char *data)
{
unsigned char i,dat,buf;
buf = 0;
clrCLK1();
for(i=0;i<8;i++)
{
setCLK1();
//Delay100us(1);
buf = buf << 1;
ReadData(&dat);
if(dat == 1)
buf = buf | 0x01;
clrCLK1();
//Delay100us(1);
}
*data = buf;
}
void SetRxMode(void)
{
setCS();
// Delay100us(2000);
delay300us();
Nrf2401Send8bit(RxTxConf.buf[RxTxConf.n - 1] | 0x01);
clrCS();
}
void SetTxMode(void)
{
setCS();
// Delay100us(2000);
delay300us();
Nrf2401Send8bit(RxTxConf.buf[RxTxConf.n - 1]);
clrCS();
}
void Nrf2401Config( )
{
unsigned char i;
// unsigned char *Flash_ptr;
//使能配置
setCS();
// Delay100us(2000);
delay300us();
//從flash中讀取功率系數
*Flash_ptr = (unsigned char *) 0x1000;
i = *Flash_ptr++;
RxTxConf.buf[8] = i;
i = *Flash_ptr++;
RxTxConf.buf[9] = i;
i = *Flash_ptr++;
RxTxConf.buf[10] = i;
i = *Flash_ptr++;
RxTxConf.buf[11] = i;
i = *Flash_ptr++;
RxTxConf.buf[13] = 0x6c | (i & 0x3);
//發送配置數據
for(i=0;i<RxTxConf.n;i++)
{
Nrf2401Send8bit(RxTxConf.buf[i]);
}
//結束配置
clrCS();
}
void Nrf2401TX(unsigned char * data,unsigned char *adr)
{
unsigned char i;
setCE();
// Delay100us(2000);
delay300us();
//發送地址
for(i=0; i<4; i++)
{
Nrf2401Send8bit(adr[i]);
}
//發送數據
for(i=0; i<26; i++)
{
Nrf2401Send8bit(data[i]);
}
clrCE();
}
//接受定長的數據,長度在初始化時確定
//接收之前需要事先設定接收模式
void Nrf2401RX(unsigned char * data)
{
unsigned char i,state;
unsigned int count;
i=0;
//設置data為輸入腳
//P2DIR = P2DIR & 0xf7;
P2DIR = 0xf7;
setCE();
// Delay100us(2000);
delay300us();
//等待有效數據到來
do{
count ++;
ReadDR1(&state);
delayNms(100);
if(count == 3000)
return;
}while(state == 0x00);
//讀取數據(數據個數必須是字節的整數倍)
do{
Nrf2401Read8bit(&data[i]);
i++;
ReadDR1(&state);
}while(state == 0x01);
//重新設置data為輸出腳
//P2DIR = P2DIR | 0x08;
P2DIR = 0xff;
clrCE();
}
//接受定長的數據,長度在初始化時確定
//接收之前需要事先設定接收模式
unsigned char Nrf2401RXDelay(unsigned char * data)
{
unsigned char i,state;
unsigned int count;
i=0;
count = 0;
//設置data為輸入腳
//P2DIR = P2DIR & 0xf7;
P2DIR = 0xf7;
setCE();
// Delay100us(2000);
delay300us();
//等待有效數據到來
do{
count++;
ReadDR1(&state);
delayNms(1);
if(count == 100)
return(0);
}while(state == 0x00);
//讀取數據(數據個數必須是字節的整數倍)
do{
Nrf2401Read8bit(&data[i]);
i++;
ReadDR1(&state);
}while(state == 0x01);
//重新設置data為輸出腳
//P2DIR = P2DIR | 0x08;
P2DIR = 0xff;
clrCE();
return(1);
}
//測試主程序
void testRF()
{
unsigned char adr[4]={0x66,0x88,0x88,0x66}; //要讀取的卡號
unsigned char tdata[26]; //發送到卡的數據
// unsigned char rdataPC[20];
unsigned char i;
Nrf2401Config();
for(i=0; i<26; i++)
{
tdata[i] = i;
}
//循環發送數據
while(1)
{
Nrf2401TX(tdata,adr);
for(i=0; i<26; i++)
{
tdata[i] = tdata[i] + 26;
}
// SetRxMode();
// Nrf2401RX(tdata);
delayNms(20);
P3OUT = P3OUT ^ 0x20;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -