Support for interrupt counter test mode

This commit is contained in:
Andy CA6JAU 2018-11-04 14:34:31 -03:00
parent c45a7cf38f
commit 1aab7ec355
13 changed files with 93 additions and 59 deletions

View file

@ -885,6 +885,7 @@ void CIO::interrupt()
m_watchdog++; m_watchdog++;
m_modeTimerCnt++; m_modeTimerCnt++;
m_int1counter++;
if(m_scanPauseCnt >= SCAN_PAUSE) if(m_scanPauseCnt >= SCAN_PAUSE)
m_scanPauseCnt = 0U; m_scanPauseCnt = 0U;
@ -906,6 +907,8 @@ void CIO::interrupt2()
m_rxBuffer.put(bit, m_control); m_rxBuffer.put(bit, m_control);
} }
m_int2counter++;
} }
#endif #endif

View file

@ -53,7 +53,8 @@ CCalDMR::CCalDMR() :
m_transmit(false), m_transmit(false),
m_state(DMRCAL1K_IDLE), m_state(DMRCAL1K_IDLE),
m_dmr1k(), m_dmr1k(),
m_audioSeq(0) m_audioSeq(0),
m_count(0)
{ {
::memcpy(m_dmr1k, VOICE_1K, DMR_FRAME_LENGTH_BYTES + 1U); ::memcpy(m_dmr1k, VOICE_1K, DMR_FRAME_LENGTH_BYTES + 1U);
} }
@ -72,6 +73,17 @@ void CCalDMR::process()
case STATE_DMRDMO1K: case STATE_DMRDMO1K:
dmrdmo1k(); dmrdmo1k();
break; break;
case STATE_INTCAL:
// Simple interrupt counter for board diagnostics (TCXO, connections, etc)
// Not intended for precise interrupt frequency measurements
m_count++;
if (m_count >= CAL_DLY_LOOP) {
m_count = 0U;
uint16_t int1, int2;
io.getIntCounter(int1, int2);
DEBUG3("Counter INT1/INT2:", int1 >> 1U, int2);
}
break;
default: default:
break; break;
} }

View file

@ -47,6 +47,7 @@ private:
DMRCAL1K m_state; DMRCAL1K m_state;
uint8_t m_dmr1k[DMR_FRAME_LENGTH_BYTES + 1U]; uint8_t m_dmr1k[DMR_FRAME_LENGTH_BYTES + 1U];
uint8_t m_audioSeq; uint8_t m_audioSeq;
uint32_t m_count;
}; };
#endif #endif

View file

@ -36,7 +36,7 @@
#define DEBUG1(a) #define DEBUG1(a)
#define DEBUG2(a,b) #define DEBUG2(a,b)
#define DEBUG2I(a,b) #define DEBUG2I(a,b)
#define DEBUG3(a,b,c) #define DEBUG3(a,b,c) serial.writeDebug((a),(b),(c))
#define DEBUG4(a,b,c,d) #define DEBUG4(a,b,c,d)
#define DEBUG5(a,b,c,d,e) #define DEBUG5(a,b,c,d,e)

View file

@ -47,7 +47,8 @@ enum MMDVM_STATE {
STATE_RSSICAL = 96, STATE_RSSICAL = 96,
STATE_CWID = 97, STATE_CWID = 97,
STATE_DMRCAL = 98, STATE_DMRCAL = 98,
STATE_DSTARCAL = 99 STATE_DSTARCAL = 99,
STATE_INTCAL = 100
}; };
const uint8_t MARK_SLOT1 = 0x08U; const uint8_t MARK_SLOT1 = 0x08U;

12
IO.cpp
View file

