|
-
-
- #include "control_ak4558.h"
- #include "Wire.h"
-
- void AudioControlAK4558::initConfig(void)
- {
-
-
-
-
-
-
-
- uint8_t n = 0;
- Wire.requestFrom(AK4558_I2C_ADDR,10);
- while(Wire.available()) {
- #if AK4558_SERIAL_DEBUG > 0
- Serial.print("Register ");
- Serial.print(n);
- Serial.print(" = ");
- #endif
- registers[n++] = Wire.read();
- #if AK4558_SERIAL_DEBUG > 0
- Serial.println(registers[n-1], BIN);
- #endif
- }
- }
-
- void AudioControlAK4558::readConfig(void)
- {
-
- uint8_t n = 0;
- uint8_t c = 0;
- Wire.requestFrom(AK4558_I2C_ADDR, 10);
- while(Wire.available()) {
- Serial.print("Register ");
- Serial.print(n++);
- Serial.print(" = ");
- c = Wire.read();
- Serial.println(c, BIN);
- }
- }
-
- bool AudioControlAK4558::write(unsigned int reg, unsigned int val)
- {
- Wire.beginTransmission(AK4558_I2C_ADDR);
- Wire.write(reg);
- Wire.write(val);
- return (Wire.endTransmission(true)==0);
- }
-
- bool AudioControlAK4558::enableIn(void)
- {
-
- #if AK4558_SERIAL_DEBUG > 0
- Serial.println("AK4558: Enable ADC");
- #endif
-
-
-
- registers[AK4558_PWR_MNGT] |= AK4558_PMADR | AK4558_PMADL;
- write(AK4558_PWR_MNGT, registers[AK4558_PWR_MNGT]);
- #if AK4558_SERIAL_DEBUG > 0
- Serial.print("AK4558: PWR_MNGT set to ");
- Serial.println(registers[AK4558_PWR_MNGT], BIN);
- #endif
- delay(300);
-
-
- #if AK4558_SERIAL_DEBUG > 0
- Serial.println("AK4558: Enable ADC - Done");
- #endif
- return true;
- }
- bool AudioControlAK4558::enableOut(void)
- {
- #if AK4558_SERIAL_DEBUG > 0
- Serial.println("AK4558: Enable DAC");
- #endif
-
-
- registers[AK4558_MODE_CTRL] |= AK4558_LOPS;
- write(AK4558_MODE_CTRL, registers[AK4558_MODE_CTRL]);
- #if AK4558_SERIAL_DEBUG > 0
- Serial.print("AK4558: MODE_CTRL set to ");
- Serial.println(registers[AK4558_MODE_CTRL], BIN);
- #endif
-
-
-
-
-
- registers[AK4558_PWR_MNGT] |= AK4558_PMDAR | AK4558_PMDAL;
- write(AK4558_PWR_MNGT, registers[AK4558_PWR_MNGT]);
- #if AK4558_SERIAL_DEBUG > 0
- Serial.print("AK4558: PWR_MNGT set to ");
- Serial.println(registers[AK4558_PWR_MNGT], BIN);
- #endif
- delay(300);
-
-
-
- registers[AK4558_MODE_CTRL] &= ~AK4558_LOPS;
- write(AK4558_MODE_CTRL, registers[AK4558_MODE_CTRL]);
- #if AK4558_SERIAL_DEBUG > 0
- Serial.print("AK4558: MODE_CTRL set to ");
- Serial.println(registers[AK4558_MODE_CTRL], BIN);
- #endif
-
-
-
- #if AK4558_SERIAL_DEBUG > 0
- Serial.println("AK4558: Enable DAC - Done");
- #endif
- return true;
- }
-
- bool AudioControlAK4558::enable(void)
- {
- #if AK4558_SERIAL_DEBUG > 0
- Serial.println("AK4558: Enable device");
- #endif
-
-
- pinMode(PIN_PDN, OUTPUT);
- digitalWrite(0, LOW);
- delay(1);
- digitalWrite(0, HIGH);
-
-
- delay(20);
- #if AK4558_SERIAL_DEBUG > 0
- Serial.println("AK4558: PDN is HIGH (device reset)");
- #endif
-
- Wire.begin();
- initConfig();
-
-
-
-
-
-
-
-
-
- registers[AK4558_CTRL_1] &= ~AK4558_DIF2;
- registers[AK4558_CTRL_1] |= AK4558_DIF1 | AK4558_DIF0;
- #if AK4558_SERIAL_DEBUG > 0
- Serial.print("AK4558: CTRL_1 set to ");
- Serial.println(registers[AK4558_CTRL_1], BIN);
- #endif
-
- registers[AK4558_CTRL_2] &= ~AK4558_MCKS1;
- #if AK4558_SERIAL_DEBUG > 0
- Serial.print("AK4558: CTRL_2 set to ");
- Serial.println(registers[AK4558_CTRL_2], BIN);
- #endif
-
- registers[AK4558_MODE_CTRL] &= ~AK4558_BCKO0;
-
- registers[AK4558_MODE_CTRL] |= AK4558_FS1;
-
-
- #if AK4558_SERIAL_DEBUG > 0
- Serial.print("AK4558: MODE_CTRL set to ");
- Serial.println(registers[AK4558_MODE_CTRL], BIN);
- #endif
-
- Wire.beginTransmission(AK4558_I2C_ADDR);
- Wire.write(AK4558_CTRL_1);
- Wire.write(registers[AK4558_CTRL_1]);
- Wire.write(registers[AK4558_CTRL_2]);
- Wire.write(registers[AK4558_MODE_CTRL]);
- Wire.endTransmission();
-
-
-
-
-
-
-
- #if AK4558_SERIAL_DEBUG > 0
- Serial.println("AK4558: Enable device - Done");
- #endif
- return true;
- }
-
- bool AudioControlAK4558::disableIn(void)
- {
-
-
- registers[AK4558_PWR_MNGT] &= ~AK4558_PMADR | ~AK4558_PMADL;
- write(AK4558_PWR_MNGT, registers[AK4558_PWR_MNGT]);
- #if AK4558_SERIAL_DEBUG > 0
- Serial.print("AK4558: PWR_MNGT set to ");
- Serial.println(registers[AK4558_PWR_MNGT], BIN);
- #endif
-
- #if AK4558_SERIAL_DEBUG > 0
- Serial.println("AK4558: Enable ADC - Done");
- #endif
- return true;
- }
-
- bool AudioControlAK4558::disableOut(void)
- {
- #if AK4558_SERIAL_DEBUG > 0
- Serial.println("AK4558: Disable DAC");
- #endif
-
-
- registers[AK4558_MODE_CTRL] |= AK4558_LOPS;
- write(AK4558_MODE_CTRL, registers[AK4558_MODE_CTRL]);
- #if AK4558_SERIAL_DEBUG > 0
- Serial.print("AK4558: MODE_CTRL set to ");
- Serial.println(registers[AK4558_MODE_CTRL], BIN);
- #endif
-
-
- registers[AK4558_PWR_MNGT] &= ~AK4558_PMDAR | ~AK4558_PMDAL;
- write(AK4558_PWR_MNGT, registers[AK4558_PWR_MNGT]);
- #if AK4558_SERIAL_DEBUG > 0
- Serial.print("AK4558: PWR_MNGT set to ");
- Serial.println(registers[AK4558_PWR_MNGT], BIN);
- #endif
- delay(300);
-
-
-
- registers[AK4558_MODE_CTRL] &= ~AK4558_LOPS;
- write(AK4558_MODE_CTRL, registers[AK4558_MODE_CTRL]);
- #if AK4558_SERIAL_DEBUG > 0
- Serial.print("AK4558: MODE_CTRL set to ");
- Serial.println(registers[AK4558_MODE_CTRL], BIN);
- #endif
-
-
- #if AK4558_SERIAL_DEBUG > 0
- Serial.println("AK4558: Disable DAC - Done");
- #endif
- return true;
- }
-
- uint8_t AudioControlAK4558::convertVolume(float vol)
- {
-
- uint8_t temp = ((uint32_t)vol)>>22;
- return temp;
- }
-
- bool AudioControlAK4558::volume(float n)
- {
-
- uint8_t vol = convertVolume(n);
- registers[AK4558_LOUT_VOL] = vol;
- registers[AK4558_ROUT_VOL] = vol;
- Wire.beginTransmission(AK4558_I2C_ADDR);
- Wire.write(AK4558_LOUT_VOL);
- Wire.write(registers[AK4558_LOUT_VOL]);
- Wire.write(registers[AK4558_ROUT_VOL]);
- #if AK4558_SERIAL_DEBUG > 0
- Serial.print("AK4558: LOUT_VOL set to ");
- Serial.println(registers[AK4558_LOUT_VOL], BIN);
- Serial.print("AK4558: ROUT_VOL set to ");
- Serial.println(registers[AK4558_ROUT_VOL], BIN);
- #endif
- return (Wire.endTransmission(true)==0);
- }
-
- bool AudioControlAK4558::volumeLeft(float n)
- {
-
- uint8_t vol = convertVolume(n);
- registers[AK4558_LOUT_VOL] = vol;
- bool ret = write(AK4558_LOUT_VOL, registers[AK4558_LOUT_VOL]);
- #if AK4558_SERIAL_DEBUG > 0
- Serial.print("AK4558: LOUT_VOL set to ");
- Serial.println(registers[AK4558_LOUT_VOL], BIN);
- #endif
- return ret;
- }
-
- bool AudioControlAK4558::volumeRight(float n)
- {
-
- uint8_t vol = convertVolume(n);
- registers[AK4558_ROUT_VOL] = vol;
- bool ret = write(AK4558_ROUT_VOL, registers[AK4558_ROUT_VOL]);
- #if AK4558_SERIAL_DEBUG > 0
- Serial.print("AK4558: ROUT_VOL set to ");
- Serial.println(registers[AK4558_ROUT_VOL], BIN);
- #endif
- return ret;
- }
|