SPI通信調(diào)試筆記: 一、SPI硬件連接 這里做BlackFin533兼容SPI口與PowerPC405 CPU的SCP口進(jìn)行通信,由于PowerPC405 CPU的SCP口不完全兼容SPI,這樣我們?yōu)榱酥С謨蓚(gè)器件之間的雙向通信,在保證數(shù)據(jù)信號建立時(shí)間和保持時(shí)間的前提下,犧牲一點(diǎn)傳輸速度,我們把SPI的時(shí)鐘信號往后推遲1/4個(gè)時(shí)鐘周期,利用硬件實(shí)現(xiàn),具體實(shí)現(xiàn)方案待定!這樣,我們的傳輸速度會有所降低,但是仍然能夠保證我們傳輸碼率為3Mbps的影音壓縮文件。保守估計(jì),SPI的最高傳輸速度應(yīng)該在15Mbps。 BF533的MISO------------PPC 405的SCP_TXD BF533的MOSI------------PPC 405的SCP_RXD BF533的SCK-------------PPC 405的SCP_CLK 時(shí)鐘延時(shí)1/4個(gè)時(shí)鐘周期 BF533的SPISS(PF0)----PPC 405的SCP_ENO_N 二、配置SPI寄存器(BF533)
#define TIMOD_T 0x0001 #define TIMOD_R 0x0000
void Drv_Config_slave_read() { *pSPI_CTL = (((*pSPI_CTL)&0xFFFC)|TIMOD_R); }
void Drv_config_slave_write() { *pSPI_CTL |= (((*pSPI_CTL)&0xFFFC)|TIMOD_T) |EMISO; }
void Drv_Config_master_read() { *pSPI_CTL = (((*pSPI_CTL)&0xFFFC)|TIMOD_R) | EMISO; } void Drv_config_master_write() { *pSPI_CTL |= (((*pSPI_CTL)&0xFFFC)|TIMOD_T); }
void Drv_config_to_master() { *pSPI_FLG = FLS1; // Set baud rate SPI_SCK = HCLK/(2*SPIBAUD) SCK *pSPI_BAUD = 2; // configure spi port // 8-bit data, MSB first, SPI Master
*pSPI_CTL = MSTR; }
void Drv_config_to_slave() { *pSPI_CTL = PSSE; }
void Drv_SPI_enable() { *pSPI_CTL |= SPE ; }
void Drv_SPI_disable() { *pSPI_CTL &= ~SPE ; }
三、注意事項(xiàng) 為了與PowerPC 405之間正常通信,應(yīng)該設(shè)置SPI_CTL的CPOL為1; 在本應(yīng)用中BF533設(shè)為從機(jī)。
|