您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [求助]求个TWI驱动EEP的例子。。。。。。。... 
本帖共有799个阅读者
发表帖子 发表投票 回复主题
[求助]求个TWI驱动EEP的例子。。。。。。。。
tzg74500(论坛游民)
tzg74500
头衔:社区公民
帮派:无帮无派
帖数:87
金钱:806
积分:110
注册时间:2011/7/31
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]求个TWI驱动EEP的例子。。。。。。。。
斑竹有没有,有的话,给个参考下。。。

这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2012/3/27 10:23:40
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

没有驱动EEPROM的,给你个TWI驱动,你自己按照EEPROM时序自己改改吧。

/****************************************************************************
* 名称 : Reset_TWI
* 功能 : 复位 TWI接口
* 入口参数 :无
* 返回值 :无
****************************************************************************/
void Reset_TWI(void)
{
     //RESET_TWI CONTROLLER
*pTWI_CONTROL = RESET_TWI;
ssync();

//CLEAR ALL ERRONOUS CONDITIONS BEFORE ENABLING TWI
*pTWI_MASTER_STAT = BUFWRERR | BUFRDERR | LOSTARB | ANAK | DNAK;
ssync();

//CLEAR ALL INTERRUPTS BEFORE ENABLING TWI
*pTWI_INT_STAT = SINIT | SCOMP | SERR | SOVF | MCOMP | MERR | XMTSERV | RCVSERV;
ssync();

//FLUSH THE FIFOs - BOTH TX AND RX.
*pTWI_FIFO_CTL = XMTFLUSH | RCVFLUSH;
ssync();
}

/****************************************************************************
* 名称 : TWI_MasterMode_Write
* 功能 : TWI接口写数据
* 入口参数 :无
* 返回值 :无
****************************************************************************/
void TWI_MasterMode_Write(unsigned short DeviceAddr, unsigned short *TWI_Data_Pointer, unsigned short TX_Count, unsigned short TWI_TX_Length)
{
int i, j;
//FLUSH THE FIFOs - BOTH TX AND RX.
*pTWI_FIFO_CTL = XMTFLUSH | RCVFLUSH;
ssync();

*pTWI_MASTER_STAT = BUFWRERR | BUFRDERR | LOSTARB | ANAK | DNAK;
ssync();

    *pTWI_FIFO_CTL = 0;     // Clear the bit manually
*pTWI_CONTROL = TWI_ENA | PRESCALE_VALUE; // PRESCALE = fsclk/10MHz
*pTWI_CLKDIV = ((CLKDIV_HI) << 8) | (CLKDIV_LO);      // For 100KHz SCL speed: CLKDIV = (1/100KHz)/(1/10MHz) = 100 -> SCL symetric: CLKHI = 50, CLKLOW = 50
*pTWI_MASTER_ADDR = DeviceAddr;   // Target address (7-bits plus the read/write bit the TWI controls
for (i = 0; i < TX_Count; i++)
{
  delay();
     // # of configurations to send to the sensor
  *pTWI_XMT_DATA8 = *TWI_Data_Pointer++;  // Pointer to an array and load a value where a list of data is located
  *pTWI_MASTER_CTL = (TWI_TX_Length<<6) | MEN;// | FAST;      // Start transmission
  for (j = 0; j < (TWI_TX_Length-1); j++)
  {
    // # of transfers before stop condition
   while (*pTWI_FIFO_STAT == XMTSTAT)     // wait to load the next sample into the TX FIFO
    ssync();

   *pTWI_XMT_DATA8 = *TWI_Data_Pointer++;  // Load the next sample into the TX FIFO. Pointer to an array where a list of data is located
   ssync();
  }
    
  while ((*pTWI_INT_STAT & MCOMP) == 0)    // Wait until transmission complete and MCOMP is set
   ssync();
  
  *pTWI_INT_STAT = XMTSERV | MCOMP;     // service TWI for next transmission
  delay();
}
asm("nop;");
asm("nop;");
asm("nop;");

}


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/3/27 20:55:39
tzg74500(论坛游民)
tzg74500
头衔:社区公民
帮派:无帮无派
帖数:87
金钱:806
积分:110
注册时间:2011/7/31
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
TWI_MasterMode_Write函数里面的TWI_TX_Length参数是什么意思????????????

这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2012/3/28 11:01:06
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

TWI_TX_Length参数是每次传输多少个字节,比如每次传输,一个寄存器地址,一个数据,那么该值为2.即每次传输两个byte。

TX_Count是传输次数,如你写10个寄存器,每个寄存器写两次(地址和数据),那么TX_Count值就是10,TWI_TX_Length就是2。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/3/28 18:43:40
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159330 Call, 1 Queries, Processed in 0.015625 second(s),