#include <xc.h>
#include "tmr0.h"
#include "io.h"
#include "Global.h"
/**
Section: Global Variables Definitions
*/
TIMER_DATA timer;
SYSTEM_DATA system;
volatile uint8_t timer0ReloadVal;
void (*TMR0_InterruptHandler)(void);
/**
Section: TMR0 APIs
*/
void TMR0_Initialize(void)
{
// Set TMR0 to the options selected in the User Interface
// PSA assigned; PS 1:16; TMRSE Increment_hi_lo; mask the nWPUEN and INTEDG bits
OPTION_REG = (uint8_t)((OPTION_REG & 0xC0) | (0xD3 & 0x3F));
// TMR0 6;
TMR0 = 0x06;
// Load the TMR value to reload variable
timer0ReloadVal= 6;
// Clear Interrupt flag before enabling the interrupt
INTCONbits.TMR0IF = 0;
// Enabling TMR0 interrupt
INTCONbits.TMR0IE = 1;
// Set Default Interrupt Handler
TMR0_SetInterruptHandler(TMR0_DefaultInterruptHandler);
}
uint8_t TMR0_ReadTimer(void)
{
uint8_t readVal;
readVal = TMR0;
return readVal;
}
void TMR0_WriteTimer(uint8_t timerVal)
{
// Write to the Timer0 register
TMR0 = timerVal;
}
void TMR0_Reload(void)
{
// Write to the Timer0 register
TMR0 = timer0ReloadVal;
}
void TMR0_ISR(void)
{
static volatile uint16_t CountCallBack = 0;
// Clear the TMR0 interrupt flag
INTCONbits.TMR0IF = 0;
TMR0 = timer0ReloadVal;
// callback function - called every 1000th pass
if (++CountCallBack >= TMR0_INTERRUPT_TICKER_FACTOR)
{
// ticker function call
TMR0_CallBack();
// reset ticker counter
CountCallBack = 0;
}
// add your TMR0 interrupt custom code
if(timer.msTMR1) timer.msTMR1--;
if(timer.adcTMR) timer.adcTMR--;
if(timer.swdbncTMR) timer.swdbncTMR--;
}
void TMR0_CallBack(void)
{
// Add your custom callback code here
//if(system.startFunc) PWM_TOGGLE();
if(timer.secTMR1) timer.secTMR1--;
if(timer.secTMR2) timer.secTMR2--;
if(system.startFunc){
if(timer.airswTMR) timer.airswTMR--;
if(timer.currentTMR) timer.currentTMR--;
if(system.fan1Fault) LED_FAN1_TOGGLE();
if(system.fan2Fault) LED_FAN2_TOGGLE();
}
//if(system.hrTMR){if(timer.minTMR != (system.hrTMR*60)) timer.minTMR++;}
if(timer.secTMR3 != 59) timer.secTMR3++; else {
timer.secTMR3 = 0;
if(system.hrTMR){if(timer.minTMR != (system.hrTMR*60)) timer.minTMR++;}
}
if(TMR0_InterruptHandler)
{
TMR0_InterruptHandler();
}
}
void TMR0_SetInterruptHandler(void (* InterruptHandler)(void)){
TMR0_InterruptHandler = InterruptHandler;
}
void TMR0_DefaultInterruptHandler(void){
}