在使用硬件SPI時(shí),例程里的Spi376Exchange( UINT8 d )能實(shí)現(xiàn)輸出且輸入8個(gè)位數(shù)據(jù)嗎? UINT8 Spi376Exchange( UINT8 d ) /* 硬件SPI輸出且輸入8個(gè)位數(shù)據(jù) */ { /* 為了提高速度,可以將該子程序做成宏以減少子程序調(diào)用層次 */ SPDR = d; /* 先將數(shù)據(jù)寫入SPI數(shù)據(jù)寄存器,然后查詢SPI狀態(tài)寄存器以等待SPI字節(jié)傳輸完成 */ while ( ( SPSR & SPI_IF_TRANS ) == 0 ); /* 查詢SPI狀態(tài)寄存器以等待SPI字節(jié)傳輸完成 */ SPSR &= ~ SPI_IF_TRANS; /* 清除SPI字節(jié)傳輸完成標(biāo)志,有的單片機(jī)會(huì)自動(dòng)清除 */ return( SPDR ); /* 先查詢SPI狀態(tài)寄存器以等待SPI字節(jié)傳輸完成,然后從SPI數(shù)據(jù)寄存器讀出數(shù)據(jù) */ }
我感覺此程序只能輸出8個(gè)位數(shù)據(jù)吧?
void xWriteCH376Data( UINT8 mData ) /* 向CH376寫數(shù)據(jù) */ { Spi376Exchange( mData ); // mDelay0_5uS( ); /* 確保讀寫周期大于0.6uS */ } UINT8 xReadCH376Data( void ) /* 從CH376讀數(shù)據(jù) */ { // mDelay0_5uS( ); /* 確保讀寫周期大于0.6uS */ return( Spi376Exchange( 0xFF ) ); }
從376讀數(shù)據(jù)時(shí),為什么形參要帶0xff,這樣能對(duì)寫入的數(shù)據(jù)取反嗎?請多指教