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

📄 timer.c

📁 dsp常见的扩展外设的框架程序和测试程序
💻 C
字号:
/**********************************************************************
	filename:	timer.c
	designer:	戴展波
	date:		2004/10/18
***********************************************************************/
#include <stdio.h>
#include <csl.h>
#include <csl_timer.h>
#include <csl_irq.h>
#include <csl_emifb.h>

static TIMER_Handle hTimer0;
static TIMER_Handle hTimer1;
static TIMER_Handle hTimer2;
static Uint32 TimerEventId0;
static Uint32 TimerEventId1;
static Uint32 TimerEventId2;
static int cnt = 0;
Uint32 count;
Uint32 adder = 0;
Uint32 adder1 = 0;
Uint32 adder2 = 0;
Uint32 adder3 = 0;

Uint32 led_flag = 0;

volatile unsigned char* LED = (volatile unsigned char *) 0x60000010;

//Timer control register (CTL)
static Uint32 TimerControl = 
			
	TIMER_CTL_RMK
	(
		TIMER_CTL_SPND_EMUSTOP,
  		TIMER_CTL_INVINP_NO, 		// TINP inverter control(INVINP)
  		TIMER_CTL_CLKSRC_CPUOVR8,	// Timer input clock source (CLKSRC)
		TIMER_CTL_CP_PULSE, 		// Clock/pulse mode(CP)
		TIMER_CTL_HLD_YES, 			// Hold(HLD)
		TIMER_CTL_GO_NO, 			// Go bit(GO)-
									//   resets & starts timer counter
		TIMER_CTL_PWID_ONE, 		// Pulse width(PWID)-
									//   used only in pulse mode
		TIMER_CTL_DATOUT_0, 		// Data output (DATOUT)
		TIMER_CTL_INVOUT_NO, 		// TOUT inverter control (INVOUT) 
		TIMER_CTL_FUNC_GPIO 		// Function of TOUT pin(FUNC)
	); 
	
static EMIFB_Config MyEmifbConfig = 
{
	EMIFB_GBLCTL_RMK
	(
		EMIFB_GBLCTL_EK2RATE_FULLCLK,	//1 X EMIF input clock
		EMIFB_GBLCTL_EK2HZ_CLK,		//eclkout2 continue output during hold
		EMIFB_GBLCTL_EK2EN_ENABLE,	//eclkout2 enable output
		EMIFB_GBLCTL_BRMODE_MRSTATUS,	//bus request is memory access or refresh pending/in progress
		EMIFB_GBLCTL_NOHOLD_ENABLE,
		EMIFB_GBLCTL_EK1HZ_CLK,		//eclkout1 continue output during hold
		EMIFB_GBLCTL_EK1EN_ENABLE	//eclkout1 enable output
	),
	0x1120c301,
	0x22a28a22,
	0x22a28a22,
	0x22a28a22,
	EMIFB_SDCTL_DEFAULT,
	EMIFB_SDTIM_DEFAULT,
	EMIFB_SDEXT_DEFAULT,
	0x00000002,
	0x00000002,
	0x00000002,
	0x00000002
};

void main(void);
void TimerEventHandler(void);
extern far void vectors();

void main(void)
{
	TIMER_Config myTimConfig;
	
	//Initialise CSL
	CSL_init(); 
	//配置EMIFB
	EMIFB_config(&MyEmifbConfig);
	
	//Open TIMER1 device, and reset it to power-on default state
	hTimer0 = TIMER_open(TIMER_DEV0, TIMER_OPEN_RESET);
  	hTimer1 = TIMER_open(TIMER_DEV1, TIMER_OPEN_RESET);
  	hTimer2 = TIMER_open(TIMER_DEV2, TIMER_OPEN_RESET);
//  	hTimer2 = TIMER_open(TIMER_DEV2, TIMER_OPEN_RESET);
	//Obtain the event ID for the timer device
	TimerEventId0 = TIMER_getEventId(hTimer0);
	TimerEventId1 = TIMER_getEventId(hTimer1);
	TimerEventId2 = TIMER_getEventId(hTimer2);
  
	//Point to the IRQ vector table  
	IRQ_setVecs(vectors);
	
	//Enable NMI interrupt
	IRQ_nmiEnable();
  
	//Map TIMER events to physical interrupt number
	IRQ_map(TimerEventId1, 14);
	IRQ_map(TimerEventId0,13);
	IRQ_map(TimerEventId2,15);
    
	//Reset the timer events
	IRQ_reset(TimerEventId1);
	IRQ_reset(TimerEventId0);
	IRQ_reset(TimerEventId2);
    
	//---------Configure the timer devices---------
	
	//Start count value at zero
	myTimConfig.cnt = 0x0;
	
	//Use predefined control value  */
	myTimConfig.ctl = TimerControl;
	
	//Set period
	myTimConfig.prd = 125000000;
	
	TIMER_config(hTimer1, &myTimConfig);
	TIMER_config(hTimer0, &myTimConfig);
	TIMER_config(hTimer2, &myTimConfig);
	//Enable the timer events(events are disabled while resetting)
	IRQ_enable(TimerEventId0);
	IRQ_enable(TimerEventId1);
	IRQ_enable(TimerEventId2);
  
	//Start the timers
	TIMER_start(hTimer0);
	TIMER_start(hTimer1);
	TIMER_start(hTimer2);
	
	//Globally enable interrupts
	IRQ_globalEnable();

	//Waiting for interrupt
	for(;;)
	{
		//count = TIMER_getCount(hTimer1);
		adder++;
	}
}


void TimerEventHandler(void)
{
	//Process timer event here
	cnt++;  
  	count = TIMER_getCount(hTimer0);
	//Exit from the program when certain count is reached
/*	if (cnt > TIMER_CNT)
	{   
		TIMER_pause(hTimer1);
		TIMER_close(hTimer1);
		printf("\nTEST PASSED\n");
//		exit(0);
	}
	printf("\n Count : %3d ",cnt);*/
}

interrupt void c_int13(void)    
{
//	TimerEventHandler();
	if(led_flag == 0)
	{
		*LED = 0x01;
		led_flag = 1;
	}
	else
	{
		*LED = 0x02;
		led_flag = 0;
	}
	adder1++;
	return;
}

interrupt void c_int14(void)
{
	adder2++;
	return;
}

interrupt void c_int15(void)
{
	adder3++;
	return;
}

⌨️ 快捷键说明

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