Quantcast
Channel: EngineerZone: Message List
Viewing all articles
Browse latest Browse all 22625

ADAU1701 SigmaStudioFW.h

$
0
0

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?


Viewing all articles
Browse latest Browse all 22625

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>