Hallo,
ich bin gerade dabei mich in die AVR32 Familie einzuarbeiten.
Dazu habe ich das ALVIDI AVR32 Board (http://alvidi.de/avr32_board.html)
mit einem AT32UC3A0512 Controller.
Ich möchte als erstes einen RealTimeCounter verwenden der mir eine
interrupt routine aufruft in der eine LED ein bzw ausgeschaltet werden
soll.
Dazu habe ich mir das Example im Framework angesehen und möchte dazu
auch das Framework benutzen.
Mein Problem ist jetzt das der Controller in der rtc_init() Methode bei
der Abfrage nach dem Busy flag in der while Schleife hängen bleibt.
Mir ist dies aber nicht klar warum weil das Busy flag 0 ist und somit
eigentlich weiter gearbeitet werden sollte. Im Anhang befindet sich noch
ein Screenshoot von dem Problem.
Hier noch mein Code:
1 | #include <avr32/io.h>
|
2 | #include "gpio.h"
|
3 | #include "sysclk.h"
|
4 | #include "delay.h"
|
5 | #include "rtc.h"
|
6 |
|
7 |
|
8 | int main(void)
|
9 | {
|
10 | sysclk_init();
|
11 | delay_init(sysclk_get_cpu_hz());
|
12 |
|
13 | init_timer_interrupt();
|
14 |
|
15 | while(1)
|
16 | {
|
17 | tgl_led3_ms(1000);
|
18 | }
|
19 | }
|
20 |
|
21 | void rtc_irq(void)
|
22 | {
|
23 | gpio_tgl_gpio_pin(LED2_GPIO);
|
24 | // clear the interrupt flag
|
25 | rtc_clear_interrupt(&AVR32_RTC);
|
26 | }
|
27 |
|
28 | void tgl_led3_ms(uint8_t ms_time) {
|
29 | gpio_tgl_gpio_pin(LED3_GPIO);
|
30 | delay_ms(ms_time);
|
31 | }
|
32 |
|
33 |
|
34 | int init_timer_interrupt() {
|
35 | // Disable all interrupts. */
|
36 | Disable_global_interrupt();
|
37 |
|
38 | // The INTC driver has to be used only for GNU GCC for AVR32.
|
39 | #if __GNUC__
|
40 | // Initialize interrupt vectors.
|
41 | INTC_init_interrupts();
|
42 |
|
43 | // Register the RTC interrupt handler to the interrupt controller.
|
44 | INTC_register_interrupt(&rtc_irq, AVR32_RTC_IRQ, AVR32_INTC_INT0);
|
45 | #endif
|
46 |
|
47 | // Initialize the RTC
|
48 | if (!rtc_init(&AVR32_RTC, RTC_OSC_RC, RTC_PSEL_RC_1_76HZ)) {
|
49 | return 0;
|
50 | }
|
51 |
|
52 | // Set top value to 0 to generate an interrupt every seconds */
|
53 | rtc_set_top_value(&AVR32_RTC, 0);
|
54 | // Enable the interrupts
|
55 | rtc_enable_interrupt(&AVR32_RTC);
|
56 | // Enable the RTC
|
57 | rtc_enable(&AVR32_RTC);
|
58 |
|
59 | // Enable global interrupts
|
60 | Enable_global_interrupt();
|
61 |
|
62 | return 1;
|
63 | }
|
Hat da jemand eine Ahnung warum das nicht funktioniert?