TMS320F2812 DSP实现数码管控制实验样例

 要求:

基于TI公司的TMS320F2812 DSP芯片,依次点亮8个数码管,要求每个数码管显示的内容为用户规定的8位数,循环往复。

原理:

数码管采用共阴极型。数据由2812模块的低八位输入,锁存器的控制信号由2812模块输出,但经由CPLD模块(复杂可编程逻辑器件)译码后再控制对应的八个锁存器,如下图所示:

6592c5e4c26041e3a7c31019f80a16f0.png

步骤:

1.新建CCS工程:

申明:鄙人使用的CCS版本为10.0.0(各版本间差异不是很大,可以参考本文)。

第一步打开CCS后弹出下面窗口:

94b3285536c4409288664a631650ad25.png

这是CCS的默认工作空间,可以自己更改(这个路径需要记住,后续有用),(如不想在每次打开软件时弹出可勾选左下角选项),设置好后Launch进入。

第二步新建工程文件:

在主界面左上角选中project里的New CCS project选项,

8015c662983341479d945ac384acc66e.png

在弹出的窗口中选择TMS320F2812芯片,Connection是连接器选项,根据自己需求选择,命名Project name时尽量不要用中文(使用CCS时都不要用中文,注释除外,防止报错),而后选择新建一个Empty Project(空白工程),也可以选择with main.c(含有main.c文件)的工程,Finish完成。

15dcfda1382046349c5f9bb6b39daf46.png

 2.配置工程文件:

1812107468574412909a68a21a8cb4b1.png

 新建工程后所有文件如上图,此时关于TMS320F2812的配置文件是没有的,需要用户自己编程或导入,这里我选择导入文件。所需文件链接:https://pan.baidu.com/s/1myaEmWbziLS869FqkwcTDg?pwd=CCS1 提取码:CCS1

36e74e8e9c0a4a888a8e31354ce6636f.png

百度网盘下载后,其中source文件夹全是2812常用的.c文件,include文件夹全是2812常用的.h文件(一般.h文件不用修改),这里我们只需要修改source文件夹的LED.c文件里的内容(也就是main.c)。将图中三个文件下载到自己的设备后复制三个文件(这三个文件可以留在设备里以后都能用上),进入创建的CCS工作空间的工程文件。b99d93386018484c9815ddd4916bbed0.png将 复制的三个文件粘贴到工程文件中,CCS会自动识别到软件中,这里选择删除2812-RAM-lnk.cmd文件。

3.编译目标文件:

 b90c58d98fa4488a9d4eb8f4d5086caa.png

 在CCS中双击LED.c打开编译面板(如果你导入的是我分享的文件,代码和我就是一样的)。

1.定义 该项目要用到的.h文件:

#include "DSP28_Device.h"

这一行包含特定于设备的头文件,其中包含TMS320F2812微控制器所需的定义和声明。 

 2.定义CPLD模块和八个LED:

#define  CPLDport2000 (volatile unsigned int *) 0x2000//CPLD的地址

#define  LED1 (volatile unsigned int *) 0x3000 //LED1的地址

#define  LED2 (volatile unsigned int *) 0x3001 //LED2的地址

#define  LED3 (volatile unsigned int *) 0x3002 //LED3的地址

#define  LED4 (volatile unsigned int *) 0x3003 //LED4的地址

#define  LED5 (volatile unsigned int *) 0x3004 //LED5的地址

#define  LED6 (volatile unsigned int *) 0x3005 //LED6的地址

#define  LED7 (volatile unsigned int *) 0x3006 //LED7的地址

#define  LED8 (volatile unsigned int *) 0x3007 //LED8的地址

一系列#define语句定义CPLD的存储器地址(地址为0x2000)和八个LED(LED1至LED8)(地址为0x3000至0x3007)。每个地址都被定义为一个指向易失性无符号整数的指针,这表明内存位置可以在程序控制之外改变,并且不应该被编译器优化。 

3.对工程进行初始化(在main函数中进行):

InitSysCtrl();//初始化系统函数
   
   DINT;         //禁止和清除所有CPU中断
   InitPieCtrl();//初始化PIE
   IER = 0x0000;//禁止CPU中断
   IFR = 0x0000;//禁止CPU中断
   InitPieVectTable();//初始化中断向量表

   *CPLDport2000=0x0;//将CPLD的端口2000清零
   *LED1=0x0;//以下是8个数码管清零
   *LED2=0x0;
   *LED3=0x0;
   *LED4=0x0;
   *LED5=0x0;
   *LED6=0x0;
   *LED7=0x0;
   *LED8=0x0;

4.编译循环函数(在main函数中进行):

for(;;)
{
    //实现显示并循环“19100233”
    *LED1=0x14;//第一个数码管给数据1
    delay(800000);
    *LED2=0xf6;//第二个数码管给数据2
    delay(800000);
    *LED3=0x14;//第三个数码管给数据3
    delay(800000);
    *LED4=0x77;//第四个数码管给数据4
    delay(800000);
    *LED5=0x77;//第五个数码管给数据5
    delay(800000);
    *LED6=0xb3;//第六个数码管给数据6
    delay(800000);
    *LED7=0xb6;//第七个数码管给数据7
    delay(800000);
    *LED8=0xb6;//第八个数码管给数据8
    delay(800000);//设置延迟时间
    *LED1=0x0;
    *LED2=0x0;
    *LED3=0x0;
    *LED4=0x0;
    *LED5=0x0;
    *LED6=0x0;
    *LED7=0x0;
    *LED8=0x0;
    delay(800000);
}

 5.定义延迟函数:

//延时函数:通过增加i的值来消耗时间,从而达到延迟的效果
void delay(Uint32 k)
{
 Uint32 i;
 for(i=0;i<k;i++) ;
}

 纠错:

编译好工程文件后,右键单击工程文件,在弹出的窗口中点击Build Project运行文件。

f46c81fe641547318b1993b372b507b7.png

 然后就会悲催的发现报错了:

一..h文件报错:

Description	Resource	Path	Location	Type
#1965 cannot open source file "DSP28_Device.h"	DSP28_Adc.c	/test.01/source	line 20	C/C++ Problem

这个问题是我们建立工程时没有申明.h的位置,.c文件不知道那里是头了。

解决方法: 

依次进入右键单击工程文件>>Properties>>Build>>C2000 Compiler>>Include Options>>右上角加号>>Workspace>>工程文件>>选择include,而后OK就行。

9474d9626f004c51a7bb7e370dde06e9.png

 二..stack报错:

warning #10210-D: creating ".stack" section with default size of 0x400; use the -stack option to change the default size

意思是说,工程中的.stack段使用的是默认的大小0x400,可以使用-stack选项来改变这个默认大小。

解决方法:

 依次进入右键单击工程文件>>Properties>>Build>>C2000 Linker>Basic Options>>设置为0x300(或更小),而后OK就行。

75c8cd54330b4919bb3665cb754ce8e8.png

再次运行问题解决。 

 

 

  • 17
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值