天天看點

工作日志:2020/11/10 同步突發模式的FIFO調試目标:一、驗證寫FIFO功能的實作

目标:

  1. 驗證寫FIFO功能的實作。

  2. 嘗試讀模式能不能也使用寫FIFO來實作

  3. 用DMA實作突發讀功能

一、驗證寫FIFO功能的實作

文檔說明:

  • 寫FIFO:16 x 32 位 深度寫 FIFO
  • 寫 FIFO 由所有存儲控制器所共用,包括:

· 寫資料 FIFO,用于存儲要寫入存儲器的 AHB 資料(最多 32 位)以及 AHB 傳輸的一個控制位(突發或非連續模式)。

· 寫位址 FIFO,用于存儲 AHB 位址(最多 28 位)以及 AHB 資料大小(最多 2 位)。在突發模式下工作時,将僅存儲起始位址,但越過頁邊界時除外(适用于 PSRAM 和SDRAM)。在此情況下, AHB 突發傳輸将分成兩個 FIFO 條目。

思考:

深度是16,是以允許的最大突發長度應該可以是16以下(或者可以比16高,比如突發的過程中已經讀走幾位了)。而且寫資料和寫位址是分開的。

有個問題:寫資料FIFO到底是多大不清楚,寫位址到底是多大也不清楚。

之前的寫入過程的實作是用指針指向兩個資料區,然後分别++:

for(BufferSize=buffer_cnt; BufferSize !=0; BufferSize--)
{
    *((volatile unsigned short int *)(0x60000000+(offset<<1))) = data;	//從0~buffer_cnt
	offset++;
	data++;
}
           

這樣雖然看着是同步,但 實際上每次控制的還是一個位址一個資料。由“寫FIFO位址”可知,每次隻需傳首位址即可,那麼嘗試:傳輸16個一下的資料,每次隻是資料++,位址不++,看能否傳輸成功:

以每次傳6個資料為例

這是之前位址指針也跟着++ 的FPGA端的波形:

工作日志:2020/11/10 同步突發模式的FIFO調試目标:一、驗證寫FIFO功能的實作

可以看出6個資料分了三次突發:0~4、 5、 6 三次。

下面将寫部分代碼修改為:(去掉位址指針++)

for(BufferSize=buffer_cnt; BufferSize !=0; BufferSize--)
{
    *((volatile unsigned short int *)(0x60000000+(offset<<1))) = data;	//從0~buffer_cnt
    data++;
}