Hallo Zusammen,
ich habe vermutlich noch ein Verständnis Problem und bekomme den TCA0
meines ATMEGA4809 nicht zum laufen. Ziel ist an PC0 ca. 0,5Hz
auszugeben. Am Pin passiert aber gar nichts.
1 | #include <avr/io.h>
|
2 |
|
3 | int main(void)
|
4 | {
|
5 | // Select division by 2 for Prescaler: CLK_PER = CLK_MAIN / 2
|
6 | _PROTECTED_WRITE(CLKCTRL.MCLKCTRLB, 0x01);
|
7 |
|
8 | // Select OSC20M for the Main Clock (CLK_MAIN)
|
9 | _PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, 0x00);
|
10 |
|
11 | // Wait while OSC20M is undergoing a switch.
|
12 | while(CLKCTRL.MCLKSTATUS & (1<<0));
|
13 |
|
14 | // Set TCA0 pins on PC[5:0]
|
15 | PORTMUX.TCAROUTEA = 0x02;
|
16 |
|
17 | // Set PC0 as Output
|
18 | PORTC.DIR |= PIN0_bm;
|
19 |
|
20 | // Set CMP0EN=1 (output WO0 will be available on PC0) and WGMODE=0x1 (FRQ)
|
21 | TCA0.SINGLE.CTRLB = 0x11;
|
22 |
|
23 | // Set Timer to ~1s (8.000.000 / (1024*0x1E84)
|
24 | TCA0.SINGLE.CMP0BUF = 0x1E84;
|
25 |
|
26 | // Clear Counter
|
27 | TCA0.SINGLE.CNT = 0x0000;
|
28 |
|
29 | // Set fCLK_PER/1024 and Enable TCA=
|
30 | TCA0.SINGLE.CTRLB = 0x0F; //
|
31 |
|
32 | while(1);
|
33 | }
|
Ich entschuldige mich vorab schon mal für den dummen Fehler ;-)