This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CCS/TMS320C5545: I2C EEPROM programing

Part Number: TMS320C5545
Other Parts Discussed in Thread: PCM5142, CC8530

Tool/software: Code Composer Studio

Hi

I want to program my code in I2C EEPROM.

My problem is it is not working well.

First, I made bin file by using HEX55.exe

and I programed the bin file through the example code 'programer'

But my board is not working well. I changed code to check.

If DMA changed buff data, GPIO 9 is High. but It is always LOW. 

I think DMA is not working.

This is my code. my code is receiving CC8530 data though DMA , also sending DSP data to DAC(PCM5142)

----------------------------------------------------------------------------

#include "csl_dma.h"

#include "csl_i2s.h"

#include <csl_general.h>

#include <stdio.h>

#include "csl_sysctrl.h"

#include "csl_intc.h"

#include "DAC_PCM5142.h"

#include "csl_pll.h"

#include "csl_general.h"

#include "csl_pllAux.h"

#define CSL_TEST_FAILED         (1)

#define CSL_TEST_PASSED         (0)

#define CSL_DMA0_CH0            (0)

#define CSL_I2S_DMA_BUF_LEN (88)

#define DMA_DATA_LENGTH         CSL_I2S_DMA_BUF_LEN*4;

CSL_DMA_ChannelObj dmaObj0,dmaObj1,dmaObj2,dmaObj3;

CSL_DMA_Handle dmaLeftTxHandle;

CSL_DMA_Handle dmaRightTxHandle;

CSL_DMA_Handle dmaLeftRxHandle;

CSL_DMA_Handle dmaRightRxHandle;

CSL_DMA_Config dmaConfig;

CSL_I2sHandle   hI2s, hI2s_2;

CSL_IRQ_Dispatch     dispatchTable;

PLL_Obj pllObj;

PLL_Config pllCfg1;

PLL_Handle hPll;

PLL_Config *pConfigInfo;

PLL_Config pllCfg_12p288MHz = {0x8173, 0x8000, 0x0806, 0x0000};

PLL_Config pllCfg_40MHz     = {0x8988, 0x8000, 0x0806, 0x0201};

PLL_Config pllCfg_60MHz     = {0x8724, 0x8000, 0x0806, 0x0000};

PLL_Config pllCfg_75MHz     = {0x88ED, 0x8000, 0x0806, 0x0000};

PLL_Config pllCfg_100MHz    = {0x8BE8, 0x8000, 0x0806, 0x0000};

PLL_Config pllCfg_120MHz    = {0x8E4A, 0x8000, 0x0806, 0x0000};

volatile Uint16 dmaTxFrameCount = 0, dmaRxFrameCount=0, dmaIntCount,toggle;

#pragma DATA_ALIGN(i2sDmaWriteLeftBuff, 32);

Uint32 i2sDmaWriteLeftBuff[CSL_I2S_DMA_BUF_LEN];

#pragma DATA_ALIGN(i2sDmaWriteRightBuff, 32);

Uint32 i2sDmaWriteRightBuff[CSL_I2S_DMA_BUF_LEN];

#pragma DATA_ALIGN(i2sDmaReadLeftBuff, 32);

Uint32 i2sDmaReadLeftBuff[CSL_I2S_DMA_BUF_LEN];

#pragma DATA_ALIGN(i2sDmaReadRightBuff, 32);

Uint32 i2sDmaReadRightBuff[CSL_I2S_DMA_BUF_LEN];

interrupt void DmaIsr(void);

void UserAlgorithm(void);

void pll_sample()

{

    CSL_Status status;

   PLL_init(&pllObj, CSL_PLL_INST_0);

    hPll = (PLL_Handle)(&pllObj);

    PLL_reset(hPll);

   /* Configure the PLL for 100MHz */

   pConfigInfo = &pllCfg_100MHz;

  PLL_config (hPll, pConfigInfo);

//PLL configuration complete

//The below code is for demonstrating additional CSL PLL APIs

    PLL_getConfig(hPll, &pllCfg1); //demonstrates geting the PLL configuration

   PLL_bypass(hPll); //demonstrates the PLL bypass and power down

   PLL_enable(hPll); //demonstrates PLL power up & enabling with the previous configuration

/////////////////////////////////////////////////////////////////////////

}

