打印

求助TWI程序解释我是初学者,盼各位大侠鼎立相助!!!

[复制链接]
1948|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nakete|  楼主 | 2007-12-24 16:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人参照了peater猪 的程序读TWI方式,那边发送数据测试OK,现在这边作为读数据参照他的程序
http://blog.21ic.com/user1/3017/archives/2006/24361.html
中的一段,如下:
int AT91F_TWI_ReadByte(const AT91PS_TWI pTwi ,int mode, int int_address, u8 *data, int nb)
{
 unsigned int status,counter=0,error=0;

    
 // Set TWI Internal Address Register
 if ((mode & AT91C_TWI_IADRSZ) != 0)
    {
        pTwi->TWI_IADR = int_address;
    }


 pTwi->TWI_MMR = mode | AT91C_TWI_MREAD;

    {
        pTwi->TWI_CR = AT91C_TWI_START | AT91C_TWI_MSEN;
        status = pTwi->TWI_SR;
        if ((status & TWI_ERROR) == TWI_ERROR) error++;
        //uprintf( "  AT91C_TWI_START | AT91C_TWI_MSEN  " );
        
        for( counter = 0; counter < nb; counter++)
        {
            //uprintf( "  nb: %d  ", counter );
            status = pTwi->TWI_SR;
            if (counter == (nb - 1))
            {
                pTwi->TWI_CR |= AT91C_TWI_STOP;
            }
            
            if ((status & TWI_ERROR )== TWI_ERROR) error++;
      while( !(status & AT91C_TWI_RXRDY) )
            {
                status = pTwi->TWI_SR;
                if ((status & TWI_ERROR) == TWI_ERROR) error++;
            }
            //uprintf( "  AT91C_TWI_RXRDY  " );
            *(data+counter) = pTwi->TWI_RHR;                
        }

        while (!(status & AT91C_TWI_TXCOMP))
        {
           status = pTwi->TWI_SR;
           if ((status & TWI_ERROR) == TWI_ERROR) error++;
        }
 }
 return 0;
}
目前有几个疑问
const AT91PS_TWI pTwi 是做什么用的?该如何设置?
int mode 又是做什么用的?该如何设置?
int int_address 这个是设置读地址的我知道 
u8 *data,前面的u8是什么意思??这个又是做什么用的??
int nb又是做什么用的?该如何设置?是否为传送数据的个数??
还有一个TWI_ERROR是从哪儿出来的?我用的是AT91SAM9261
我是初学者,盼各位大侠鼎立相助!!!

相关帖子

沙发
阿南| | 2007-12-24 18:56 | 只看该作者

只知道一点,哈哈

pTwi被定义成AT91PS_TWI结构的常数结构指针
u8应该是#define u8 unsigned char

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