Это дело наживное
riscv64-unknown-elf-objdump -dS builded.elf | less
При -O0 компилятор буквально следует правилам языка, и по командам достаточно легко разобраться.
Модераторы: ea, dav, bkolbov, Alis, pip, _sva_
Это дело наживное
Код: Выделить всё
Управляющие 4000_018Ch Не используется XXXX_XXXXh
данные для 4000_0188h CHANNEL_CFG CYCLE_CTRL = 111b, 2R = 4, N = 3
задачи D 4000_0184h DST_DATA_END_PTR 4000_AE00h
4000_0180h SRC_DATA_END_PTR 4000_A000h
Управляющие 4000_017Ch Не используется XXXX_XXXXh
данные для 4000_0178h CHANNEL_CFG CYCLE_CTRL = 111b, 2R = 2, N = 8
задачи C 4000_0174h DST_DATA_END_PTR 4000_BE00h
4000_0170h SRC_DATA_END_PTR 4000_B000h
Управляющие 4000_016Ch Не используется XXXX_XXXXh
данные для 4000_0168h CHANNEL_CFG CYCLE_CTRL = 111b, 2R = 8, N = 5
задачи B 4000_0164h DST_DATA_END_PTR 4000_CE00h
4000_0160h SRC_DATA_END_PTR 4000_C000h
Управляющие 4000_015Ch Не используется XXXX_XXXXh
данные для 4000_0158h CHANNEL_CFG CYCLE_CTRL = 001b, 2R = 4, N = 4
задачи A 4000_0154h DST_DATA_END_PTR 4000_DE00h
4000_0150h SRC_DATA_END_PTR 4000_D000h
я запускал, работло, но у меня было несколько каналов, и они друг друга выносили, но циклическая передача происходила не останавливаясь, но не так как нужно.RabidRabbit писал(а): ↑23 июн 2025, 13:11 День добрый!
Кто-нибудь запускал передачу по DMA (память->периферия) в циклическом режиме Basic?
У меня передача отрабатывает ровно 1 раз, ...
Провёл натурный эксперимент. Канал DMA от TMR0. Если делать так
Код: Выделить всё
DMA->CIRCULARSET = 0x7FFFFFu;Код: Выделить всё
DMA->CIRCULARSET = (1u << DMA_CH_TMR0)Код: Выделить всё
RCU->CGCFGAPB_bit.WDTEN = 1;
RCU->RSTDISAPB_bit.WDTEN = 1;
RCU->WDOGCLKCFG_bit.CLKSEL = 0; // HSICLK
RCU->WDOGCLKCFG_bit.DIVN = 1;
RCU->WDOGCLKCFG_bit.DIVEN = 1;
RCU->WDOGCLKCFG_bit.CLKEN = 1;
RCU->WDOGCLKCFG_bit.RSTDIS = 1; //
//
WDT->LOAD = 2000000U;
//
WDT->CTRL_bit.INTEN = 1; // включить таймер, загрузка с LOAD
WDT->CTRL_bit.RESEN = 1; // включить сброс CPU
Сам не пробовал, но, может, тогда и задавать порог для DMA где-то посередине буфера. DMA-сессию сделать короче этой величины, а по прерыванию таймаута вытягивать остаток.