Sign in

username:

password:



Not a member?

Search c6x



Search tips

Subscribe to c6x



c6x by Keywords

AD535 | BIOS | Booting | Bootloader | C621 | C6211 | C6415 | C671 | C6711 | C6711DSK | C6713 | CCS | Chassaing | COFF | DAT | DM64 | DM642 | DMA | DSK671 | DSK6711 | EDM | EDMA | EMIF | Emulator | EVM | EVM620 | FFT | FIR | GPIO | Halting | HPI | HWI | IDK | JTAG | LDB | LDH | LDW | Linker | LMS | LOG_printf | Matlab | McBSP | MEM_alloc | MIPS | PCI | PCM3003 | Pipeline | Profiling | QDM | Reset | ROM | RTDX | Sampling | SDRAM | Stack | TEB | THS1206 | TMS320C621 | TMS320C6416 | TMS320C6711 | TMS320C6713 | UART | Vector Table | XBUS | XDS560

Discussion Groups

Discussion Groups | TMS320C6x | 6713 I2C Module

Technical discussions about the TI C6000 DSPs (including the c62x, c64x and c67x DSPs).

  

Post a new Thread

6713 I2C Module - andr...@gmx.net - Jun 19 15:56:05 2006



Hi!
I am trying to run the I2C Module. Until now I had no luck, neither by using the csl module
(csl_i2c.h and csl_i2chal) nor by manually setting.
Problem is: I even never can measure a scl clock at the SCL0 pin of the HPI expansion
connector. The whole time the clock is stuck at high (3.3V), until I request a start-condition,
either by manually setting STT of the I2C mode register (_I2C_I2CMDR0_FSET(STT,1);//start
condition) or by csl: I2C_start(hI2C);. After that it will be stuck at zero and wonīt move.
Hereīs my source code:

void initManually(void){
    _I2C_I2CMDR0_FSET(IRS,0);
//################# set clk prescalers, I2C module must be in reset state! 
//	module clk prescaler:
		_I2C_I2CPSC0_FSET(IPSC,0x00);
		LOG_printf(&LOG0,"module clk prescaler register: %x",_I2C_I2CPSC0_FGET(IPSC));
//	master clk prescaler:
		_I2C_I2CCLKL0_FSET(ICCL,0x08CA);
		LOG_printf(&LOG0,"master clk low time register: %x",_I2C_I2CCLKL0_FGET(ICCL));
		_I2C_I2CCLKH0_FSET(ICCH,0x08CA);
		LOG_printf(&LOG0,"master clk high time register:
%x",_I2C_I2CCLKH0_FGET(ICCH));
		_I2C_I2CMDR0_FSET(IRS,1);
		LOG_printf(&LOG0,"   IRS             : %d",_I2C_I2CMDR0_FGET(IRS));
		_I2C_I2CMDR0_FSET(IRS,1);
		LOG_printf(&LOG0,"   IRS             : %d",_I2C_I2CMDR0_FGET(IRS));
		_I2C_I2CCLKL0_FSET(ICCL,0x08CA);
		_I2C_I2CCLKH0_FSET(ICCH,0x08CA);
		
//#####################	mode register #####################
	_I2C_I2CMDR0_FSET(NACKMOD,0);	//ack bit after every byte
	_I2C_I2CMDR0_FSET(FREE,1);		//donī react on breakpoints
	_I2C_I2CMDR0_FSET(MST,1);		//master mode
	_I2C_I2CMDR0_FSET(XA,0);		//use 7bit addressing mode
	_I2C_I2CMDR0_FSET(RM,1);		//use repeat mode
	_I2C_I2CMDR0_FSET(FDF,0);		//disable free data mode
	_I2C_I2CMDR0_FSET(BC,0x0);		//8bit send mode
	LOG_printf(&LOG0,"\nmode register: ");
	LOG_printf(&LOG0,"    NACKMOD  : %d",_I2C_I2CMDR0_FGET(NACKMOD));
	LOG_printf(&LOG0,"    FREE          : %d",_I2C_I2CMDR0_FGET(FREE));
	LOG_printf(&LOG0,"    MST            : %d",_I2C_I2CMDR0_FGET(MST));
	LOG_printf(&LOG0,"    XA             : %d",_I2C_I2CMDR0_FGET(XA));
	LOG_printf(&LOG0,"    RM            : %d",_I2C_I2CMDR0_FGET(RM));
	LOG_printf(&LOG0,"    FDF           : %d",_I2C_I2CMDR0_FGET(FDF));
	LOG_printf(&LOG0,"    BC             : %d",_I2C_I2CMDR0_FGET(BC));
	LOG_printf(&LOG0,"   IRS             : %d",_I2C_I2CMDR0_FGET(IRS));	

//##################### initialized ##########################	
    	
}

void initByCSL(void){
	Uint32 i2cStatus=0;
	//	############ start I2C module ###############
	I2C_Config config = {
            _I2C_I2COAR0_ADDR,
            _I2C_I2CIER0_ADDR,
            _I2C_I2CCLKL0_ADDR,
            _I2C_I2CCLKH0_ADDR,
            _I2C_I2CCNT0_ADDR,
            _I2C_I2CSAR0_ADDR,
            _I2C_I2CMDR0_ADDR,
            _I2C_I2CPSC0_ADDR                      
	};
	CSL_init();
        hI2C = I2C_open(0,I2C_OPEN_RESET);
	LOG_printf(&LOG0,"   IRS             : %d",_I2C_I2CMDR0_FGET(IRS));
	I2C_config(hI2C,&config);
	I2C_outOfReset(hI2C);    	
	LOG_printf(&LOG0,"\nmode register: ");
	LOG_printf(&LOG0,"    NACKMOD: %d",_I2C_I2CMDR0_FGET(NACKMOD));
	LOG_printf(&LOG0,"    MST          : %d",_I2C_I2CMDR0_FGET(MST));
	LOG_printf(&LOG0,"    XA             : %d",_I2C_I2CMDR0_FGET(XA));
	LOG_printf(&LOG0,"    RM            : %d",_I2C_I2CMDR0_FGET(RM));
	LOG_printf(&LOG0,"    FDF           : %d",_I2C_I2CMDR0_FGET(FDF));
	LOG_printf(&LOG0,"    BC             : %d",_I2C_I2CMDR0_FGET(BC));
	LOG_printf(&LOG0,"   IRS             : %d",_I2C_I2CMDR0_FGET(IRS));

	I2C_start(hI2C);

	I2C_writeByte(hI2C,0xAA);

}

Iīd be grateful for ANY suggestions! Further I am lacking additional information on the csl i2c
module. SPRU175B isnīt exactly offering a lot of infos on what functions as I2C_start() are
doing in detail.

Thank you!
Andreas



(You need to be a member of c6x -- send a blank email to c6x-subscribe@yahoogroups.com )

Re: 6713 I2C Module - Krzysztof Kanas - Jun 22 8:01:20 2006

Maby this will help.

I had same problem with documentation I2C module.
I give you some code but to understand it better i would sugest reading csl=
=20
help, hal macros help, i2c module help.

This code should work but, if you don't get ACK- (acknowledge) from slave
I2C module stops transmiting and waits for ACK.
You should check configuration of the device becouse I don't remeber how I
done it but it worked. :)
This code should send two data bytes to slave of adress 0x55 (85 Dec) or 10=
1
0101 binary.

