|
Embedded C Firmware Library : Arduino / Atmega328p
1
Register Level Embedded C Hardware Abstraction Library for AVR ATmega48A/PA/88A/PA/168A/PA/328/P or Arduino UNO/NANO/MINI
|
Go to the documentation of this file.
45 #include <avr/interrupt.h>
49 #pragma message ( "avr_timer0.h included" )
55 #define TIMER0_OC0A_NO_OUTPUT (0<<COM0A1) | (0<<COM0A0)
56 #define TIMER0_OC0A_TOGGLE_ON_MATCH (1<<COM0A0)
57 #define TIMER0_OC0A_CLEAR_ON_MATCH (1<<COM0A1)
58 #define TIMER0_OC0A_SET_ON_MATCH (1<<COM0A1) | (1<<COM0A0)
59 #define TIMER0_OC0A_NON_INVERTING (1<<COM0A1)
60 #define TIMER0_OC0A_INVERTING (1<<COM0A1) | (1<<COM0A0)
61 #define TIMER0_OC0A_MASK (1<<COM0A1) | (1<<COM0A0)
68 #define TIMER0_OC0B_NO_OUTPUT (0<<COM0B1) | (0<<COM0B0)
69 #define TIMER0_OC0B_TOGGLE_ON_MATCH (1<<COM0B0)
70 #define TIMER0_OC0B_CLEAR_ON_MATCH (1<<COM0B1)
71 #define TIMER0_OC0B_SET_ON_MATCH (1<<COM0B1) | (1<<COM0B0)
72 #define TIMER0_OC0B_NON_INVERTING (1<<COM0B1)
73 #define TIMER0_OC0B_INVERTING (1<<COM0B1) | (1<<COM0B0)
74 #define TIMER0_OC0B_MASK (1<<COM0B1) | (1<<COM0B0)
81 #define TIMER0_MODE_NORMAL (0<<WGM01) | (0<<WGM00)
82 #define TIMER0_MODE_PHASE_CORRECT_PWM (1<<WGM00)
83 #define TIMER0_MODE_CTC (1<<WGM01)
84 #define TIMER0_MODE_FAST_PWM (1<<WGM01) | (1<<WGM00)
85 #define TIMER0_MODE_MASK (1<<WGM01) | (1<<WGM00)
92 #define TIMER0_PWM_TOP_0xFF (0<<WGM02)
93 #define TIMER0_PWM_TOP_OCRA (1<<WGM02)
94 #define TIMER0_PWM_TOP_MASK (1<<WGM02)
101 #define TIMER0_PRESCALER_0 (0<<CS02) | (0<<CS01) | (0<<CS00)
102 #define TIMER0_PRESCALER_1 (1<<CS00)
103 #define TIMER0_PRESCALER_8 (1<<CS01)
104 #define TIMER0_PRESCALER_64 (1<<CS01) | (1<<CS00)
105 #define TIMER0_PRESCALER_256 (1<<CS02)
106 #define TIMER0_PRESCALER_1024 (1<<CS02) | (1<<CS00)
107 #define TIMER0_PRESCALER_MASK (1<<CS02) | (1<<CS01) | (1<<CS00)
114 #define TIMER0_COMPARE_MATCH_A_INTERRUPT (1<<OCIE0A)
115 #define TIMER0_COMPARE_MATCH_B_INTERRUPT (1<<OCIE0B)
116 #define TIMER0_OVERFLOW_INTERRUPT (1<<TOIE0)
123 static volatile uint32_t TIMER0_SystemTickCount = 0;
124 static volatile uint32_t TIMER0_SystemTickFrequency = 0;
125 static volatile uint8_t TIMER0_SystemTickTimePeriodUs = 0;
126 static volatile uint8_t TIMER0_SystemTickPerMs = 0;
133 typedef struct TIMER0_ConfigData
137 uint8_t OutputCompareModePinA;
138 uint8_t OutputCompareModePinB;
139 uint8_t OutputCompareRegisterA;
140 uint8_t OutputCompareRegisterB;
141 uint8_t TimerCounterRegister;
142 uint8_t SystemTickState;
308 TCCR0A = Data.OutputCompareModePinA | Data.OutputCompareModePinB | Data.TimerMode;
310 TCNT0 = Data.TimerCounterRegister;
311 OCR0A = Data.OutputCompareRegisterA;
312 OCR0B = Data.OutputCompareRegisterB;
314 uint32_t TIMER0_InputClockFrequency = 0;
319 TIMER0_InputClockFrequency =
F_CPU / 1;
323 TIMER0_InputClockFrequency =
F_CPU / 8;
327 TIMER0_InputClockFrequency =
F_CPU / (2 ^ Data.Prescaler);
331 if (Data.SystemTickState == ENABLE)
335 TIMER0_SystemTickFrequency = 2 * TIMER0_InputClockFrequency / 512;
336 TIMER0_SystemTickTimePeriodUs = (uint8_t)(
F_1Mhz / TIMER0_SystemTickFrequency);
337 TIMER0_SystemTickPerMs = (uint8_t)(TIMER0_SystemTickFrequency /
F_1kHz);
342 TIMER0_SystemTickFrequency =
F_100kHz;
343 OCR0A = (uint8_t)(TIMER0_InputClockFrequency / TIMER0_SystemTickFrequency) - 1;
344 TIMER0_SystemTickTimePeriodUs = (uint8_t)(
F_1Mhz / TIMER0_SystemTickFrequency);
345 TIMER0_SystemTickPerMs = (uint8_t)(TIMER0_SystemTickFrequency /
F_1kHz);
350 TIMER0_SystemTickFrequency = TIMER0_InputClockFrequency / 256;
351 TIMER0_SystemTickTimePeriodUs = (uint8_t)(
F_1Mhz / TIMER0_SystemTickFrequency);
352 TIMER0_SystemTickPerMs = (uint8_t)(TIMER0_SystemTickFrequency /
F_1kHz);
357 TIMER0_SystemTickFrequency = TIMER0_InputClockFrequency / 510;
358 TIMER0_SystemTickTimePeriodUs = (uint8_t)(
F_1Mhz / TIMER0_SystemTickFrequency);
359 TIMER0_SystemTickPerMs = (uint8_t)(TIMER0_SystemTickFrequency /
F_1kHz);
424 return TIMER0_SystemTickCount;
434 return (uint64_t)(TIMER0_SystemTickCount * TIMER0_SystemTickTimePeriodUs);
444 return (uint32_t)((TIMER0_SystemTickCount *
F_1kHz) / TIMER0_SystemTickFrequency);
455 return (uint32_t)(Tick * TIMER0_SystemTickTimePeriodUs);
466 return (uint16_t)(Time / TIMER0_SystemTickTimePeriodUs);
478 uint32_t LocalTick = TIMER0_SystemTickCount + Tick;
487 while(TIMER0_SystemTickCount != LocalTick);
500 uint32_t Count = Time / TIMER0_SystemTickTimePeriodUs;
501 uint32_t LocalTime = TIMER0_SystemTickCount + Count;
510 while(TIMER0_SystemTickCount != LocalTime);
522 uint32_t Count = (uint32_t)Time * (uint32_t)TIMER0_SystemTickPerMs;
523 uint32_t LocalTime = TIMER0_SystemTickCount + Count;
532 while(TIMER0_SystemTickCount != LocalTime);
542 TIMER0_SystemTickCount++;
552 TIMER0_SystemTickCount++;
#define F_1kHz
Definition: avr_macros.h:46
#define TIMER0_OC0A_NO_OUTPUT
Definition: avr_timer0.h:55
void TIMER0_SetOCR0B(uint8_t Value)
Public Function to set OCR0B value.
Definition: avr_timer0.h:412
#define TIMER0_OVERFLOW_INTERRUPT
Definition: avr_timer0.h:116
void TIMER0_DisableCompareMatchBInterrupt()
Public Function to Disable Timer-0 Compare Match B Interrupt.
Definition: avr_timer0.h:275
void TIMER0_SetOCR0A(uint8_t Value)
Public Function to Set OCR0A value.
Definition: avr_timer0.h:401
uint16_t TIMER0_UsToTick(uint16_t Time)
Public Function to convert Time in Microsecond to Tick Count.
Definition: avr_timer0.h:464
uint32_t TIMER0_GetSystemTick()
Public Function to Read current System Tick Count.
Definition: avr_timer0.h:422
Library for Utility Functions.
void TIMER0_Init(TIMER0_ConfigData Data)
Public Function to Configure and Initialize Timer-0.
Definition: avr_timer0.h:306
#define TIMER0_PRESCALER_1
Definition: avr_timer0.h:102
#define TIMER0_MODE_FAST_PWM
Definition: avr_timer0.h:84
void TIMER0_DelayMs(uint16_t Time)
Public Function to Generate Blocking Delay in Millisecond.
Definition: avr_timer0.h:519
uint32_t TIMER0_GetSystemTimeMs()
Public Function to Read current System Time in Millisecond.
Definition: avr_timer0.h:442
void TIMER0_EnableCompareMatchAInterrupt()
Public Function to Enable Timer-0 Compare Match A Interrupt.
Definition: avr_timer0.h:245
void TIMER0_EnableOverflowInterrupt()
Public Function to Enable Timer-0 Overflow Interrupt.
Definition: avr_timer0.h:225
#define TIMER0_COMPARE_MATCH_B_INTERRUPT
Definition: avr_timer0.h:115
#define TIMER0_MODE_PHASE_CORRECT_PWM
Definition: avr_timer0.h:82
Library for all common Macro Definition.
void TIMER0_DisableCompareMatchAInterrupt()
Public Function to Disable Timer-0 Compare Match A Interrupt.
Definition: avr_timer0.h:255
uint32_t TIMER0_TickToUs(uint32_t Tick)
Public Function to Convert Tick Count to Time in Microsecond.
Definition: avr_timer0.h:453
#define F_CPU
Definition: avr_macros.h:39
uint64_t TIMER0_GetSystemTimeUs()
Public Function to Read current System Time in Microsecond.
Definition: avr_timer0.h:432
#define TIMER0_COMPARE_MATCH_A_INTERRUPT
Definition: avr_timer0.h:114
void TIMER0_DeInit()
Public Function to De-Initialize Timer-0.
Definition: avr_timer0.h:385
void TIMER0_DisableAllInterrupt()
Public Function to Disable Timer-0 All Interrupt.
Definition: avr_timer0.h:295
Definition: avr_timer0.h:134
void TIMER0_EnableCompareMatchBInterrupt()
Public Function to Enable Timer-0 Compare Match B Interrupt.
Definition: avr_timer0.h:265
#define TIMER0_MODE_CTC
Definition: avr_timer0.h:83
void TIMER0_DisableOverflowInterrupt()
Public Function to Disable Timer-0 Overflow Interrupt.
Definition: avr_timer0.h:235
void TIMER0_EnableAllInterrupt()
Public Function to Enable Timer-0 All Interrupt.
Definition: avr_timer0.h:285
void TIMER0_DelayTick(uint16_t Tick)
Public Function to Generate Blocking Delay in Tick Count.
Definition: avr_timer0.h:475
#define TIMER0_PWM_TOP_0xFF
Definition: avr_timer0.h:92
#define F_100kHz
Definition: avr_macros.h:52
#define TIMER0_PRESCALER_8
Definition: avr_timer0.h:103
#define TIMER0_MODE_NORMAL
Definition: avr_timer0.h:81
#define TIMER0_OC0B_NO_OUTPUT
Definition: avr_timer0.h:68
ISR(TIMER0_OVF_vect)
Interrupt Service Routine for Timer-0 Overflow.
Definition: avr_timer0.h:540
void TIMER0_DelayUs(uint16_t Time)
Public Function to Generate Blocking Delay in Microsecond.
Definition: avr_timer0.h:497
#define F_1Mhz
Definition: avr_macros.h:56
#define TIMER0_MODE_MASK
Definition: avr_timer0.h:85