ADSP-BF533的开发,有手就行(十四)LED跑马灯(含源代码)

作者的话

BF533是ADI Blackfin系列DSP处理器里的最经典型号,这个DSP我用了20年,单就这一颗DSP来讲,我相信国内应该没有比我更资深的了,下面就来说一说这颗DSP。

这颗IC是Blackfin里的经典款,由于Blackfin系列DSP均是同一个内核,在我看来,会用BF533,就约等于会用ADI Blackfin全系列DSP。实际上也确实是这样,我本人是从2002年开始用BF533,后面继续做了BF527,BF524,BF537,BF547,BF548,BF561,BF518,BF512,BF504,BF506,BF592,BF706,BF707,BF609,BF608;几乎每一颗ADSP,我都有基于项目做过软硬件的开发,而这一切的基础就是BF533。

这个系列,我计划从内核架构开始,到外设、驱动、典型算法、软件应用、uclinux、ucos等方面,来说一说这颗DSP。

硬件准备

ADSP-EDU-BF533开发板:BF533全功能开发板

产品链接:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-5192690539.11.5c1d42b3yniNnQ&id=39598018589

在这里插入图片描述

AD-HP530ICE仿真器:ADI DSP专用仿真器

产品链接:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-5192690539.11.52dfbfa3xB7JE7&id=38007242820

在这里插入图片描述

AD-CMOS:CMOS摄像头子卡
AD-MEMS:ADI MEMS三轴加速度传感器子卡
AD-ADC:ADC采集子卡
AD-LCD:2.4寸LCD子卡

硬件链接

在这里插入图片描述

接口讲完了,下面写点应用程序,GPIO最典型的应用,LED跑马灯。

硬件设计原理图

在这里插入图片描述

硬件实现原理

ADSP-EDU-BF533开发板上共设计了 8 个 LED,这些 LED 直接连接于 CPLD,通过灌电流方式接入,需要点亮时,将该位数据写 0,通过配置 CPLD 映射的 DEVICE_OE 寄存器和 LED_DAT 寄存器,可以对 LED 灯进行控制。

其寄存器映射如下:

DEVICE_OE 寄存器(读/写):
DEVICE_OE 寄存器地址:0x20320000
DEVICE_OE 寄存器设置硬件设备上一些控制管脚的电平状态。
DEVICE_OE 寄存器位功能:

在这里插入图片描述

LED_OE:LED 指示灯使能位
1:关闭 LED 灯模块
0:使能 LED 灯模块

LED_DAT 寄存器(写唯一):
LED_DAT 寄存器地址:0x20340000
LED_DAT 寄存器是 LED 模块的数据寄存器,该寄存器的 8Bit 分别对应板卡上 8 个 LED 指示灯,通过对寄存器 Bit 位设置点亮其中一个 LED 指示灯。

LED_DAT:
1:熄灭 LED 灯
0:点亮 LED 灯

硬件连接示意图

在这里插入图片描述

代码实现功能

代码实现了通过逐次配置 LED_DAT 寄存器,实现了 LED 跑马灯功能。

调试步骤

1. 将仿真器(ICE)与 ADSP-EDU-BF53x 开发板和计算机连接好。
2. 先给 ADSP-EDU-BF53x 开发板上电,再为仿真器(ICE)上电。
3. 运行 VisualDSP++ 5.0 软件,选择合适的 BF533 的 session 将仿真器与软件连接。
4. 加载 VisualDSP++ 5.0 工程文件 BF53x_LED.dpj,编译并全速运行。

调试结果

板卡上的 LED 逐个点亮,实现跑马灯功能。

程序源码

CPLD.c

#ifndef CPLD_C
#define CPLD_C

#include “cpld.h”

void IIC_Enable(void)
{
*pDEVICE_OE &= ~PF0_SET ;
}

void Interrupt_Enable(void)
{
*pDEVICE_OE |= PF0_SET; //关闭IIC总线,将PF0设置为中断接口
}

void CMOS_Enable(void)
{
*pDEVICE_OE &= ~PPI_SET0;
*pDEVICE_OE &= ~PPI_SET1;
}

void LCD_Enable(void)
{
*pDEVICE_OE |= PPI_SET0;
*pDEVICE_OE &= ~PPI_SET1;
}

void PCLK_OUT_Enable(void)
{
*pDEVICE_OE |= PPI_SET0;
*pDEVICE_OE &= ~PPI_SET1;
}

void ExtPCLK_IN_Enable(void)
{
*pDEVICE_OE |= PPI_SET0;
*pDEVICE_OE |= PPI_SET1;
}

void LCDBK_Enable(void)
{
*pDEVICE_OE &=(~LCDBK_OE);
}

void LCDBK_Disable(void)
{
*pDEVICE_OE |= LCDBK_OE;
}

void LED_Enable(void)
{
*pDEVICE_OE &= ~LED_OE; //使能LED
}

void SD_Enable(void)
{
*pDEVICE_OE |= SPI_SEL0;
*pDEVICE_OE &= ~SPI_SEL1;
}

void Touch_Enable(void)
{
*pDEVICE_OE &= ~SPI_SEL0;
*pDEVICE_OE &= ~SPI_SEL1;
}

void ExtSPI0_Enable(void)
{
*pDEVICE_OE &= ~SPI_SEL0;
*pDEVICE_OE |= SPI_SEL1;
}

void ExtSPI1_Enable(void)
{
*pDEVICE_OE |= SPI_SEL0;
*pDEVICE_OE |= SPI_SEL1;
}

void ExtIO_Interrupt_Enable(void)
{
*pDEVICE_OE &= ~EXT_IO_INTOE;
}

void ExtIO_Interrupt_Disable(void)
{
*pDEVICE_OE |= EXT_IO_INTOE;
}

#endif

LED.C

#include <cdefBF533.h>
#include “cpld.h”

delay(int count)
{
int i;
for(i=0;i<count;i++);
}

void Set_PLL(unsigned int pmsel,unsigned int pssel)
{
unsigned int new_PLL_CTL;
*pPLL_DIV = pssel;
asm(“ssync;”);
new_PLL_CTL = (pmsel & 0x3f) << 9;
*pSIC_IWR |= 0xffffffff;
if (new_PLL_CTL != *pPLL_CTL)
{
*pPLL_CTL = new_PLL_CTL;
asm(“ssync;”);
asm(“idle;”);
}
}

void Init_EBIU(void)
{
*pEBIU_AMBCTL0 = 0x7bb07bb0;
*pEBIU_AMBCTL1 = 0xffc07bb0;
*pEBIU_AMGCTL = 0x000f;
}

void main(void)
{
unsigned int i;

Set_PLL(16,4);
Init_EBIU();			
LED_Enable();

 while(1)
 {
  	*pLED_DAT =0x00;	//点亮所有LED灯
    for(i=0;i<8;i++)
    {	*pLED_DAT = ~(0x1<<i);
   		delay(3000000);
    }       
 }	

}

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ADI_OP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值