And I posted it some time ago on DSP Forum :). So it is probly still there.

###code

#include <csl_i2c.h>

void I2C_6713_Open(void);
void I2C_6713_Init(Uint32 address);
void I2C_START_Send(void);
void I2C_STOP_Send(void);
void I2C_START_Receiver(void);
void I2C_Write_Byte (unsigned char *source,unsigned int len);
void I2C_Read_Byte(unsigned char *source,unsigned int len);
void I2C_NACK_Clear();
// I2C open/reset
void I2C_6713_Open(void)
{
 I2C_RSET(I2COAR0,I2C_I2COAR_DEFAULT);    //
 I2C_RSET(I2CIMR0,I2C_I2CIMR_DEFAULT);    //
 I2C_RSET(I2CCLKL0,I2C_I2CCLKL_DEFAULT);  //
 I2C_RSET(I2CCLKH0,I2C_I2CCLKH_DEFAULT);  //
 I2C_RSET(I2CCNT0,I2C_I2CCNT_DEFAULT);    //
 I2C_RSET(I2CSAR0,I2C_I2CSAR_DEFAULT);    //
 I2C_RSET(I2CMDR0,I2C_I2CMDR_DEFAULT);    //
 I2C_RSET(I2CPSC0,I2C_I2CPSC_DEFAULT);    //
}

