AnsweredAssumed Answered

ADAU1701 SigmaStudioFW.h

Question asked by EEtwidget on Mar 12, 2014
Latest reply on Mar 15, 2014 by EEtwidget

Hello, maybe you can help me out. I am new to the world of DSP and have run into a road block with the SigmaStudioFW.h macro thing.

 

ucontroller: mbed LPC1768

compiler: mbed online IDE

Analog Devices: EVAL-ADAU1701MINIB7 with USBi

 

I created a simple program in SigmaStudio:

sigmaStudio.png

I generated the files:

Design_1_IC_1.h

Design_1_IC_1_PARAM.h

Design_1_IC_1_REG.h

 

I copied the file:

SigmaStudioFW.h

 

And placed everything into a library for my ucontroller

lib.png

I worked off this example and found the SigmaStudioFW.h they used:

/*  * 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 © 2008 Analog Devices, Inc. All rights reserved.  */      #ifndef __SIGMASTUDIOFW_H__ #define __SIGMASTUDIOFW_H__  /*   * TODO: Update for your system's data type  */ typedef unsigned short ADI_DATA_U16; typedef unsigned char  ADI_REG_TYPE;  extern vu16 Tx_Idx, Rx_Idx; extern vu16 NextBufferEnd, ThisBufferSize; extern u8 I2C1_Buffer_Tx[]; #define Address_Length    2 void SIGMA_WRITE_REGISTER_BLOCK(int devAddress, int 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(int devAddress, int address, int length, ADI_REG_TYPE *pData )  {  int ii = 0; int zz = 0; Tx_Idx = 0;  /*----- Transmission Phase -----*/     ThisBufferSize = Address_Length + length;   I2C1_Buffer_Tx[0] =   (address & 0xFF00)>>8; I2C1_Buffer_Tx[1] =   address & 0x00FF;  for(zz=0;zz<length;zz++) { I2C1_Buffer_Tx [zz + Address_Length] =   pData[zz]; }   Tx_Idx = 0;   for(ii =0;ii < ThisBufferSize;ii++)  {           NextBufferEnd =  ThisBufferSize;//I2C1_numbytes[ii];         if(ii == 0) I2C_GenerateSTART(I2C1, ENABLE);        /* Send data */      while(Tx_Idx < NextBufferEnd)           {        }        } }  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 

 

I changed parts of the code to work with the mbed (although I don't think its working)

#ifndef __SIGMASTUDIOFW_H__ #define __SIGMASTUDIOFW_H__  #include "mbed.h" #define    I2C_ADDR_ADAU1701    0x68 typedef unsigned short ADI_DATA_U16; typedef unsigned char  ADI_REG_TYPE;  extern uint16_t Tx_Idx = 0;  extern uint16_t Rx_Idx = 0; extern uint16_t NextBufferEnd = 0; extern uint16_t ThisBufferSize = 0; extern uint8_t I2C1_Buffer_Tx[] = {0x00}; #define Address_Length    2 void SIGMA_WRITE_REGISTER_BLOCK(int devAddress, int address, int length, ADI_REG_TYPE *pData); void SIGMA_WRITE_DELAY(int devAddress, int length, ADI_REG_TYPE  *pData ); I2C i2c(p28,p27);            // sda, scl  /*   * 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(int devAddress, int address, int length, ADI_REG_TYPE *pData )  { int ii = 0; int zz = 0; Tx_Idx = 0;  /*----- Transmission Phase -----*/     ThisBufferSize = Address_Length + length;   I2C1_Buffer_Tx[0] =   (address & 0xFF00)>>8; I2C1_Buffer_Tx[1] =   address & 0x00FF;      for(zz=0;zz<length;zz++)     {     I2C1_Buffer_Tx [zz + Address_Length] =   pData[zz];     }       Tx_Idx = 0;       for(ii =0;ii < ThisBufferSize;ii++)      {          NextBufferEnd = ThisBufferSize;//I2C1_numbytes[ii];             if(ii == 0) i2c.start();           /* Send data */      while(Tx_Idx < NextBufferEnd)           {        }        } } 

 

My main is very simple

#include "mbed.h" #include "Design_1_IC_1_PARAM.h" #include "Design_1_IC_1_REG.h" #include "Design_1_IC_1.h" #include "SigmaStudioFW.h"  int main()  {  default_download_IC_1(); }

 

Seems like I should be sending I2C data in this part of the code but in the example its left blank...

if(ii == 0) I2C_GenerateSTART(I2C1, ENABLE);      /* send data */      while(TX_IDX < NextBufferEnd)      {           //send I2C data here?      }

 

What am I doing wrong?

Outcomes