Witajcie.
Mam takie pytanie, bo nie do końca rozumiem czemu coś działa chociaż w kodzie jest zaznaczone jako TODO.
Atmega406 ma pewien 32bitowy rejestr przetwornika A/C - CADAC, na który składają się rejestry CADAC0,1,2,3.
w pliku iom406.h WinAvr20081205 znajduje się taki fragment:
Jak widać, "do zrobienia" jest dodanie SFR_MEM32, by móc wykorzystać ten rejestr jako jedną 32 bitową zmienną.
ale za to w sfr_defs.h jest to już zdefiniowane:
no i rzeczywiście po odremowaniu #define CADAC _SFR_MEM32(0xE0) - kompilator nic nie krzyczy.
Czy dobrze się domyślam, że autorzy winavr zapomnieli odremować tego wiersza?
Pytanie drugie: Rejestr CADAC powinien być odczytywany z pewnymi rygorami czasowymi. Jeżeli trwa odczyt rejestru, a wystąpi przerwanie aktualizujące wartość CADAC - to aktualizacja nie następuje. Zczytana kolejna dana jest błędna.
Czy to być może powodem zaremowania SFR32? Jakaś nie właściwa obługa tych rygorów czasowych powodująca błędy w odczycie?
Mam takie pytanie, bo nie do końca rozumiem czemu coś działa chociaż w kodzie jest zaznaczone jako TODO.
Atmega406 ma pewien 32bitowy rejestr przetwornika A/C - CADAC, na który składają się rejestry CADAC0,1,2,3.
w pliku iom406.h WinAvr20081205 znajduje się taki fragment:
/* CC-ADC Accumulate Current */
/* TODO: Add _SFR_MEM32 */
/*#define CADAC _SFR_MEM32(0xE0) */
#define CADAC0 _SFR_MEM8(0xE0)
#define CADAC1 _SFR_MEM8(0xE1)
#define CADAC2 _SFR_MEM8(0xE2)
#define CADAC3 _SFR_MEM8(0xE3)Jak widać, "do zrobienia" jest dodanie SFR_MEM32, by móc wykorzystać ten rejestr jako jedną 32 bitową zmienną.
ale za to w sfr_defs.h jest to już zdefiniowane:
#define _SFR_MEM32(mem_addr) _MMIO_DWORD(mem_addr)
#define _MMIO_DWORD(mem_addr) (*(volatile uint32_t *)(mem_addr))
no i rzeczywiście po odremowaniu #define CADAC _SFR_MEM32(0xE0) - kompilator nic nie krzyczy.
Czy dobrze się domyślam, że autorzy winavr zapomnieli odremować tego wiersza?
Pytanie drugie: Rejestr CADAC powinien być odczytywany z pewnymi rygorami czasowymi. Jeżeli trwa odczyt rejestru, a wystąpi przerwanie aktualizujące wartość CADAC - to aktualizacja nie następuje. Zczytana kolejna dana jest błędna.
Czy to być może powodem zaremowania SFR32? Jakaś nie właściwa obługa tych rygorów czasowych powodująca błędy w odczycie?
