From c71ee46e5f5733c10a527e4ad4edf3c327ebd554 Mon Sep 17 00:00:00 2001 From: "gruvin@gmail.com" Date: Wed, 31 Oct 2012 23:40:21 +0000 Subject: [PATCH] Makefile addition for GRUVIN9X PCB PORTH real-time diagnostics. $ make ... PORTH_TIMING=YES See code comments for details. This is used to analyse real-world timing of mixer interrupt, setupPulses and PPM or DSM=SERIAL or DSM2=PPM data output streams. NOTE: Not compatible to SOUND=YES (SOMO14) --- src/Makefile | 19 +++++++++++++++++-- src/board_gruvin9x.cpp | 10 +++++++++- src/open9x.cpp | 10 ++++++++++ src/pulses_avr.cpp | 10 ++++++++++ 4 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/Makefile b/src/Makefile index dcba0bc8d..e1fcab9db 100644 --- a/src/Makefile +++ b/src/Makefile @@ -198,6 +198,17 @@ XCURVES = YES # Values = YES, NO GVARS = NO +#------- TIMING DEBUG OPTIONS ------------------------ + +# Enable debug code to output signals on PORTH for logic analyser timing analysis +# G9X V4 board only. **WARNING** Not compatible with TX_CADDY=YES or SOMO14 (VOICE=YES) +# +# PORTH:7 --> Transistion LOW to HIGH = start of setupPulses(). Transistion HIGH to LOW = end of setupPulses(). +# PORTH:6 --> LOW->HIGH = start of mixer calcs. HIGH->LOW, end of mixer calcs. +# +# Values = YES, NO +PORTH_TIMING=YES + #------- END BUILD OPTIONS --------------------------- # Define programs and commands. @@ -424,8 +435,8 @@ ifeq ($(DEBUG), YES) CPPDEFS += -DDEBUG endif -ifeq ($(EEPROM_PROGRESS_BAR), YES) - CPPDEFS += -DEEPROM_PROGRESS_BAR +ifeq ($(PORTH_TIMING), YES) + CPPDEFS += -DPORTH_TIMING endif ifeq ($(SDCARD), YES) @@ -528,6 +539,10 @@ ifeq ($(PCB), GRUVIN9X) ifeq ($(EXTRA_ROTARY_ENCODERS), YES) CPPDEFS += -DEXTRA_ROTARY_ENCODERS endif + + ifeq ($(EEPROM_PROGRESS_BAR), YES) + CPPDEFS += -DEEPROM_PROGRESS_BAR + endif endif ifeq ($(PCB), STD128) diff --git a/src/board_gruvin9x.cpp b/src/board_gruvin9x.cpp index c33bef9c4..553914ac5 100644 --- a/src/board_gruvin9x.cpp +++ b/src/board_gruvin9x.cpp @@ -44,7 +44,15 @@ inline void board_init() DDRE = 0b00001010; PORTE = 0b11110100; // 7:PPM_IN, 6: RENC1_B, 5:RENC1_A, 4:USB_DNEG, 3:BUZZER, 2:USB_DPOS, 1:TELEM_TX, 0:TELEM_RX(pull-up off) DDRF = 0x00; PORTF = 0x00; // 7-4:JTAG, 3:ADC_REF_1.2V input, 2-0:ADC_SPARE_2-0 DDRG = 0b00010000; PORTG = 0xff; // 7-6:N/A, 5:GearSW, 4: Sim_Ctrl[out], 3:IDL1_Sw, 2:TCut_Sw, 1:RF_Power[in], 0: RudDr_Sw - DDRH = 0b00110000; PORTH = 0b11011111; // 7:0 Spare port [6:SOMO14D-BUSY 5:SOMO14D-DATA 4:SOMO14D-CLK] [2:VIB_OPTION -- setting to input for now] + +#ifdef PORTH_TIMING + DDRH = 0b11110000; PORTH = 0b11011111; // PORTH:7-6 enabled for timing analysis output ... see below ... +#else + DDRH = 0b10110000; PORTH = 0b11011111; // [7:0 DSM/PPM TX-caddy control. 1=PPM, 0=DSM ] + // [6:SOMO14D-BUSY 5:SOMO14D-DATA 4:SOMO14D-CLK] [2:VIB_OPTION -- setting to input for now] + // [1:TxD 0:RxD Spare serial port] +#endif + DDRJ = 0x00; PORTJ = 0xff; // 7-0:Trim switch inputs DDRK = 0x00; PORTK = 0x00; // anain. No pull-ups! #ifdef REV0 diff --git a/src/open9x.cpp b/src/open9x.cpp index 900d88816..0d6f9085c 100644 --- a/src/open9x.cpp +++ b/src/open9x.cpp @@ -2996,6 +2996,11 @@ uint16_t getTmr16KHz() #if defined (PCBGRUVIN9X) ISR(TIMER5_COMPA_vect, ISR_NOBLOCK) // mixer interrupt { + +#ifdef PORTH_TIMING + PORTH |= 0x40; // PORTH:6 LOW->HIGH signals start of mixer interrupt +#endif + cli(); TIMSK5 &= ~(1<LOW signals end of mixer interrupt +#endif + } #endif diff --git a/src/pulses_avr.cpp b/src/pulses_avr.cpp index e148c565b..b073281cb 100644 --- a/src/pulses_avr.cpp +++ b/src/pulses_avr.cpp @@ -729,6 +729,11 @@ static void setupPulsesPiccoZ(uint8_t chn) void setupPulses() { uint8_t required_protocol = g_model.protocol; + +#ifdef PORTH_TIMING + PORTH |= 0x80; // PORTH:7 LOW->HIGH signals start of setupPulses() +#endif + if (s_pulses_paused) required_protocol = PROTO_NONE; @@ -884,6 +889,11 @@ void setupPulses() // if PPM16, PPM16 pulses are set up automatically within the interrupts break; } + +#ifdef PORTH_TIMING + PORTH &= ~0x80; // PORTH:7 HIGH->LOW signals end of setupPulses() +#endif + } #ifndef SIMU