void I2S_set(void)

{

I2S_Config hwConfig;

////////////////////////////////////////////////////////////////////////////////////////////////////  I2S_0

hI2s = I2S_open(I2S_INSTANCE0, DMA_POLLED, I2S_CHAN_STEREO);

SYS_setEBSR(CSL_EBSR_FIELD_SP0MODE, CSL_EBSR_SP0MODE_1);  // i2s0 port set

/** Set the value for the configure structure */

hwConfig.dataType = I2S_STEREO_ENABLE;            // 0 stereo  1mono

//hwConfig.loopBackMode = I2S_LOOPBACK_ENABLE;          // 1 enable 0disable

hwConfig.loopBackMode       = I2S_LOOPBACK_DISABLE;          // 1 enable 0disable

hwConfig.fsPol = I2S_FSPOL_LOW;                // ws low = left ch

hwConfig.clkPol = I2S_FALLING_EDGE;             //Receive data is sampled on the falling edge and transmit data shifted on

                                                            // the rising edge of the bit clock.

hwConfig.datadelay = I2S_DATADELAY_ONEBIT;        //0 -> 1bit delay 1-> 2bit delay

hwConfig.datapack = I2S_DATAPACK_DISABLE;        //

hwConfig.signext = I2S_SIGNEXT_DISABLE;        //extension of words

hwConfig.wordLen = I2S_WORDLEN_16;             // 0-8, 1-10, 2-12, 3-14, 4-16, 5-18, 6-20, 7-22,8-24

//hwConfig.i2sMode = I2S_MASTER;                 // 0-slave, 1-master

hwConfig.i2sMode            = I2S_SLAVE;                 // 0-slave, 1-master

hwConfig.FError = I2S_FSERROR_DISABLE;

hwConfig.OuError = I2S_OUERROR_DISABLE;

I2S_setup(hI2s, &hwConfig);

///////////////////////////////////////////////////////////////////////////////////////////////  I2S_2

hI2s_2 = I2S_open(I2S_INSTANCE2, DMA_POLLED, I2S_CHAN_STEREO);

    SYS_setEBSR(CSL_EBSR_FIELD_PPMODE, CSL_EBSR_PPMODE_6);    //  i2s2 mode setup

    /** Set the value for the configure structure               */

    hwConfig.dataType           = I2S_STEREO_ENABLE;            // 0 stereo  1mono

    //hwConfig.loopBackMode         = I2S_LOOPBACK_ENABLE;          // 1 enable 0disable

    hwConfig.loopBackMode       = I2S_LOOPBACK_DISABLE;          // 1 enable 0disable

    hwConfig.fsPol              = I2S_FSPOL_LOW;                //

    hwConfig.clkPol             = I2S_FALLING_EDGE;             //Receive data is sampled on the falling edge and transmit data shifted on

                                                                // the rising edge of the bit clock.

    hwConfig.datadelay          = I2S_DATADELAY_ONEBIT;        //0 -> 1bit delay 1-> 2bit delay

    hwConfig.datapack           = I2S_DATAPACK_DISABLE;        //

    hwConfig.signext            = I2S_SIGNEXT_DISABLE;        //extension of words

    hwConfig.wordLen            = I2S_WORDLEN_16;             // 0-8, 1-10, 2-12, 3-14, 4-16, 5-18, 6-20, 7-22,8-24

//    hwConfig.i2sMode            = I2S_MASTER;                 // 0-slave, 1-master

    hwConfig.i2sMode            = I2S_SLAVE;                 // 0-slave, 1-master

    //hwConfig.clkDiv             = I2S_CLKDIV8;                //I2Sn_CLK = SystemClock / (2CLKDIV+1)

    //hwConfig.fsDiv              = I2S_FSDIV256;                //I2Sn_FS = I2Sn_CLK / (2FSDIV+3)

    hwConfig.FError             = I2S_FSERROR_DISABLE;

    hwConfig.OuError            = I2S_OUERROR_DISABLE;

    I2S_setup(hI2s_2, &hwConfig);

}

