dsp实验报告

———西南科技大学城市学院-----

           课程设计报告

题目 :       基于DSP2407的数字电压表

系别        机电工程系

专业 :       电信

班级 :       1101

指导教师 :   

   实验人员 :  

      第一章 系统设计

第一节 课题目标及整体方案

1.1.1课程目标

以DSP2407为核心,设计一个数字电压表。采用中断方式,对2路0~5V的模拟电进行循环采集,采集的数据送LED显示,并存入内存。超过界限时指示灯闪烁。

1.1.2 整体方案

通过对DSP2407的I/O的运用,实现4个LED显示0~5V的电压。具体实现原理如下表1—1。

表 1—1

第二节 硬件平台简介

1.2.1 硬件结构

引脚说明

JTAG接口:本板卡和DSP仿真器连接接口,通过本接口用户可进行在线仿真

步进电机接口:接上步进电机可进行步进电机控制实验

AD输入接口:2路带运放隔壁的AD输入接口

DA输出接口:4路DA输出接口

CAN接口:CAN总线接口插座

RS232接口:标准的DB9插座

2407全功能引出接口,方便用户扩张使用

1.2.2 具体硬件结构图

图 1—1

1.2.3 I/O模块介绍

1、下表为I/O空间分配

表1—2

2、I/O空间介绍2.2.2 I/O控制模块介绍

   数字输入/输出模块是集成在TMS320LF2407A片内的外设之一,它主要对芯片的通用、双向的数字I/O(GPIO)引脚进行控制。这些I/O引脚大多数是基本功能和一般I/O复用的引脚,数字I/O模块采用了一种灵活的方法,以控制专用I/O和复用I/O引脚的功能,所有I/O和复用引脚的功能可通过9个16位控制寄存器来设置,这些寄存器可分为两类:

·I/O口复用控制寄存器(MCRx):用于控制选择I/O口作为基本功能方式或一般I/O引脚功能;

·数据和方向控制寄存器(PxDATDIR):当I/O口用作一般I/O引脚功能时,用数据和方向控制寄存器可控制数据和到双向I/O引脚的数据方向,这些寄存器直接和双向I/O引脚相连。

具体控制寄存器的访问地址、定义请参见有关资料。

3、 I/O管脚及使用方法

ICETEK-LF2407-A板使用了一些I/O管脚对DSP进行控制。例如:跳线JP6连接DSP上MP/MC管脚,在DSP复位时,DSP可读回这一管脚的设置,当管脚接高电平时,DSP采用微处理器(MP)方式工作,否则设置成微控制器(MC)方式。

ICETEK-LF2407-A板在扩展插头上将未使用的I/O引脚接出,提供给用户连接使用。其定义见ICETEK-LF2407-A板说明。这些管脚支持0-3.3V逻辑电平操作,用户在进行相应设置后可以在I/O管脚上进行输入或输出操作,使用时须注意根据引脚本身的负载能力驱动相关设备。

4、 ICETEK-LF2407-EDU实验箱及控制模块使用的I/O管脚

ICETEK-LF2407-EDU实验箱将引脚ADCIN00-ADCIN03连接到了实验箱底板上“A/D输入”的四个插座上。

ICETEK-LF2407-EDU实验箱控制模块使用如下引脚:

     PWM12/IOPE6--指示灯

     PWM11/IOPE5和TDIRB/IOPF4—步进电机

     CANTX/IOPC6—蜂鸣器

第三节 软件系统设计

1.3.1 软件流程图

dsp实验报告

1.3.2试验程序

1、 实验主程序如下:

#include "global.c"

void SystemInit();

void Timer1Init();

void KickDog(); 

void KeyLed();

void dianya_disply(int m);

unsigned int numled=0;

Void delay(int i);

main()

   int t;

   SystemInit();              //系统初始化

   MCRC=MCRC & 0xFF00;     //IOPE0-7设为IO口模式

   PEDATDIR=0xFF00;           //所有LED=0,   

   asm(" CLRC INTM ");

   Timer1Init();              //定时器初始化

   t=3;

   if(0 <= t &&  t<=5)  

     {  dianya_disply(t);  }

   else

   {

     while(1)

     {

         KeyLed();

     }

   }

 }

