Gast
#1953409
Hallo,
ich möchte eine Peripherie- oder Speicheradresse den Xmega-DMA
Adressregistern mit einer Funktion zuweisen:
void InitDmaChannel(DMA_CH_t channel, register8_t *source, register8_t
*destination, register16_t BlockCnt, register8_t TrigSrc, bool forever)
{
...
channel.SRCADDR0= (uint8_t)(((uint32_t)source)>>0);
channel.SRCADDR1= (uint8_t)(((uint32_t)source)>>8);
channel.SRCADDR2= (uint8_t)(((uint32_t)source)>>16);
...
}
ebenso...
Bsp:
DMA.CH0.SRCADDR0= (((uint32_t)(&Buffer))>>0*8) & 0xFF;
DMA.CH0.SRCADDR1= (((uint32_t)(&Buffer))>>1*8) & 0xFF;
DMA.CH0.SRCADDR2= (((uint32_t)(&Buffer))>>2*8) & 0xFF;
Aber auch mit dem gefundenen Beispiel (s.o.) gibt der Compiler die
Warnung aus: "cast from pointer to integer of different size"
- Wie kann man das elegant schreiben, ohne dass Warnungen produziert
werden?
- Das mit dem "& 0xFF" kann man doch besser mit einem cast uint8_t()
machen?
- Sind nicht einige Klammern überflüssig?
Alexxx