// I2c_init
void I2C_6713_Init (Uint32 address)
{
    //     0;
 I2C_RSET(I2COAR0,I2C_I2COAR_RMK(I2C_I2COAR_A_OF(0)));
 //
 I2C_RSET(I2CIMR0,I2C_I2CIMR_RMK(I2C_I2CIMR_ICXRDY_MSK,
 I2C_I2CIMR_ICRRDY_MSK,
 I2C_I2CIMR_ARDY_MSK,
 I2C_I2CIMR_NACK_MSK,
 I2C_I2CIMR_AL_MSK));
 //    SCLK
 I2C_RSET(I2CCLKL0,I2C_I2CCLKL_RMK(I2C_I2CCLKL_ICCL_OF(100-6)));
 I2C_RSET(I2CCLKH0,I2C_I2CCLKH_RMK(I2C_I2CCLKH_ICCH_OF(100-6)));
 //                   ,
 I2C_RSET(I2CCNT0,I2C_I2CCNT_RMK(I2C_I2CCNT_ICDC_OF(0)));
 //
 I2C_RSET(I2CSAR0,I2C_I2CSAR_RMK(I2C_I2CSAR_A_OF(0)));

 //
 I2C_RSET(I2CMDR0,I2C_I2CMDR_RMK(I2C_I2CMDR_NACKMOD_ACK,
 I2C_I2CMDR_FREE_BSTOP,
 I2C_I2CMDR_STT_NONE,
 I2C_I2CMDR_STP_NONE,
 I2C_I2CMDR_MST_MASTER,
 I2C_I2CMDR_TRX_XMT,
 I2C_I2CMDR_XA_7BIT,
 I2C_I2CMDR_RM_NONE,
 I2C_I2CMDR_DLB_NONE,
 I2C_I2CMDR_IRS_RST,
 I2C_I2CMDR_STB_NONE,
 I2C_I2CMDR_FDF_NONE,
 I2C_I2CMDR_BC_BIT8FDF));
 //  I2C             IRS=3D0
 I2C_RSET(I2CPSC0,I2C_I2CPSC_RMK(I2C_I2CPSC_IPSC_OF(20-1)));
 // I2C out of reset
 //
    I2C_RSET(I2CMDR0,I2C_RGET(I2CMDR0)|_I2C_I2CMDR_IRS_MASK);
    // clear BB in case of malfunction slave device
    //  1
    I2C_RSET(I2CSTR0,_I2C_I2CSTR_BB_MASK);
    // Setup Procedure is over;

    // prepare send
    I2C_RSET(I2CSAR0,I2C_I2CSAR_RMK(I2C_I2CSAR_A_OF(address)));
   // I2C_RSET(I2CCNT0,I2C_I2CCNT_RMK(I2C_I2CCNT_ICDC_OF(number)));
   // I2C_RSET(I2CDXR0,I2C_I2CDXR_RMK(I2C_I2CDXR_OF(*source)));
}

// starting I2C
void I2C_START_Send(void)
{
  I2C_RSET(I2CMDR0,I2C_I2CMDR_RMK(I2C_I2CMDR_NACKMOD_ACK,
 I2C_I2CMDR_FREE_BSTOP,
 I2C_I2CMDR_STT_START,
 I2C_I2CMDR_STP_NONE,
 I2C_I2CMDR_MST_MASTER,
 I2C_I2CMDR_TRX_XMT,
 I2C_I2CMDR_XA_7BIT,
 I2C_I2CMDR_RM_NONE,
 I2C_I2CMDR_DLB_NONE,
 I2C_I2CMDR_IRS_NRST,
 I2C_I2CMDR_STB_NONE,
 I2C_I2CMDR_FDF_NONE,
 I2C_I2CMDR_BC_BIT8FDF));

  while((I2C_RGET(I2CSTR0)&_I2C_I2CSTR_BB_MASK)!=3D0);

  I2C_RSET(I2CMDR0,I2C_I2CMDR_RMK(I2C_I2CMDR_NACKMOD_ACK,
 I2C_I2CMDR_FREE_BSTOP,
 I2C_I2CMDR_STT_START,
 //OLD  I2C_I2CMDR_STT_START,
 I2C_I2CMDR_STP_STOP,
 I2C_I2CMDR_MST_MASTER,
 I2C_I2CMDR_TRX_XMT,
 I2C_I2CMDR_XA_7BIT,
 I2C_I2CMDR_RM_NONE,
 I2C_I2CMDR_DLB_NONE,
 I2C_I2CMDR_IRS_NRST,
 I2C_I2CMDR_STB_NONE,
 I2C_I2CMDR_FDF_NONE,
 I2C_I2CMDR_BC_BIT8FDF));

}

void I2C_START_Receiver(void)
{
  I2C_RSET(I2CMDR0,I2C_I2CMDR_RMK(I2C_I2CMDR_NACKMOD_ACK,
 I2C_I2CMDR_FREE_BSTOP,
 I2C_I2CMDR_STT_START,
 I2C_I2CMDR_STP_NONE,
 I2C_I2CMDR_MST_MASTER,
 I2C_I2CMDR_TRX_RCV,
 I2C_I2CMDR_XA_7BIT,
 I2C_I2CMDR_RM_NONE,
 I2C_I2CMDR_DLB_NONE,
 I2C_I2CMDR_IRS_NRST,
 I2C_I2CMDR_STB_NONE,
 I2C_I2CMDR_FDF_NONE,
 I2C_I2CMDR_BC_BIT8FDF));

  while((I2C_RGET(I2CSTR0)&_I2C_I2CSTR_BB_MASK)!=3D0);

  I2C_RSET(I2CMDR0,I2C_I2CMDR_RMK(I2C_I2CMDR_NACKMOD_ACK,
 I2C_I2CMDR_FREE_BSTOP,
 I2C_I2CMDR_STT_START,
 I2C_I2CMDR_STP_STOP,
 I2C_I2CMDR_MST_MASTER,
 I2C_I2CMDR_TRX_RCV,
 I2C_I2CMDR_XA_7BIT,
 I2C_I2CMDR_RM_NONE,
 I2C_I2CMDR_DLB_NONE,
 I2C_I2CMDR_IRS_NRST,
 I2C_I2CMDR_STB_NONE,
 I2C_I2CMDR_FDF_NONE,
 I2C_I2CMDR_BC_BIT8FDF));

}
void I2C_NACK_Clear()
{
I2C_FSETS(I2CSTR0,NACK,INT);
}

