Blackfin DSP(三):BF533 的EBIU接口之flash
上一节谈了GPIO问题,是用BF561 ezkit进行说明的,这是因为561 ezkit上的GPIO是与LED直连的,讲解GPIO时不会涉及到其它问题,降低了复杂性。对于533,也采取同样的操作即可。
但是有一个问题,533 ezkit上的led是连到了带IO口的flash上的,因此为了点亮相应的LED,必须通过flash来进行。这一节就讨论一下如何通过控制flash将其点亮。
Blackfin处理器具有外部总线接口单元(External Bus Interface Unit,EBIU),它为处理器与外部的同步存储器和异步存储器提供了无缝连接。片上的SDRAM控制器(SDC)兼容PC-100和PC-133标准。EBIU接口同时具有异步存储器控制器(Asynchronous Memory Controller,AMC),该控制器支持与异步存储器相连,如flash、ROM和ASIC/FPGA。接口信号如下:

系统为存储器划分的存储片段如下:

ADSP-BF53x 的异步EBIU 接口共有4 个BANK,每个BANK 1MByte,支持各种总线接口设备。EBIU 接口采用指针方式访问,通过宏定义出要访问的地址,然后通过指针进行读写数据操作。
- 为什么要引入BANK?
由于地址线的数量有限,为了扩大寻址范围,采用添加若干条bank选择信号线如AMS0等,来扩展寻址范围,在各个bank之间切换。
例程:通过AMC控制flash中的寄存器,使其输出电平,点亮与之相连的LED.
#include<cdefbf533.h>
#include<adi_types.h>
#define pFlashA_PortA_In ((volatile unsigned char *)0x20270000) // address of flash A port A input data register
#define pFlashA_PortA_Out ((volatile unsigned char *)0x20270004) // address of flash A port A output data register
#define pFlashA_PortA_Dir ((volatile unsigned char *)0x20270006) // address of flash A port A direction register
#define pFlashA_PortB_In ((volatile unsigned char *)0x20270001) // address of flash A port B input data register
#define pFlashA_PortB_Out ((volatile unsigned char *)0x20270005) // address of flash A port B output data register
#define pFlashA_PortB_Dir ((volatile unsigned char *)0x20270007) // address of flash A port B direction register
#define pFlashB_PortA_In ((volatile unsigned char *)0x202E0000) // address of flash B port A input data register
#define pFlashB_PortA_Out ((volatile unsigned char *)0x202E0004) // address of flash B port A output data register
#define pFlashB_PortA_Dir ((volatile unsigned char *)0x202E0006) // address of flash B port A direction register
#define pFlashB_PortB_In ((volatile unsigned char *)0x202E0001) // address of flash B port B input data register
#define pFlashB_PortB_Out ((volatile unsigned char *)0x202E0005) // address of flash B port B output data register
#define pFlashB_PortB_Dir ((volatile unsigned char *)0x202E0007) // address of flash B port B direction register
void ezConfigureFlashA(void);
void ezTurnOnLED(uint16_t led);
void Init_EBIU(void);
void main(void)
{
Init_EBIU(); //初始化EBIU
ezConfigureFlashA(); //初始化flash配置寄存器
ezTurnOnLED(); //点亮第4个led
);
}
void Init_EBIU(void)
{
*pEBIU_AMBCTL0 = 0x7bb07bb0;
*pEBIU_AMBCTL1 = 0x7bb07bb0;
*pEBIU_AMGCTL = 0x000f;
}
/*********************************************************************
Function: ezConfigureFlashA
Description: Sets up the A flash on the board for use.
*********************************************************************/
void ezConfigureFlashA(void) // sets up the flash
{
#ifdef __ADSPBF533__
*pFlashA_PortA_Out = ; // resets port A to initial value
*pFlashA_PortA_Dir = 0xFF; // configure everything on port A as outputs
*pFlashA_PortB_Out = ; // resets port B to initial value
*pFlashA_PortB_Dir = 0x3f; // configure everything on port B as outputs
#endif
}
void ezTurnOnLED(uint16_t led)
{
unsigned char LEDs;
)
{
LEDs = *pFlashA_PortB_Out; //读取原来的输出口的状态
LEDs = LEDs | (<<led);
*(pFlashA_PortB_Dir) = 0x3f;
*pFlashA_PortB_Out = LEDs;
}
}
关于AMBCTL0、1这两个寄存器是如何配置的,要参考flash手册的时序参数,找到保持时间、建立时间等,然后按照硬件手册上关于寄存器各位的说明进行配置。
在一般情况下,保持上述配置即可。
Blackfin DSP(三):BF533 的EBIU接口之flash的更多相关文章
- Blackfin DSP(八):1D DMA与音频处理模板
1.DMA产生的背景 在许多需要使用DSP 的场合,一般都需要大量的数据搬移工作,而如果每次数据搬移都由DSP 内核来参与完成,将大大占用DSP 内核的处理时间,从而严重影响其信号处理能力.因此,Bl ...
- Blackfin DSP(二):寄存器操作与GPIO
BlackfinDSP的寄存器是通过指针操作的,与51.ARM等MCU一样,通过“或”操作来置1,通过“与”操作清零. 在DSP上最简单的外设非IO口莫属,但是由于其功能强大,远非一般IO口可比,因此 ...
- BF533的SPORT接口
BF533的SPORT接口 1.特性 bf533有两个SPORT口(synchronous serial Port),即同步串行接口.完全独立的接收和发送通道,且每个通道都具有缓冲,最高速度可达SCL ...
- 【转】Android LCD(三):Samsung LCD接口篇
关键词:android LCD控制器 Framebuffer PWM 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:samsung exynos ...
- Android LCD(三):Samsung LCD接口篇
关键词:android LCD控制器 Framebuffer PWM 平台信息: 内核:linux2.6/linux3.0 系统:android/android4.0 平台:samsung exy ...
- 《三》大话 Typescript 接口
> 前言: 本文章为 TypeScript 系列文章. 旨在利用碎片时间快速入门 Typescript. 或重新温故 Typescript 查漏补缺.在官方 api 的基础上, 加上一些日常使用 ...
- Java之创建线程的方式三:实现Callable接口
import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util ...
- 创建线程的方式三:实现Callable接口-----JDK5.0 新增
package com.yhqtv.java2; /* * 创建线程的方式三:实现Callable接口-----JDK5.0 新增 * * 如何理解实现Callable接口的方式创建多线程比实现Run ...
- 创建线程的方式三:实现Callable接口 --- JDK 5.0新增
/** * 创建线程的方式三:实现Callable接口. --- JDK 5.0新增 * * * 如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程方式强大? * 1 ...
随机推荐
- PHP 面向对象编程
面向对象——类: 创建一个类: //创建了一个没有内容的Person(人)类 class Person{ } //通过new关键字来 实例化一个类 $teacher = new Person; //t ...
- android 使用相机拍照,并存储到手机sd卡上,并利用系统录像录像并播放
//首先声明一个成员变量 String savePath,用来储存文件路径 /** * 保存照片路径 * @return 返回图片的一个文件 * @throws IOException 抛出一个异常 ...
- web前端基础篇①
html1.html5和css3在IE上都不支持2.超过1100px以上的宽度,就会出现滚动条3.<!doctype html>解析模式 分为 标准模式 混杂模式 非标准模式-针对IE6o ...
- 在 C++ 代码中使用 UE4 插件---Using a plugin in C++ code
例如使用 CustomMeshComponent 插件 在Build.cs 文件 中 添加以下两行代码 如图可配置路径,可解决#include "CustomMeshComponent&qu ...
- ssd硬盘u盘装win7扩展文件时0x80070570错误
搞了个minisata ssd 硬盘,80G正好,只用来装操作系统. 这个u盘装了很多系统了,没感觉会有什么问题,但在安装过程中出现0x80070570错误.见图 网上有很多方法. 最后的解决方法是: ...
- 生日蛋糕—dfs
Description 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri ...
- sscanf,sscanf_s及其相关用法
#include<stdio.h> 定义函数 int sscanf (const char *str,const char * format,........); 函数说明 sscanf ...
- WAMPSERVER 与 IIS冲突 及如何修改网站根目录
如果之前打开过IIS服务或者用过xampp则输入localhost时,浏览器显示如下: 这说明WAMPSERVER 与 IIS服务的默认端口冲突: 可以测试80端口是否被占用: 如上端口被IIS服务占 ...
- Polymer.js
Polymer 1.0 教程 安装 bower install --save Polymer/polymer
- MapReduce介绍
一.MapReduce模型 1.MapReduce是大规模数据(TB级)计算的利器,Map和Reduce是它的主要思想,来源于函数式编程语言. 2.Map负责将数据打散,Reduce负责对数据进行聚集 ...