Files
H2201_Audio_Mixer/ESP32/main/SigmaStudioFW.h
Martijn Scheepers e91d629a89 I2c dsp setup
2022-04-26 16:17:34 +02:00

144 lines
4.3 KiB
C
Raw Blame History

/*
* File: SigmaStudioFW.h
*
* Description: SigmaStudio System Framwork macro definitions. These
* macros should be implemented for your system's software.
*
* This software is distributed in the hope that it will be useful,
* but is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* This software may only be used to program products purchased from
* Analog Devices for incorporation by you into audio products that
* are intended for resale to audio product end users. This software
* may not be distributed whole or in any part to third parties.
*
* Copyright <20> 2008 Analog Devices, Inc. All rights reserved.
*/
#ifndef __SIGMASTUDIOFW_H__
#define __SIGMASTUDIOFW_H__
#include <stdint.h>
#include <inttypes.h>
/*
* TODO: Update for your system's data type
*/
typedef unsigned short ADI_DATA_U16;
typedef unsigned char ADI_REG_TYPE;
#define Address_Length 2
void SIGMA_WRITE_REGISTER_BLOCK(uint8_t devAddress, uint16_t address, int length, ADI_REG_TYPE *pData);
void SIGMA_WRITE_DELAY(int devAddress, int length, ADI_REG_TYPE *pData);
/*
* Parameter data format
*/
#define SIGMASTUDIOTYPE_FIXPOINT 0
#define SIGMASTUDIOTYPE_INTEGER 1
/*
* Write to a single Device register
*/
#define SIGMA_WRITE_REGISTER(devAddress, address, dataLength, data) \
{ /*TODO: implement macro or define as function*/ \
}
/*
* TODO: CUSTOM MACRO IMPLEMENTATION
* Write to multiple Device registers
*/
void SIGMA_WRITE_REGISTER_BLOCK(uint8_t devAddress, uint16_t address, int length, ADI_REG_TYPE *pData)
{
// SIGMA_WRITE_REGISTER_BLOCK(DEVICE_ADDR_IC1, REG_SAMPLE_RATE_SETTING_IC1_ADDR, REG_SAMPLE_RATE_SETTING_IC1_BYTE, R0_SAMPLE_RATE_SETTING_IC1_Default);
// 0x70 0x40EB 1 0x7F
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
i2c_master_start(cmd);
i2c_master_write_byte(cmd, devAddress, true); // write address 0x70
i2c_master_write_byte(cmd, (address >> 8), true);
i2c_master_write_byte(cmd, (address & 0xFF), true);
i2c_master_write(cmd, pData, length, true);
i2c_master_stop(cmd);
esp_err_t err = i2c_master_cmd_begin(I2C_MASTER_NUM, cmd, 10 / portTICK_PERIOD_MS);
if (err == ESP_OK)
{
ESP_LOGI(H2201_I2C_TAG, "ADAU1761 block write successfully");
}
else
{
ESP_LOGE(H2201_I2C_TAG, "ADAU1761 block write failed. code: 0x%.2X", err);
}
i2c_cmd_link_delete(cmd);
}
void SIGMA_WRITE_DELAY(int devAddress, int length, ADI_REG_TYPE *pData)
{
// int cnt=0;
int nCount = 0;
// int data_length = length - Address_Length;
// ADI_REG_TYPE data[4]={0x05, 0xF5, 0xE1, 0x00};
// for(cnt=0; cnt<data_length; cnt++)
// {
// nCount &= pData[cnt] >> (8*cnt);
// }
// for(cnt=0; cnt<4; cnt++)
// {
// nCount += data[cnt];
// nCount = nCount<<(8);
//
// }
// nCount=0xFFFFFF;
// nCount=0x15752A00; //5 secs approx
// nCount=0x05F5E100; //5 secs approx
nCount = 0xFFFFF;
for (; nCount != 0; nCount--)
;
}
/*
* Read device registers
*/
#define SIGMA_READ_REGISTER(devAddress, address, length, pData) \
{ /*TODO: implement macro or define as function*/ \
}
/*
* Set a register field's value
*/
#define SIGMA_SET_REGSITER_FIELD(regVal, fieldVal, fieldMask, fieldShift) \
{ \
(regVal) = (((regVal) & (~(fieldMask))) | (((fieldVal) << (fieldShift)) && (fieldMask))) \
}
/*
* Get the value of a register field
*/
#define SIGMA_GET_REGSITER_FIELD(regVal, fieldMask, fieldShift) \
{ \
((regVal) & (fieldMask)) >> (fieldShift) \
}
/*
* Convert a floating-point value to SigmaDSP (5.23) fixed point format
* This optional macro is intended for systems having special implementation
* requirements (for example: limited memory size or endianness)
*/
#define SIGMASTUDIOTYPE_FIXPOINT_CONVERT(_value) \
{ /*TODO: IMPLEMENT MACRO*/ \
}
/*
* Convert integer data to system compatible format
* This optional macro is intended for systems having special implementation
* requirements (for example: limited memory size or endianness)
*/
#define SIGMASTUDIOTYPE_INTEGER_CONVERT(_value) \
{ /*TODO: IMPLEMENT MACRO*/ \
}
#endif