DSPIIC.docx

上传人:b****6 文档编号:13613963 上传时间:2023-06-15 格式:DOCX 页数:16 大小:15.83KB
下载 相关 举报
DSPIIC.docx_第1页
第1页 / 共16页
DSPIIC.docx_第2页
第2页 / 共16页
DSPIIC.docx_第3页
第3页 / 共16页
DSPIIC.docx_第4页
第4页 / 共16页
DSPIIC.docx_第5页
第5页 / 共16页
DSPIIC.docx_第6页
第6页 / 共16页
DSPIIC.docx_第7页
第7页 / 共16页
DSPIIC.docx_第8页
第8页 / 共16页
DSPIIC.docx_第9页
第9页 / 共16页
DSPIIC.docx_第10页
第10页 / 共16页
DSPIIC.docx_第11页
第11页 / 共16页
DSPIIC.docx_第12页
第12页 / 共16页
DSPIIC.docx_第13页
第13页 / 共16页
DSPIIC.docx_第14页
第14页 / 共16页
DSPIIC.docx_第15页
第15页 / 共16页
DSPIIC.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

DSPIIC.docx

《DSPIIC.docx》由会员分享,可在线阅读,更多相关《DSPIIC.docx(16页珍藏版)》请在冰点文库上搜索。

DSPIIC.docx

DSPIIC

//GPIOB13iic总线通信操作

#include"DSP281x_Device.h"

#include"System.h"

/********************端口宏定义******************/

#defineSCL_OUTGpioDataRegs.GPDDAT.bit.GPIOD0

#defineSCL_DIRGpioMuxRegs.GPDDIR.bit.GPIOD0

#defineSDA_OUTGpioDataRegs.GPDDAT.bit.GPIOD1

#defineSDA_DIRGpioMuxRegs.GPDDIR.bit.GPIOD1

/********************常量宏定义*******************/

#defineTRUE1

#defineFALSE0

/********************全局变量定义*******************/

unsignedcharw_buffer[8]={23,10,10,20,32,25,28,29};

unsignedcharr_buffer[8]={0};

//主要是定义一些字库

/********************函数声明*******************/

voidInit_24C02(void);

voidSet_SDA_In(void);

voidSet_SDA_Out(void);

voidStart_IIC(void);

voidStop_IIC(void);

voidMaster_ACK(void);

voidMaster_NO_ACK(void);

voidWrite_Byte(unsignedcharcostent);

unsignedcharRead_Byte(void);

unsignedcharEEPROM_Check(void);

voidEEPROM_Read_Byte(unsignedcharAdr,unsignedcharData);

unsignedcharEEPROM_Read_Byte(unsignedcharAdr);

voidEEPROM_Write_Page(unsignedcharAdr,unsignedcharlength,unsignedchar*Data);

voidEEPROM_Read_Page(unsignedcharAdr,unsignedcharlength,unsignedchar*buffer);

unsignedcharEEPROM_Current_Addr_Read(void);

voieEEPROM_Segmential_Read(unsignedcharlength,unsignedchar*buffer);

/****************************************************/

//形式参数:

void

//返回值:

void

//函数描述:

主函数

/****************************************************/

voidmain(void)

{

unsignedchari,temp=0;w_data=17;err=0;r_data;

unsignedchar*pointer;

InitSysCtrl();

Init_24C02();

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

r_buffer[i]=0;

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

{

EEPROM_Write_Byte(temp++,w_data++);

}

temp=0;

w_data=17;

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

{

r_data=EEPROM_Read_Byte(temp++);

if(r_data==w_data)

err=err+1;

w_data++;

}

EEPROM_Write_page(0x28,0,w_buffer);

EEPROM_Read_Page(0x28,0,r_buffer);

while

(1);

}

/****************************************************/

//形式参数:

void

//返回值:

void

//函数描述:

完成IIC的起始条件操作

/****************************************************/

voidStart_IIC(void)

{

unsignedchari;

SCL_OUT=1;

SDA_DAT=1;

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

SDA_DAT=0;

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

SCL_OUT=0;

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

}

/****************************************************/

//形式参数:

void

//返回值:

void

//函数描述:

完成IIC的停止条件操作

/****************************************************/

voidStop_IIC(void)

{

unsignedchari;

SDA_DAT=0;

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

SCL_OUT=1;

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

SDA_DAT=1;

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

}

/****************************************************/

//形式参数:

void

//返回值:

void

//函数描述:

完成IIC的主机应答操作

/****************************************************/

voidMaster_ACK(void)

{

unsignedchari;

SDA_DAT=0;

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

SCL_OUT=1;

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

SCL_OUT=0;

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

SDA_DAT=1;

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

}

/****************************************************/

//形式参数:

void

//返回值:

void

//函数描述:

完成IIC的主机无应答操作

/****************************************************/

voidMaster_NO_ACK(void)

{

unsignedchari;

SDA_DAT=1;

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

SCL_OUT=1;

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

SCL_OUT=0;

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

SDA_DAT=0;

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

}

/****************************************************/

//形式参数:

void

//返回值:

void

//函数描述:

检测从机的应答操作

/****************************************************/

voidEEPROM_Check(void)

{

unsignedchari,Slave_ACK;

SDA_DAT=1;

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

SCL_OUT=1;

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

Set_SDA_In();

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

Slave_ACK=SDA_DAT;//读入SDA数据

SCL_OUT=0;

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

Set_SDA_Out();

if(Slave_ACK==0)

returnTRUE;

else

returnFALSE;

}

/****************************************************/

//形式参数:

void

//返回值:

void

//函数描述:

向IIC总线发送1字节数据

/****************************************************/

voidWrite_Byte(unsignedcharsostest)

