Fehler im ADC Teil der iox64a3u.h

OP #2796364
Lesenswert?

Hi,

ich hab einen Fehler in der iox64a3u.h gefunden, wo kann ich diesen 
Melden (bugtracker).

Ich wechsele gerade bei einem bestehenden Projekt vom ATXMega128A1 zum 
neueren ATXMega64A3U.
Dabei ist mir aufgefallen, das mein ADC Funktionen teilweise nicht mehr 
funktionieren, nach langer Suche habe ich heraus gefunden, das einige 
Register Adressen falsch sind.
&(config->ADCx->CH0) Liefert die richtige Adresse.
&(config->ADCx->CH1) Liefert ein Byte zu niedrig
&(config->ADCx->CH2) Liefert zwei Byte zu niedrig
...
Ursache ist ein Fehler im aktuellen Header iox64a3u.h von Atmel (AVRGCC 
3.4.0.65)
1
...
2
#define ADCA_CH3RES  _SFR_MEM16(0x0216)
3
#define ADCA_CMP  _SFR_MEM16(0x0218)
4
#define ADCA_CH0_CTRL  _SFR_MEM8(0x0220)
5
#define ADCA_CH0_MUXCTRL  _SFR_MEM8(0x0221)
6
#define ADCA_CH0_INTCTRL  _SFR_MEM8(0x0222)
7
#define ADCA_CH0_INTFLAGS  _SFR_MEM8(0x0223)
8
#define ADCA_CH0_RES  _SFR_MEM16(0x0224)
9
#define ADCA_CH0_SCAN  _SFR_MEM8(0x0226)
10
#define ADCA_CH1_CTRL  _SFR_MEM8(0x0228)
Zwischen ADCA_CH0_SCAN und ADCA_CH1_CTRL ist ein Register frei
Welches aber in den Struct ADC_ch_t nicht berücksichtig ist
1
/* ADC Channel */
2
typedef struct ADC_CH_struct
3
{
4
    register8_t CTRL;  /* Control Register */
5
    register8_t MUXCTRL;  /* MUX Control */
6
    register8_t INTCTRL;  /* Channel Interrupt Control Register */
7
    register8_t INTFLAGS;  /* Interrupt Flags */
8
    _WORDREGISTER(RES);  /* Channel Result */
9
    register8_t SCAN;  /* Input Channel Scan */
10
} ADC_CH_t;
11

12
/* Analog-to-Digital Converter */
13
typedef struct ADC_struct
14
{
15
    register8_t CTRLA;  /* Control Register A */
16
    register8_t CTRLB;  /* Control Register B */
17
    register8_t REFCTRL;  /* Reference Control */
18
    register8_t EVCTRL;  /* Event Control */
19
    register8_t PRESCALER;  /* Clock Prescaler */
20
    register8_t reserved_0x05;
21
    register8_t INTFLAGS;  /* Interrupt Flags */
22
    register8_t TEMP;  /* Temporary Register */
23
    register8_t reserved_0x08;
24
    register8_t reserved_0x09;
25
    register8_t reserved_0x0A;
26
    register8_t reserved_0x0B;
27
    _WORDREGISTER(CAL);  /* Calibration Value */
28
    register8_t reserved_0x0E;
29
    register8_t reserved_0x0F;
30
    _WORDREGISTER(CH0RES);  /* Channel 0 Result */
31
    _WORDREGISTER(CH1RES);  /* Channel 1 Result */
32
    _WORDREGISTER(CH2RES);  /* Channel 2 Result */
33
    _WORDREGISTER(CH3RES);  /* Channel 3 Result */
34
    _WORDREGISTER(CMP);  /* Compare Value */
35
    register8_t reserved_0x1A;
36
    register8_t reserved_0x1B;
37
    register8_t reserved_0x1C;
38
    register8_t reserved_0x1D;
39
    register8_t reserved_0x1E;
40
    register8_t reserved_0x1F;
41
    ADC_CH_t CH0;  /* ADC Channel 0 */
42
    ADC_CH_t CH1;  /* ADC Channel 1 */
43
    ADC_CH_t CH2;  /* ADC Channel 2 */
44
    ADC_CH_t CH3;  /* ADC Channel 3 */
45
} ADC_t;
Moderator Persönliche Seite #2796474
Lesenswert?

Stephan Peterich schrieb:

> ich hab einen Fehler in der iox64a3u.h gefunden, wo kann ich diesen
> Melden (bugtracker).

> Ursache ist ein Fehler im aktuellen Header iox64a3u.h von Atmel (AVRGCC
> 3.4.0.65)

Davon abgesehen, dass das die Atmel-eigene Nummerierung ihrer
Toolchain ist (der GCC darin dürfte ein GCC 4.6.x sein), dort steht
auch gleich, wem du diesen Fehler melden kannst: Atmel selbst.  Diese
Headerdatei haben sie noch nicht in die avr-libc integrieren lassen,
damit sind sie bislang alleinig selbst verantwortlich für deren
Korrektheit.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren