From 92d9844f6414289a5968ee63f304e5f0088a0f80 Mon Sep 17 00:00:00 2001 From: Andy CA6JAU Date: Sun, 20 Aug 2017 20:48:17 -0300 Subject: [PATCH] Adding runtime debug info print at startup --- ADF7021.cpp | 62 ++++++++++++++++++++++++++++++++++++++------------ Globals.h | 1 + IO.h | 13 ++++++++++- SerialPort.cpp | 16 ++++++++++++- SerialPort.h | 2 ++ 5 files changed, 78 insertions(+), 16 deletions(-) diff --git a/ADF7021.cpp b/ADF7021.cpp index 50c51a7..68dea79 100644 --- a/ADF7021.cpp +++ b/ADF7021.cpp @@ -41,6 +41,7 @@ uint32_t ADF7021_RX_REG0; uint32_t ADF7021_TX_REG0; uint32_t ADF7021_REG1; uint32_t div2; +float f_div; static void Send_AD7021_control_shift() { @@ -171,8 +172,6 @@ uint16_t CIO::readRSSI() void CIO::ifConf(MMDVM_STATE modemState, bool reset) { float divider; - uint8_t N_divider; - uint16_t F_divider; uint32_t ADF7021_REG2 = 0; uint32_t ADF7021_REG3 = 0; @@ -213,6 +212,11 @@ void CIO::ifConf(MMDVM_STATE modemState, bool reset) div2 = 1U; } + if(div2 == 1U) + f_div = 2.0; + else + f_div = 1.0; + switch (modemState) { case STATE_DSTAR: AFC_OFFSET = 0; @@ -235,9 +239,9 @@ void CIO::ifConf(MMDVM_STATE modemState, bool reset) else divider = (m_frequency_rx - 100000 + (2*AFC_OFFSET)) / ADF7021_PFD; - N_divider = floor(divider); - divider = (divider - N_divider) * 32768; - F_divider = floor(divider + 0.5); + m_RX_N_divider = floor(divider); + divider = (divider - m_RX_N_divider) * 32768; + m_RX_F_divider = floor(divider + 0.5); ADF7021_RX_REG0 = (uint32_t) 0b0000; @@ -247,17 +251,17 @@ void CIO::ifConf(MMDVM_STATE modemState, bool reset) ADF7021_RX_REG0 |= (uint32_t) 0b01011 << 27; // mux regulator/uart-spi enabled/receive #endif - ADF7021_RX_REG0 |= (uint32_t) N_divider << 19; // frequency; - ADF7021_RX_REG0 |= (uint32_t) F_divider << 4; // frequency; + ADF7021_RX_REG0 |= (uint32_t) m_RX_N_divider << 19; // frequency; + ADF7021_RX_REG0 |= (uint32_t) m_RX_F_divider << 4; // frequency; if( div2 == 1U ) divider = m_frequency_tx / (ADF7021_PFD / 2U); else divider = m_frequency_tx / ADF7021_PFD; - N_divider = floor(divider); - divider = (divider - N_divider) * 32768; - F_divider = floor(divider + 0.5); + m_TX_N_divider = floor(divider); + divider = (divider - m_TX_N_divider) * 32768; + m_TX_F_divider = floor(divider + 0.5); ADF7021_TX_REG0 = (uint32_t) 0b0000; // register 0 @@ -267,8 +271,8 @@ void CIO::ifConf(MMDVM_STATE modemState, bool reset) ADF7021_TX_REG0 |= (uint32_t) 0b01010 << 27; // mux regulator/uart-spi enabled/transmit #endif - ADF7021_TX_REG0 |= (uint32_t) N_divider << 19; // frequency; - ADF7021_TX_REG0 |= (uint32_t) F_divider << 4; // frequency; + ADF7021_TX_REG0 |= (uint32_t) m_TX_N_divider << 19; // frequency; + ADF7021_TX_REG0 |= (uint32_t) m_TX_F_divider << 4; // frequency; #if defined(TEST_TX) modemState = STATE_DSTAR; @@ -797,9 +801,39 @@ void CIO::setRX(bool doSle) } } -void CIO::setLoDevYSF(bool on) +uint32_t CIO::RXfreq(void) +{ + return (uint32_t)((ADF7021_PFD / f_div) * ((float)m_RX_N_divider + (((float)m_RX_F_divider) / 32768.0)) + 100000.0); +} + +uint32_t CIO::TXfreq(void) +{ + return (uint32_t)((ADF7021_PFD / f_div) * ((float)m_TX_N_divider + (((float)m_TX_F_divider) / 32768.0))); +} + +uint16_t CIO::devDSTAR(void) +{ + return (uint16_t)(ADF7021_PFD * (((float)ADF7021_DEV_DSTAR) / f_div) / 65536.0); +} + +uint16_t CIO::devDMR(void) +{ + return (uint16_t)(ADF7021_PFD * (((float)ADF7021_DEV_DMR) / f_div) / 65536.0); +} + +uint16_t CIO::devYSF_H(void) +{ + return (uint16_t)(ADF7021_PFD * (((float)ADF7021_DEV_YSF_H) / f_div) / 65536.0); +} + +uint16_t CIO::devYSF_L(void) +{ + return (uint16_t)(ADF7021_PFD * (((float)ADF7021_DEV_YSF_L) / f_div) / 65536.0); +} + +uint16_t CIO::devP25(void) { - m_LoDevYSF = on; + return (uint16_t)(ADF7021_PFD * (((float)ADF7021_DEV_P25) / f_div) / 65536.0); } #endif diff --git a/Globals.h b/Globals.h index baec6dc..ee435a3 100644 --- a/Globals.h +++ b/Globals.h @@ -23,6 +23,7 @@ #if defined(STM32F10X_MD) #include #include "string.h" +#include #else #include #endif diff --git a/IO.h b/IO.h index 1afb2e7..fc65deb 100644 --- a/IO.h +++ b/IO.h @@ -118,8 +118,19 @@ public: void delay_IFcal(void); void delay_reset(void); void delay_us(uint32_t us); - + uint32_t RXfreq(void); + uint32_t TXfreq(void); + uint16_t devDSTAR(void); + uint16_t devDMR(void); + uint16_t devYSF_H(void); + uint16_t devYSF_L(void); + uint16_t devP25(void); + private: + uint8_t m_RX_N_divider; + uint16_t m_RX_F_divider; + uint8_t m_TX_N_divider; + uint16_t m_TX_F_divider; bool m_started; CBitRB m_rxBuffer; diff --git a/SerialPort.cpp b/SerialPort.cpp index 6a20f45..56ad365 100644 --- a/SerialPort.cpp +++ b/SerialPort.cpp @@ -280,7 +280,8 @@ uint8_t CSerialPort::setConfig(const uint8_t* data, uint8_t length) io.ifConf(STATE_P25, true); io.start(); - + printConf(); + return 0U; } @@ -1013,3 +1014,16 @@ void CSerialPort::writeDebug(const char* text, int16_t n1, int16_t n2, int16_t n writeInt(1U, reply, count, true); } +void CSerialPort::printConf() +{ + char buff[60]; + + writeDebug("ZUMspot configuration:"); + sprintf(buff, "TX freq %lu Hz, RX freq %lu Hz", io.TXfreq(), io.RXfreq()); + writeDebug(buff); + writeDebug("D-Star dev (Hz):", io.devDSTAR()); + writeDebug("DMR +1 sym dev (Hz):", io.devDMR()); + writeDebug("YSF_H +1 sym dev (Hz):", io.devYSF_H()); + writeDebug("YSF_L +1 sym dev (Hz):", io.devYSF_L()); + writeDebug("P25 +1 sym dev (Hz):", io.devP25()); +} diff --git a/SerialPort.h b/SerialPort.h index 920b220..1086391 100644 --- a/SerialPort.h +++ b/SerialPort.h @@ -50,6 +50,8 @@ public: 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 printConf(); + private: uint8_t m_buffer[256U]; uint8_t m_ptr;