来 嵌入式 开发 DSP 干 一把 (做个走马灯)

第一步:设定目标  "做一个5个红色发光二极管走马灯"

第二步:根据这个目标,选了一款DSP芯片 (这里 选了 德州仪器的 STM320F28335)

(1)不想画板子了, 发现淘宝上有一款STM320F28335开发板,看下图,够用,买回来直接用吧;

嘿嘿! 看红框里正好有5个红色发光二极管, 这五个管正好连接在DSP28335上通用输入输出口0-4五个管脚上,够了,够了。好了,按如下图把开发系统接上电源都连吧上。

查看仿真卡,我用的是一个便宜的仿真卡:XDS100-V3 长成下面这个样子

(2)STM320F28335 德州仪器的, 找一下软件,这个芯片的开发环境:  在这里下载

下载完毕后 安装,安装完后运行,运行后看到到下面界面:(图有点多,其实就是具体描述,该怎么 “干”)

给你一个 我 编写好的一个走马灯项目,这个项目包含走吗灯程序 ,一个压缩文件(点击这里下载), 解压到一个目录中;然后 用CCS开软件把这个程序导进来。

编译并下载这个程序

下载完成后,没有错误,运行它, 

第三步: 行了,目标实现了,看结果(小视频):

走马灯视频

嘿嘿, 反正我做成功了,但, 估计你不一定成功, 后面我会把可能出现的问题给你介绍介绍。(填坑) 

另外,后面慢慢介绍一些 DSP 软件开发的一些小知识。  爱看就看看,不爱看, 就自己去学。

哈哈哈哈哈 ::::))))

主程序代码如下:(Marquee.c)

//###########################################################################
//
// FILE:    Marquee.c
//
// TITLE:   用DSP芯片上的4个GPIO口做个走马灯实验
//
//
//    根据在RAM中调试的需要,这个项目配置成"boot to SARAM".2833x引导模式
//    表如下显示. 常用的还有"boot to Flash"模式,当程序在RAM调试完善后就
//    可以将代码烧进Flash中并使用"boot to Flash"引导模式.
//
//       $Boot_Table:
//
//         GPIO87   GPIO86     GPIO85   GPIO84
//          XA15     XA14       XA13     XA12
//           PU       PU         PU       PU
//        ==========================================
//            1        1          1        1    Jump to Flash
//            1        1          1        0    SCI-A boot
//            1        1          0        1    SPI-A boot
//            1        1          0        0    I2C-A boot
//            1        0          1        1    eCAN-A boot
//            1        0          1        0    McBSP-A boot
//            1        0          0        1    Jump to XINTF x16
//            1        0          0        0    Jump to XINTF x32
//            0        1          1        1    Jump to OTP
//            0        1          1        0    Parallel GPIO I/O boot
//            0        1          0        1    Parallel XINTF boot
//            0        1          0        0    Jump to SARAM	    <- "boot to SARAM"
//            0        0          1        1    Branch to check boot mode
//            0        0          1        0    Boot to flash, bypass ADC cal
//            0        0          0        1    Boot to SARAM, bypass ADC cal
//            0        0          0        0    Boot to SCI-A, bypass ADC cal
//                                              Boot_Table_End$
//
// 功能描述:
//
// 程序编译下载成功后,运行这个程序
// 板子上的4个LED红色发光二极管回按照你设计的逻辑进行“亮” “灭”
//
//###########################################################################
// 释放日期: 2024.2.16
//###########################################################################
#include "DSP2833x_Device.h"                        // DSP2833x 头文件
#include "DSP2833x_Examples.h"                      // DSP2833x 例子相关头文件

