Device driver for TI TLV320AIC1110 voice band codec
Work in Progress
TLV320AIC1110.cpp
- Committer:
- sam_grove
- Date:
- 2013-05-15
- Revision:
- 1:4d559df5733e
- Parent:
- 0:ec233f3b49d8
- Child:
- 3:4592d862ef88
File content as of revision 1:4d559df5733e:
/** * @file TLV320AIC1110.cpp * @brief Device driver - TLV320AIC1110 CODEC * @author sam grove * @version 1.0 * @see http://www.ti.com/product/tlv320aic1110 * * Copyright (c) 2013 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "TLV320AIC1110.h" #include "LogUtil.h" TLV320AIC1110::TLV320AIC1110(I2C &i2c) { _i2c = &i2c; _i2c->frequency(100000); return; } TLV320AIC1110::~TLV320AIC1110() { return; } void TLV320AIC1110::init(void) { writeRegister(0x00, 0x9B); writeRegister(0x01, 0x00); writeRegister(0x06, 0x81); return; } void TLV320AIC1110::regDump(void) { for(int i=0; i<7; i++) { LOG(" Register 0x%02x 0x%02x\n", i, readRegister(i)); } return; } void TLV320AIC1110::writeRegister(const uint8_t reg, const uint8_t value) { const uint8_t w_address = 0xE2; uint8_t data[2] = {reg, value}; __disable_irq(); if (0 != _i2c->write(w_address, (char *)data, 2)) { ERROR("write failed\n"); } __enable_irq(); // _i2c->start(); // _i2c->write(w_address); // _i2c->write(reg); // _i2c->write(value); // _i2c->stop(); return; } uint8_t TLV320AIC1110::readRegister(const uint8_t reg) { const uint8_t w_address = 0xE2; const uint8_t r_address = 0xE3; uint8_t data[1] = {reg}; __disable_irq(); _i2c->start(); _i2c->write(w_address); _i2c->write(reg); _i2c->stop(); _i2c->start(); _i2c->write(r_address); data[0] = _i2c->read(1); _i2c->stop(); __enable_irq(); return data[0]; }