main.c

来自「F2812实现电机控制源程序.rar」· C语言 代码 · 共 93 行

C
93
字号
/*********************************************************************
**	Module Name:		Cputimer0				    				**
**	Author:				Cbq  			    						**
**	Version:			1.0			    							**
**	CreateDate:			2008-05-15		    						**
**	Description:		            			    				**
**	Remark:				Huozq		    							**
**	Revision History:	2008-11-10			    					**
**********************************************************************/

/*********************************************************************
**	实验目的:学习DSP内部定时器0的使用                               **
**	实验说明:本实验是通过使用DSP内部的定时器0来实现对LED灯的控制    **
**	         大家在刚开始学习时最好先把我们所提供的课本上的第一,二, **
**	         六章有个了解,然后在来学习.第一二章分别介绍了DSP的基本  **
**	         组成,第六章讲了DSP的C语言编程风格                      **
**	实验结果:可看到板上8个发光二极管奇数号LED与偶数号LED交替闪烁    **
**********************************************************************/


#include "DSP28_Device.h"

//8个LED灯的地址,由CPLD得知
unsigned int * Led8  = (unsigned int *) 0x4100;

unsigned int LedCount;
Uint16	LedCode[]={0x55,0xAA};

//定时器0中断函数,这里我们是另外写了,大家也可以把他直接放在#include "DSP28_Device.h"中.
interrupt void ISRTimer0(void);
	 	
void main(void)
{

	/*初始化系统*/
	InitSysCtrl();

	/*关中断*/
	DINT;
	IER = 0x0000;
	IFR = 0x0000;					//清中断
	LedCount = 0;

	/*初始化PIE*/
	InitPieCtrl();

	/*初始化PIE中断矢量表*/
	InitPieVectTable();	
	
	/*初始化定时器0*/
	InitCpuTimers();
	
	/*初始化外设*/
    InitPeripherals();
    
    /*受EALLOW保护的定时器0中断矢量*/
	EALLOW;							//允许访问EALLOW保护的寄存器
	PieVectTable.TINT0 = &ISRTimer0;//指向中断服务寄存器定时器0的地址
	EDIS;   						//重新EALLOW保护
    
	/*设置CPU,配置定时器0多长时间中断一次,这里的配置可参见课本P61*/
	ConfigCpuTimer(&CpuTimer0, 10, 1000000); 
	
	CpuTimer0Regs.TCR.bit.TSS = 0;  ///开启CPU定时器0	
 	//StartCpuTimer0();

    /*开中断,查看中断向量表可知CPU定时器0位于INT1.7,见课本P82*/
	IER |= M_INT1;
	PieCtrl.PIEIER1.bit.INTx7=1;
	

	EINT;   // 开放全局中断,Enable Global interrupt INTM
	ERTM;	// 开放全局实时中断,Enable Global realtime interrupt DBGM

	for(;;);

} 	

interrupt void ISRTimer0(void)
{
	//响应中断寄存器清除,写1清0,进而才能接收下一外围中断
	PieCtrl.PIEACK.bit.ACK7=1;
	
	//向CPLD控制的LED灯地址写数据,进而实现对灯的控制
	*Led8 = LedCode[LedCount];	LedCount++;
	if (LedCount>=2)	LedCount=0;
}


//===========================================================================
// No more.
//===========================================================================

⌨️ 快捷键说明

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