您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 1. BF561开发板的LED灯实验教程
本帖共有484个阅读者
发表帖子 发表投票 回复主题
1. BF561开发板的LED灯实验教程
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
1. BF561开发板的LED灯实验教程
跑马灯是最简单的例程,我们来看一下BF561是如何实现的。

1. 实验名称:

数码管和LED实验

2. 实验目的:

学习LED驱动原理,学习ADSP-BF561处理器利用CPLD的I/O资源,扩展数码管和LED接口的设计方法及程序设计

3. 实验设备:

ADSP-BF561-EZKIT开发板,ADSP-EDU-BF561扩展板




我是OP...
等级:管理员 参考IP地址:*.*.*.*
2015/12/1 16:19:24
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
4. 实验原理

l  内容:利用ADSP-BF561处理器EBIU(外部总线接口单元)与CPLD的无缝连接,

通过对异步Bank3的写操作,从而实现数码管和LED的程序控制。

l  原理:利用CPLD做一个LED控制器,用于动态扫描LED的显示。通过BF561的EBIU接口控制LED的显示字符。


开发板上设计了2个数码管和8个LED指示灯。数码管和LED复用数据总线,采用74HC245作为总线驱动芯片。CPLD内部固化了一个LED控制器,控制器采用动态扫描的方式维持LED显示。使用时ADSP-BF561处理器只需通过EBIU接口向CPLD内部的LED控制器送入需要显示的内容,LED控制器会自动将所要显示的数据锁存,并通过扫描维持该数据的显示,直到BF561重新向控制器送入数据信息。

CPLD与ADSP-BF561处理器的内部接口配置  

  
  
  

  

LEDCS


  

  

LED_A1


  

  

LED_A0


  

  

pLED_DAT_OUT


  

  

说明


  

  

上升沿


  

  

0


  

  

0


  

  

XX


  

  

数码管0显示数据


  

  

上升沿


  

  

0


  

  

1


  

  

     XX


  

  

数码管1显示数据


  

  

上升沿


  

  

1


  

  

0


  

  

     XX


  

  

LED显示数据


  

  

上升沿


  

  

1


  

  

1


  

  

    保留


  

  

保留


  

表1

其中pLED_DAT_OUT的数据D0-D7分别对应的数码管的8段a-h。

实验时驱动代码的编写过程要按照以下步骤进行

第一:向pCtrOut_Flag_OE寄存器写入数据,使能驱动器HC245 LED_OE=0。

第二:选择写入地址向pCtrOut_Flag_B对应的LED_A1和LED_A0写入数据。

第三:向pLED_DAT_OUT寄存器写入要显示的参数。

第四:控制pCtrIner_Flag寄存器的LEDCS位,使其产生一个上升沿,此时数据写入相应的寄存器:

pCtrOut_Flag_OE映射的物理地址为:0x20350000

pCtrIner_Flag映射的物理地址为:0x20360000

pCtrOut_Flag_B映射的物理地址为:0x20380000

                pLED_DAT_OUT映射的物理地址为:0x20390000


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2015/12/1 16:20:13
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
代码分析:

void
leddisplay(uint8_t LEDNum,uint8_t data)                      



{



switch(LEDNum)



{



case 1:  *pCtrOut_Flag_B
= 0x00;                         break;      // LED_A1=0 LED_A1=0



case 2:   *pCtrOut_Flag_B
= 0x00| LED_A0;                   break;      // LED_A1=0 LED_A1=1



case 3:   *pCtrOut_Flag_B
= 0x00| LED_A1;        break;      // LED_A1=1 LED_A1=1



default: printf("ERROR!\n");                                      break;      



}



*pLED_DAT_OUT =data;                                // 输出显示数据



*pCtrIner_Flag_OE =0x00;                                                                 // LEDCS 位为0



mdelay(10000);                                      



*pCtrIner_Flag_OE =0x04;                                                                 // LEDCS 位为1



}


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2015/12/1 16:21:18
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
代码运行结果:

1.        
首先看到8个LED灯循环被点亮。



2.        
数码管显示从99递减到00。


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2015/12/1 16:21:51
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
硬件连接原理图:

上传的图片
  20151229434088.jpg [ 32.12 KB 671×388 ] (缩略时请点击查看原图)

 


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2015/12/2 9:43:43
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.160100 Call, 1 Queries, Processed in 0.031250 second(s),