Hallo zusammen, ich benutze einen MSP430F5438A. Mit diesem will ich via DMA Daten aus dem RAM zum UART schicken. Diese Daten werden in verschiedenen Variablen abgelegt. Ist es möglich, diesen Variablen eine feste Adresse im RAM zuzuweisen, sodass alle direkt hintereinander im RAM abgelegt sind? Durch die festen Adressen kann ich dann dem DMA-Controller die Startadresse und die Blockgröße mitteilen und dieser kann anschließend die Daten an den UART schicken. Danke für eure Hinweise! Wostl
Hallo Wostl, ... sehr präzise Beschreibung Deiner Entwicklungsumgebung! - Nein, Spaß beiseite, folgendes könnte Dir helfen: Ich lege die Positionen der Variablem oder Konstanten wie folgt fest. ************** RSEG DATA16_N EVEN nextTACCR1 DS16 1 ; var contains data for next update nextTACCTL1 DS16 1 ; var contains info about interrupt branchAddr DS16 1 ; address container for next branch branchTaIsr DS16 1 ; address for TA service routine memData lfsr16 DS16 1 ; 16 bit for pseudo random ledPtr DS16 LED_COUNT ; ptr into the wavedata field ledStep DS16 LED_COUNT ; number of remaining steps ledEnergy DS16 LED_COUNT ; energy resource ledWave DS8 LED_COUNT ; selected wave memDataEnd ************** ... usw. Sieh Dir einmal in der Defintionsdatei zu Deinem Prozessor an ("CONFIG\lnk430F2121.xcl"), welche Adressen möglich sind. Neben DATA16_N findest Du weitere Definitionen. Darüber sollte es funktionieren. Viel Erfolg und Gruß Bernd
hinweiser schrieb: > Hallo Wostl, > > ... sehr präzise Beschreibung Deiner Entwicklungsumgebung! - Nein, Spaß > beiseite, folgendes könnte Dir helfen: > Hallo Bernd, da hast du natürlich Recht, habe ich im Eifer des Gefechts glatt vergessen: Ich benutze IAR, und die Variablen haben eine Integer Struktur mit 8byte. 16 dieser Variablen sollen hintereinander abgespeichert werden.
1 | struct
|
2 | {
|
3 | uint8_t d[8]; |
4 | }Daten[16]; |
Beispiel für 16bit Daten: { u16 *dst = (u16*); // deklariert einen Zeiger auf eine 16bit adresse. dst = 0x00200000; // hardware destination address // dieser Zeiger muss auf einen gültigen RAM Bereich zeigen. // abhängig vom Speicherlayout, siehe Momory mapping im // Linker Command File 28xxx*.lnk.cmd *dst = 0x11; //Wert 0x11 in die Speicheradresse 0x00200000 schreiben dst++; *dst = 0x22; //Wert 0x22 in die Speicheradresse 0x00200002 schreiben }
>Diese Daten werden in verschiedenen Variablen abgelegt. Ist es möglich, >diesen Variablen eine feste Adresse im RAM zuzuweisen, sodass alle >direkt hintereinander im RAM abgelegt sind? struct{}datenname; >Durch die festen Adressen kann ich dann dem DMA-Controller die >Startadresse &datenname
> struct > { > uint8_t d[8]; > }Daten[16]; Endlich mal ein Thema für die guten alten Precompiler-Tricksereien. #define minWerte Daten[0].d #define maxWerte Daten[1].d ...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.