Blackfin DSP(五):BF533的SPI接口

  1. 533SPI的特性
  • 最高速度可達SCLK/4
  • 支持主模式和從模式;
  • 可以使用8GPIO口做爲從選擇線:
    • 1 slave select input pins
    • 7 slave select output pins
  • DMA支持
  • 可編程的時鐘極性和相位;
  • 可編程的波特率;
  • 可編程的字長度:816bits
  1. 接口信號說明
  • 時鐘信號SCK

由主設備產生,是門控的,即只在傳輸期間有效,在沒有數據操做時,是無脈衝波形的。在一個邊沿輸出數據、另外一個邊緣採樣數據。編程

  • Master Out Slave In(MOSI)/Master In Slave Out(MISO)

雙向數據引腳,方向取決於設備是主設備仍是從設備。測試

  • SPISSPF0

做爲從機時的片選信號;ui

PFx:做爲主機時的設備選擇信號。spa

  1. 電路鏈接方法以下:

    

  4. 時鐘的極性與相位問題:3d

  這裏的設置要取決於咱們所採用的設備的SPI接口模式,假如設備是上升沿採樣,降低沿輸出,空閒時間爲高電平,則對應的DSP設置爲:CPOL = 1, CPHA = 1,即模式4.code

  5. 時鐘頻率問題:blog

    時鐘頻率是由SPI_BAUD register決定的,計算方法爲:接口

        SCK = SCLK/(2*SPI_BAUD);ci

    假設咱們SCLK = 120MH,SPI_BAUD = 4,則SCK = 15M,即SPI的波特率爲15MHz。input

  6.其它寄存器的設置

  其它寄存器的設置按照寄存器的手冊相關位的說明便可,須要解釋的是SPI_CTL中TIMOD位的設置。

      從時鐘SCK與數據的關係波形中注意到,在8個時鐘週期中,能夠同時發送一個字節的數據,同時採樣一個字節的數據。本例程中設置爲01,也就是發起傳輸是由向SPI_TDBR寄存器中寫數據致使的。那接受數據時如何發起SCLK呢?答案是要在讀SPI_RDBR以前,發送一個字節的數,這個數發送完成的同時,採樣也結束了。所以:

所以(這裏爲16位操做):

  • 寫操做:spi_send_read_data(0xaabb);  //發送數據0xaabb
  • 讀操做:var = spi_send_read_data(0xffff);    //0xffff爲發送無效數據

  7.具體的代碼:

void init_spi(void)
{
    *pSPI_BAUD=4;         //配置速率爲1/4系統時鐘  SPI速率 = SCLK/2*SPI_BAUD
    *pSPI_FLG |=FLS2;      //選擇SPISEL2接口做爲slave選擇引腳
    //enable spi,master mode,MSB first,16 bit transfer
    //CPOL,CPHA(slave select pin controlled by software)
    //start transfer with write of SPI_TDBR
    *pSPI_CTL = SPE|MSTR|CPHA|CPOL|SIZE|0x0001;
}


uint16_t spi_send_read_data(uint16_t data)
{
    uint16_t i;

    *pSPI_FLG &= ~FLG2;        //將SPISEL2拉到0
    *pSPI_TDBR = data;      //將數據送入SPI傳輸數據寄存器
    while(*pSPI_STAT & TXS);  //查看SPI傳輸狀態是否完成,用示波器測試要花費一個CLK週期;

    //讀過程
    while(!(*pSPI_STAT & RXS));//查看SPI傳輸狀態是否有數據須要接收
    i = *pSPI_RDBR; //讀取數據
   *pSPI_FLG |= FLG2;       //將SPISEL2拉到1,完成數據傳輸
    return i;
}
相關文章
相關標籤/搜索