[STM32] CRC per DMA berechnen

Gast #3843241
Lesenswert?
• ▲
▼
Hallo zusammen,

statt die CRC über den gesamten Flash per While-Schleife zu berechnen, 
möchte ich dies per DMA erledigen. Per Schleife funktioniert es bereits, 
ich scheitere an der Konfiguration des DMA-Kanals. Trotz DMA-Enable will 
er scheinbar nicht loslaufen (der Counter-Restwert für die verbleibenden 
Daten ändert sich nicht). Irgendwas mache ich wohl falsch.

Hier ist mein Code:
1
DMA_InitTypeDef   DMA_InitStructure;
2

3
/* Enable DMA1 clock -------------------------------------------------------*/
4
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
5

6
// Get address of CRC data register (Should be 0x40012440U on STM32F051)
7
uint32_t ui32CRC_DR_Address = reinterpret_cast<uint32_t>(& (CRC->DR));
8

9
DMA_DeInit(DMA1_Channel2);
10
DMA_InitStructure.DMA_PeripheralBaseAddr = ui32CRC_DR_Address;
11
DMA_InitStructure.DMA_MemoryBaseAddr = drvCRC::ui32Flash_Start;
12
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
13
DMA_InitStructure.DMA_BufferSize = 16383;
14
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
15
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
16
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
17
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
18
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
19
DMA_InitStructure.DMA_Priority = DMA_Priority_Low;
20
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
21
DMA_Init(DMA1_Channel2, &DMA_InitStructure);
22

23
/* Enable DMA1 Channel3 */
24
DMA_Cmd(DMA1_Channel2, ENABLE);
25
uint32_t cnt;
26
while (RESET == DMA_GetFlagStatus(DMA1_FLAG_TC2))
27
{
28
   cnt = DMA_GetCurrDataCounter(DMA1_Channel2);
29
}
30
// Dieser Code wird nie erreicht, da while nicht beendet
31
DMA_ClearFlag(DMA1_FLAG_TC2);

Vielleicht fällt euch etwas ins Auge.

Viele Grüße

Oliver
Gast #4168834
Lesenswert?
• ▲
▼
Der Counter für die Verbleibenden Variablen ändert sich auch nicht. Der 
Wert wird in ein Shadow-Register kopiert und dieses wird tatsächlich 
verringert. Das steht aber nirgends, hab's im www mal gefunden.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.