网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> C6000文章 >> C67X系列 >> 文章正文
  准备调试C6713与I2C铁电FM24CL64接口       ★★★ 【字体:
准备调试C6713与I2C铁电FM24CL64接口
作者:61IC    文章来源:本站原创    点击数:    更新时间:2005-9-8    

在一个很不错的专业国外网站上找到了一些源代码.今天没来得及测试.
该网站网址:
   http://www.dsprelated.com/groups/c6x/show/5542.php
相关代码如下:
  Hi,

I have a problem with I2C again :-)

I send some bytes to a slave transmitter and the last one is answered 
with a NACK. When this happens I2C stops. If I send this to a slave 
which answers the last byte with a ACK all is fine.

I have no EDMA, no IRQ and no csl for this. So I must do it by polling 
the registers. Any idea how I should treat this situation?

AFAIK it is possible for an I2C slave to answer the last byte (if it 
knew its the last one) with an NACK. The I2C module should be able to 
deal with this.

TIA Gustl

This is my code:
----------------
far void pipe_data(unsigned char *typ_string)
{
unsigned char *hw_ptr;
unsigned int i,help;
unsigned char dest[10];
unsigned char address=typ_string[1];
unsigned char number=typ_string[2];
unsigned char ret_number=typ_string[3];
unsigned char *source;

source=&typ_string[4];
send_byte=(void(*)(unsigned char))(0x00000CC8);


// I2C open/reset
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
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));
I2C_RSET(I2CCLKL0,I2C_I2CCLKL_RMK(I2C_I2CCLKL_ICCL_OF(12-6))); 
I2C_RSET(I2CCLKH0,I2C_I2CCLKH_RMK(I2C_I2CCLKH_ICCH_OF(12-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_RSET(I2CPSC0,I2C_I2CPSC_RMK(I2C_I2CPSC_IPSC_OF(10-1))); 
// I2C out of reset
I2C_RSET(I2CMDR0,I2C_RGET(I2CMDR0)|_I2C_I2CMDR_IRS_MASK);
// clear BB in case of malfunction slave device
I2C_RSET(I2CSTR0,_I2C_I2CSTR_BB_MASK);
// 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)));
source++;
number--;
// starting I2C
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_NRST,
I2C_I2CMDR_STB_NONE,
I2C_I2CMDR_FDF_NONE,
I2C_I2CMDR_BC_BIT8FDF));
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_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);
// send all bytes
while (number>0) {
if ((I2C_RGET(I2CSTR0)&_I2C_I2CSTR_ICXRDY_MASK)!=0) {
2C_RSET(I2CDXR0,I2C_I2CDXR_RMK(I2C_I2CDXR_OF(*source)));
source++;
number--;
}
}/**/
// wait until all is sent
while((I2C_RGET(I2CSTR0)&_I2C_I2CSTR_BB_MASK)!=0);
while((I2C_RGET(I2CSTR0)&_I2C_I2CSTR_BB_MASK)!=0);
}

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号