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