配置了主機(jī)模式,并且bS0_DATA_DIR配置為1,在這樣的配置下如何去讀取從機(jī)設(shè)備的數(shù)據(jù)?
我測試的時候發(fā)現(xiàn)讀回的數(shù)據(jù)會重復(fù)出現(xiàn)兩次,代碼如下:
//讀操作
CS2 = 0;
CH559SPI0Write(0xff);
?//mDelaymS (10);
dat = CH559SPI0Read();
?//printf("recv[1]: %02x\r\n", (UINT16)dat);
CS2 = 1;
//初始化
void CH559SPI0HostInit(void)
{
? ? UINT8 i = 0;
? ? PORT_CFG &= ~bP1_OC;
? ? P1_DIR |= (bSCK | bMOSI | bSCS1 | bSCS2 | bSCS3 | bSCS4); //| bSCS);
? ? P1_IE |= bMISO;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //引腳配置
? ? SPI0_SETUP &= ~(bS0_MODE_SLV | bS0_BIT_ORDER);? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//設(shè)置為主機(jī)模式,字節(jié)順序為大端模式
? ? SPI0_CTRL |=? bS0_MOSI_OE? | bS0_SCK_OE | bS0_MST_CLK | bS0_DATA_DIR;? ? ? //MISO輸出使能,SCK輸出使能
? ? SPI0_CTRL &= ~(bS0_2_WIRE);
? ? //SPI0_CTRL &=? ~(bS0_DATA_DIR);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//主機(jī)寫,默認(rèn)不啟動寫傳輸,如果使能bS0_DATA_DIR,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//那么發(fā)送數(shù)據(jù)后自動產(chǎn)生一個字節(jié)的時鐘,用于快速數(shù)據(jù)收發(fā)
? ? SET_SPI0_CK(6);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //6分頻
? ? SPI0_CTRL &= ~bS0_CLR_ALL;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//清空SPI0的FIFO,默認(rèn)是1,必須置零才能發(fā)送數(shù)據(jù)
? ? CS1 = 1;
? ? CS2 = 1;
CS3 = 1;
CS4 = 1;
}
//寫函數(shù)
void CH559SPI0Write(UINT8 dat)
{
? ? SPI0_DATA = dat;
? ? while(S0_FREE == 0);? ? //等待傳輸完成
? ? //printf("dat:%02X\r\n", (UINT16)dat);
//如果bS0_DATA_DIR為1,此處可以直接讀取一個字節(jié)的數(shù)據(jù)用于快速讀寫
}
//讀函數(shù)
UINT8 CH559SPI0Read()
{
? ? SPI0_DATA = 0xff;
? ? while(S0_FREE == 0);
? ? return SPI0_DATA;
}