接上篇,再來說說EBIU,就是我們俗稱的外部總線接口!Blackfin的絕大多數(shù)型號都是有總線接口的,當然也有少量型號沒有,比如BF506,BF592等。
ADSP-BF53x 的EBIU 接口共有16 根數(shù)據(jù)線,19 根地址線,支持同步的SDRAM 接入和異步的總線外設接入,ADSP-BF53x 的異步EBIU 接口共有4 個BANK,每個BANK 1MByte,支持各種總線接口設備。
EBIU 接口采用指針方式訪問,通過宏定義出要訪問的地址,然后通過指針進行讀寫數(shù)據(jù)操作。
上圖是ADSP-BF53x 處理器的內(nèi)存分配表,其中地址0~0x08000000 為SDRAM地址,地址0x20000000~0x203fffff為EBIU 的異步Bank 地址。
接口寄存器說明:
寄存器 功能
EBIU_AMBCTL0 BANK0,BANK1 時序配置寄存器
EBIU_AMBCTL1 BANK2,BANK3 時序配置寄存器
EBIU_AMGCTL EBIU使能寄存器
我們來看一段例子代碼,詳細品一品Blackfin的EBIU:
#define pADDR (volatile unsigned short *)0x1000 //定義一個指針,地址指向0x1000
*pADDR = 0x1234; //向0x1000 地址里寫入數(shù)據(jù)0x1234
i = *pADDR; //讀出該地址數(shù)據(jù)
printf("addr is %x\n",pADDR); //打印出當前訪問的地址
printf("data is %x\n",i); //打印出當前地址中的數(shù)據(jù)
*pADDR = 0xaa55; //向0x1000 地址里寫入數(shù)據(jù)0xaa55
i = *pADDR; //讀出該地址數(shù)據(jù)
printf("addr is %x\n",pADDR); //打印出當前訪問的地址
printf("data is %x\n",i); //打印出當前地址中的數(shù)據(jù)
這種中文注釋看得懂嗎?代碼很簡單,就是實現(xiàn)了通過 EBIU 接口訪問SDRAM 空間地址0x1000,向0x1000 地址中寫入數(shù)據(jù)并讀出,打印出訪問的地址和讀出的數(shù)據(jù)。
奉上這個代碼的源碼:
百度云盤:鏈接: http://pan.baidu.com/s/1c09xoRm 密碼: v0n1
這兩章我們專門錄制了一個視頻教程:
清晰版下載: 鏈接: http://pan.baidu.com/s/1cXtE2 密碼: sm38
下一章就來說一說SPI跟timer,依然是所有處理器都有的最常規(guī)的外設。 |