2、程序分析

主程序主要是通过对各程序的调用驱动硬件实现数字电压表的功能。比如对系统初始化、定时器初始化等。

其余被调用程序在附录中,在此不作详解。

第二章 心得体会

1、通过我对ARM芯片运用实现了数字电压的显示;

2、让我对DSP的了解更深,更透彻;

3、让我对语言的运用更加熟练;

4、让我对这门学科有更深切的热爱。

附录1

系统初始化

void SystemInit()

      asm(" SETC INTM ");     /* 关闭总中断 */

      asm(" CLRC  SXM  ");   /* 禁止符号位扩展 */

      asm(" CLRC  CNF  ");    /* B0块映射为 on-chip DARAM*/

      asm(" CLRC  OVM  ");    /* 累加器结果正常溢出*/

      SCSR1=0x02FC;              /* 系统时钟CLKOUT=20*2=40M */

      WDCR=0x006F;             /* 禁止看门狗,看门狗时钟64分频 */

      KickDog();                   /* 初始化看门狗 */ 

    IFR=0xFFFF;                       /* 清除中断标志 */

    IMR=0x0002;                      /* 打开中断2*/     

   

附录2

定时器初始化

void Timer1Init()          

{

    EVAIMRA=0x0080;               //  定时器1周期中断使能

    EVAIFRA=0xFFFF;                //  清除中断标志

    GPTCONA=0x0000;

      T1PR=2500;                   //  定时器1初值,定时0.4us*2500=1ms            

      T1CNT=0;

      T1CON=0x144E;           //增模式, TPS系数40M/16=2.5M,T1使能

                       

附录3

LED灯亮灭

void KeyLed()

{  

     

           PEDATDIR=PEDATDIR & 0xFF00;    //IOPE1,2,3,4=0;LED全灭 

            Delay(1000);

        PEDATDIR=PEDATDIR | 0x0FF;    //IOPE3=1;LED4亮

}

附录4

中断

void interrupt     c_int2()               /*定时器1中断服务程序*/

{

    if(PIVR!=0x27)

            {  asm(" CLRC INTM ");

                  return;

            }

      T1CNT=0;

      numled++;

   

      EVAIFRA=0x80;

      asm(" CLRC INTM ");  

     

附录5

看门狗

void KickDog()                     /*踢除看门狗 */

{

      WDKEY=0x5555;

      WDKEY=0xAAAA;

}

附录6

数字电压

Void dianya_disply(int m)

{

  switch(m)

  {

     case 0 :PEDATDIR=PEDATDIR & 0xFF00;    //IOPE1,2,3,4=0;LED全灭 

               PEDATDIR=PEDATDIR | 0x0002;    //IOPE=1;LED1亮

               break;

       case 1 :PEDATDIR=PEDATDIR & 0xFF00;    //IOPE1,2,3,4=0;LED全灭 

                 PEDATDIR=PEDATDIR | 0x4;       //IOPE2=1;LED2亮  

                 break;

       case 2 :PEDATDIR=PEDATDIR & 0xFF00;    //IOPE1,2,3,4=0;LED全灭 

                 PEDATDIR=PEDATDIR | 0x8;       //IOPE3=1;LED3亮

               break;

       case 3 :PEDATDIR=PEDATDIR & 0xFF00;    //IOPE1,2,3,4=0;LED全灭 

                 PEDATDIR=PEDATDIR | 0x10;    //IOPE3=1;LED4亮

               break;

        case 4 :PEDATDIR=PEDATDIR & 0xFF00;    //IOPE1,2,3,4=0;LED全灭 

                 PEDATDIR=PEDATDIR | 0xc;    //IOPE3=1;LED4亮

               break;

       case 5 :PEDATDIR=PEDATDIR & 0xFF00;    //IOPE1,2,3,4=0;LED全灭 

                 PEDATDIR=PEDATDIR | 0x12;    //IOPE3=1;LED4亮                

             break;

       }

}

附录7

延时

Void delay(int i)

{

   int m,n=0; 

   for(m=0;m

   for(n=0;n

}

相关推荐