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