You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

106 lines
2.5 KiB

#include "system_func.h"
static volatile uint8_t usTickCountDiv;
static volatile uint32_t msTickCount;
static void SystemTimerInitialization(void);
static void SystemTimer_Interrput_Handler(void);
static uint32_t SystemTimer_GetPeriodCount(uint32_t prescalar, uint32_t frequency);
void SystemCoreClockSet(SYSTEM_CORE_CLOCK_LIST clock)
{
switch(clock)
{
case HIRC_96MHZ:
usTickCountDiv = 48;
LP_SetOperatingVoltage(LP_OVR_1_1);
break;
case HIRC_48MHZ:
usTickCountDiv = 24;
LP_SetOperatingVoltage(LP_OVR_1_0);
break;
case HIRC_24MHZ:
usTickCountDiv = 12;
LP_SetOperatingVoltage(LP_OVR_0_9);
break;
default:
usTickCountDiv = 48;
LP_SetOperatingVoltage(LP_OVR_1_1);
break;;
}
SystemTimerInitialization();
}
uint32_t SystemTimer_Get_TickCount(void)
{
return msTickCount;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
static void SystemTimerInitialization(void)
{
// Declare variables
tmr_cfg_t tmr;
int tmr_id = MXC_TMR_GET_IDX(SYSTEM_TIMER_INSTANCE);
uint32_t periodTicks = SystemTimer_GetPeriodCount(1, 1000);
/*
Steps for configuring a timer for PWM mode:
1. Disable the timer
2. Set the prescale value
3 Configure the timer for continuous mode
4. Set polarity, timer parameters
5. Enable Timer
*/
TMR_Disable(SYSTEM_TIMER_INSTANCE);
TMR_Init(SYSTEM_TIMER_INSTANCE, TMR_PRES_1, 0);
tmr.mode = TMR_MODE_CONTINUOUS;
tmr.cmp_cnt = (periodTicks - 1);
tmr.pol = 0;
TMR_Config(SYSTEM_TIMER_INSTANCE, &tmr);
if(tmr_id == 0){
NVIC_SetVector(TMR0_IRQn, SystemTimer_Interrput_Handler);
NVIC_EnableIRQ(TMR0_IRQn);
}
else if(tmr_id == 1)
{
NVIC_SetVector(TMR1_IRQn, SystemTimer_Interrput_Handler);
NVIC_EnableIRQ(TMR1_IRQn);
}
else if(tmr_id == 2)
{
NVIC_SetVector(TMR2_IRQn, SystemTimer_Interrput_Handler);
NVIC_EnableIRQ(TMR2_IRQn);
}
msTickCount = 0;
TMR_Enable(SYSTEM_TIMER_INSTANCE);
}
static void SystemTimer_Interrput_Handler(void)
{
TMR_IntClear(SYSTEM_TIMER_INSTANCE);
msTickCount++;
}
static uint32_t SystemTimer_GetPeriodCount(uint32_t prescalar, uint32_t frequency)
{
uint32_t retVal, clkFreq;
clkFreq = PeripheralClock;
retVal = clkFreq / (prescalar * frequency);
return retVal;
}