⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iic.c

📁 TI C5409 IIC 接口程序
💻 C
字号:




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

#include "mcbsp.h"

void SCL_High(void);
void SCL_Low(void);
void SDA_High(void);
void SDA_Low(void);
void delay_us(int m);

/*****************Debug Specifcation************************/
/**cause DX2 (Output only)use as SDA1 ,Debug IIC2 First *******/

void IIC_Init(void)
{
/***Set R/XRST =0 in SPCR1/2 when Use as gpio***/
*(SPSA2)=SPCR1;
*(SPSD2)&=0xFFFE;

*(SPSA2)=SPCR2;
*(SPSD2)&=0xFFFE;

*(SPSA2)=PCR;
*(SPSD2)=0xFFFF;//all ouput and all high


}

void IIC_Star(void)
{

SCL_High();//SCL=H
delay_us(5);

SDA_High();//SDA=H
delay_us(5);

SDA_Low();//SDA=L
delay_us(5);

SCL_Low();//SCL=L
delay_us(5);
}

void IIC_Stop(void)
{
SCL_High();//SCL=H
delay_us(5);

SDA_Low();//SDA=L
delay_us(5);

SDA_High();//SDA=H
delay_us(5);

SCL_Low();//SCL=L
delay_us(5);
SCL_High();//SCL=H
}
void IIC_Slave_Ack(void)//SDA1:USE DX pin,can not reback,but SD2 can.
{int IIC_D;

SDA_Low();//SDA=L
delay_us(2);

SCL_High();//SCL=H
delay_us(5);

*(SPSA2)=PCR;
*(SPSD2)&=0xFEFF;//CLKRM=0,set input
delay_us(5);

IIC_D=(*SPSD2)&(0x0001);//Read form SDA2

do 
{ 
}while (IIC_D);//chech Slave device ack.

SCL_Low();//SCL=L
delay_us(5);

}
void IIC_Master_Ack(void)
{
}

void IIC_Write(char data) 
{ char i;
  char SDA;

SCL_Low();//SCL=L,SDA change only when SCL=L
delay_us(5);
/******Sending data form MSB to LSB*******************/
for( i=0; i<8; i++ )
   { 
     SDA=data & 0x80;
     if (SDA)
     {
     	  SDA_High();//SDA=H
		  delay_us(5);
      }
      else
      {
          SDA_Low();//SDA=L
		  delay_us(5);
	  }
	 
 	data<<=1; 
	
	SCL_High();//SCL=L
	delay_us(5);

	SCL_Low();//SCL=L
	delay_us(5);
   }	

}

void Set_IIC(char addr,char cmmd,char data)
{
//======addr=0101A3A2A1A0========
//==cmmd:here Write WCR=1010(P1P0)xx=1010(P1P0)00===========
//==data=CM DW D5...D0=00 D5...D0=========  
 IIC_Star();
 
 IIC_Write( addr);
 IIC_Slave_Ack();
 delay_us(15);
 IIC_Write( cmmd);
 IIC_Slave_Ack(); 
 IIC_Write( data);
 IIC_Slave_Ack();
 
 IIC_Stop();
}


/*****************PCR*********************/
/*Bit15-12:xx XIOEN RIOEN *//*GPIO: X/RIOEN=1 in PCR */
/*Bit11-8: FSXM FSRM CLKXM CLKRM *//*Direction==>set 1,Output,Set 0 :input*/
/*Bit7:4:  x CLKS_STAT DX_STAT  DR_STAT *//*Value reflag on pin*/
/***********x****x******SDA1******x***********/
/*Bit3:0   FSXP FSRP CLKXP CLKRP *//*Value reflag on pin*/
/**********SCL2   x   SCL1  SDA2*****************/
/****************************************/

void SCL_High(void)//SCL1:CLKX2,SCL2:FSX2
{
*(SPSA2)=PCR;
*(SPSD2)|=0x000A;//FSXP=CLKXP=H
}
void SCL_Low(void)
{
*(SPSA2)=PCR;
*(SPSD2)&=0xFFF5;//FSXP=CLKXP=L
}
void SDA_High(void)
{
*(SPSA2)=PCR;
*(SPSD2)|=0xFF21;//DX_STAT=CLKRP=H
}
void SDA_Low(void)
{
*(SPSA2)=PCR;
*(SPSD2)&=0xFFDE;//DX_STAT=CLKRP=L
}

void delay_us(int m)//m us 
{
int i;
int N=m*25;
for (i=0;i<N;i++)
   { 
	asm(" nop");
	asm(" nop");
	asm(" nop");
	asm(" nop"); 
	}
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -