mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-07-03 12:07:52 +00:00
Fixes
This commit is contained in:
parent
a8797b3f4a
commit
f133a9094a
@ -61,6 +61,7 @@ uint16_t Servo_data[NUM_CHN];
|
|||||||
uint8_t Servo_AUX;
|
uint8_t Servo_AUX;
|
||||||
|
|
||||||
// Protocol variables
|
// Protocol variables
|
||||||
|
uint8_t cyrfmfg_id[6];//for dsm2 and devo
|
||||||
uint8_t rx_tx_addr[5];
|
uint8_t rx_tx_addr[5];
|
||||||
uint8_t phase;
|
uint8_t phase;
|
||||||
uint16_t bind_counter;
|
uint16_t bind_counter;
|
||||||
@ -84,13 +85,14 @@ uint8_t len;
|
|||||||
uint8_t RX_num;
|
uint8_t RX_num;
|
||||||
|
|
||||||
#if defined(FRSKYX_CC2500_INO) || defined(SFHSS_CC2500_INO)
|
#if defined(FRSKYX_CC2500_INO) || defined(SFHSS_CC2500_INO)
|
||||||
uint8_t calData[48][3];
|
uint8_t calData[48];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//Channel mapping for protocols
|
//Channel mapping for protocols
|
||||||
const uint8_t CH_AETR[]={AILERON, ELEVATOR, THROTTLE, RUDDER, AUX1, AUX2, AUX3, AUX4, AUX5, AUX6, AUX7, AUX8};
|
const uint8_t CH_AETR[]={AILERON, ELEVATOR, THROTTLE, RUDDER, AUX1, AUX2, AUX3, AUX4, AUX5, AUX6, AUX7, AUX8};
|
||||||
//const uint8_t CH_TAER[]={THROTTLE, AILERON, ELEVATOR, RUDDER, AUX1, AUX2, AUX3, AUX4, AUX5, AUX6, AUX7, AUX8};
|
const uint8_t CH_TAER[]={THROTTLE, AILERON, ELEVATOR, RUDDER, AUX1, AUX2, AUX3, AUX4, AUX5, AUX6, AUX7, AUX8};
|
||||||
//const uint8_t CH_RETA[]={RUDDER, ELEVATOR, THROTTLE, AILERON, AUX1, AUX2, AUX3, AUX4, AUX5, AUX6, AUX7, AUX8};
|
const uint8_t CH_RETA[]={RUDDER, ELEVATOR, THROTTLE, AILERON, AUX1, AUX2, AUX3, AUX4, AUX5, AUX6, AUX7, AUX8};
|
||||||
|
const uint8_t CH_EATR[]={ELEVATOR, AILERON, THROTTLE, RUDDER, AUX1, AUX2, AUX3, AUX4, AUX5, AUX6, AUX7, AUX8};
|
||||||
|
|
||||||
// Mode_select variables
|
// Mode_select variables
|
||||||
uint8_t mode_select;
|
uint8_t mode_select;
|
||||||
@ -100,6 +102,12 @@ uint8_t protocol_flags=0,protocol_flags2=0;
|
|||||||
volatile uint16_t PPM_data[NUM_CHN];
|
volatile uint16_t PPM_data[NUM_CHN];
|
||||||
|
|
||||||
// Serial variables
|
// Serial variables
|
||||||
|
#ifdef INVERT_TELEMETRY
|
||||||
|
// enable bit bash for serial
|
||||||
|
#define BASH_SERIAL 1
|
||||||
|
#define INVERT_SERIAL 1
|
||||||
|
#endif
|
||||||
|
#define BAUD 100000
|
||||||
#define RXBUFFER_SIZE 25
|
#define RXBUFFER_SIZE 25
|
||||||
#define TXBUFFER_SIZE 32
|
#define TXBUFFER_SIZE 32
|
||||||
volatile uint8_t rx_buff[RXBUFFER_SIZE];
|
volatile uint8_t rx_buff[RXBUFFER_SIZE];
|
||||||
@ -129,9 +137,11 @@ uint8_t pkt[MAX_PKT];//telemetry receiving packets
|
|||||||
#if defined FRSKY_CC2500_INO
|
#if defined FRSKY_CC2500_INO
|
||||||
#define HUB_TELEMETRY
|
#define HUB_TELEMETRY
|
||||||
#endif
|
#endif
|
||||||
uint8_t pktt[MAX_PKT];//telemetry receiving packets
|
#ifndef BASH_SERIAL
|
||||||
volatile uint8_t tx_head=0;
|
volatile uint8_t tx_head=0;
|
||||||
volatile uint8_t tx_tail=0;
|
volatile uint8_t tx_tail=0;
|
||||||
|
#endif // BASH_SERIAL
|
||||||
|
uint8_t pktt[MAX_PKT];//telemetry receiving packets
|
||||||
uint8_t v_lipo;
|
uint8_t v_lipo;
|
||||||
int16_t RSSI_dBm;
|
int16_t RSSI_dBm;
|
||||||
uint8_t telemetry_link=0;
|
uint8_t telemetry_link=0;
|
||||||
@ -486,16 +496,16 @@ static void CheckTimer(uint16_t (*cb)(void))
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
// at this point we have between 2ms and 4ms in next_callback
|
// at this point we have between 2ms and 4ms in next_callback
|
||||||
// disable global int
|
next_callback *= 2 ; // disable global int
|
||||||
#ifdef XMEGA
|
#ifdef XMEGA
|
||||||
cli();
|
cli();
|
||||||
TCC1.CCA +=next_callback*2; // set compare A for callback
|
TCC1.CCA +=next_callback; // set compare A for callback
|
||||||
TCC1.INTFLAGS = TC1_CCAIF_bm ; // clear compare A=callback flag
|
TCC1.INTFLAGS = TC1_CCAIF_bm ; // clear compare A=callback flag
|
||||||
diff=TCC1.CCA-TCC1.CNT; // compare timer and comparator
|
diff=TCC1.CCA-TCC1.CNT; // compare timer and comparator
|
||||||
sei();// enable global int
|
sei();// enable global int
|
||||||
#else
|
#else
|
||||||
#if defined STM32_board
|
#if defined STM32_board
|
||||||
OCR1A+=next_callback*2;
|
OCR1A+=next_callback;
|
||||||
cli();
|
cli();
|
||||||
TIMER2_BASE->CCR1 = OCR1A;
|
TIMER2_BASE->CCR1 = OCR1A;
|
||||||
TCNT1 = TIMER2_BASE->CNT;
|
TCNT1 = TIMER2_BASE->CNT;
|
||||||
@ -503,10 +513,8 @@ static void CheckTimer(uint16_t (*cb)(void))
|
|||||||
diff=OCR1A-TCNT1; // compare timer and comparator
|
diff=OCR1A-TCNT1; // compare timer and comparator
|
||||||
sei();
|
sei();
|
||||||
#else
|
#else
|
||||||
next_callback *= 2 ;
|
|
||||||
next_callback += OCR1A ;
|
|
||||||
cli();
|
cli();
|
||||||
OCR1A=next_callback; // set compare A for callback
|
OCR1A+=next_callback; // set compare A for callback
|
||||||
TIFR1=(1<<OCF1A); // clear compare A=callback flag
|
TIFR1=(1<<OCF1A); // clear compare A=callback flag
|
||||||
diff=OCR1A-TCNT1; // compare timer and comparator
|
diff=OCR1A-TCNT1; // compare timer and comparator
|
||||||
sei(); // enable global int
|
sei(); // enable global int
|
||||||
@ -699,8 +707,9 @@ static void protocol_init()
|
|||||||
|
|
||||||
if(next_callback>32000)
|
if(next_callback>32000)
|
||||||
{ // next_callback should not be more than 32767 so we will wait here...
|
{ // next_callback should not be more than 32767 so we will wait here...
|
||||||
delayMicroseconds(next_callback-2000);
|
uint16_t temp=(next_callback>>10)-2;
|
||||||
next_callback=2000;
|
delay(temp);
|
||||||
|
next_callback-=temp<<10; // between 2-3ms left at this stage
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef XMEGA
|
#ifdef XMEGA
|
||||||
@ -728,6 +737,16 @@ static void protocol_init()
|
|||||||
|
|
||||||
static void update_serial_data()
|
static void update_serial_data()
|
||||||
{
|
{
|
||||||
|
RX_FLAG_off; //data has been processed
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
if(IS_RX_MISSED_BUFF_on) // If the buffer is still valid
|
||||||
|
memcpy((void*)rx_ok_buff,(const void*)rx_buff,RXBUFFER_SIZE);// Duplicate the buffer
|
||||||
|
sei();
|
||||||
|
RX_MISSED_BUFF_off;
|
||||||
|
RX_DONOTUPDTAE_on;
|
||||||
if(rx_ok_buff[0]&0x20) //check range
|
if(rx_ok_buff[0]&0x20) //check range
|
||||||
RANGE_FLAG_on;
|
RANGE_FLAG_on;
|
||||||
else
|
else
|
||||||
@ -771,7 +790,9 @@ static void update_serial_data()
|
|||||||
p++;
|
p++;
|
||||||
Servo_data[i]=((((*((uint32_t *)p))>>dec)&0x7FF)*5)/8+860; //value range 860<->2140 -125%<->+125%
|
Servo_data[i]=((((*((uint32_t *)p))>>dec)&0x7FF)*5)/8+860; //value range 860<->2140 -125%<->+125%
|
||||||
}
|
}
|
||||||
RX_FLAG_off; //data has been processed
|
RX_DONOTUPDTAE_off;
|
||||||
|
}
|
||||||
|
while(IS_RX_MISSED_BUFF_on); // We've just processed an old frame...
|
||||||
}
|
}
|
||||||
|
|
||||||
static void module_reset()
|
static void module_reset()
|
||||||
@ -1107,8 +1128,9 @@ static void set_rx_tx_addr(uint32_t id)
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
{ // received byte is ok to process
|
{ // received byte is ok to process
|
||||||
if(idx==0)
|
if(idx==0||discard_frame==1)
|
||||||
{ // Let's try to sync at this point
|
{ // Let's try to sync at this point
|
||||||
|
idx=0;discard_frame=0;
|
||||||
#ifdef XMEGA
|
#ifdef XMEGA
|
||||||
if(USARTC0.DATA==0x55) // If 1st byte is 0x55 it looks ok
|
if(USARTC0.DATA==0x55) // If 1st byte is 0x55 it looks ok
|
||||||
|
|
||||||
@ -1142,6 +1164,8 @@ static void set_rx_tx_addr(uint32_t id)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
RX_MISSED_BUFF_off; // if rx_buff was good it's not anymore...
|
||||||
|
|
||||||
#ifdef XMEGA
|
#ifdef XMEGA
|
||||||
rx_buff[(idx++)-1]=USARTC0.DATA; // Store received byte
|
rx_buff[(idx++)-1]=USARTC0.DATA; // Store received byte
|
||||||
#else
|
#else
|
||||||
@ -1165,12 +1189,13 @@ static void set_rx_tx_addr(uint32_t id)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
if(!IS_RX_FLAG_on)
|
if(!IS_RX_DONOTUPDTAE_on)
|
||||||
{ //Good frame received and main has finished with previous buffer
|
{ //Good frame received and main has finished with previous buffer
|
||||||
for(idx=0;idx<RXBUFFER_SIZE;idx++)
|
memcpy((void*)rx_ok_buff,(const void*)rx_buff,RXBUFFER_SIZE);// Duplicate the buffer
|
||||||
rx_ok_buff[idx]=rx_buff[idx]; // Duplicate the buffer
|
RX_FLAG_on; // flag for main to process servo data
|
||||||
RX_FLAG_on; // flag for main to process servo data
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
RX_MISSED_BUFF_on; // notify that rx_buff is good
|
||||||
idx=0; // start again
|
idx=0; // start again
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1186,7 +1211,7 @@ static void set_rx_tx_addr(uint32_t id)
|
|||||||
idx=UDR0; // Dummy read
|
idx=UDR0; // Dummy read
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
idx=0; // Error encountered discard full frame...
|
discard_frame=1; // Error encountered discard full frame...
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined STM32_board //If activated telemetry it doesn't work activated
|
#if defined STM32_board //If activated telemetry it doesn't work activated
|
||||||
@ -1211,7 +1236,7 @@ static void set_rx_tx_addr(uint32_t id)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
{ // Timer1 compare B interrupt
|
{ // Timer1 compare B interrupt
|
||||||
idx=0;
|
discard_frame=1; // Error encountered discard full frame...
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(TELEMETRY)
|
#if defined(TELEMETRY)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user