void I2C_Write_Byte (unsigned char *source,unsigned int len)
{
  while(len>0)
    {
      if ((I2C_RGET(I2CSTR0)&_I2C_I2CSTR_ICXRDY_MASK)!=3D0)
          {
             I2C_RSET(I2CDXR0,I2C_I2CDXR_RMK(I2C_I2CDXR_OF(*source++)));
             len--;

          }
    }
  while((I2C_RGET(I2CSTR0)&_I2C_I2CSTR_BB_MASK)!=3D0);   //
}

void I2C_Read_Byte(unsigned char *source,unsigned int len)
{
  while(len>0)
  {
    if((I2C_RGET(I2CSTR0)&_I2C_I2CSTR_ICRRDY_MASK)!=3D0)
       {
          *source++=3DI2C_RGET(I2CDRR0);
          len--;
       }
  }
  while((I2C_RGET(I2CSTR0)&_I2C_I2CSTR_BB_MASK)!=3D0);   //
}

void main()
{

unsigned char data[]=3D{0xAA,0xAA};
unsigned int length=3D1;
Uint32 address=3D0x55;
 I2C_6713_Open();
 I2C_6713_Init(address);
 I2C_RSET(I2CDXR0,I2C_I2CDXR_RMK(I2C_I2CDXR_OF(*data)));
 I2C_START_Send();
 I2C_Write_Byte (data,length);

return;
}

###end code

----- Original Message -----=20
From: "Douglas Pederick" <d...@gmail.com>
To: <c...@yahoogroups.com>
Sent: Saturday, May 06, 2006 3:06 PM
Subject: [c6x] I2C and SPRU175B
> Hello,
> I'm trying to work through  SPRU175B (DSP Inter-Integrated Circuit (I2C)
> Module Reference Guide) and the lack of programming examples is killing
> me.
> The flow charts reference "reprogram  MMRs". The term MMRs does not appea=
r
> elsewhere in the document.
> What are MMRs in this context?
> The total lack of platform programming examples generally, and from TI in
> particular, seems really odd to me, when considering such generic tasks a=
s
> reading/writing to a standard eeprom or writing characters to a display
> module is made into an epic task to develop.
> Thanks for any suggestions, insights, code.
> Doug

----- Original Message -----=20
From: <a...@gmx.net>
To: <c...@yahoogroups.com>
Sent: Monday, June 19, 2006 6:02 PM
Subject: [c6x] 6713 I2C Module
> Hi!
> I am trying to run the I2C Module. Until now I had no luck, neither by=20
> using the csl module (csl_i2c.h and csl_i2chal) nor by manually setting.
> Problem is: I even never can measure a scl clock at the SCL0 pin of the=20
> HPI expansion connector. The whole time the clock is stuck at high (3.3V)=
,