//28335有88个GPIO,分为A、B、C三组,一组是32个GPIO,A组0~31,B组32~63,C组是64~87。对每一位进行操作。
#define   LED1  GpioDataRegs.GPADAT.bit.GPIO0       //宏定义GPA组的GPIO0为LED1
#define   LED2  GpioDataRegs.GPADAT.bit.GPIO1       //宏定义GPA组的GPIO1为LED2
#define   LED3  GpioDataRegs.GPADAT.bit.GPIO2       //宏定义GPA组的GPIO2为LED3
#define   LED4  GpioDataRegs.GPADAT.bit.GPIO3       //宏定义GPA组的GPIO3为LED4
#define   LED5  GpioDataRegs.GPADAT.bit.GPIO4       //宏定义GPA组的GPIO4为LED5
//###########################################################################
// 使用前,声明本文件中的相关函数;
void configtestled(void);
//###########################################################################
void configtestled(void)  //GPIO初始化函数
{
   EALLOW;
   GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;              // GPIO0复用为GPIO功能
   GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;               // GPIO0设置为输出
   GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0;              // GPIO1复用为GPIO功能
   GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;               // GPIO1设置为输出
   GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0;              // GPIO2复用为GPIO功能
   GpioCtrlRegs.GPADIR.bit.GPIO2 = 1;               // GPIO2设置为输出
   GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0;              // GPIO3复用为GPIO功能
   GpioCtrlRegs.GPADIR.bit.GPIO3 = 1;               // GPIO3设置为输出
   GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 0;              // GPIO4复用为GPIO功能
   GpioCtrlRegs.GPADIR.bit.GPIO4 = 1;               // GPIO4设置为输出
   EDIS;
}
//###########################################################################
void main(void)                                     // 程序在这里开始与运行
{
// 步骤 1. 初始化系统控制:
// 设置PLL, WatchDog, 使能外设时钟
// 下面这个函数可以从DSP2833x_SysCtrl.c文件中找到..
   InitSysCtrl();

// 步骤 2. 初始化通用输入输出多路复用器GPIO:
// 这个函数在DSP2833x_Gpio.c源文件中被定义了
// 这个函数使GPIO控制类寄存器初始化到默认状态
// InitGpio();  // 本例不用此子函数

// 本例使用下面的GPIO配置
   configtestled();
// 总线初始化函数
   InitXintf16Gpio();

// 步骤 3. 清除所有中断初始化中断向量表:
// 禁止CPU全局中断
   DINT;

// 初始化PIE控制寄存器到他们的默认状态.
// 这个默认状态就是禁止PIE中断及清除所有PIE中断标志
// 这个函数放在DSP2833x_PieCtrl.c源文件里
   InitPieCtrl();

// 禁止CPU中断和清除所有CPU中断标志
   IER = 0x0000;
   IFR = 0x0000;

//初始化PIE中断向量表,并使其指向中断服务子程序(ISR)
// 这些中断服务子程序被放在了DSP280x_DefaultIsr.c源文件中
// 这个函数放在了DSP2833x_PieVect.c源文件里面.
   InitPieVectTable();

// 步骤 4. 初始化片内外设:
// 这个函数可以在DSP280x_CpuTimers.c源文件中找到
//   InitCpuTimers();   // 这个例子仅初始化了Cpu定时器

// 步骤 5. 用户特定的代码

// LED灯初始化
   LED1=0;                                          //LED1初始化 灭
   DELAY_US(10);                                    //延时
   LED2=0;                                          //LED2初始化 灭
   DELAY_US(10);                                    //延时
   LED3=0;                                          //LED3初始化 灭
   DELAY_US(10);                                    //延时
   LED4=0;                                          //LED4初始化 灭
   DELAY_US(10);                                    //延时
   LED5=0;                                          //LED5初始化 灭
   DELAY_US(10);                                    //延时
//在while循环内,每个LED的状态不停的再取反循环,这样就好有一个流水灯的现象出现。
   while(1)
   {
       LED1=~LED1;                                  //LED灯状态取反 亮 灭 交替
       DELAY_US(100000);                            //延时
       LED2=~LED2;                                  //LED灯状态取反 亮 灭 交替
       DELAY_US(100000);                            //延时
       LED3=~LED3;                                  //LED灯状态取反 亮 灭 交替
       DELAY_US(100000);                            //延时
       LED4=~LED4;                                  //LED灯状态取反 亮 灭 交替
       DELAY_US(100000);                            //延时
       LED5=~LED5;                                  //LED灯状态取反 亮 灭 交替
       DELAY_US(100000);                            //延时
    }

}


//===========================================================================
// No more.
//===========================================================================

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
第二章程序说明: (1)2-1.asm对应第二章主程序代码; (2)2-2.asm对应第二章主程序中断向量代码; (3)2-3.cmd对应第二章主程序配置文件代码; (4)2-4.asm对应第二章写Flash程序代码; (5)2-5.cmd对应第二章写Flash配置文件代码; (6)2-6.asm对应第二章写Flash中断向量代码; (7)2-7.cmd对应第二章写Flash工具代码; (8)2-8.asm对应第二章DSP读USB接口代码; (9)6711.h为以上程序需要的头文件,书中没有原代码。 第三章程序说明: (1)3-1.asm对应第三章AD测试程序代码; (2)3-2.asm对应第三章AD测试程序中断向量代码; (3)3-3.cmd对应第三章AD测试程序配置文件代码; (4)3-4.asm对应第三章DA测试程序代码; (5)3-5.cmd对应第三章DA测试程序配置文件代码; (6)3-6.asm对应第三章写Flash程序代码; (7)3-7.cmd对应第三章写Flash配置文件代码; (8)3-8.asm对应第三章写FLAS中断向量代码; (9)3-9.asm对应第三章AD/DA联合调试程序代码; (10)3-10.asm对应第三章数据滤波程序代码; (11)vectors.asm为以上程序需要的文件,书中没有原代码。 第五章程序说明: (1)5-1.asm对应第五章语音信号的采集和播放主程序; (2)5-2.asm对应第五章语音信号的采集和播放中断向量程序; (3)5-3.cmd对应第五章语音信号的采集和播放配置文件; (4)5-4.asm对应第五章语音信号的u/A律压缩程序; (5)5-5.m对应第五章语音去噪的仿真程序; (6)5-6.asm对应第五章语音去噪的主程序; (7)5-7.c对应第五章CVSD编码的C语言程序代码; (8)5-8.asm对应第五章CVSD的解码程序; (9)5-9.asm对应第五章CVSD的编码程序。 第六章程序说明: (1)6-1.asm对应第六章DSP软件代码; (2)6-2.c对应第六章主机软件代码; (3)6-3.c对应第六章回音相消主程序代码; (4)6-4.c对应第六章回音相消汇编程序代码; (5)echo.h对应第六章回音相消头文件代码; (6)echocfg.h对应第六章回音相消头文件代码; (7)6-5.cmd对应第六章回音相消配置文件。 第七章程序说明: (1)7-1.c对应第七章图像控制器程序代码; (2)7-2.c对应第七章LCD控制程序代码; (3)7-3.c对应第七章AC97驱动程序代码; (4)7-4.c对应第七章背景灯初始化驱动程序代码。 第九章程序说明: (1)9-1.c对应第九章Viterbi译码c程序; (2)9-2.asm对应第九章Viterbi译码汇编程序。 第十章程序说明: (1)10-1.m对应第十章仿真程序; (2)tnonunif.m对应第十章仿真程序的函数; (3)10-2.m对应第十章系统DSP主程序; (4)10-3.m对应第十章非均匀采样傅立叶变换子程序; (5)10-4.m对应第十章USB通信子程序; (6)10-5.m对应第十章中断向量程序; (7)10-6.cmd对应第十章配置文件; (8)10-7.cmd对应第十章CPLD程序;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值