本人参照了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 我是初学者,盼各位大侠鼎立相助!!!
|