> until I request a start-condition, either by manually setting STT of the=
=20
> I2C mode register (_I2C_I2CMDR0_FSET(STT,1);//start condition) or by csl:=
=20
> I2C_start(hI2C);. After that it will be stuck at zero and won=B4t move.
> Here=B4s my source code:
>
> void initManually(void){
>    _I2C_I2CMDR0_FSET(IRS,0);
> //################# set clk prescalers, I2C module must be in reset state=
!
> // module clk prescaler:
> _I2C_I2CPSC0_FSET(IPSC,0x00);
> LOG_printf(&LOG0,"module clk prescaler register:=20
> %x",_I2C_I2CPSC0_FGET(IPSC));
> // master clk prescaler:
> _I2C_I2CCLKL0_FSET(ICCL,0x08CA);
> LOG_printf(&LOG0,"master clk low time register:=20
> %x",_I2C_I2CCLKL0_FGET(ICCL));
> _I2C_I2CCLKH0_FSET(ICCH,0x08CA);
> LOG_printf(&LOG0,"master clk high time register:=20
> %x",_I2C_I2CCLKH0_FGET(ICCH));
> _I2C_I2CMDR0_FSET(IRS,1);
> LOG_printf(&LOG0,"   IRS             : %d",_I2C_I2CMDR0_FGET(IRS));
> _I2C_I2CMDR0_FSET(IRS,1);
> LOG_printf(&LOG0,"   IRS             : %d",_I2C_I2CMDR0_FGET(IRS));
> _I2C_I2CCLKL0_FSET(ICCL,0x08CA);
> _I2C_I2CCLKH0_FSET(ICCH,0x08CA);
>
> //##################### mode register #####################
> _I2C_I2CMDR0_FSET(NACKMOD,0); //ack bit after every byte
> _I2C_I2CMDR0_FSET(FREE,1); //don=B4 react on breakpoints
> _I2C_I2CMDR0_FSET(MST,1); //master mode
> _I2C_I2CMDR0_FSET(XA,0); //use 7bit addressing mode
> _I2C_I2CMDR0_FSET(RM,1); //use repeat mode
> _I2C_I2CMDR0_FSET(FDF,0); //disable free data mode
> _I2C_I2CMDR0_FSET(BC,0x0); //8bit send mode
> LOG_printf(&LOG0,"\nmode register: ");
> LOG_printf(&LOG0,"    NACKMOD  : %d",_I2C_I2CMDR0_FGET(NACKMOD));
> LOG_printf(&LOG0,"    FREE          : %d",_I2C_I2CMDR0_FGET(FREE));
> LOG_printf(&LOG0,"    MST            : %d",_I2C_I2CMDR0_FGET(MST));
> LOG_printf(&LOG0,"    XA             : %d",_I2C_I2CMDR0_FGET(XA));
> LOG_printf(&LOG0,"    RM            : %d",_I2C_I2CMDR0_FGET(RM));
> LOG_printf(&LOG0,"    FDF           : %d",_I2C_I2CMDR0_FGET(FDF));
> LOG_printf(&LOG0,"    BC             : %d",_I2C_I2CMDR0_FGET(BC));
> LOG_printf(&LOG0,"   IRS             : %d",_I2C_I2CMDR0_FGET(IRS));
>
> //##################### initialized ##########################
>
> }
>
> void initByCSL(void){
> Uint32 i2cStatus=3D0;
> // ############ start I2C module ###############
> I2C_Config config =3D {
>            _I2C_I2COAR0_ADDR,
>            _I2C_I2CIER0_ADDR,
>            _I2C_I2CCLKL0_ADDR,
>            _I2C_I2CCLKH0_ADDR,
>            _I2C_I2CCNT0_ADDR,
>            _I2C_I2CSAR0_ADDR,
>            _I2C_I2CMDR0_ADDR,
>            _I2C_I2CPSC0_ADDR
> };
> CSL_init();
>        hI2C =3D I2C_open(0,I2C_OPEN_RESET);
> LOG_printf(&LOG0,"   IRS             : %d",_I2C_I2CMDR0_FGET(IRS));
> I2C_config(hI2C,&config);
> I2C_outOfReset(hI2C);
> LOG_printf(&LOG0,"\nmode register: ");
> LOG_printf(&LOG0,"    NACKMOD: %d",_I2C_I2CMDR0_FGET(NACKMOD));
> LOG_printf(&LOG0,"    MST          : %d",_I2C_I2CMDR0_FGET(MST));
> LOG_printf(&LOG0,"    XA             : %d",_I2C_I2CMDR0_FGET(XA));
> LOG_printf(&LOG0,"    RM            : %d",_I2C_I2CMDR0_FGET(RM));
> LOG_printf(&LOG0,"    FDF           : %d",_I2C_I2CMDR0_FGET(FDF));
> LOG_printf(&LOG0,"    BC             : %d",_I2C_I2CMDR0_FGET(BC));
> LOG_printf(&LOG0,"   IRS             : %d",_I2C_I2CMDR0_FGET(IRS));
>
> I2C_start(hI2C);
>
> I2C_writeByte(hI2C,0xAA);
>
> }
>
> I=B4d be grateful for ANY suggestions! Further I am lacking additional=20
> information on the csl i2c module. SPRU175B isn=B4t exactly offering a lo=
t=20
> of infos on what functions as I2C_start() are doing in detail.
>
> Thank you!
> Andreas

=20



(You need to be a member of c6x -- send a blank email to c6x-subscribe@yahoogroups.com )

Re: 6713 I2C Module - Andreas Durth - Jun 27 9:17:42 2006

Hello Krzysztof!
"This code should work but, if you don't get ACK- (acknowledge) from slave
I2C module stops transmiting and waits for ACK."
This seems to be the problem I am stuck at. Thank you for your help!
Regards,
Andreas

----- Original Message ----- 
From: "Krzysztof Kanas" <k...@o2.pl>
To: <a...@gmx.net>; <c...@yahoogroups.com>
Sent: Wednesday, June 21, 2006 5:24 PM
Subject: Re: [c6x] 6713 I2C Module
Maby this will help.

I had same problem with documentation I2C module.
I give you some code but to understand it better i would sugest reading csl
help, hal macros help, i2c module help.

This code should work but, if you don't get ACK- (acknowledge) from slave
I2C module stops transmiting and waits for ACK.
You should check configuration of the device becouse I don't remeber how I
done it but it worked. :)
This code should send two data bytes to slave of adress 0x55 (85 Dec) or 101
0101 binary.

And I posted it some time ago on DSP Forum :). So it is probly still there.

###code

#include <csl_i2c.h>

void I2C_6713_Open(void);
void I2C_6713_Init(Uint32 address);
void I2C_START_Send(void);
void I2C_STOP_Send(void);
void I2C_START_Receiver(void);
void I2C_Write_Byte (unsigned char *source,unsigned int len);
void I2C_Read_Byte(unsigned char *source,unsigned int len);
void I2C_NACK_Clear();
// I2C open/reset
void I2C_6713_Open(void)
{
 I2C_RSET(I2COAR0,I2C_I2COAR_DEFAULT);    //
 I2C_RSET(I2CIMR0,I2C_I2CIMR_DEFAULT);    //
 I2C_RSET(I2CCLKL0,I2C_I2CCLKL_DEFAULT);  //
 I2C_RSET(I2CCLKH0,I2C_I2CCLKH_DEFAULT);  //
 I2C_RSET(I2CCNT0,I2C_I2CCNT_DEFAULT);    //
 I2C_RSET(I2CSAR0,I2C_I2CSAR_DEFAULT);    //
 I2C_RSET(I2CMDR0,I2C_I2CMDR_DEFAULT);    //
 I2C_RSET(I2CPSC0,I2C_I2CPSC_DEFAULT);    //
}

// I2c_init
void I2C_6713_Init (Uint32 address)
{
    //     0;
 I2C_RSET(I2COAR0,I2C_I2COAR_RMK(I2C_I2COAR_A_OF(0)));
 //
 I2C_RSET(I2CIMR0,I2C_I2CIMR_RMK(I2C_I2CIMR_ICXRDY_MSK,
 I2C_I2CIMR_ICRRDY_MSK,
 I2C_I2CIMR_ARDY_MSK,
 I2C_I2CIMR_NACK_MSK,
 I2C_I2CIMR_AL_MSK));
 //    SCLK
 I2C_RSET(I2CCLKL0,I2C_I2CCLKL_RMK(I2C_I2CCLKL_ICCL_OF(100-6)));
 I2C_RSET(I2CCLKH0,I2C_I2CCLKH_RMK(I2C_I2CCLKH_ICCH_OF(100-6)));
 //                   ,
 I2C_RSET(I2CCNT0,I2C_I2CCNT_RMK(I2C_I2CCNT_ICDC_OF(0)));
 //
 I2C_RSET(I2CSAR0,I2C_I2CSAR_RMK(I2C_I2CSAR_A_OF(0)));

 //
 I2C_RSET(I2CMDR0,I2C_I2CMDR_RMK(I2C_I2CMDR_NACKMOD_ACK,
 I2C_I2CMDR_FREE_BSTOP,
 I2C_I2CMDR_STT_NONE,
 I2C_I2CMDR_STP_NONE,
 I2C_I2CMDR_MST_MASTER,
 I2C_I2CMDR_TRX_XMT,
 I2C_I2CMDR_XA_7BIT,
 I2C_I2CMDR_RM_NONE,
 I2C_I2CMDR_DLB_NONE,
 I2C_I2CMDR_IRS_RST,
 I2C_I2CMDR_STB_NONE,
 I2C_I2CMDR_FDF_NONE,
 I2C_I2CMDR_BC_BIT8FDF));
 //  I2C             IRS=0
 I2C_RSET(I2CPSC0,I2C_I2CPSC_RMK(I2C_I2CPSC_IPSC_OF(20-1)));
 // I2C out of reset
 //
    I2C_RSET(I2CMDR0,I2C_RGET(I2CMDR0)|_I2C_I2CMDR_IRS_MASK);
    // clear BB in case of malfunction slave device
    //  1
    I2C_RSET(I2CSTR0,_I2C_I2CSTR_BB_MASK);
    // Setup Procedure is over;

    // prepare send
    I2C_RSET(I2CSAR0,I2C_I2CSAR_RMK(I2C_I2CSAR_A_OF(address)));
   // I2C_RSET(I2CCNT0,I2C_I2CCNT_RMK(I2C_I2CCNT_ICDC_OF(number)));
   // I2C_RSET(I2CDXR0,I2C_I2CDXR_RMK(I2C_I2CDXR_OF(*source)));
}

// starting I2C
void I2C_START_Send(void)
{
  I2C_RSET(I2CMDR0,I2C_I2CMDR_RMK(I2C_I2CMDR_NACKMOD_ACK,
 I2C_I2CMDR_FREE_BSTOP,
 I2C_I2CMDR_STT_START,
 I2C_I2CMDR_STP_NONE,
 I2C_I2CMDR_MST_MASTER,
 I2C_I2CMDR_TRX_XMT,
 I2C_I2CMDR_XA_7BIT,
 I2C_I2CMDR_RM_NONE,
 I2C_I2CMDR_DLB_NONE,
 I2C_I2CMDR_IRS_NRST,
 I2C_I2CMDR_STB_NONE,
 I2C_I2CMDR_FDF_NONE,
 I2C_I2CMDR_BC_BIT8FDF));

  while((I2C_RGET(I2CSTR0)&_I2C_I2CSTR_BB_MASK)!=0);

  I2C_RSET(I2CMDR0,I2C_I2CMDR_RMK(I2C_I2CMDR_NACKMOD_ACK,
 I2C_I2CMDR_FREE_BSTOP,
 I2C_I2CMDR_STT_START,
 //OLD  I2C_I2CMDR_STT_START,
 I2C_I2CMDR_STP_STOP,
 I2C_I2CMDR_MST_MASTER,
 I2C_I2CMDR_TRX_XMT,
 I2C_I2CMDR_XA_7BIT,
 I2C_I2CMDR_RM_NONE,
 I2C_I2CMDR_DLB_NONE,
 I2C_I2CMDR_IRS_NRST,
 I2C_I2CMDR_STB_NONE,
 I2C_I2CMDR_FDF_NONE,
 I2C_I2CMDR_BC_BIT8FDF));

}

void I2C_START_Receiver(void)
{
  I2C_RSET(I2CMDR0,I2C_I2CMDR_RMK(I2C_I2CMDR_NACKMOD_ACK,
 I2C_I2CMDR_FREE_BSTOP,
 I2C_I2CMDR_STT_START,
 I2C_I2CMDR_STP_NONE,
 I2C_I2CMDR_MST_MASTER,
 I2C_I2CMDR_TRX_RCV,
 I2C_I2CMDR_XA_7BIT,
 I2C_I2CMDR_RM_NONE,
 I2C_I2CMDR_DLB_NONE,
 I2C_I2CMDR_IRS_NRST,
 I2C_I2CMDR_STB_NONE,
 I2C_I2CMDR_FDF_NONE,
 I2C_I2CMDR_BC_BIT8FDF));

  while((I2C_RGET(I2CSTR0)&_I2C_I2CSTR_BB_MASK)!=0);

  I2C_RSET(I2CMDR0,I2C_I2CMDR_RMK(I2C_I2CMDR_NACKMOD_ACK,
 I2C_I2CMDR_FREE_BSTOP,
 I2C_I2CMDR_STT_START,
 I2C_I2CMDR_STP_STOP,
 I2C_I2CMDR_MST_MASTER,
 I2C_I2CMDR_TRX_RCV,
 I2C_I2CMDR_XA_7BIT,
 I2C_I2CMDR_RM_NONE,
 I2C_I2CMDR_DLB_NONE,
 I2C_I2CMDR_IRS_NRST,
 I2C_I2CMDR_STB_NONE,
 I2C_I2CMDR_FDF_NONE,
 I2C_I2CMDR_BC_BIT8FDF));

}
void I2C_NACK_Clear()
{
I2C_FSETS(I2CSTR0,NACK,INT);
}

void I2C_Write_Byte (unsigned char *source,unsigned int len)
{
  while(len>0)
    {
      if ((I2C_RGET(I2CSTR0)&_I2C_I2CSTR_ICXRDY_MASK)!=0)
          {
             I2C_RSET(I2CDXR0,I2C_I2CDXR_RMK(I2C_I2CDXR_OF(*source++)));
             len--;

          }
    }
  while((I2C_RGET(I2CSTR0)&_I2C_I2CSTR_BB_MASK)!=0);   //
}

void I2C_Read_Byte(unsigned char *source,unsigned int len)
{
  while(len>0)
  {
    if((I2C_RGET(I2CSTR0)&_I2C_I2CSTR_ICRRDY_MASK)!=0)
       {
          *source++=I2C_RGET(I2CDRR0);
          len--;
       }
  }
  while((I2C_RGET(I2CSTR0)&_I2C_I2CSTR_BB_MASK)!=0);   //
}

void main()
{

unsigned char data[]={0xAA,0xAA};
unsigned int length=1;
Uint32 address=0x55;
 I2C_6713_Open();
 I2C_6713_Init(address);
 I2C_RSET(I2CDXR0,I2C_I2CDXR_RMK(I2C_I2CDXR_OF(*data)));
 I2C_START_Send();
 I2C_Write_Byte (data,length);

return;
}

###end code

----- Original Message ----- 
From: "Douglas Pederick" <d...@gmail.com>
To: <c...@yahoogroups.com>
Sent: Saturday, May 06, 2006 3:06 PM
Subject: [c6x] I2C and SPRU175B
> Hello,
> I'm trying to work through  SPRU175B (DSP Inter-Integrated Circuit (I2C)
> Module Reference Guide) and the lack of programming examples is killing
> me.
> The flow charts reference "reprogram  MMRs". The term MMRs does not appear
> elsewhere in the document.
> What are MMRs in this context?
> The total lack of platform programming examples generally, and from TI in
> particular, seems really odd to me, when considering such generic tasks as
> reading/writing to a standard eeprom or writing characters to a display
> module is made into an epic task to develop.
> Thanks for any suggestions, insights, code.
> Doug

----- Original Message ----- 
From: <a...@gmx.net>
To: <c...@yahoogroups.com>
Sent: Monday, June 19, 2006 6:02 PM
Subject: [c6x] 6713 I2C Module
> Hi!
> I am trying to run the I2C Module. Until now I had no luck, neither by
> using the csl module (csl_i2c.h and csl_i2chal) nor by manually setting.
> Problem is: I even never can measure a scl clock at the SCL0 pin of the
> HPI expansion connector. The whole time the clock is stuck at high (3.3V),

> until I request a start-condition, either by manually setting STT of the
> I2C mode register (_I2C_I2CMDR0_FSET(STT,1);//start condition) or by csl:
> I2C_start(hI2C);. After that it will be stuck at zero and wonīt move.
> Hereīs my source code:
>
> void initManually(void){
>    _I2C_I2CMDR0_FSET(IRS,0);
> //################# set clk prescalers, I2C module must be in reset state!
> // module clk prescaler:
> _I2C_I2CPSC0_FSET(IPSC,0x00);
> LOG_printf(&LOG0,"module clk prescaler register:
> %x",_I2C_I2CPSC0_FGET(IPSC));
> // master clk prescaler:
> _I2C_I2CCLKL0_FSET(ICCL,0x08CA);
> LOG_printf(&LOG0,"master clk low time register:
> %x",_I2C_I2CCLKL0_FGET(ICCL));
> _I2C_I2CCLKH0_FSET(ICCH,0x08CA);
> LOG_printf(&LOG0,"master clk high time register:
> %x",_I2C_I2CCLKH0_FGET(ICCH));
> _I2C_I2CMDR0_FSET(IRS,1);
> LOG_printf(&LOG0,"   IRS             : %d",_I2C_I2CMDR0_FGET(IRS));
> _I2C_I2CMDR0_FSET(IRS,1);
> LOG_printf(&LOG0,"   IRS             : %d",_I2C_I2CMDR0_FGET(IRS));
> _I2C_I2CCLKL0_FSET(ICCL,0x08CA);
> _I2C_I2CCLKH0_FSET(ICCH,0x08CA);
>
> //##################### mode register #####################
> _I2C_I2CMDR0_FSET(NACKMOD,0); //ack bit after every byte
> _I2C_I2CMDR0_FSET(FREE,1); //donī react on breakpoints
> _I2C_I2CMDR0_FSET(MST,1); //master mode
> _I2C_I2CMDR0_FSET(XA,0); //use 7bit addressing mode
> _I2C_I2CMDR0_FSET(RM,1); //use repeat mode
> _I2C_I2CMDR0_FSET(FDF,0); //disable free data mode
> _I2C_I2CMDR0_FSET(BC,0x0); //8bit send mode
> LOG_printf(&LOG0,"\nmode register: ");
> LOG_printf(&LOG0,"    NACKMOD  : %d",_I2C_I2CMDR0_FGET(NACKMOD));
> LOG_printf(&LOG0,"    FREE          : %d",_I2C_I2CMDR0_FGET(FREE));
> LOG_printf(&LOG0,"    MST            : %d",_I2C_I2CMDR0_FGET(MST));
> LOG_printf(&LOG0,"    XA             : %d",_I2C_I2CMDR0_FGET(XA));
> LOG_printf(&LOG0,"    RM            : %d",_I2C_I2CMDR0_FGET(RM));
> LOG_printf(&LOG0,"    FDF           : %d",_I2C_I2CMDR0_FGET(FDF));
> LOG_printf(&LOG0,"    BC             : %d",_I2C_I2CMDR0_FGET(BC));
> LOG_printf(&LOG0,"   IRS             : %d",_I2C_I2CMDR0_FGET(IRS));
>
> //##################### initialized ##########################
>
> }
>
> void initByCSL(void){
> Uint32 i2cStatus=0;
> // ############ start I2C module ###############
> I2C_Config config = {
>            _I2C_I2COAR0_ADDR,
>            _I2C_I2CIER0_ADDR,
>            _I2C_I2CCLKL0_ADDR,
>            _I2C_I2CCLKH0_ADDR,
>            _I2C_I2CCNT0_ADDR,
>            _I2C_I2CSAR0_ADDR,
>            _I2C_I2CMDR0_ADDR,
>            _I2C_I2CPSC0_ADDR
> };
> CSL_init();
>        hI2C = I2C_open(0,I2C_OPEN_RESET);
> LOG_printf(&LOG0,"   IRS             : %d",_I2C_I2CMDR0_FGET(IRS));
> I2C_config(hI2C,&config);
> I2C_outOfReset(hI2C);
> LOG_printf(&LOG0,"\nmode register: ");
> LOG_printf(&LOG0,"    NACKMOD: %d",_I2C_I2CMDR0_FGET(NACKMOD));
> LOG_printf(&LOG0,"    MST          : %d",_I2C_I2CMDR0_FGET(MST));
> LOG_printf(&LOG0,"    XA             : %d",_I2C_I2CMDR0_FGET(XA));
> LOG_printf(&LOG0,"    RM            : %d",_I2C_I2CMDR0_FGET(RM));
> LOG_printf(&LOG0,"    FDF           : %d",_I2C_I2CMDR0_FGET(FDF));
> LOG_printf(&LOG0,"    BC             : %d",_I2C_I2CMDR0_FGET(BC));
> LOG_printf(&LOG0,"   IRS             : %d",_I2C_I2CMDR0_FGET(IRS));
>
> I2C_start(hI2C);
>
> I2C_writeByte(hI2C,0xAA);
>
> }
>
> Iīd be grateful for ANY suggestions! Further I am lacking additional
> information on the csl i2c module. SPRU175B isnīt exactly offering a lot
> of infos on what functions as I2C_start() are doing in detail.
>
> Thank you!
> Andreas



(You need to be a member of c6x -- send a blank email to c6x-subscribe@yahoogroups.com )