1 | // --- AVR128DB64 ---
|
2 | #include <avr/io.h>
|
3 | #include <avr/interrupt.h>
|
4 | #include <util/atomic.h>
|
5 |
|
6 | void initPins (void);
|
7 | void initTCA0 (void);
|
8 | void deleteTCA0 (void);
|
9 |
|
10 | int main (void)
|
11 | {
|
12 | deleteTCA0();
|
13 | initPins();
|
14 | initTCA0();
|
15 |
|
16 | while(1)
|
17 | { }
|
18 | }
|
19 |
|
20 | void initPins (void)
|
21 | {
|
22 | PORTMUX.TCAROUTEA = PORTMUX_TCA0_PORTB_gc; // TCA0 WO-x umrouten
|
23 | VPORTB.DIR = VPORTB.DIR | _BV(0); // PB0 / TCA0-WO Output
|
24 | }
|
25 |
|
26 | void initTCA0 (void)
|
27 | {
|
28 | const uint16_t value = 65535;
|
29 | TCA0.SINGLE.CMP0BUF = value; // TOP
|
30 | TCA0.SINGLE.CTRLA = TCA_SINGLE_CLKSEL_DIV1_gc; // CLK_PER divider
|
31 | TCA0.SINGLE.CTRLB = TCA_SINGLE_WGMODE_FRQ_gc | TCA_SINGLE_CMP0EN_bm; // Frequency Generation Mode
|
32 | TCA0.SINGLE.CTRLA = TCA0.SINGLE.CTRLA | TCA_SINGLE_ENABLE_bm; // Enable TCA
|
33 | }
|
34 |
|
35 | void deleteTCA0 (void)
|
36 | {
|
37 | TCA0.SINGLE.CTRLA = 0;
|
38 | TCA0.SINGLE.CTRLB = 0;
|
39 | TCA0.SINGLE.CTRLC = 0;
|
40 | TCA0.SINGLE.CTRLD = 0;
|
41 | TCA0.SINGLE.INTCTRL = 0;
|
42 | TCA0.SINGLE.CNT = 0;
|
43 | }
|