📄 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 + -