void DMA_set(void)

{

    Int16           status = CSL_TEST_FAILED, ifrValue;

    IRQ_disable(DMA_EVENT);

    IRQ_clear(DMA_EVENT);

    CSL_SYSCTRL_REGS->DMAIER = 0x0000;

    ifrValue = CSL_SYSCTRL_REGS->DMAIFR;

    CSL_SYSCTRL_REGS->DMAIFR |= ifrValue;

    IRQ_plug(DMA_EVENT, &DmaIsr); // dma interrupt set

DMA_init();  //dma clock enable

    IRQ_enable(DMA_EVENT); // dma interrupt enable

////////////////////////////////////////////////////////////// I2S0_RX_Left Channel DMA ch1

dmaConfig.pingPongMode = CSL_DMA_PING_PONG_ENABLE;

dmaConfig.autoMode     = CSL_DMA_AUTORELOAD_ENABLE;

dmaConfig.burstLen     = CSL_DMA_TXBURST_1WORD;

dmaConfig.trigger      = CSL_DMA_EVENT_TRIGGER;

dmaConfig.dmaEvt       = CSL_DMA_EVT_I2S0_RX;

dmaConfig.dmaInt       = CSL_DMA_INTERRUPT_ENABLE;

dmaConfig.chanDir      = CSL_DMA_READ;

dmaConfig.trfType      = CSL_DMA_TRANSFER_IO_MEMORY;

dmaConfig.dataLen      = DMA_DATA_LENGTH;

dmaConfig.srcAddr      = (Uint32)&CSL_I2S0_REGS->I2SRXLT0;// I2S0_I2SRXLT0

dmaConfig.destAddr     = (Uint32)i2sDmaReadLeftBuff;

dmaLeftRxHandle = DMA_open(CSL_DMA_CHAN1, &dmaObj0,&status);

    DMA_config(dmaLeftRxHandle, &dmaConfig);

////////////////////////////////////////////////////////////////// I2S0_RX_Right Channel DMA ch2

dmaConfig.pingPongMode = CSL_DMA_PING_PONG_ENABLE;

dmaConfig.autoMode     = CSL_DMA_AUTORELOAD_ENABLE;

dmaConfig.burstLen     = CSL_DMA_TXBURST_1WORD;

dmaConfig.trigger      = CSL_DMA_EVENT_TRIGGER;

dmaConfig.dmaEvt       = CSL_DMA_EVT_I2S0_RX;

dmaConfig.dmaInt       = CSL_DMA_INTERRUPT_ENABLE;

dmaConfig.chanDir      = CSL_DMA_READ;

dmaConfig.trfType      = CSL_DMA_TRANSFER_IO_MEMORY;

dmaConfig.dataLen      = DMA_DATA_LENGTH;

dmaConfig.srcAddr      = (Uint32)&CSL_I2S0_REGS->I2SRXRT0; //I2S0_I2SRXRT0

dmaConfig.destAddr     = (Uint32)i2sDmaReadRightBuff;

dmaRightRxHandle = DMA_open(CSL_DMA_CHAN2, &dmaObj1,&status);

    DMA_config(dmaRightRxHandle, &dmaConfig);

////////////////////////////////////////////////////////////////// I2S2_TX_LEFT Channel DMA ch4

    dmaConfig.pingPongMode = CSL_DMA_PING_PONG_ENABLE;

    dmaConfig.autoMode     = CSL_DMA_AUTORELOAD_ENABLE;

    dmaConfig.burstLen     = CSL_DMA_TXBURST_1WORD;

    dmaConfig.trigger      = CSL_DMA_EVENT_TRIGGER;

    dmaConfig.dmaEvt       = CSL_DMA_EVT_I2S2_TX;

    dmaConfig.dmaInt       = CSL_DMA_INTERRUPT_ENABLE;

    dmaConfig.chanDir      = CSL_DMA_WRITE;

    dmaConfig.trfType      = CSL_DMA_TRANSFER_IO_MEMORY;

    dmaConfig.dataLen      = DMA_DATA_LENGTH;

    dmaConfig.srcAddr      = (Uint32)i2sDmaWriteLeftBuff;

//    dmaConfig.srcAddr      = (Uint32)i2sDmaReadLeftBuff;

    dmaConfig.destAddr     = (Uint32)(0x2A08);

    dmaLeftTxHandle = DMA_open(CSL_DMA_CHAN4, &dmaObj2,&status);

    DMA_config(dmaLeftTxHandle, &dmaConfig);

    ////////////////////////////////////////////////////////////////// I2S2_TX_Right Channel DMA ch5

    dmaConfig.pingPongMode = CSL_DMA_PING_PONG_ENABLE;

    dmaConfig.autoMode     = CSL_DMA_AUTORELOAD_ENABLE;

    dmaConfig.burstLen     = CSL_DMA_TXBURST_1WORD;

    dmaConfig.trigger      = CSL_DMA_EVENT_TRIGGER;

    dmaConfig.dmaEvt       = CSL_DMA_EVT_I2S2_TX;

    dmaConfig.dmaInt       = CSL_DMA_INTERRUPT_ENABLE;

    dmaConfig.chanDir      = CSL_DMA_WRITE;

    dmaConfig.trfType      = CSL_DMA_TRANSFER_IO_MEMORY;

    dmaConfig.dataLen      = DMA_DATA_LENGTH;

    dmaConfig.srcAddr      = (Uint32)i2sDmaWriteRightBuff;

//    dmaConfig.srcAddr      = (Uint32)i2sDmaReadRightBuff;

    dmaConfig.destAddr     = (Uint32)(0x2A0C);

    dmaRightTxHandle = DMA_open(CSL_DMA_CHAN5, &dmaObj3,&status);

    DMA_config(dmaRightTxHandle, &dmaConfig);

}

