-
Notifications
You must be signed in to change notification settings - Fork 1
/
timer1.c
98 lines (81 loc) · 4.46 KB
/
timer1.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/************************************************************************************************************************
* [FILE NAME] : <timer1.c> *
* [AUTHOR] : <Eslam EL-Naggar> *
* [DATE CREATED]: <JAN 1, 2020> *
* [Description} : <Source file for timer1 driver> *
************************************************************************************************************************/
/*------------------------------------------------------INCLUDES--------------------------------------------------------*/
#include "timer1.h"
#define NULL_PTR ((void*)0)
/*----------------------------------------------------Global Variables--------------------------------------------------*/
static volatile void (*g_callBackPtr)(void) = NULL_PTR;
/*-------------------------------------------------FUNCTIONS DEFINITIONS------------------------------------------------*/
ISR(TIMER1_OVF_vect) {
if (g_callBackPtr != NULL_PTR) {
(*g_callBackPtr)();
}
}
ISR(TIMER1_COMPA_vect) {
if (g_callBackPtr != NULL_PTR) {
(*g_callBackPtr)();
}
}
ISR(TIMER1_COMPB_vect) {
if (g_callBackPtr != NULL_PTR) {
(*g_callBackPtr)();
}
}
/*----------------------------------------------------------------------------------------------------
[Function Name]: Timer1_init
[Description] : This function is responsible for initializing the timer
[Returns] : This function returns void
----------------------------------------------------------------------------------------------------*/
void Timer1_init(const Timer1_configType *Timer1_configType_Ptr) {
TCCR1A = (1 << FOC1A) | (1 << FOC1B);
TCCR1A = (TCCR1A & 0b11111100)
| ((Timer1_configType_Ptr->mode & 0b00000011) << (WGM10));
TCCR1B = (TCCR1B & 0b11100111)
| (((Timer1_configType_Ptr->mode & 0b00001100) >> 2) << (WGM12));
TCCR1B = (TCCR1B & 0b11111000)
| ((Timer1_configType_Ptr->clock & 0b00000111) << (CS10));
ICR1 = Timer1_configType_Ptr->valueICR1;
}
/*----------------------------------------------------------------------------------------------------
[Function Name]: Timer1_normalMode
[Description] : This function is responsible for setting normal mode
[Returns] : This function returns void
----------------------------------------------------------------------------------------------------*/
void Timer1_normalMode(uint16 initialValueTimer) {
SREG = (1 << 7);
TCNT1 = initialValueTimer;
}
/*----------------------------------------------------------------------------------------------------
[Function Name]: Timer1_compareMode_OCR1A
[Description] : This function is responsible for setting compare A mode
[Returns] : This function returns void
----------------------------------------------------------------------------------------------------*/
void Timer1_compareMode_OCR1A(const Timer1_compare_1A *Timer1_OCR1A_compare_Ptr) {
SREG = (1 << 7);
TCCR1A = (TCCR1A & 0b00111111) | ((Timer1_OCR1A_compare_Ptr->compareMode_OC1A & 0b00000011)<< (COM1A0));
TCNT1 = Timer1_OCR1A_compare_Ptr->initialValueTimer;
OCR1A = Timer1_OCR1A_compare_Ptr->valueOCR1A;
}
/*----------------------------------------------------------------------------------------------------
[Function Name]: Timer1_compareMode_OCR1B
[Description] : This function is responsible for setting compare B mode
[Returns] : This function returns void
----------------------------------------------------------------------------------------------------*/
void Timer1_compareMode_OCR1B(const Timer1_compare_1B *Timer1_OCR1B_compare_Ptr) {
SREG = (1 << 7);
TCCR1A = (TCCR1A & 0b11001111) | ((Timer1_OCR1B_compare_Ptr->compareMode_OC1B & 0b00000011)<< (COM1B0));
TCNT1 = Timer1_OCR1B_compare_Ptr->initialValueTimer;
OCR1B = Timer1_OCR1B_compare_Ptr->valueOCR1B;
}
/*----------------------------------------------------------------------------------------------------
[Function Name]: Timer1_setCallBack
[Description] : This function is responsible for setting call Back Function
[Returns] : This function returns void
----------------------------------------------------------------------------------------------------*/
void Timer1_setCallBack(void (*setCallBack_Ptr)(void)) {
g_callBackPtr = setCallBack_Ptr;
}