|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 cjsb37 于 2013-4-29 09:13 编辑
初学DSP,写了个定时器中断的程序,请大家指正
/****************************************
Project:IntLED
Function:IntLED.pjt
Description:light the LED(PF6) each 08s
Author:haiqing
Date:2006.11.14
*****************************************/
#include "LF2407A.h"
#define time 200
int timers = time;
void KickDog ()
{
WDKEY = 0x5555;
WDKEY = 0xAAAA;
}
void system_init ()
{
asm (" SETC INTM "); //关总中断
asm (" CLRC OVM "); //正常溢出
asm (" CLRC CNF "); //B0-->数据空间
asm (" CLRC SXM "); //无符号扩展
SCSR1 = 0x83FF; //2xfin,开所有外设
SCSR2 = 0xFF8E;
asm (" CLRC INTM "); //开总中断
}
void IO_init ()
{
MCRC = 0x0000; //PE,PF定义为IO口
PFDATDIR = 0xFFFF; //PA输出高电平
PFDATDIR = PFDATDIR & 0xFF80;//PA输出低电平
}
void interrupt_init ()
{
IFR = 0xFFFF; //清除中断标志
IMR = 0xFFC2; //使能INT2
}
void EV_init ()
{
EVAIMRA = 0xF8F0; //T1周期中断使能
EVAIFRA = 0xFFFF; //复位EVA中断标志
T1CON = 0x364C; //连续增计数,X/64,使能定时器
GPTCONA = 0xF830; //增计数,无事件启动ADC
T1CNT = 0x0000;
T1PR = 0x0752; //4ms
}
void WD_init ()
{
KickDog ();
WDCR = 0xEF; //禁止WD
}
void server ()
{
if((PFDATDIR & 0x0040) == 0x0040)
PFDATDIR = PFDATDIR & 0xFFBF;
else
PFDATDIR = PFDATDIR | 0x0040;
}
void c_int2 ()
{
int flag;
flag= EVAIFRA & 0x0080;
EVAIFRA = 0xFFFF;
if(flag != 0x0080)
{
asm (" CLRC INTM ");
return;
}
T1CNT = 0x0000;
timers--;
if(timers != 0)
{
asm (" CLRC INTM ");
return;
}
server ();
asm (" CLRC INTM ");
timers = time;
}
void nothing ()
{
asm (" CLRC INTM ");
return;
}
/*****************************************
************* main function ************
******************************************
Function:main.c
Descritption:main
Author:haiqing
Date:2006.11.15
*****************************************/
void main (void)
{
system_init ();
IO_init ();
interrupt_init ();
EV_init ();
WD_init ();
while(1);
}
[ 本帖最后由 haiqing05 于 2006-11-15 13:00 编辑 ]
|
|