|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
-
-
- #include "control_ak4558.h"
- #include "Wire.h"
-
- void AudioControlAK4558::initConfig(void)
- {
-
-
-
-
-
-
-
- unsigned int 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)
- {
-
- unsigned int n = 0;
- char 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
- write(AK4558_ROUT_VOL,255);
- 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;
- }
-
- bool AudioControlAK4558:volume(float n)
- {
-
-
- registers[AK4558_LOUT_VOL] = 255;
- registers[AK4558_ROUT_VOL] = 255;
- Wire.beginTransmission(AK4558_I2C_ADDR);
- Wire.write(AK4558_LOUT_VOL);
- Wire.write(registers[AK4558_LOUT_VOL]);
- Wire.write(registers[AK4558_ROUT_VOL]);
- Wire.endTransmission();
- #if AK4558_SERIAL_DEBUG > 0
- Serial.print("AK4558: LOUT_VOL set to ");
- Serial.println(registers[AK4558_LOUT_VOL], BIN);
- #endif
- return (Wire.endTransmission(true)==0);
- }
|