上一节谈了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的更多相关文章

  1. Blackfin DSP(八):1D DMA与音频处理模板

    1.DMA产生的背景 在许多需要使用DSP 的场合,一般都需要大量的数据搬移工作,而如果每次数据搬移都由DSP 内核来参与完成,将大大占用DSP 内核的处理时间,从而严重影响其信号处理能力.因此,Bl ...

  2. Blackfin DSP(二):寄存器操作与GPIO

    BlackfinDSP的寄存器是通过指针操作的,与51.ARM等MCU一样,通过“或”操作来置1,通过“与”操作清零. 在DSP上最简单的外设非IO口莫属,但是由于其功能强大,远非一般IO口可比,因此 ...

  3. BF533的SPORT接口

    BF533的SPORT接口 1.特性 bf533有两个SPORT口(synchronous serial Port),即同步串行接口.完全独立的接收和发送通道,且每个通道都具有缓冲,最高速度可达SCL ...

  4. 【转】Android LCD(三):Samsung LCD接口篇

    关键词:android LCD控制器 Framebuffer PWM  平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:samsung exynos ...

  5. Android LCD(三):Samsung LCD接口篇

    关键词:android LCD控制器 Framebuffer PWM  平台信息: 内核:linux2.6/linux3.0 系统:android/android4.0  平台:samsung exy ...

  6. 《三》大话 Typescript 接口

    > 前言: 本文章为 TypeScript 系列文章. 旨在利用碎片时间快速入门 Typescript. 或重新温故 Typescript 查漏补缺.在官方 api 的基础上, 加上一些日常使用 ...

  7. Java之创建线程的方式三:实现Callable接口

    import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util ...

  8. 创建线程的方式三:实现Callable接口-----JDK5.0 新增

    package com.yhqtv.java2; /* * 创建线程的方式三:实现Callable接口-----JDK5.0 新增 * * 如何理解实现Callable接口的方式创建多线程比实现Run ...

  9. 创建线程的方式三:实现Callable接口 --- JDK 5.0新增

    /** * 创建线程的方式三:实现Callable接口. --- JDK 5.0新增 * * * 如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程方式强大? * 1 ...

随机推荐

  1. UIActionSheet的使用

    UIActionSheet是在iOS弹出的选择按钮项,可以添加多项,并为每项添加点击事件. 为了快速完成这例子,我们打开Xcode 4.3.2, 先建立一个single view applicatio ...

  2. bzoj1211: prufer序列 | [HNOI2004]树的计数

    题目大意: 告诉你树上每个节点的度数,让你构建出这样一棵树,问能够构建出树的种树 这里注意数量为0的情况,就是 当 n=1时,节点度数>0 n>1时,所有节点度数相加-n!=n-2 可以通 ...

  3. 模仿MFC封装Windows API

    .... 最后添加了两个按钮,分别处理每个按钮的单击事件时,走了弯路,本来想的是在QButton中重写OnLButtonDown方法,但是,无法区分是那个按钮.参考这篇文章: http://zhida ...

  4. pymongo 3.3 使用笔记

    #首先安装pymongo sudo pip install pymongo || sudo easy_install pymongo #demo均在交互解释器下进行 from pymongo impo ...

  5. Android 学习第7课,java android project 项目文档结构

    src: 主要存放java源文件 gen:用于存放由开发工具自动生成的内容 R.java(很重要),用于登记各种资源的ID,编译器在你放入资源于自动生成的,程序员不需要自己去修改,是不能自己修改的 往 ...

  6. leetcde37. Sudoku Solver

    Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...

  7. PHP7在linux下的安装步骤

    安装mcrypt: yum install -y php-mcrypt libmcrypt libmcrypt-devel 升级bison: cd /var/soft/ wget http://ftp ...

  8. cocos2d 艺术标签没有显示

    今天自己挖了个坑,设置数字标签的时候,无论怎么搞,程序运行后还是显示的是普通文本数字,各种原因找了一半天,最后发现在资源名字.png的前面多了一个空格,眼瞎一直没看到,最后去掉就OK了

  9. jsp状态管理

    http无状态协议 服务器记不住你 每次浏览器访问,服务器不会特点保存相应信息,故记不住你 jsp状态存储的两种机制 cookie 存储在客户端 用途: 1.简化登陆 2.追踪特定对象 3.保存用户常 ...

  10. iOS常用设计模式和机制之Block简单使用

    Block :block 实际上就是 Objective-C语言对闭包的实现 闭包(Closure):闭包就是一个函数,或者一个指向函数的指针,加上这个函数执行的非局部变量.闭包允许一个函数访问声明该 ...