上一节谈了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. QuartZ.net 常用配置说明

    配置文件说明 app.config中的quartz部分 <quartz> <!-- configure Thread Pool--> <addkey="quar ...

  2. Asp.Net异步导入Excel

    故事:用户在页面上传一个excel文件,程序把excel里的内容入库. 技术方案:保存文件在服务器,jquey Ajax 异步读取文件中的记录到数据库,在页面实时刷新导入情况 页面前端 <%@ ...

  3. iOS- UITextField限制输入长度

    限制输入长度的问题,在这里完美的解决了! //先创建一个textField 和 一个button. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...

  4. Altium Designer 画"差分线"

    Altium Designer 画"差分线" 如何在 Altium Designer 中快速进行差分对走线1:在原理图中让一对网络前缀相同,后缀分别为_N 和_P,并且加上差分队对 ...

  5. 发掘odoo.cli.server.Server的秘密,OpenERP的第三根线头儿

    command.py调用了server command 在server.py中,主函数main使用了外层模块传递来的args def main(args): check_root_user() odo ...

  6. (转)深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0

      深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0 发表于2016年07月15号由52nlp 接上文<深度学习主机攒机小记>,这台GTX10 ...

  7. 【Unity3D基础教程】给初学者看的Unity教程(一):GameObject,Compoent,Time,Input,Physics

    作者:王选易,出处:http://www.cnblogs.com/neverdie/  欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点推荐.谢谢! Unity3D重要模块的类图 最近刚刚完成了一 ...

  8. There is already an open DataReader associated with this Command which must be closed first." exception in Entity Framework

    Fixing the "There is already an open DataReader associated with this Command which must be clos ...

  9. Python(SQLAlchemy-ORM)模块之mysql操作

    一.SQLAlchemy简单介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数 ...

  10. docker2

    https://github.com/docker/distribution daocloud 数人云 时速云 http://jpetazzo.github.io/2014/06/23/docker- ...