⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2407源程序.txt

📁 2407定时器中断程序,含初始化程序
💻 TXT
字号:
 
DSP源程序(TMS320LF2407A) 

//******************************
// 定时器1中断测试程序
// 问题:在中断服务程序里设置断点,全速运行后不能进入断点?????
// 晶振:16M,程序是装载到外部RAM运行,USB仿真器测试

请高手指点一下:为什么不能进入定时器1中断里面设定的断点???
##############################################################################
##############################################################################
1.主程序如下:
#include  "lf2407regs.h"  

unsigned int TimeCount,LedBuf;

void initial(void);
void Timer1Init(void);

//******************************************
// 定时器1 中断服务程序
void interrupt T1INT()               
{
    asm(" setc    INTM ");       // 关

    if(*PVIR != 0x27)            // 0x27,timer 1mfad周期中断
    {      
        asm(" CLRC INTM ");        // 开所有未屏蔽中断,为1时禁止中断
        return;
    }
    
    T1CNT=0; 
    TimeCount++;

    if(TimeCount == 500)
    {
        TimeCount = 0;
        LedBuf = *PBDATDIR;
        LedBuf = ~LedBuf | 0xFF00;
        
        *PBDATDIR = LedBuf;

    } 
    

    
    *EVAIFRA = 0x80; 
    asm(" CLRC    INTM ");       // 开

}  
//*************************************************
// 主程序
main()
{
    int led;                         // 定义一个局部变量    
    int i,k;                         // 定义其它一些临时变量
    
    i = 0;
    i = 0;
    LedBuf = 65535;
    LedBuf = ~LedBuf;
    initial();                         // 系统初始化
    Timer1Init();
    
    while(1)
    {
        for(led=0x0080,i=0; i<8; led=led>>1,i++)    
        {
            *PBDATDIR = *PBDATDIR & 0x0FF00;     // 首先屏蔽IOPB的各位
            *PBDATDIR = *PBDATDIR | led;        // 把需要显示的值赋给IOPB端口
            *PFDATDIR = *PFDATDIR | 0x0404;        // IOPF2 设置为输出方式,且IOPF2=1
            *PFDATDIR = *PFDATDIR & 0x0FFFB;    // IOPF2=0,这两句语句给一个脉冲,
    
             // 使LED上显示IOPB端口的值
            for(k=0;k<0x0ffff;k++)
                k = k;                           // 为了保证显示时间,给一定时间的延时

            //*PBDATDIR = *PBDATDIR & 0x0FF00;    // 熄灭全部的LED灯
        } 
    }
}

// 直接返回中断服务程序
void interrupt nothing( ) 
{
     return;
}



//****************************************************
// 初始化子程序
void initial(void)
{
      asm(" setc    SXM");                // 抑制符号位扩展
    asm(" clrc    OVM");                // 累加器中结果正常溢出
    asm(" clrc    CNF");                // B0被配置为数据存储空间
    asm(" setc    INTM");                // 禁止所有中断
    
    *SCSR1=0x83FE;                // CLKIN=16M,CLKOUT=2*CLKIN=32M
    *WDCR=0x0E8;                // 不使能看门狗,因为SCSR2中的WDOVERRIDE
                                 // 即WD保护位复位后的缺省值为1,故可以用
                                  // 软件禁止看门狗                              
    *IMR=0x0002;                // 禁止所有中断
    *IFR=0x0FFFF;                // 清除全部中断标志,"写1清0"
    WSGR = 0x00;                // 禁止所有等待状态
    
    *MCRA=*MCRA & 0x0000;    // IOPB端口配置为一般的I/O功能,LF240x的端口
                            // 均为8位,MCRA为16位因此控制了IOPA,和IOPB的设置
                        
    *PBDATDIR=*PBDATDIR|0x0FF00;    // IOPB端口设置为输出方式
    
    *MCRC=*MCRC & 0X0FBFF;            // 把IOPF2端口配置为一般I/O端口
    *PBDATDIR=*PBDATDIR & 0x0FF00;    // 熄灭全部的LED灯
    //*PBDATDIR=*PBDATDIR | 0x0FFFF;    // 开全部的LED灯    
    
    *PFDATDIR=*PFDATDIR | 0x0404;        // IOPF2 设置为输出方式,且IOPF2=1
    *PFDATDIR=*PFDATDIR & 0x0FFFB;        // IOPF2=0
    
    // 以上的操作产生一个脉冲,使LED全部熄灭    
}

//**********************************************
// 定时器1初始化
void Timer1Init(void)           
{ 
    *EVAIMRA = *EVAIMRA | 0x0080;            //定时器1周期中断使能 
    *EVAIFRA = *EVAIFRA & 0x0080;            //清除中断标志 
    *T1CON = 0x160c;
    *T1PER = 0x0177;
    *T1CNT = 0x00;  
    
    *T1CON = *T1CON | 0x0040;  
    asm(" clrc    INTM");
    
    //*GPTCONA = 0x0000;    
    //*T1PER = 2000;                //定时器1初值,定时0.5us*2000=1ms             
    //*T1CNT = 0;
    //*T1CON = 0x144E;             //增模式, TPS系数32M/16=2M,T1使能
    //*IMR   = 0x0002;            
} 

##############################################################################
##############################################################################
2.cmd文件如下
-stack 160

MEMORY
{
       PAGE 0: VECS: origin = 0x8000,  length 0x040
       PAGE 0: PROG: origin = 0x8860,  length 0x759E    /* 代码区:30,111 word */ 

       PAGE 1: B2  : origin = 0x060,   length 0x020
       PAGE 1: B0  : origin = 0x200,   length 0x100
       PAGE 1: B1  : origin = 0x300,   length 0x100
       PAGE 1: DATA: origin = 0x0800,  length 0x07FF    /* 内部2K RAM */
}

SECTIONS
{
       .vectors  : {}  >VECS PAGE 0         /* 中断向量表 */
       .text     : {}  >PROG PAGE 0         /* 可执行代码和字符串 */
       .cinit    : {}  >PROG PAGE 0            /* 已经初始化的全局变量和静态变量*/        
       .switch   : {}  >PROG PAGE 0         /* 包含.switch语句建立的表格 */

       .data     : {}  >DATA PAGE 1         /* 初始化变量和常数表 */
       .bss      : {}  >DATA PAGE 1            /* 保留全局变量和静态变量空间 */
       .const    : {}  >DATA PAGE 1            /* 字符串和switch表 */    
       .stack     : {}  >DATA PAGE 1         /* 为系统堆栈分配存储器 */
       .system   : {}  >DATA PAGE 1            /* 为动态存储器函数分配存储器空间 */ 

}  

##############################################################################
##############################################################################
3. vectors.asm

; 所需的复位和中断向量定义文件"vectors.asm"
    .title         "vectors.asm"
    .ref         _c_int0,_nothing,_T1INT;
    .sect         ".vectors"
    
RSVECT          B      _c_int0
INT1        B      _nothing    
INT2        B       _T1INT
INT3         B      _nothing
INT4        B      _nothing
INT5        B        _nothing
INT6         B      _nothing

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -