====== k2m051.ino changes ======
I am using a function derived from a function in HiFiDUINO's [[https://hifiduino.wordpress.com/code/|k2m051.ino]] in a proprietary contract project. The [[https://creativecommons.org/licenses/by/3.0/|CC-by 3.0]] license wants me to share modifications, and I am happy to oblige!
Here's the (trivially) modified version of ''unsigned long sampleRate()'' that I am using as a class member function:
unsigned long ES9018K2M::getSampleRate()
{
if (!isSignalLock())
{
return 0;
}
// uint8_t dpll0 = 0; // LSB of DPLL register
// uint8_t dpll1 = 0;
// uint8_t dpll2 = 0;
// uint8_t dpll3 = 0; // MSB of DPLL register
dpll0 = 0;
dpll1 = 0;
dpll2 = 0;
dpll3 = 0;
m_dpllVal = 0;
// Read the 4 registers of DPLL one byte at a time starting with LSB (reg 66).
dpll0 = readRegister(66);
dpll1 = readRegister(67);
dpll2 = readRegister(68);
dpll3 = readRegister(69);
m_dpllVal |= dpll3;
m_dpllVal <<= 8;
m_dpllVal |= dpll2;
m_dpllVal <<= 8;
m_dpllVal |= dpll1;
m_dpllVal <<= 8;
m_dpllVal |= dpll0;
m_dpllVal >>= 1; // Get rid of LSB to allow for integer operation below to avoid overflow.
//using 80MHZ clock
m_dpllVal *= 16; // Calculate SR for 80MHz part
m_dpllVal /= 859; // Calculate SR for 80MHz part
m_dpllVal += 1;
m_dpllVal *= 2;
return m_dpllVal;
}
and my ''isSignalLock()'' function:
uint8_t ES9018K2M::isSignalLock()
{
uint8_t regVal = readRegister(REG_64);
return 0x01 & regVal; // mask off all but last bit
}