接上篇,再来说说EBIU,就是我们俗称的外部总线接口!Blackfin的绝大多数型号都是有总线接口的,当然也有少量型号没有,比如BF506,BF592等。
ADSP-BF53x 的EBIU 接口共有16 根数据线,19 根地址线,支持同步的SDRAM 接入和异步的总线外设接入,ADSP-BF53x 的异步EBIU 接口共有4 个BANK,每个BANK 1MByte,支持各种总线接口设备。
EBIU 接口采用指针方式访问,通过宏定义出要访问的地址,然后通过指针进行读写数据操作。
上图是ADSP-BF53x 处理器的内存分配表,其中地址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 地址里写入数据0x1234
i = *pADDR; //读出该地址数据
printf("addr is %x\n",pADDR); //打印出当前访问的地址
printf("data is %x\n",i); //打印出当前地址中的数据
*pADDR = 0xaa55; //向0x1000 地址里写入数据0xaa55
i = *pADDR; //读出该地址数据
printf("addr is %x\n",pADDR); //打印出当前访问的地址
printf("data is %x\n",i); //打印出当前地址中的数据
这种中文注释看得懂吗?代码很简单,就是实现了通过 EBIU 接口访问SDRAM 空间地址0x1000,向0x1000 地址中写入数据并读出,打印出访问的地址和读出的数据。
奉上这个代码的源码:
百度云盘:链接: http://pan.baidu.com/s/1c09xoRm 密码: v0n1
这两章我们专门录制了一个视频教程:
清晰版下载: 链接: http://pan.baidu.com/s/1cXtE2 密码: sm38
下一章就来说一说SPI跟timer,依然是所有处理器都有的最常规的外设。 |