interrupt void DmaIsr(void)

{

    volatile Uint16 ifrValue;

    ifrValue = CSL_SYSCTRL_REGS->DMAIFR;

    CSL_SYSCTRL_REGS->DMAIFR |= ifrValue;

    if (ifrValue & 4)                 // DMA ch 4,5 Tx

    {

        dmaTxFrameCount++;

    }

    if (ifrValue & 5)

    {

        dmaTxFrameCount++;

    }

    if (ifrValue & 1)               // DMA ch 1,2 Rx

    {

        dmaRxFrameCount++;

    }

    if (ifrValue & 2)

    {

        dmaRxFrameCount++;

    }

    dmaIntCount++;

}

void main(void)

{

Int16    looper;

Uint32 check_buff=0;

//////////////////////////////////////////////////////initialize

    CSL_SYSCTRL_REGS->PCGCR1 = 0x0000;

    CSL_SYSCTRL_REGS->PCGCR2 = 0x0000;

    // Bypass the PLL as the system clock source

    asm("    *port(#0x1C1F) = #0x0 "); //Clock Configuration MSW reg

    //  program PLL to 100MHz with CLK_SEL = 0

    asm("    *port(#0x1c20) = #0x8BE8 "); //PLL Control 1 reg

    asm("    *port(#0x1c21) = #0x8000 "); //PLL Control 2 reg

    asm("    *port(#0x1c22) = #0x0806 "); //PLL Control 3 reg

    asm("    *port(#0x1C23) = #0x0000 "); //PLL Control 4 reg

    // wait at least 4 milli sec for PLL to lock

    asm("    repeat(0xC350)  ");

    asm("        nop     ");

    asm("    *port(#0x1c1F) = #0x0001 "); // Clock configuration MSW reg

    // enable the MPORT and disable HWA

    *(volatile ioport Uint16 *)0x0001 = 0x020E;

    asm("   idle");

    IRQ_globalDisable();

    IRQ_disableAll();

    IRQ_clearAll();

    // Reset all peripherals

    CSL_SYSCTRL_REGS->PSRCR = 0x0020;

    CSL_SYSCTRL_REGS->PRCR = 0x00BF;

    //pll_sample();

    //CSL_SYSCTRL_REGS->CGCR1 =0x87CC; //sysclk 65.563Mhz

    CSL_GPIO_REGS->IODIR2 = 0x0001;  //gpio 16 output set (DAC XSMT)

    CSL_GPIO_REGS->IOOUTDATA2=0x0001; // 1 output

    for(looper=0; looper < CSL_I2S_DMA_BUF_LEN; looper++)

    {

        i2sDmaWriteLeftBuff[looper] = 0;

        i2sDmaReadLeftBuff[looper]  = 0;

        i2sDmaWriteRightBuff[looper] = 0;

        i2sDmaReadRightBuff[looper]  = 0;

    }

/*

    memset(&i2sDmaWriteLeftBuff, 0,sizeof(i2sDmaWriteLeftBuff));

    memset(&i2sDmaWriteLeftBuff, 0,sizeof(i2sDmaWriteLeftBuff));

    memset(&i2sDmaWriteLeftBuff, 0,sizeof(i2sDmaWriteLeftBuff));

    memset(&i2sDmaWriteLeftBuff, 0,sizeof(i2sDmaWriteLeftBuff));

*/

/////////////////////////////////////////////////////////////////////////

    PCM5142_init();// DAC set (i2c)

I2S_set(); //I2S set

DMA_set(); // DMA set

    IRQ_globalEnable();

I2S_transEnable(hI2s, TRUE); // I2S_0 Start

    I2S_transEnable(hI2s_2, TRUE); // I2S_2 Start

//    DMA_start(dmaLeftRxHandle);

//    DMA_start(dmaRightRxHandle);

//    DMA_start(dmaLeftTxHandle);

//    DMA_start(dmaRightTxHandle);

    while(1)

    {

        /*

        if(toggle)

        {

            CSL_GPIO_REGS->IOOUTDATA2=0x0001; // 1 output

            toggle=0;

        }

        else

        {

            CSL_GPIO_REGS->IOOUTDATA2=0x0000; // 1 output

            toggle=1;

        }

*/

        if(check_buff==i2sDmaReadLeftBuff[1])

        {

            CSL_GPIO_REGS->IOOUTDATA2=0x0000; // 1 output

        }

        else

        {

            CSL_GPIO_REGS->IOOUTDATA2=0x0001; // 1 output

        }

        check_buff=i2sDmaReadLeftBuff[1];

        UserAlgorithm(); //receive and transmit

    }

}

