本人参照了peater猪 的程序读TWI方式,那边发送数据测试OK,现在这边作为读数据参照他的程序<br />http://blog.21ic.com/user1/3017/archives/2006/24361.html<br />中的一段,如下:<br />int AT91F_TWI_ReadByte(const AT91PS_TWI pTwi ,int mode, int int_address, u8 *data, int nb)<br />{<br /> unsigned int status,counter=0,error=0;<br /><br /> <br /> // Set TWI Internal Address Register<br /> if ((mode & AT91C_TWI_IADRSZ) != 0)<br /> {<br /> pTwi->TWI_IADR = int_address;<br /> }<br /><br /><br /> pTwi->TWI_MMR = mode | AT91C_TWI_MREAD;<br /><br /> {<br /> pTwi->TWI_CR = AT91C_TWI_START | AT91C_TWI_MSEN;<br /> status = pTwi->TWI_SR;<br /> if ((status & TWI_ERROR) == TWI_ERROR) error++;<br /> //uprintf( "
AT91C_TWI_START | AT91C_TWI_MSEN
" );<br /> <br /> for( counter = 0; counter < nb; counter++)<br /> {<br /> //uprintf( "
nb: %d
", counter );<br /> status = pTwi->TWI_SR;<br /> if (counter == (nb - 1))<br /> {<br /> pTwi->TWI_CR |= AT91C_TWI_STOP;<br /> }<br /> <br /> if ((status & TWI_ERROR )== TWI_ERROR) error++;<br /> while( !(status & AT91C_TWI_RXRDY) )<br /> {<br /> status = pTwi->TWI_SR;<br /> if ((status & TWI_ERROR) == TWI_ERROR) error++;<br /> }<br /> //uprintf( "
AT91C_TWI_RXRDY
" );<br /> *(data+counter) = pTwi->TWI_RHR; <br /> }<br /><br /> while (!(status & AT91C_TWI_TXCOMP))<br /> {<br /> status = pTwi->TWI_SR;<br /> if ((status & TWI_ERROR) == TWI_ERROR) error++;<br /> }<br /> }<br /> return 0;<br />}<br />目前有几个疑问<br />const AT91PS_TWI pTwi 是做什么用的?该如何设置?<br />int mode 又是做什么用的?该如何设置?<br />int int_address 这个是设置读地址的我知道 <br />u8 *data,前面的u8是什么意思??这个又是做什么用的??<br />int nb又是做什么用的?该如何设置?是否为传送数据的个数??<br />还有一个TWI_ERROR是从哪儿出来的?我用的是AT91SAM9261<br />我是初学者,盼各位大侠鼎立相助!!!<br /> |
|