当前位置:文档之家› DSP实验二 拨码开关实验

DSP实验二 拨码开关实验

void InitPieVectTable(void)
{
int16i;
Uint32 *Source = (void *) &PieVectTableInit;
在这里取PieVectableInit的地址,
Uint32 *Dest = (void *) &PieVectTable;
在这里取PieVectTable的地址,他们都应该是全局变量。
for(;;)
{
asm(" nop ");
temp = *(int *)0x2200&0x00ff; //读入0x2200地址的开关量值并赋给temp
asm(" nop ");
* (int *)0x2200 = temp; //temp值输出0x2200地址的LED灯
asm(" nop ");
}
}
其中InitPieVectTable()在文件DSP281x_PieVect.c中。
/****************************主程序*******************************/
void main(void)
{
unsigned int temp;
temp = 0;
InitSysCtrl();//初始化PLL,WatchDog,使能外围时钟,该初始化文件在"DSP281x_SysCtrl.c"中
9.任意拨动E300底板上的拨动开关,观察LED和拨动开关的对应情况。
(LED1-LED7分别对应DSP数据总线的D0-D7)
10.单击“Debug \ Halt”暂停持续运行,开关将对灯失去控制.
11.关闭所有窗口,本实验完毕.
实验任务二:
通过修改以上程序实现:当拔开关时,下一个灯亮。即:1号开关动作时,2号灯亮,2号开关动作时,3号灯亮,*****,等。在第8号开关动作时,第1号灯亮。
IFR = 0x0000;
InitPieVectTable();
for(;;)
{
asm(" nop ");
temp = *(int *)0x2200&0x00ff;
asm(" nop ");
* (int *)0x2200 = temp;
asm(" nop ");
}
}
四、实验步骤(步骤基本与实验一相同)
路径为“c:\DSP_examep\DSP281X_examples\e300_02_switch\Example_281x_switch.pjt”双击该文件
5、输入主要程序。
6、编译程序并装载。
7.单击“Debug-Go Main”跳到主程序的开始;
8.单击“Debug\RUN”运行程序。
需要判断是高电平亮,还是低电平亮,可以使用中断调试。在运行状态,在需要设置断点的位置的右边,双击,就可以产生红点。表明设置了断点。
3、实验中相关语句说明:
/*******************************头文件****************************/
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_Examples.h" // DSP281x Examples Include File
EALLOW;
est++ = *Source++;
EDIS;
// Enable the PIE Vector Table
PieCtrlRegs.PIECRTL.bit.ENPIE = 1;
变量pieVectTableInit在文件DSP281x_PieVect.c中。PieVectTable在DSP281x_PieVect.h中定义,在最后2行。他们的具体地址可以由md文件来确定。
{temp=(temp<<1)&0x00ff;
asm(" nop ");
* (int *)0x2200 = temp;
}
else * (int *)0x2200 =0x01;
asm(" nop ");
}
}
实验任务三:
通过修改以上程序实现:当拔开关时,上一个灯亮。即:1号开关动作时,8号灯亮,2号开关动作时,1号灯亮,*****,等。在第8号开关动作时,第7号灯亮。
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_Examples.h" // DSP281x Examples Include File
void main(void)
{
unsigned int temp;
temp = 0;
DINT;
InitSysCtrl();
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
for(;;)
{
asm(" nop ");
temp = *(int *)0x2200&0x00ff;
if(temp!=0x80)
本实验使用DSP数据总线的低8位。
实验任务一:
1、编写程序完成将拨码开关的信息读入DSP,然后再将该信息回写,控制led灯。调整"数字输入输出单元"的开关K1~K8,观察LED1~LED8灯亮灭的变化。
2、本实验的程序流程框图如下:
3、输入主要程序
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_Examples.h" // DSP281x Examples Include File
void main(void)
{
unsigned int temp;
temp = 0;
DINT;
InitSysCtrl();
InitPieCtrl();
IER = 0x0000;
1.2812CPU板的JUMP1的1和2脚短接,拨码开关SW1的第二位置ON。
2.E300板上的开关SW4的第二位置ON,其余OFF;SW5开关全部置ON;其余开关全部置OFF。
3.运行Code Composer Studio (CCS)(CCS3.3需要“DEBUG→Connect”)
4.用“Project\open”打开系统项目文件
2、读入的地址和输出的地址用的同一个地址。为什么呢?
关键问题是:其拨码开关是通过74LS244和总线相连,灯是通过74LS273相连总线。读时将273设为无效,244有效,拨码开关的数据上总线。写时,244无效,273有效,将数据发送出,同时锁存。需要3根控制线。按时序操作。对于本试验箱来讲,DSP将控制信号发给CPLD,在对一个特定地址进行读写时(0x2200),CPLD内部通过编程,实现对读写信号的不同操作。在DSP读0x2200时,CPLD将244有效。当DSP写0x2200时,CPLD将244无效,同时273有效,同时开关锁存一次,同时保持锁存。
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_Examples.h" // DSP281x Examples Include File
void main(void)
{
unsigned int temp;
(器件74LS244和74LS273详细的介绍请参看数据手册)
数字量输入输出单元的资源分配如下:
基地址:2000h(当CS1为0时分配有效)
数字量分配空间为数据空间地址:基地址+0x2200(低8位,只读)
拨码开关扩展工作原理
说明:74LS244片选号、74LS273片选信号和74LS273复位信号由E300上CPLD译码产生。
—、实验目的
1.了解DSP开发系统的组成和结构
2.了解IO的基本编程方法
二、实验设备
计算机,CCS3.3版本软件,DSP仿真器,E300实验箱,2812CPU板。
三、实验原理
8位的数字量输入(由拨码开关产生),当拨码打到靠近LED时为低。相反为高。通过74LS244(可读)缓冲连接到DSP的数据总线的低8位。CPU通过读指令读取到拨码开关产生的8位输出的数字量,然后CPU通过写指令把读出的8位数字量写入(0x2200)单元内,使连接到DSP的数据总线的低8位的74LS273的输出端产生高低信号,此时LED灯产生亮灭。当对应LED灯点亮时说明输出为低,熄灭时为高。
temp = 0;
DINT;
InitSysCtrl();
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
for(;;)
{
asm(" nop ");
temp = *(int *)0x2200&0x00ff;
if(temp!=0x01)
IER = 0x0000;//关闭中断和清除所有中断标志
IFR = 0x0000;
// Initialize the PIE vector table with pointers to the shell Interrupt
相关主题