XN297Dump: fix packet timer

This commit is contained in:
Pascal Langer 2019-07-03 20:51:13 +02:00
parent efbd350dfd
commit 23756a387a
2 changed files with 24 additions and 17 deletions

View File

@ -19,7 +19,7 @@
#define VERSION_MAJOR 1 #define VERSION_MAJOR 1
#define VERSION_MINOR 2 #define VERSION_MINOR 2
#define VERSION_REVISION 1 #define VERSION_REVISION 1
#define VERSION_PATCH_LEVEL 65 #define VERSION_PATCH_LEVEL 66
//****************** //******************
// Protocols // Protocols

View File

@ -22,7 +22,7 @@
#include "iface_nrf24l01.h" #include "iface_nrf24l01.h"
// Parameters which can be modified // Parameters which can be modified
#define XN297DUMP_PERIOD_DUMP 25000 #define XN297DUMP_PERIOD_SCAN 50000 // 25000
#define XN297DUMP_MAX_RF_CHANNEL 84 // Default 84 #define XN297DUMP_MAX_RF_CHANNEL 84 // Default 84
// Do not touch from there // Do not touch from there
@ -31,7 +31,7 @@
#define XN297DUMP_CRC_LENGTH 2 #define XN297DUMP_CRC_LENGTH 2
uint8_t address_length; uint8_t address_length;
uint16_t over; uint16_t timeH=0;
boolean scramble; boolean scramble;
static void __attribute__((unused)) XN297Dump_init() static void __attribute__((unused)) XN297Dump_init()
@ -119,17 +119,16 @@ static void __attribute__((unused)) XN297Dump_overflow()
{ {
if(TIMER2_BASE->SR & TIMER_SR_UIF) if(TIMER2_BASE->SR & TIMER_SR_UIF)
{ // timer overflow { // timer overflow
if(over!=0xFFFF) timeH++;
over++;
TIMER2_BASE->SR = 0x1E5F & ~TIMER_SR_UIF; // Clear Timer2 overflow flag TIMER2_BASE->SR = 0x1E5F & ~TIMER_SR_UIF; // Clear Timer2 overflow flag
} }
} }
static uint16_t XN297Dump_callback() static uint16_t XN297Dump_callback()
{ {
static uint16_t time=0; static uint32_t time=0;
while(1) while(1)
{ {
if(option==0xFF && bind_counter>XN297DUMP_PERIOD_DUMP) if(option==0xFF && bind_counter>XN297DUMP_PERIOD_SCAN)
{ // Scan frequencies { // Scan frequencies
hopping_frequency_no++; hopping_frequency_no++;
bind_counter=0; bind_counter=0;
@ -150,7 +149,7 @@ static uint16_t XN297Dump_callback()
| (1 << NRF24L01_00_CRCO) | (1 << NRF24L01_00_CRCO)
| (1 << NRF24L01_00_PWR_UP) | (1 << NRF24L01_00_PWR_UP)
| (1 << NRF24L01_00_PRIM_RX)); | (1 << NRF24L01_00_PRIM_RX));
over=0xFFFF; phase=0; // init timer
} }
XN297Dump_overflow(); XN297Dump_overflow();
@ -159,14 +158,22 @@ static uint16_t XN297Dump_callback()
if(NRF24L01_ReadReg(NRF24L01_09_CD) || option != 0xFF) if(NRF24L01_ReadReg(NRF24L01_09_CD) || option != 0xFF)
{ {
NRF24L01_ReadPayload(packet,XN297DUMP_MAX_PACKET_LEN); NRF24L01_ReadPayload(packet,XN297DUMP_MAX_PACKET_LEN);
uint16_t time_TCNT1=TCNT1; XN297Dump_overflow();
uint32_t time32=0; uint16_t timeL=TCNT1;
time=time_TCNT1-time; if(TIMER2_BASE->SR & TIMER_SR_UIF)
if(over!=0xFFFF) {//timer just rolled over...
time32=(over<<16)+time; XN297Dump_overflow();
debug("RX: %5luus C=%d ", time32>>1 , hopping_frequency_no); timeL=0;
time=time_TCNT1; }
over=0; if(phase==0)
{
phase=1;
time=0;
}
else
time=(timeH<<16)+timeL-time;
debug("RX: %5luus C=%d ", time>>1 , hopping_frequency_no);
time=(timeH<<16)+timeL;
if(XN297Dump_process_packet()) if(XN297Dump_process_packet())
{ // valid crc found { // valid crc found
debug("S=%c A=",scramble?'Y':'N'); debug("S=%c A=",scramble?'Y':'N');
@ -217,7 +224,6 @@ static uint16_t XN297Dump_callback()
uint16_t initXN297Dump(void) uint16_t initXN297Dump(void)
{ {
BIND_DONE; BIND_DONE;
over=0xFFFF;
address_length=RX_num; address_length=RX_num;
if(address_length<3||address_length>5) if(address_length<3||address_length>5)
address_length=5; //default address_length=5; //default
@ -225,6 +231,7 @@ uint16_t initXN297Dump(void)
bind_counter=0; bind_counter=0;
rf_ch_num=0xFF; rf_ch_num=0xFF;
prev_option=option^0x55; prev_option=option^0x55;
phase=0; // init timer
return XN297DUMP_INITIAL_WAIT; return XN297DUMP_INITIAL_WAIT;
} }