📄 test
字号:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: Chenmingji
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"
extern uint8 UART0Getch();
uint8 temp8;
uint8 InitData[15];
uint8 TXData[14];
uint8 RXData[10];
uint8 Data1;
uint8 ByteCnt;
uint8 BitCnt;
uint32 i;
uint32 temp32;
//uint8 rcv_buf[8]; // UART0数据接收缓冲区
//volatile uint8 rcv_new; // 接收新数据标志
volatile uint8 rf_rcv_new;
uint8 rf_rcv_buf[9];
#define CLK1 (1<<5)
#define CS (1<<11)
#define Data (1<<6)
#define CE (1<<9)
#define DR1 (1<<8)
#define PWR_UP (1<<10)
/*
#define LED1 (1<<18)
#define LED2 (1<<19)
#define LED3 (1<<20)
#define LED4 (1<<21)
#define KEY1 (1<<16)
#define KEY2 (1<<17)
#define KEY3 (1<<18)
#define KEY4 (1<<19)
const uint32 LEDS4 = (0xF<<18);
const uint32 LEDS8 = (0xFF<<18);
const uint32 KEYS4 = (0xF<<16);
*/
/*************************************BuildSPIWord START****************************/
void BuildInitWord()
{
InitData[0]=0x50; //RX receiver 2, Datalength 80bit(10 byte)
InitData[1]=0x50; //RX receiver 1, Datalength 80bit(10 byte)
InitData[2]=0x00;
InitData[3]=0xcc;
InitData[4]=0xcc;
InitData[5]=0xcc;
InitData[6]=0xcc;
InitData[7]=0x00;
InitData[8]=0xcc; //RX receiver 1 address High byte
InitData[9]=0xcc; //RX receiver 1 address High byte
InitData[10]=0xcc; //RX receiver 1 address Low byte
InitData[11]=0xcc; //RX receiver 1 address Low byte
//InitData[12]=0x82; //this is for 32 bit address(Bit7-Bit2), 16bit CRC(Bit1), CRC disable(Bit0) for ES chip
InitData[12]=0x83; //this is for 32 bit address(Bit7-Bit2), 16bit CRC(Bit1), CRC enable(Bit0) for final chip
InitData[13]=0x4f; //One receiver(Bit7), shock Mode(Bit6), Datarate(Bit5) 250K, crystal(Bit4-Bit2), RF Power(Bit1-Bit0)
//InitData[13]=0x6f; //One receiver(Bit7), shock Mode(Bit6), Datarate(Bit5) 1M, crystal(Bit4-Bit2), RF Power(Bit1-Bit0)
InitData[14]=0x05; //Channel Number(Bit7-Bit1), RX/TX mode(Bit0)
}
/*************************************BuildSPIWord END******************************/
/*************************************InitnRF2401 START******************************/
void InitnRF2401()
{
IO0DIR = IO0DIR | Data;
IO0CLR = CE; //Disable CE
IO0SET = CS; //Enable CS--confige mode
for (ByteCnt=0;ByteCnt<15;ByteCnt++)
{
temp8=InitData[ByteCnt];
for (BitCnt=0;BitCnt<8;BitCnt++)
{
if ((temp8 & 0x80) == 0) //Check if first bit is HIGH
IO0CLR = Data; //Set Data low
else
IO0SET = Data; //Set Data high
temp8 = temp8<<1; //Left Shift to get next bit
DoSPIClock(); //Call "DoClock" to generate a clock pulse
}
}
IO0CLR = CS; //Disable CS--standby mode
IO0CLR = Data; //Set Data low
}
/*************************************InitnRF2401 END *******************************/
/*************************************DoSPIClock START******************************/
int DoSPIClock()
{
IO0SET = CLK1;
for(i=0;i<5;i++);
IO0CLR = CLK1;
return (0);
}
/*************************************DoSPIClock END *******************************/
/*************************************CE_High START ******************************/
void CE_High()
{
IO0SET = CE;
}
/*************************************CE_High END *******************************/
/*************************************TXEN_LOW START ******************************/
void nRF2401_ON()
{
IO0SET = PWR_UP;
}
/*************************************nRF2401_ON END *******************************/
/*************************************RXEN_HIGH START ******************************/
void RXEN_HIGH()
{
IO0CLR = CE; //Set CE LOW
IO0SET = CS; //Set CS HIGH--confige mode
IO0DIR = IO0DIR | Data;
IO0SET = Data; //Set Data HIGH
DoSPIClock(); //Make one SPIClock cycle
IO0CLR = CS; //Set CS LOW
IO0SET = CE; //Set CE HIGH--active mode
}
/*************************************RXEN_HIGH END *******************************/
/*************************************TXEN_LOW START ******************************/
void TXEN_LOW()
{
IO0CLR = CE; //Set CE LOW
IO0SET = CS;
IO0DIR = IO0DIR | Data; //Set CS HIGH--confige mode
IO0CLR = Data; //Set Data LOW
DoSPIClock(); //Make one SPIClock cycle
IO0CLR = CS; //Set CS LOW
IO0SET = CE; //Set CE HIGH--active mode
}
/*************************************TXEN_LOW END *******************************/
/*************************************delay10 END *******************************/
/*************************************delay100 START *****************************/
void delay(uint32 dly)
{
for(; dly>0; dly--)
for(i=0; i<5000; i++);
}
/*************************************delay100 END *******************************/
/*************************************ShockBurst START *****************************/
void BuildShockWord()
{
TXData[0]=0xcc; //MSB ;RX receiver 1 address High byte
TXData[1]=0xcc; //MSB-1 ;RX receiver 1 address High byte
TXData[2]=0xcc; //MSB-2 ;RX receiver 1 address Low byte
TXData[3]=0xcc; //MSB-3 ;RX receiver 1 address Low byte
TXData[4]=Data1; //MSB-4 ;Data byte 9
TXData[5]=0x02; //MSB-5 ;Data byte 8
TXData[6]=0x03; //MSB-6 ;Data byte 7
TXData[7]=0x04; //MSB-7 ;Data byte 6
TXData[8]=0x05; //MSB-8 ;Data byte 5
TXData[9]=0x06; //MSB-9 ;Data byte 4
TXData[10]=0x07; //MSB-10 ;Data byte 3
TXData[11]=0x08; //MSB-11 ;Data byte 2
TXData[12]=0x09; //MSB-12 ;Data byte 1
TXData[13]=0x10; //MSB-13 ;Data byte 0
}
/************************************* BuildShockWord END *******************************/
/************************************* ShockBurst START *******************************/
void ShockBurst()
{
IO0DIR = IO0DIR | Data;
IO0CLR = CS; //Pull CS low
IO0SET = CE; //Enable CE active mode
for (ByteCnt=0;ByteCnt<14;ByteCnt++)
{
temp8 = TXData[ByteCnt];
for (BitCnt=0;BitCnt<8;BitCnt++)
{
if ((temp8 & 0x80) == 0) //Check if first bit is HIGH
IO0CLR = Data; //Set Data low
else
IO0SET = Data; //Set Data high
temp8 = temp8<<1; //Left Shift to get next bit
DoSPIClock(); //SendData;
}
}
IO0CLR = CE; //Disable CS--standby mode
IO0CLR = Data;
}
/************************************* ShockBurst END ***********************************/
/************************************* CheckButtons START *******************************/
void RF_send()
{
// temp32 = IO0PIN & KEYS4; //read key value from port P0
// temp8 = (temp32>>12);
// if (rcv_new == 1)
// {
// IO1CLR = ((~temp32)&KEYS4)<<2; //Turn On the LED
Data1 = UART0Getch(); //put the button Data in dada package
TXEN_LOW(); //set TX mode
BuildShockWord();
ShockBurst();
delay(50); //delay for LED light
RXEN_HIGH();
// IO1SET = LEDS4; //close LED display
// rcv_new = 0;
// }
}
/************************************* CheckButtons END *********************************/
/************************************* ReceiveShock START *******************************/
void ReceiveShock()
{
temp8=0;
for (ByteCnt=0;ByteCnt<10;ByteCnt++)
{
for(BitCnt=0;BitCnt<8;BitCnt++)
{
temp8 = temp8<<1; //shift left to receive next bit
IO0SET = CLK1; //set clock high
IO0DIR = IO0DIR | Data;
IO0SET = Data;
IO0DIR = IO0DIR & (~Data);
if((IO0PIN & Data) != 0) //check if Data=high
temp8 |= 0x01; //yes - set bit high
IO0CLR = CLK1; //set clock low
//_nop_(); //wait one clk cycle
}
// _nop_();
RXData[ByteCnt] = temp8;
IO0DIR = IO0DIR | DR1;
IO0SET = DR1;
IO0DIR = IO0DIR & (~DR1);
/* if((IO0PIN & DR1) == 0) //check if DR1 is not still high
{
//_nop_();
IO1CLR = LED1; //Turn On the LED
delay(50);
IO1SET = LED1; //close LED display
}*/
}
rf_rcv_new = 1;
}
int rf_r_s (void)
{
PINSEL2 = PINSEL2 & (~0x08); //设置P1连接GPIO
// IO1DIR = LEDS8; //设置LED控制口为输出
// IO1SET = LEDS8;
IO0DIR = CS|CE|CLK1|PWR_UP;
nRF2401_ON(); // 设备上电
BuildInitWord(); //接收模式配置字
InitnRF2401(); //将配置数据写入2401
CE_High(); //激活接收模式
RXEN_HIGH();
while(1)
{
RF_send(); //check if the button is pressed
if((IO0PIN & DR1) != 0) // Check if DR1 is high (any received from nRF2401)
{
ReceiveShock();
}
UART0_SendBuf();
// else
// IO1SET = LEDS4;
}
return 0;
}
/************************************* ReceiveShock END *********************************/
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -