-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtimer0.c
36 lines (29 loc) · 1.07 KB
/
timer0.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
#include "timer0.h"
#include "pll.h"
/* Çàäåðæêà - 1 ìèêðîñåêóíäà */
#define DELAY_US_PERIOD (SCLK_VALUE / 1000000)
#define DELAY_MS_PERIOD (SCLK_VALUE / 1000)
#define DELAY_SEC_PERIOD (SCLK_VALUE)
/* Çàäåðæêà íà ìèêðîñåêóíäû èëè ìèëëèñåêóíäû - ïðåðûâàåìàÿ, èñïîëíÿåòñÿ íà 15 óðîâíå! */
section("L1_code")
void TIMER0_delay(u32 delay, DELAY_TYPE type)
{
u32 div = ((type == DELAY_SEC)? DELAY_SEC_PERIOD : ((type == DELAY_MS)? DELAY_MS_PERIOD : DELAY_US_PERIOD));
/* Øèòàòü äî PERIOD + ïðåðûâàíèÿ */
*pTIMER_STATUS = TIMIL0;
*pTIMER0_CONFIG = PERIOD_CNT | IRQ_ENA | PWM_OUT | OUT_DIS;
*pTIMER0_PERIOD = div * delay; /* ïåðèîä çàäåðæêè */
*pTIMER0_WIDTH = 10; // 10 òàêòîâ SCLK øèðèíà
*pTIMER_ENABLE = TIMEN0; /* Çàïóñòèëè */
ssync();
/* Æäåì ñðàáàòûâàíèÿ òàéìåðà */
while (!(*pTIMER_STATUS & TIMIL0)) {
/* ïðîâåðèòü: PLL_sleep(); */
asm("nop;");
ssync();
}
*pTIMER_DISABLE = TIMEN0; /* Âûêëþ÷èëè òàéìåð */
*pTIMER_STATUS = TIMIL0;
*pTIMER0_CONFIG = 0;
ssync();
}