//模擬的SPI讀
UINT8 Spi_Read_Dat(UINT8 addr)
{
? UINT8 i;
? Ic_Cs_Set(0);
? addr = ((addr<<1)&0x7E)|0x80;
? for(i=8;i>0;i--)
? {
? ? if(addr&0x80)Spi_Mosi_Set(1);
? ? else Spi_Mosi_Set(0);
? ? Spi_Clk_Set(1);
? ? addr <<= 1;
? ? Spi_Clk_Set(0);
? }
? for(i=8;i>0;i--)
? {
? ? Spi_Clk_Set(1);
? ? addr <<= 1;
? ? if(IO_Spi_Miso)addr|=0x01;
? ? Spi_Clk_Set(0);
? }
? Ic_Cs_Set(1);
? return addr;
}
//模擬的SPI寫(xiě)
void Spi_Write_Dat(UINT8 addr, UINT8 dat)
{
? UINT8 i;
? Ic_Cs_Set(0);
? addr = ((addr<<1)&0x7E);
? for(i=8;i>0;i--)
? {?
? ? if(addr&0x80)Spi_Mosi_Set(1);
? ? else Spi_Mosi_Set(0);
? ? Spi_Clk_Set(1);
? ? addr <<= 1;
? ? Spi_Clk_Set(0);
? }
? for(i=8;i>0;i--)
? {
? ? Spi_Mosi_Set(dat&0x80);
? ? Spi_Clk_Set(1);
? ? dat <<= 1;
? ? Spi_Clk_Set(0);
? }
? Ic_Cs_Set(1);
}
//模擬的全部可以正常工作沒(méi)問(wèn)題
//系統(tǒng)自帶的硬件SPI
UINT8 Spi_Read_Dat(UINT8 addr)
{
? addr = ((addr<<1)&0x7E)|0x80;
? Ic_Cs_Set(0);
? SPI0_MasterSendByte(addr);
? addr=SPI0_MasterRecvByte();
}
//硬件SPI 寫(xiě)
void Spi_Write_Dat(UINT8 addr, UINT8 dat)
{
? addr = ((addr<<1)&0x7E);
? Ic_Cs_Set(0);
? SPI0_MasterSendByte(addr);
? SPI0_MasterSendByte(dat);
}
? GPIOPinRemap(ENABLE, RB_PIN_SPI0);? ? ? ? ? ? ? ? ? ? ? ?//重新映射SPI
? GPIOB_ModeCfg(SPI_CLK_PIN|SPI_MOSI_PIN|IC_CS_PIN|IC_RESET_PIN,GPIO_ModeOut_PP_5mA);
? SPI0_MasterDefInit();
void SPI0_MasterDefInit( void )
{
? ? R8_SPI0_CLOCK_DIV = 8;// 主頻時(shí)鐘4分頻,最小分頻2,讀卡只能是3,2太快4太慢,LCD可以是2
? ? R8_SPI0_CTRL_MOD = RB_SPI_ALL_CLEAR;
? ? R8_SPI0_CTRL_MOD = RB_SPI_MOSI_OE | RB_SPI_SCK_OE ;
? ? R8_SPI0_CTRL_CFG |= RB_SPI_AUTO_IF;? ? ?// 訪(fǎng)問(wèn)BUFFER/FIFO自動(dòng)清除IF_BYTE_END標(biāo)志
? ? R8_SPI0_CTRL_CFG &= ~RB_SPI_DMA_ENABLE;? ? // 不啟動(dòng)DMA方式
}