Forum: Mikrocontroller und Digitale Elektronik I2C-Modul am c6713dsk


von Alex R. (ti_dsp_newbie)


Lesenswert?

Hallo Leute,

Ich versuche gerade an meinem C6713DSK das I2C-Modul[0] in betrieb zu 
nehmen, doch das gelingt mir noch nicht so richtig. Das folgende Projekt 
wird richtig compiliert, aber wenn ich das Projekt auf dem DSP ausführe, 
bewewegt sich nichts auf meiner SDA und SCL Leitung. Und beim debugen 
bleibt der DSP bei [while ((*(unsigned volatile int *)I2CSTR0 & 
0x1000)==0x1000) {}  ]   in der for-Schleife hängen. könnt Ihr mir 
weiterhelfen.

Gruß Silvio



////////////
//i2c.h
///////////

#ifndef I2C_H
#define I2C_H


//I2C Modul 0
#define I2COAR0 0x01B40000    //Own address register
#define I2CIER0 0x01B40004    //Interrupt Enable Register
#define I2CSTR0 0x01B40008    //Status Register
#define I2CCLKL0 0x01B4000C    //Clock Divider Registers low
#define I2CCLKH0 0x01B40010    //Clock Divider Registers high
#define I2CCNT0 0x01B40014    //Data Count Register
#define I2CDRR0 0x01B40018    //Data Receive Register
#define I2CSAR0 0x01B4001C    //Slave Address Register
#define I2CDXR0 0x01B40020    //Data Transmit Register
#define I2CMDR0 0x01B40024    //Mode Register
#define I2CISRC0 0x01B40028    //Interrupt Source Register
#define I2CPSC0 0x01B40030    //Prescaler Register

#define I2C_ACCESS_TIMEOUT 100
#define I2C_TIMEOUT 50

#endif

************************************************************************ 
*********
////////
//i2c.c
////////
#include <csl.h>
#include <csl_i2c.h>
// Good code to keep ahold of.  Searches for first I2C device on bus and 
then hangs
#include <csl_i2c.h>
#include "dsk6713_led.h"
#include "dsk6713.h"
#include "i2c.h"

// I2C initialization structures

I2C_Config i2c0_config =
{
  0x0000007F, // i2coar   Own address register
  0x00000000, // i2cimr  Interrupt mask register
  0x0000005a, // i2cclkl  Clock control low register = 100kHz
  0x0000005a, // i2cclkh  Clock control high register = 100kHz
  0x00000000, // i2ccnt  Data count register 1
  0x00000000, // i2csar  Slave address register = an alle senden
  0x00002E20, // i2cmdr  Mode register 0x20
  0x00000019  // i2cpsc  Prescalar register 225MHz to 9 MHz
};

far char reg_val;
void main(){
////////////////////////////////////////////////////////////////////////
//  Variablen 
////////////////////////////////////////////////////////////////////////
short i;
I2C_Handle     hI2C0;

////////////////////////////////////////////////////////////////////////
//global CSL initialization            //
////////////////////////////////////////////////////////////////////////
CSL_init();
DSK6713_LED_init();
////////////////////////////////////////////////////////////////////////
//I2C module 0 initialization            //
////////////////////////////////////////////////////////////////////////
// Create a I2C device handle
  hI2C0 = I2C_open( I2C_DEV0, I2C_OPEN_RESET );
// Config the I2C
  I2C_config( hI2C0, &i2c0_config );

puts("Es geht los");
for (i=1;i<128;i++) {
                  //Status Register  Startbit senden
  while ((*(unsigned volatile int *)I2CSTR0 & 0x1000)==0x1000) {}
    *(unsigned volatile int *)I2CMDR0 = 0x0; // reset I2C
    *(unsigned volatile int *)I2CCNT0 = 0x1;
    *(unsigned volatile int *)I2CSAR0 = i;  //Slave Adresse
    *(unsigned volatile int *)I2CMDR0 = 0x2E20; //Mode Register
                //Daten die zu übertragen sind
    *(unsigned volatile int *)I2CDXR0 = 0x00;
                DSK6713_LED_toggle(2);
     while ((*(unsigned volatile int *)I2CSTR0 & 0x2) == 0x0) {}
      *(unsigned volatile int *)I2CSTR0 = 0x1000;
      *(unsigned volatile int *)I2CMDR0 = 0x0; // reset I2C
  DSK6713_LED_toggle(3);
}
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.