@ -37,7 +37,9 @@ m_scanEnable(false),
m_scanPauseCnt(0U), m_scanPauseCnt(0U),
m_scanPos(0U), m_scanPos(0U),
m_ledValue(true), m_ledValue(true),
m_watchdog(0U) m_watchdog(0U),
m_int1counter(0U),
m_int2counter(0U)
{ {
Init(); Init();
@ -402,3 +404,11 @@ uint32_t CIO::getWatchdog()
{ {
return m_watchdog; return m_watchdog;
} }
void CIO::getIntCounter(uint16_t &int1, uint16_t &int2)
{
int1 = m_int1counter;
int2 = m_int2counter;
m_int1counter = 0U;
m_int2counter = 0U;
}

9
IO.h
View file

@ -47,6 +47,12 @@
#define SCAN_TIME 1920 #define SCAN_TIME 1920
#define SCAN_PAUSE 20000 #define SCAN_PAUSE 20000
#if defined(DUPLEX)
#define CAL_DLY_LOOP 96100U
#else
#define CAL_DLY_LOOP 106000U
#endif
extern uint32_t m_frequency_rx; extern uint32_t m_frequency_rx;
extern uint32_t m_frequency_tx; extern uint32_t m_frequency_tx;
extern uint32_t m_pocsag_freq_tx; extern uint32_t m_pocsag_freq_tx;
@ -108,6 +114,7 @@ public:
void setLoDevYSF(bool ysfLoDev); void setLoDevYSF(bool ysfLoDev);
void resetWatchdog(void); void resetWatchdog(void);
uint32_t getWatchdog(void); uint32_t getWatchdog(void);
void getIntCounter(uint16_t &int1, uint16_t &int2);
void selfTest(void); void selfTest(void);
// RF interface API // RF interface API
@ -162,6 +169,8 @@ private:
MMDVM_STATE m_Modes[5]; MMDVM_STATE m_Modes[5];
bool m_ledValue; bool m_ledValue;
volatile uint32_t m_watchdog; volatile uint32_t m_watchdog;
volatile uint16_t m_int1counter;
volatile uint16_t m_int2counter;
}; };

View file

@ -123,7 +123,7 @@ void loop()
if (m_pocsagEnable && (m_modemState == STATE_POCSAG || pocsagTX.busy())) if (m_pocsagEnable && (m_modemState == STATE_POCSAG || pocsagTX.busy()))
pocsagTX.process(); pocsagTX.process();
if (m_calState == STATE_DMRCAL || m_calState == STATE_DMRDMO1K) if (m_calState == STATE_DMRCAL || m_calState == STATE_DMRDMO1K || m_calState == STATE_INTCAL)
calDMR.process(); calDMR.process();
#if defined(SEND_RSSI_DATA) #if defined(SEND_RSSI_DATA)

View file

@ -118,7 +118,7 @@ void loop()
if (m_pocsagEnable && (m_modemState == STATE_POCSAG || pocsagTX.busy())) if (m_pocsagEnable && (m_modemState == STATE_POCSAG || pocsagTX.busy()))
pocsagTX.process(); pocsagTX.process();
if (m_calState == STATE_DMRCAL || m_calState == STATE_DMRDMO1K) if (m_calState == STATE_DMRCAL || m_calState == STATE_DMRDMO1K || m_calState == STATE_INTCAL)
calDMR.process(); calDMR.process();
#if defined(SEND_RSSI_DATA) #if defined(SEND_RSSI_DATA)

View file

