ShipCentralControl/RF-AP/资料及文档/SX127X参考例程/main_TX.c

263 lines
8.3 KiB
C
Raw Permalink Normal View History

2025-04-07 09:18:02 +08:00
////////////////////////////////////////////////////////////////////////////////
// <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><42><C4A3><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8>B<EFBFBD><42><EFBFBD><EFBFBD><EFBFBD>ݻش<DDBB><D8B4><EFBFBD><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><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;
}
}