{

unsignedchari,j;

for(i=8;i>0;i--)

{

if((costent&0x80)==0x80)

{

SDA_DAT=1;

for(j=0;j<30;j++);

SCL_OUT=1;

for(j=0;j<30;j++);

SCL_OUT=0;

for(j=0;j<30;j++);

}

else

{

SDA_DAT=0;

for(j=0;j<30;j++);

SCL_OUT=1;

for(j=0;j<30;j++);

SCL_OUT=0;

for(j=0;j<30;j++);

}

costest<<1;

}

}

/****************************************************/

//形式参数:

void

//返回值:

void

//函数描述:

向IIC总线读取1字节数据

/****************************************************/

unsignedcharRead_Byte(void)

{

unsignedchari,j,temp=0;

for(j=0;i<8;i++)

{

Set_SDA_Out();

SDA_DAT_Out()

SCL_OUT=1;

for(j=0;j<30;j++);

Set_SDA_In();

if(SDA_DAT==1)

temp|=(0x01<<(7

SCL_OUT=0;

for(j=0;j<30;j++);

}

Set_SDA_Out();

return(temp);

}

/****************************************************/

//形式参数:

void

//返回值:

void

//函数描述:

向指定地址写入一字节数据

/****************************************************/

voidEEPROM_Write_Byte(unsignedcharAdr,unsignedcharData)

{

unsignedchartemp=0;

unsignedinti;

Start_IIC();

Write_byte(0xA0)//发送写命令

temp=EEPROM_Check()//等待ACK

if(temp==FALSE)

{

return;

}

Write_Byte(Adr);//发送指针寄存器

temp=EEPROM_Check()//等待ACK

if(temp==FALSE)

{

return;

}

Write_Byte(Data);//发送数据

temp=EEPROM_Check()//等待ACK

if(temp==FALSE)

{

return;

}

Stop_IIC();

for(i=0;i<10000;i++);//等待写入完成

}

/****************************************************/

//形式参数:

void

//返回值:

void

//函数描述:

向指定地址读出一个字节数据

/****************************************************/

unsignedcharEEPROM_Read_Byte(unsignedcharAdr)

{

unsignedchartemp=0,r_data;

Start_IIC();

Write_byte(0xA0)//发送写命令24c02地址为A0

temp=EEPROM_Check()//等待ACK

if(temp==FALSE)

{

returnFALSE;

}

Write_Byte(Adr);//发送指针寄存器

temp=EEPROM_Check()//等待ACK

if(temp==FALSE)

{

returnFALSE;

}

Start_IIC();

Write_Byte(0XA1);//发送读命令最后一位是1

temp=EEPROM_Check()//等待ACK

if(temp==FALSE)

{

returnFALSE;

}

r_data=Rdad_Byte();

Master_NO_ACK();

Stop_IIC();

returnr_data;

}

/****************************************************/

//形式参数:

Adr-地址length--长度,*Data--数据指针

//返回值:

void

//函数描述:

向指定地址写入一个字节数据

/****************************************************/

voidEEPROM_Write_Page(unsignedcharAdr,unsignedcharlength,unsignedchar*Data)

{

unsignedchartemp=0;

unsignedinti,j;

Start_IIC();

Write_byte(0xA0)//发送写命令24c02地址为A0

temp=EEPROM_Check()//等待ACK

if(temp==FALSE)

{

return;

}

Write_Byte(Adr);//发送指针寄存器

temp=EEPROM_Check()//等待ACK

if(temp==FALSE)

{

return;

}

for(i=0;i

{

Write_Byte(*Data);//发送数据

Data++;

temp=EEPROM_Check()//等待ACK

if(temp==FALSE)

{

return;

}

}

Stop_IIC();

for(j=0;j<10000;j++);//等待数据写入

}

/****************************************************/

//形式参数:

Adr-地址length--长度,*Data--数据指针

//返回值:

void

//函数描述:

向指定地址读出length个字节数据

/****************************************************/

unsignedcharEEPROM_Read_Page(unsignedcharAdr,unsignedcharlength,unsignedchar*buffer)

{

unsignedchartemp=0,i;

Start_IIC();

Write_Byte(0xA0);

temp=EEPROM_Check()//等待ACK

if(temp==FALSE)

{

return;

}

Write_Byte(Adr);

temp=EEPROM_Check()//等待ACK

if(temp==FALSE)

{

return;

}

Start_IIC();

Write_Byte(0xA1);

temp=EEPROM_Check()//等待ACK

if(temp==FALSE)

{

return;

}

for(i=0;i

{

*buffer=Read_Byte();

buffer++;

Master_ACK();

}

*buffer=Read_Byte();

Master_NO_ACK();

Stop_IIC();

}

/****************************************************/

//形式参数:

void

//返回值:

当前地址数据

//函数描述:

从EEPROM当前地址读出一个字节的数据

/****************************************************/

unsignedcharEEPROM_Current_Addr_Read(void)

{

unsignedchartemp;

Start_IIC();

Write_Byte(0xA1);

temp=EEPROM_Check();

if(temp==FALSE)

{

returnFALSE;

}

temp=Read_Byte();

Master_NO_ACK();

Stop_IIC();

returntemp;

}

/****************************************************/

//形式参数:

length--长度buffer-数据存储区

//返回值:

void

//函数描述:

从EEPROM当前地址连续读出length个字节数据

/****************************************************/

voidEEPROM_Segmential_Read(unsignedlength,unsignedchar*buffer)

{

unsignedchartemp,i;

Start_IIC();

Write_Byte(0xA1);

temp=EEPROM_Check();

if(temp==FALSE)

{

returnFALSE;

}

for(i=0;i

{

*buffer=Read_Byte();

buffer++;

Master_ACK();

}

*buffer=Read_Byte();

Master_NO_ACK();

Stop_IIC();

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2