void UserAlgorithm(void)

{

    int i;

    if(!dmaRxFrameCount)

    {

        /* Start left Rx DMA */

        DMA_start(dmaLeftRxHandle);

        /* Start right Rx DMA */

        DMA_start(dmaRightRxHandle);

    }

    if (dmaRxFrameCount >= 2)

    {

        dmaRxFrameCount=0;

        for (i=0; i<CSL_I2S_DMA_BUF_LEN; i++)

        {

            i2sDmaWriteLeftBuff[i]  = i2sDmaReadLeftBuff[i];

            i2sDmaWriteRightBuff[i] = i2sDmaReadRightBuff[i];

        }

//        memcpy(&i2sDmaWriteLeftBuff, i2sDmaReadLeftBuff,sizeof(i2sDmaWriteLeftBuff)); //Rx 2 --> buff cpy

//        memcpy(&i2sDmaWriteRightBuff, i2sDmaReadRightBuff,sizeof(i2sDmaWriteRightBuff));

        /* --- Insert algorithm here --- */

    }

    if(!dmaTxFrameCount)

    {

        /* Start left Tx DMA */

        DMA_start(dmaLeftTxHandle);

        /* Start right Tx DMA */

       DMA_start(dmaRightTxHandle);

    }

    /* Clear DMA frame count */

    if(dmaTxFrameCount>=2)

    {

        dmaTxFrameCount = 0;

    }

}

--------------------------------------------------------------------------------------------------------------------------------------------------------

what is my problem? please answer me .....

Thank you