@ -231,7 +231,7 @@ uint8_t CSerialPort::setConfig(const uint8_t* data, uint8_t length)
MMDVM_STATE modemState = MMDVM_STATE(data[3U]); MMDVM_STATE modemState = MMDVM_STATE(data[3U]);
if (modemState != STATE_IDLE && modemState != STATE_DSTAR && modemState != STATE_DMR && modemState != STATE_YSF && modemState != STATE_P25 && modemState != STATE_NXDN && modemState != STATE_POCSAG && modemState != STATE_DSTARCAL && modemState != STATE_DMRCAL && modemState != STATE_DMRDMO1K && modemState != STATE_RSSICAL) if (modemState != STATE_IDLE && modemState != STATE_DSTAR && modemState != STATE_DMR && modemState != STATE_YSF && modemState != STATE_P25 && modemState != STATE_NXDN && modemState != STATE_POCSAG && modemState != STATE_DSTARCAL && modemState != STATE_DMRCAL && modemState != STATE_DMRDMO1K && modemState != STATE_INTCAL && modemState != STATE_RSSICAL)
return 4U; return 4U;
if (modemState == STATE_DSTAR && !dstarEnable) if (modemState == STATE_DSTAR && !dstarEnable)
return 4U; return 4U;
@ -278,7 +278,7 @@ uint8_t CSerialPort::setConfig(const uint8_t* data, uint8_t length)
m_nxdnEnable = nxdnEnable; m_nxdnEnable = nxdnEnable;
m_pocsagEnable = pocsagEnable; m_pocsagEnable = pocsagEnable;
if (modemState == STATE_DMRCAL || modemState == STATE_DMRDMO1K || modemState == STATE_RSSICAL) { if (modemState == STATE_DMRCAL || modemState == STATE_DMRDMO1K || modemState == STATE_RSSICAL || modemState == STATE_INTCAL) {
m_dmrEnable = true; m_dmrEnable = true;
m_modemState = STATE_DMR; m_modemState = STATE_DMR;
m_calState = modemState; m_calState = modemState;
@ -319,7 +319,7 @@ uint8_t CSerialPort::setConfig(const uint8_t* data, uint8_t length)
io.setLoDevYSF(ysfLoDev); io.setLoDevYSF(ysfLoDev);
if (!m_firstCal || (modemState != STATE_DMRCAL && modemState != STATE_DMRDMO1K && modemState != STATE_RSSICAL)) { if (!m_firstCal || (modemState != STATE_DMRCAL && modemState != STATE_DMRDMO1K && modemState != STATE_RSSICAL && modemState != STATE_INTCAL)) {
if(m_dstarEnable) if(m_dstarEnable)
io.ifConf(STATE_DSTAR, true); io.ifConf(STATE_DSTAR, true);
else if(m_dmrEnable) else if(m_dmrEnable)
@ -339,7 +339,7 @@ uint8_t CSerialPort::setConfig(const uint8_t* data, uint8_t length)
io.printConf(); io.printConf();
#endif #endif
if (modemState == STATE_DMRCAL || modemState == STATE_DMRDMO1K || modemState == STATE_RSSICAL) if (modemState == STATE_DMRCAL || modemState == STATE_DMRDMO1K || modemState == STATE_RSSICAL || modemState == STATE_INTCAL)
m_firstCal = true; m_firstCal = true;
return 0U; return 0U;
@ -356,7 +356,7 @@ uint8_t CSerialPort::setMode(const uint8_t* data, uint8_t length)
if (modemState == m_modemState) if (modemState == m_modemState)
return 0U; return 0U;
if (modemState != STATE_IDLE && modemState != STATE_DSTAR && modemState != STATE_DMR && modemState != STATE_YSF && modemState != STATE_P25 && modemState != STATE_NXDN && modemState != STATE_POCSAG && modemState != STATE_DSTARCAL && modemState != STATE_DMRCAL && modemState != STATE_DMRDMO1K && modemState != STATE_RSSICAL) if (modemState != STATE_IDLE && modemState != STATE_DSTAR && modemState != STATE_DMR && modemState != STATE_YSF && modemState != STATE_P25 && modemState != STATE_NXDN && modemState != STATE_POCSAG && modemState != STATE_DSTARCAL && modemState != STATE_DMRCAL && modemState != STATE_DMRDMO1K && modemState != STATE_RSSICAL && modemState != STATE_INTCAL)
return 4U; return 4U;
if (modemState == STATE_DSTAR && !m_dstarEnable) if (modemState == STATE_DSTAR && !m_dstarEnable)
return 4U; return 4U;
@ -371,7 +371,7 @@ uint8_t CSerialPort::setMode(const uint8_t* data, uint8_t length)
if (modemState == STATE_POCSAG && !m_pocsagEnable) if (modemState == STATE_POCSAG && !m_pocsagEnable)
return 4U; return 4U;
if (modemState == STATE_DMRCAL || modemState == STATE_DMRDMO1K || modemState == STATE_RSSICAL) { if (modemState == STATE_DMRCAL || modemState == STATE_DMRDMO1K || modemState == STATE_RSSICAL || modemState == STATE_INTCAL) {
m_dmrEnable = true; m_dmrEnable = true;
tmpState = STATE_DMR; tmpState = STATE_DMR;
m_calState = modemState; m_calState = modemState;
@ -589,7 +589,7 @@ void CSerialPort::process()
case MMDVM_CAL_DATA: case MMDVM_CAL_DATA:
if (m_calState == STATE_DMRCAL || m_calState == STATE_DMRDMO1K) { if (m_calState == STATE_DMRCAL || m_calState == STATE_DMRDMO1K) {
err = calDMR.write(m_buffer + 3U, m_len - 3U); err = calDMR.write(m_buffer + 3U, m_len - 3U);
} else if (m_calState == STATE_RSSICAL) { } else if (m_calState == STATE_RSSICAL || m_calState == STATE_INTCAL) {
err = 0U; err = 0U;
} }
if (err == 0U) { if (err == 0U) {
@ -1129,7 +1129,6 @@ void CSerialPort::writeRSSIData(const uint8_t* data, uint8_t length)
#endif #endif
#if defined(ENABLE_DEBUG) #if defined(ENABLE_DEBUG)
void CSerialPort::writeDebug(const char* text) void CSerialPort::writeDebug(const char* text)
{ {
if (!m_debug) if (!m_debug)
@ -1198,6 +1197,7 @@ void CSerialPort::writeDebug(const char* text, int16_t n1)
writeInt(1U, reply, count, true); writeInt(1U, reply, count, true);
} }
#endif
void CSerialPort::writeDebug(const char* text, int16_t n1, int16_t n2) void CSerialPort::writeDebug(const char* text, int16_t n1, int16_t n2)
{ {
@ -1225,6 +1225,7 @@ void CSerialPort::writeDebug(const char* text, int16_t n1, int16_t n2)
writeInt(1U, reply, count, true); writeInt(1U, reply, count, true);
} }
#if defined(ENABLE_DEBUG)
void CSerialPort::writeDebug(const char* text, int16_t n1, int16_t n2, int16_t n3) void CSerialPort::writeDebug(const char* text, int16_t n1, int16_t n2, int16_t n3)
{ {
if (!m_debug) if (!m_debug)
@ -1285,6 +1286,4 @@ void CSerialPort::writeDebug(const char* text, int16_t n1, int16_t n2, int16_t n
writeInt(1U, reply, count, true); writeInt(1U, reply, count, true);
} }
#endif #endif

View file

@ -56,10 +56,10 @@ public:
void writeDebug(const char* text); void writeDebug(const char* text);
void writeDebug(const char* text, int16_t n1); void writeDebug(const char* text, int16_t n1);
void writeDebugI(const char* text, int32_t n1); void writeDebugI(const char* text, int32_t n1);
void writeDebug(const char* text, int16_t n1, int16_t n2);
void writeDebug(const char* text, int16_t n1, int16_t n2, int16_t n3); void writeDebug(const char* text, int16_t n1, int16_t n2, int16_t n3);
void writeDebug(const char* text, int16_t n1, int16_t n2, int16_t n3, int16_t n4); void writeDebug(const char* text, int16_t n1, int16_t n2, int16_t n3, int16_t n4);
#endif #endif
void writeDebug(const char* text, int16_t n1, int16_t n2);
private: private:
uint8_t m_buffer[256U]; uint8_t m_buffer[256U];
@ -85,4 +85,3 @@ private:
}; };
#endif #endif

View file

@ -24,8 +24,8 @@
#define VER_MAJOR "1" #define VER_MAJOR "1"
#define VER_MINOR "4" #define VER_MINOR "4"
#define VER_REV "11" #define VER_REV "12"
#define VERSION_DATE "20181028" #define VERSION_DATE "20181104"
#if defined(ZUMSPOT_ADF7021) #if defined(ZUMSPOT_ADF7021)
#define BOARD_INFO "ZUMspot" #define BOARD_INFO "ZUMspot"