|
|
发表于 2013-6-14 11:49:26
|
显示全部楼层
本帖最后由 applesof 于 2013-6-14 12:14 编辑
#include <SPI.h>
#include "api.h"
//ss=10,mosi=11,miso=12,sck=13
//TxEN(4in),ce(8in),pwr(5in),cd(6out),am(7out),dr(out3),ss=10
//(csn),mosi=11,miso=12,sck=13,ce(9)
bool fglab=true;
uint8_t len=1;
uint8_t words[32];//transmit array
uint8_t value[8*32*32];//receive array 8kbyte array
uint8_t address[4];//transmit address
uint8_t cePin = 9;
uint8_t csnPin = 10;
uint8_t DrPin=3;
uint8_t TxENPin = 4;
uint8_t pwrPin = 5;
uint8_t cdPin = 6;
uint8_t amPin = 7;
// uint8_t payload = 16;
RFConfig RxTxConf =
{
10,
0x80, 0x00, 0x44, 0x20, 0x20, 0xdd, 0xdd, 0xdd,0xdd, 0xd8
};
void setup(){
pinMode (cePin, OUTPUT);
pinMode (csnPin, OUTPUT);
pinMode (TxENPin, OUTPUT);
pinMode (pwrPin, OUTPUT);
pinMode (cdPin, INPUT);
pinMode (amPin, INPUT);
pinMode (DrPin, INPUT);
Serial.begin(9600);
SPI.begin();
configRegister(WC,RxTxConf); //开始
}
void loop(){
Serial.print("The ");
Serial.print(len);
Serial.println(" NRF905 test start");
if(fglab) {
for(int i=0;i<32;i++){
words=i+1;
}
for(int i=0;i<4;i++){
address=0xdd;
}
fglab=false;
}
else
;
/*
readRegister(RC,value,10) ;
for(int i=0;i<10;i++){
Serial.println(value,HEX);
}*/
/*while(len<254)
{
transmitRF(words,address);
setTxMode();
delay(1);
for(int i=0;i<32;i++){
words=len+i+1;
}
len++;
}
ceLow();//standby mode
*/
/*
setRxMode();
receiveRF(value);
while(AMcheck()==0);
ceLow();//standby mode
*/
for(int i=0;i<32;i++){
Serial.println(value,HEX);
}
delay(1000);
Serial.print("The ");
Serial.print(len);
Serial.println(" NRF905 test succeed");
//len++;
}
void readRegister(uint8_t reg1,uint8_t * value1, uint8_t len1)
// Reads from NRF registers.
{
csnLow();//hi-low spi valid
powerUpTx();
ceLow();
SPI.transfer(reg1);
delay(1);
for(int i=0;i<len1;i++)
{
value1= SPI.transfer(0x00);
}
delay(1);
csnHi();//hi-low spi valid,then need to high
}
void configRegister(uint8_t reg1,RFConfig RTConf)
// Configure the NRF registers.
{
csnLow();//hi-low spi valid
powerUpTx();
ceLow();
SPI.transfer(reg1);
for(int i=0;i<RTConf.n;i++)
{
SPI.transfer(RTConf.buf);
}
csnHi();//hi-low spi valid,then need to high
}
void transmitRF(uint8_t * value,uint8_t * address)
// transmit data
{
csnLow();//hi-low spi valid
powerUpTx();
ceLow();
//output data
SPI.transfer(WTP);
delay(1);
for(int i=0;i<32;i++)
{
SPI.transfer(value);
}
delay(1);
csnHi();//hi-low spi valid,then need to high
//set target address
csnLow();
SPI.transfer(WTA);
for (int i=0;i<4;i++){
SPI.transfer(address);
}
csnHi();//spi finish
}
void receiveRF(uint8_t * value)
// transmit data
{
while(DRcheck()==0);//data not ready,wait until dr=1,go out of while recycle
csnLow();//hi-low spi valid
powerUpTx();
ceLow();//standby mode
SPI.transfer(RRP);
delay(1);
//read data from register
for(int i=0;i<32;i++)
{
value=SPI.transfer(0x00);
}
delay(1);
csnHi();
}
}
void ceHi(){
digitalWrite(cePin,HIGH);
}
void ceLow(){
digitalWrite(cePin,LOW);
}
void csnHi(){
digitalWrite(csnPin,HIGH);
}
void csnLow(){
digitalWrite(csnPin,LOW);
}
void TxENHi(){
digitalWrite(TxENPin,HIGH);
}
void TxENLow(){
digitalWrite(TxENPin,LOW);
}
void powerUpTx(){
digitalWrite(pwrPin,HIGH);
}
void powerDown(){
digitalWrite(pwrPin,LOW);
}
int DRcheck(){
int lb;lb=digitalRead(DrPin);
return lb;
}
int AMcheck(){
int lb;
lb=digitalRead(amPin);
return lb;
}
int CDcheck(){
int lb;
lb=digitalRead(cdPin);
return lb;
}
void setTxMode(){
powerUpTx();
ceHi();//start shockburst tx mode
TxENHi();
delay(1);//wait for transmit finish
}
void setRxMode(){
powerUpTx();
ceHi();//start shockburst rx mode
TxENLow();
delay(1);//wait for receive finish
} |
|