亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
IIC_EEPROM_24LC64芯片與TMS320F2812完成讀寫操作
[打印本頁]
作者:
cnqg
時間:
2018-7-12 12:09
標題:
IIC_EEPROM_24LC64芯片與TMS320F2812完成讀寫操作
給大家分享一個IIC_EEPROM_24LC64存儲芯片與TMS320F2812 dsp讀寫操作的源碼
0.png
(45.92 KB, 下載次數: 146)
下載附件
2018-7-13 04:20 上傳
dsp源程序如下:
/*********************************************************************
** 實驗目的:學習IIC接口的EEPROM數據讀寫 **
** 實驗說明:EEPROM采用24LC64芯片,串行數據線和串行時鐘線分別由DSP的 **
** PA13和PA15控制 **
** 實驗結果:按照我們下面所設置的斷點運行可讀出我們寫入EEPROM里的值 ** **
**********************************************************************/
#include "DSP28_Device.h"
#include "DSP28_Globalprototypes.h"
#define SDA1 GpioDataRegs.GPADAT.bit.GPIOA13 = 1////串行數據輸出高
#define SDA0 GpioDataRegs.GPADAT.bit.GPIOA13 = 0////串行數據輸出低
#define SCL1 GpioDataRegs.GPADAT.bit.GPIOA15 = 1////串行時鐘輸出高
#define SCL0 GpioDataRegs.GPADAT.bit.GPIOA15 = 0////串行時鐘輸出低
#define SDAIN EALLOW;GpioMuxRegs.GPADIR.bit.GPIOA13 = 0; EDIS
#define SDAOUT EALLOW;GpioMuxRegs.GPADIR.bit.GPIOA13 = 1;EDIS
#define SDADATA GpioDataRegs.GPADAT.bit.GPIOA13
//24C64 =8K Bytes =13bit Add
//頁編程平均400us寫一字節,隨機讀平均1.8ms讀一字節,連續讀平均600us一字節
#define uchar unsigned char /*宏定義*/
#define uint unsigned int
void delay(unsigned int t);
unsigned char ByteRead(unsigned int add,unsigned char *temp);
unsigned char ByteWrite(unsigned int add,unsigned char dat);
void main(void)
{
unsigned char t,s,a;
/*初始化系統*/
InitSysCtrl();
/*關中斷*/
DINT;
IER = 0x0000;
IFR = 0x0000;
/*初始化PIE*/
InitPieCtrl();
/*初始化PIE中斷矢量表*/
InitPieVectTable();
InitGpio();
SDA1;
SCL1;
t=0;
s=ByteWrite(0,0x12);
delay(10000);
s=ByteRead(0,&t);
a=0;//設斷點,看變量t的值
s=ByteWrite(1,0x34);
delay(10000);
s=ByteRead(1,&t);
a=1; //設斷點
s=ByteWrite(2,0x56);
delay(10000);
s=ByteRead(2,&t);
a=2; //設斷點
s=ByteWrite(3,0x78);
delay(10000);
s=ByteRead(3,&t);
a=3; //設斷點
for(;;);
}
void delay(unsigned int t)
{
while(t>0) t--;
}
//總線無效期間二線全為主高,總線有效期間時鐘線為低,一個高低跳變為一個時鐘
//周期,時鐘線為低時才能改變數據線狀態,若時鐘線為高時改變數據線狀態,則只
//能是開始或結束總線操作
unsigned char ack; /*應答標志位*/
/*******************************************************************
起動總線函數
時鐘線在高電平時,數據線從高向低的跳變開始總線,最終二線全變低
函數原型: void Start_I2c();
功能: 啟動I2C總線,即發送I2C起始條件.
********************************************************************/
void Start_I2c()
{
SDA1; /*先跳高,為稍后的從高向低跳作準備*/
delay(60);
SCL1;
delay(500); /*起始條件建立時間大于4.7us,延時*/
SDA0; /*發送起始信號*/
delay(60); /* 起始條件鎖定時間大于4μs*/
SCL0; /*鉗住I2C總線,準備發送或接收數據 */
delay(60);
}
/*******************************************************************
結束總線函數
時鐘線在低電平時,數據線從低向高的跳變結束總線,最終二線都變高
函數原型: void Stop_I2c();
功能: 結束I2C總線,即發送I2C結束條件.
********************************************************************/
void Stop_I2c()
{
SDA0; /*先跳低,為稍后的從低向高跳變作準備*/
delay(60);
SCL1; /*發送結束條件的時鐘信號,結束條件建立時間大于4μs*/
delay(60);
SDA1; /*發送I2C總線結束信號*/
delay(60);
}
/*******************************************************************
字節數據發送函數
函數原型: void SendByte(uchar c);
功能: 將數據c發送出去,可以是地址,也可以是數據,發完后等待應答,并對
此狀態位進行操作.(不應答或非應答都使ack=0)
發送數據正常,ack=1; ack=0表示被控器無應答或損壞。
********************************************************************/
unsigned char SendByte(uchar c)
{
uchar BitCnt,t[8];
for(BitCnt=0;BitCnt<8;BitCnt++) /*要傳送的數據長度為8位*/
{
if((c<<BitCnt)&0x80)
t[BitCnt]=1; /*判斷發送位*/
else
t[BitCnt]=0;
}
SCL0;
delay(4);
for(BitCnt=0;BitCnt<8;BitCnt++) /*要傳送的數據長度為8位*/
{ SCL0;
if(t[BitCnt])SDA1; /*判斷發送位*/
else SDA0;
delay(60);
SCL1; /*置時鐘線為高,通知被控器開始接收數據位*/
delay(60); /*保證時鐘高電平周期大于4μs*/
// if((BitCnt==7) && t[BitCnt])
// SDAIN; //設為輸入
}
SCL0;
SDAIN; //設為輸入
delay(60);
SCL1;
if(SDADATA)ack=1; //沒有收到應答信號
else ack=0; //收到應答信號
delay(60);
SCL0;
delay(60);
SDAOUT; //重新設為輸出
return ack;
}
/*******************************************************************
字節數據接收函數
函數原型: uchar RcvByte();
功能: 用來接收從器件傳來的數據,并判斷總線錯誤(不發應答信號),
發完后請用應答函數應答從機。
********************************************************************/
uchar RcvByte()
{
uchar retc;
uchar BitCnt;
retc=0;
SCL0; //先將時鐘線拉低
SDAIN; /*置數據線為輸入方式*/
for(BitCnt=0;BitCnt<8;BitCnt++)
{
SCL0; /*置時鐘線為低,準備接收數據位*/
delay(60); /*時鐘低電平周期大于4.7μs*/
SCL1; /*置時鐘線為高使數據線上數據有效*/
retc=retc<<1;
if(SDADATA)
retc=retc+1; /*讀數據位,接收的數據位放入retc中 */
delay(60);
}
SCL0; //從器件數據輸了階段在這一位后沒有響應,數據線補外部上拉電阻臨時拉為高
delay(60);
SDAOUT;
return(retc);
}
/*******************************************************************
接口函數
*******************************************************************/
unsigned char ByteRead(unsigned int add,unsigned char *temp)
{
unsigned char rt;
rt=0;
Start_I2c(); /*啟動總線*/
if(SendByte(0xa0)) /*發送寫命令*/
rt=1;
if(SendByte(add>>8)) //發送地址
rt= 2;
if(SendByte(add)) //發送地址
rt= 3;
Start_I2c(); /*啟動總線*/
if(SendByte(0xa1)) //發送讀命令
rt= 4;
*temp=RcvByte();
Stop_I2c(); /*結束總線*/
return rt;
}
unsigned char ByteWrite(unsigned int add,unsigned char dat)
{
unsigned char rt;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
IIC_EEPROM_24LC64芯片與TMS320F2812完成讀寫操作.rar
(250.44 KB, 下載次數: 63)
2018-7-12 12:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
xuxu5586
時間:
2021-4-21 23:19
正好有個項目要用這塊,謝謝了
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1