📄 timerwithcallback.c
字号:
/*********************************************************************************
Copyright(c) 2004 Analog Devices, Inc. All Rights Reserved.
This software is proprietary and confidential. By using this software you agree
to the terms of the associated Analog Devices License Agreement.
***********************************************************************************
Please refer to the 'readme.txt' file for a description of the Interrupt Manager Examples.
*********************************************************************
Include files
*********************************************************************/
#include <services/services.h>
#include "ezkitutilities.h"
/*********************************************************************
Enumerations and defines
*********************************************************************/
/*********************************************************************
Data Structures
*********************************************************************/
/*********************************************************************
Static data
*********************************************************************/
// storage for interrupt manager data
static u8 IntMgrData[(ADI_INT_SECONDARY_MEMORY * 2)];
/*********************************************************************
Static functions
*********************************************************************/
/*********************************************************************
Callback function
*********************************************************************/
static void Callback(void *AppHandle,u32 Event,void *pArg)
{
switch ( (u32)pArg ) {
case ADI_TMR_GP_TIMER_0:
ezToggleLED(EZ_FIRST_LED);
break;
case ADI_TMR_GP_TIMER_1:
ezToggleLED(EZ_FIRST_LED+1);
break;
default:
ezToggleLED(EZ_FIRST_LED+2);
break;
}
// return
}
/****************************************************************************
Function: Init_Timers
Set up timers for PWM mode and enale them.
******************************************************************************/
void InitTimers(void)
{
//Setting up command table for Timer 0
ADI_TMR_GP_CMD_VALUE_PAIR Timer0ConfigurationTable [] = {
{ ADI_TMR_GP_CMD_SET_TIMER_MODE, (void *)0x01 },
{ ADI_TMR_GP_CMD_SET_COUNT_METHOD, (void *)TRUE },
{ ADI_TMR_GP_CMD_SET_INTERRUPT_ENABLE, (void *)TRUE },
{ ADI_TMR_GP_CMD_SET_OUTPUT_PAD_DISABLE, (void *)TRUE },
{ ADI_TMR_GP_CMD_SET_PERIOD, (void *)0x08000000 },
{ ADI_TMR_GP_CMD_SET_WIDTH, (void *)0x00400000 },
{ ADI_TMR_GP_CMD_END, NULL },
};
//Setting up command table for Timer 1
ADI_TMR_GP_CMD_VALUE_PAIR Timer1ConfigurationTable [] = {
{ ADI_TMR_GP_CMD_SET_TIMER_MODE, (void *)0x01 },
{ ADI_TMR_GP_CMD_SET_COUNT_METHOD, (void *)TRUE },
{ ADI_TMR_GP_CMD_SET_INTERRUPT_ENABLE, (void *)TRUE },
{ ADI_TMR_GP_CMD_SET_OUTPUT_PAD_DISABLE, (void *)TRUE },
{ ADI_TMR_GP_CMD_SET_PERIOD, (void *)0x04000000 },
{ ADI_TMR_GP_CMD_SET_WIDTH, (void *)0x00400000 },
{ ADI_TMR_GP_CMD_END, NULL },
};
//Setting up command table for Timer 2
ADI_TMR_GP_CMD_VALUE_PAIR Timer2ConfigurationTable [] = {
{ ADI_TMR_GP_CMD_SET_TIMER_MODE, (void *)0x01 },
{ ADI_TMR_GP_CMD_SET_COUNT_METHOD, (void *)TRUE },
{ ADI_TMR_GP_CMD_SET_INTERRUPT_ENABLE, (void *)TRUE },
{ ADI_TMR_GP_CMD_SET_OUTPUT_PAD_DISABLE, (void *)TRUE },
{ ADI_TMR_GP_CMD_SET_PERIOD, (void *)0x02000000 },
{ ADI_TMR_GP_CMD_SET_WIDTH, (void *)0x00400000 },
{ ADI_TMR_GP_CMD_END, NULL },
};
//Open Timer 0 for access
adi_tmr_Open(ADI_TMR_GP_TIMER_0);
//Program timer 0 with Timer 0 table
adi_tmr_GPControl(ADI_TMR_GP_TIMER_0, ADI_TMR_GP_CMD_TABLE, Timer0ConfigurationTable);
//Open Timer 1 for access
adi_tmr_Open(ADI_TMR_GP_TIMER_1);
//Program timer 1 with Timer 1 table
adi_tmr_GPControl(ADI_TMR_GP_TIMER_1, ADI_TMR_GP_CMD_TABLE, Timer1ConfigurationTable);
//Open Timer 2 for access
adi_tmr_Open(ADI_TMR_GP_TIMER_2);
//Program timer 2 with Timer 2 table
adi_tmr_GPControl(ADI_TMR_GP_TIMER_2, ADI_TMR_GP_CMD_TABLE, Timer2ConfigurationTable);
//enable callbacks for timer 0
adi_tmr_InstallCallback(ADI_TMR_GP_TIMER_0,TRUE,(void *)ADI_TMR_GP_CMD_START,NULL,Callback);
//enable callbacks for timer 1
adi_tmr_InstallCallback(ADI_TMR_GP_TIMER_1,TRUE,(void *)ADI_TMR_GP_CMD_START,NULL,Callback);
//enable callbacks for timer 2
adi_tmr_InstallCallback(ADI_TMR_GP_TIMER_2,TRUE,(void *)ADI_TMR_GP_CMD_START,NULL,Callback);
//enable timer 0, timer 1 and timer 2
adi_tmr_GPGroupEnable(ADI_TMR_GP_TIMER_0 | ADI_TMR_GP_TIMER_1 | ADI_TMR_GP_TIMER_2,TRUE);
}
/*********************************************************************
*
* Function: main
*
*********************************************************************/
void main(void) {
u32 ResponseCount;
u32 i; //loop variable
// initialize the EZ-Kit
ezInit(1);
// initialize interrupt manager
ezErrorCheck(adi_int_Init(IntMgrData, sizeof(IntMgrData), &ResponseCount, NULL));
//Initialize the flag service, memory is not passed because callbacks are not being used
ezErrorCheck(adi_flag_Init(NULL, 0, &ResponseCount, NULL));
for (i = EZ_FIRST_LED; i < EZ_NUM_LEDS; i++){
ezInitLED(i);
}
// initialize the Timer manager
ezErrorCheck(adi_tmr_Init(NULL));
//Run forever
//Initialize all of the timers
InitTimers();
while (1) {
}
// return
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -