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

📄 led.c

📁 2407 开发板自带的示例代码
💻 C
字号:
#include "2407c.h"                    

#define T1MS		0x9c3f      /* 9c3fH=40000-1 */

void interrupt gptime1(void);	/* 中断服务程序,定时器计数T1MS次时中断调用 */
void gp_init(void);      		/* 定时器初始化 */

unsigned int uWork,nCount; 
int * pf;

main()
{
	int i; 
	nCount=0;
	pf=0000;  
	for(i=0;i<0xfff0;i++)
	{
		*pf=i;
	} 

	asm(" setc INTM");  /* 关中断,进行关键设置时不允许发生中断,以免干扰 */

	*WDCR=0x6f;
	*WDKEY=0x5555;
	*WDKEY=0xaaaa;		/* 关闭看门狗中断 */

	*SCSR1=0x81fe;    	/* 设置DSP运行频率40m */
	(*MCRB)=0;
	
	uWork=(*MCRC);      /*  将PWM12/IOPE6设置成通用I/O口,以控制实验箱上指示灯 */
	uWork&=0x0ffbf;		
	(*MCRC)=uWork;
	
	gp_init();   		/* 设置定时器 */
	
	*IMR=0x2;			/* 使能定时器中断(INT2) */
	*IFR=0xffff;        /* 清除中断标志 */
	
	asm(" clrc INTM");  /* 开中断 */  
	

}               


//	中断服务程序:响应INT2中断

void interrupt gptime1(void)		/* 中断服务程序定义,须使用interrupt声 */
{
   uWork=(*PIVR);		/* 读外设中断向量寄存器*/
   switch(uWork)
   {  
   		case 0x27:		/* T1PINT,0x27为定时器1的周期中断的向量值 */
   		{
			(*EVAIFRA)=0x80;	/* 清除中断标志T1PINT */
			nCount++;
			if ( nCount>=500 )	/* 计数500此=500ms=0.5秒*/
			{
				uWork=(*PEDATDIR);	/* 设置指示灯状态翻转一次 */
				uWork|=0x4000;
				uWork^=0x0040;
				(*PEDATDIR)=uWork;
				nCount=0;
			}
   		   	break;
   		}
   }
}                       

void gp_init(void)
{
   *EVAIMRA = 0x80;		/* 使能T1PINT即通用定时器1周期中断 */
   *EVAIFRA = 0xffff;	/* 清除中断标志 */
   *GPTCONA = 0x0000;	
   *T1PR    = T1MS; 	/* 周期寄存器=40000 */
   *T1CNT   = 0;		/* 计数初值=0 */
   *T1CON   = 0x1040;	/* 启动计数器 */
}

⌨️ 快捷键说明

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