263 lines
8.3 KiB
C
263 lines
8.3 KiB
C
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
// <20><>Ȩ: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD>Źɷ<C5B9><C9B7><EFBFBD><EFBFBD><EFBFBD>˾
|
|||
|
|
// <20>ļ<EFBFBD><C4BC><EFBFBD>: main_tx/rx
|
|||
|
|
// <20>汾<EFBFBD><E6B1BE> v1.0
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IAR v5.30
|
|||
|
|
// <20><><EFBFBD><EFBFBD>: <20>ں<EFBFBD><DABA><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 2013.12
|
|||
|
|
// <20><><EFBFBD><EFBFBD>: A<><41><EFBFBD>Ͱ<EFBFBD><CDB0><EFBFBD><EFBFBD>Ǹ<EFBFBD>B<EFBFBD><42><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>˸<EFBFBD><CBB8>Bģ<42><C4A3><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8>B<EFBFBD><42><EFBFBD><EFBFBD><EFBFBD>ݻش<DDBB><D8B4><EFBFBD>Aģ<41>飬
|
|||
|
|
// A<>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8> ѭ<><D1AD><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>:
|
|||
|
|
// <20><EFBFBD><DEB8><EFBFBD>־<EFBFBD><D6BE>
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
#include <string.h>
|
|||
|
|
#include <stdint.h>
|
|||
|
|
#include <stdbool.h>
|
|||
|
|
#include "driver.h"
|
|||
|
|
#include "sx1276-f4152-Hal.h"
|
|||
|
|
#include "LSD_RF_SX1276.h"
|
|||
|
|
#include "LSD_RF_APPrf.h"
|
|||
|
|
#include "clock.h"
|
|||
|
|
//===================================<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
|
|||
|
|
long SysTick = 0;
|
|||
|
|
uint8_t TXbuffer[30]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29};
|
|||
|
|
uint8_t WakeAddr[8]={5,6,7,8,9,10,11,7};
|
|||
|
|
uint8_t Rxbuffer[64];
|
|||
|
|
//===================================<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>===================================================
|
|||
|
|
|
|||
|
|
//===============================================================================================
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><>
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> : <20><>
|
|||
|
|
// ˵<><CBB5> :
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
typedef enum{
|
|||
|
|
Nope,
|
|||
|
|
B300bps,//BW = 500KHz SF = 7 CR = 4_6
|
|||
|
|
B1080bps,//BW = 125KHz SF = 9 CR = 4_6
|
|||
|
|
B4000bps,//BW = 125KHz SF = 7 CR = 4_5
|
|||
|
|
}t_Baudrate;
|
|||
|
|
t_Baudrate Baudrate = Nope;
|
|||
|
|
|
|||
|
|
unsigned char *point;
|
|||
|
|
unsigned char Reg_PKTSNR = 0;
|
|||
|
|
unsigned char Reg_PKTRssi = 0;
|
|||
|
|
unsigned char Reg_Rssi = 0;
|
|||
|
|
|
|||
|
|
unsigned char LCD_p[9] = {0,0,0,0,0,8,0,1,0xff};
|
|||
|
|
int T_Cnt = 0;
|
|||
|
|
int R_Cnt = 0;
|
|||
|
|
bool RESET_Flag = false;
|
|||
|
|
void main( void )
|
|||
|
|
{
|
|||
|
|
WDTCTL = WDTPW + WDTHOLD; // <20>رտ<D8B1><D5BF>Ź<EFBFBD>
|
|||
|
|
platform_init(); //<2F><><EFBFBD>Եװ<D4B5><D7B0><EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
|
LEDONBAND(LEDALL); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LED<45><44>
|
|||
|
|
KEYBOARD_DIR &=~ (KEY_S1+KEY_S2);
|
|||
|
|
KEYBOARD_IFG &=~ (KEY_S1+KEY_S2);
|
|||
|
|
KEYBOARD_IES |= (KEY_S1+KEY_S2);
|
|||
|
|
KEYBOARD_IE |= (KEY_S1+KEY_S2);
|
|||
|
|
|
|||
|
|
point = (unsigned char *)(&(G_LoRaConfig.BandWidth));
|
|||
|
|
flash_read(FLASH_ADDRESS_D,point,3*2);
|
|||
|
|
if(G_LoRaConfig.BandWidth>BW500KHZ){
|
|||
|
|
G_LoRaConfig.BandWidth=BW125KHZ;
|
|||
|
|
G_LoRaConfig.SpreadingFactor = SF09;
|
|||
|
|
G_LoRaConfig.CodingRate = CR_4_6;
|
|||
|
|
flash_seg_clear(FLASH_ADDRESS_D);//д֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
flash_write(FLASH_ADDRESS_D,point,3*2);
|
|||
|
|
}
|
|||
|
|
if(G_LoRaConfig.SpreadingFactor==SF11){
|
|||
|
|
Baudrate = B300bps;
|
|||
|
|
LCD_p[8] = 1;
|
|||
|
|
}
|
|||
|
|
else{
|
|||
|
|
if(G_LoRaConfig.SpreadingFactor==SF07){
|
|||
|
|
Baudrate = B4000bps;
|
|||
|
|
LCD_p[8] = 3;
|
|||
|
|
}
|
|||
|
|
else{
|
|||
|
|
Baudrate = B1080bps;
|
|||
|
|
LCD_p[8] = 2;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
LCD_p[7] = 0xff;LCD_p[6] = 0;LCD_p[5] = 0;LCD_p[4] = 0;
|
|||
|
|
lcd_init();
|
|||
|
|
LCD_Disp_ALL_Num(LCD_p);
|
|||
|
|
//<2F><><EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
G_LoRaConfig.LoRa_Freq = 474600000; //<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>470MHz
|
|||
|
|
//G_LoRaConfig.BandWidth = BW125KHZ; //BW = 125KHz
|
|||
|
|
//G_LoRaConfig.SpreadingFactor = SF09; //SF = 9
|
|||
|
|
//G_LoRaConfig.CodingRate = CR_4_6; //CR = 4/6
|
|||
|
|
G_LoRaConfig.PowerCfig = 15; //19<31><39>dBm
|
|||
|
|
G_LoRaConfig.MaxPowerOn = true;
|
|||
|
|
G_LoRaConfig.CRCON = true; //CRC<52><43><EFBFBD><EFBFBD>
|
|||
|
|
G_LoRaConfig.ExplicitHeaderOn = true; //Header<65><72><EFBFBD><EFBFBD>
|
|||
|
|
G_LoRaConfig.PayloadLength = 20; //<2F><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
if(SX127x_init()!=NORMAL) WDTCTL=0; //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ʧ<EFBFBD>ܸ<EFBFBD>λ
|
|||
|
|
KEYBOARD_IE |= (KEY_S1+KEY_S2);
|
|||
|
|
_EINT(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
LEDOFFBIT(LEDALL); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>Ϲر<CFB9><D8B1><EFBFBD><EFBFBD><EFBFBD>LED<45><44>
|
|||
|
|
ON_Timerout(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>1sһ<73><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
while(1)
|
|||
|
|
{
|
|||
|
|
LPM3;
|
|||
|
|
if(RESET_Flag==true){
|
|||
|
|
flash_seg_clear(FLASH_ADDRESS_D);//д֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
flash_write(FLASH_ADDRESS_D,point,3*2);
|
|||
|
|
WDTCTL = 0;//RESET
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
LSD_RF_RXmode(); //ÿ<>η<EFBFBD><CEB7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݺ<DDBA><F3A3ACBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>ȴ<EFBFBD>Bģ<42><C4A3>Ӧ<EFBFBD><D3A6>
|
|||
|
|
/****RSSI*****/
|
|||
|
|
|
|||
|
|
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
LCD_p[6] = Reg_PKTRssi/100%10;
|
|||
|
|
LCD_p[5] = Reg_PKTRssi/10%10;
|
|||
|
|
LCD_p[4] = Reg_PKTRssi%10;
|
|||
|
|
|
|||
|
|
LCD_p[0] = T_Cnt%10;
|
|||
|
|
LCD_p[1] = T_Cnt/10%10;
|
|||
|
|
LCD_p[2] = R_Cnt%10;
|
|||
|
|
LCD_p[3] = R_Cnt/10%10;
|
|||
|
|
/****Cnt *****/
|
|||
|
|
//LCD_p[0] = T_Cnt%10;
|
|||
|
|
//LCD_p[1] = T_Cnt/10%10;
|
|||
|
|
//LCD_p[2] = R_Cnt%10;
|
|||
|
|
//LCD_p[3] = R_Cnt/10%10;
|
|||
|
|
LCD_ClrLcd_ALL();
|
|||
|
|
LCD_Disp_ALL_Num(LCD_p);
|
|||
|
|
if(T_Cnt>=100)
|
|||
|
|
T_Cnt = 0;
|
|||
|
|
if(R_Cnt>=100)
|
|||
|
|
R_Cnt = 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD>߽<EFBFBD><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><>
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> : <20><>
|
|||
|
|
// ˵<><CBB5> :
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
#pragma vector = PORT1_VECTOR
|
|||
|
|
__interrupt void port1_isr(void)
|
|||
|
|
{
|
|||
|
|
if(KEYBOARD_IFG&(KEY_ALL)){
|
|||
|
|
char Keys_Flag = KEYBOARD_IFG&(KEY_ALL);
|
|||
|
|
switch(Keys_Flag&(KEY_S1|KEY_S2)){
|
|||
|
|
case KEY_S1:
|
|||
|
|
switch(Baudrate){
|
|||
|
|
case B1080bps:
|
|||
|
|
G_LoRaConfig.BandWidth = BW125KHZ; //BW = 125KHz
|
|||
|
|
G_LoRaConfig.SpreadingFactor = SF07; //SF = 9
|
|||
|
|
G_LoRaConfig.CodingRate = CR_4_6; //CR = 4/6
|
|||
|
|
Baudrate = B4000bps;
|
|||
|
|
break;
|
|||
|
|
case B4000bps:
|
|||
|
|
G_LoRaConfig.BandWidth = BW125KHZ; //BW = 125KHz
|
|||
|
|
G_LoRaConfig.SpreadingFactor = SF11; //SF = 9
|
|||
|
|
G_LoRaConfig.CodingRate = CR_4_8; //CR = 4/6
|
|||
|
|
Baudrate = B300bps;
|
|||
|
|
break;
|
|||
|
|
case B300bps:
|
|||
|
|
default:
|
|||
|
|
G_LoRaConfig.BandWidth = BW125KHZ; //BW = 125KHz
|
|||
|
|
G_LoRaConfig.SpreadingFactor = SF09; //SF = 9
|
|||
|
|
G_LoRaConfig.CodingRate = CR_4_6; //CR = 4/6
|
|||
|
|
Baudrate = B1080bps;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
RESET_Flag = true;
|
|||
|
|
LPM3_EXIT;
|
|||
|
|
break;
|
|||
|
|
case KEY_S2:
|
|||
|
|
T_Cnt = 0;
|
|||
|
|
R_Cnt = 0;
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
KEYBOARD_IFG &= ~KEY_ALL;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
if(DIO0_IFG) //<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD>DIO0<4F><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
|
{
|
|||
|
|
DIO0_IFG = 0; //<2F><><EFBFBD><EFBFBD>DIO0<4F>жϱ<D0B6>־λ
|
|||
|
|
|
|||
|
|
LSD_RF_RxPacket(Rxbuffer); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
#include "sx1276-LoRa.h"
|
|||
|
|
signed int temp = 0,test;
|
|||
|
|
SX1276Read( REG_LR_PKTSNRVALUE,&Reg_PKTSNR);
|
|||
|
|
test = (signed char)Reg_PKTSNR;
|
|||
|
|
if((Reg_PKTSNR&0x80)!=0){//<2F><><EFBFBD><EFBFBD>
|
|||
|
|
//LCD_p[3] = 10;//Reg_PKTSNR
|
|||
|
|
Reg_PKTSNR = ~(Reg_PKTSNR)+1;
|
|||
|
|
temp = -Reg_PKTSNR;
|
|||
|
|
}
|
|||
|
|
else{
|
|||
|
|
//LCD_p[3] = 0xff;//Reg_PKTSNR
|
|||
|
|
temp = Reg_PKTSNR;
|
|||
|
|
}
|
|||
|
|
test++;
|
|||
|
|
SX1276Read( REG_LR_PKTRSSIVALUE,&Reg_PKTRssi);
|
|||
|
|
if(temp>0){
|
|||
|
|
temp = -164+Reg_PKTRssi*16/15;
|
|||
|
|
//if(temp>-50)
|
|||
|
|
//temp = -137+Reg_PKTRssi;
|
|||
|
|
}
|
|||
|
|
else{
|
|||
|
|
temp = -164+Reg_PKTRssi+(signed char)(temp*0.25+0.5);
|
|||
|
|
}
|
|||
|
|
if(temp<0){
|
|||
|
|
LCD_p[7] = 10;
|
|||
|
|
Reg_PKTRssi = -temp;
|
|||
|
|
}
|
|||
|
|
else{
|
|||
|
|
LCD_p[7] = 0xff;
|
|||
|
|
Reg_PKTRssi = temp;
|
|||
|
|
}
|
|||
|
|
//SX1276Read( REG_LR_RSSIVALUE,&Reg_Rssi);
|
|||
|
|
//Reg_Rssi
|
|||
|
|
if(memcmp(Rxbuffer,TXbuffer,20)==0)
|
|||
|
|
{
|
|||
|
|
LEDONBIT(LED1); //״ָ̬ʾ<D6B8><CABE>
|
|||
|
|
DelayMs(60);
|
|||
|
|
LEDOFFBIT(LED1); //״ָ̬ʾ<D6B8><CABE>
|
|||
|
|
R_Cnt++;
|
|||
|
|
}
|
|||
|
|
LPM3_EXIT;
|
|||
|
|
}
|
|||
|
|
P1IFG=0;
|
|||
|
|
}
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><>ʱ<EFBFBD><CAB1>ʱ<EFBFBD><CAB1>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><>
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> : <20><>
|
|||
|
|
// ˵<><CBB5> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѣ<EFBFBD><D1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>ʱʱ<CAB1>䵽<EFBFBD><E4B5BD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD><EFBFBD>WOR
|
|||
|
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
#pragma vector = TIMER1_A0_VECTOR
|
|||
|
|
__interrupt void Timer1_A0_ISR()
|
|||
|
|
{
|
|||
|
|
static uint8 t=0;
|
|||
|
|
t++;
|
|||
|
|
if(Baudrate >= B1080bps)
|
|||
|
|
t = 5;
|
|||
|
|
if(Baudrate == B300bps)
|
|||
|
|
t++;
|
|||
|
|
if(t >= 5)
|
|||
|
|
{
|
|||
|
|
LEDONBIT(LED3);//<2F><><EFBFBD><EFBFBD>״ָ̬ʾ<D6B8><CABE>
|
|||
|
|
G_LoRaConfig.PayloadLength = 20;
|
|||
|
|
SX1276Reset();
|
|||
|
|
if(SX127x_init()!=NORMAL) WDTCTL=0;
|
|||
|
|
LSD_RF_SendPacket(TXbuffer);//<2F><><EFBFBD><EFBFBD>30<33><30><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>
|
|||
|
|
T_Cnt++;
|
|||
|
|
LEDOFFBIT(LED3);//<2F><><EFBFBD><EFBFBD>״ָ̬ʾ<D6B8><CABE>
|
|||
|
|
LPM3_EXIT;
|
|||
|
|
t = 0;
|
|||
|
|
}
|
|||
|
|
}
|