|
STM32L4 + SD + DMA + FatFs |
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 14)
|
Jul 26 2017, 18:54
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
Есть для не "L" а для "F" https://188.134.5.254/browser/trunkФайл sdcard.c и dskio.c ПРограммирование адреса периферии не тут, надюсь поможет. Это как пониямете из работающего проекта.. CODE /* DMA2 Stream6 Channel 4 */ const uint_fast8_t ch = 4;
DMA2_Stream6->M0AR = addr; DMA2_Stream6->NDTR = (DMA2_Stream6->NDTR & ~ DMA_SxNDT) | (1 * DMA_SxNDT_0); // Особый случай - регистр игнорируется. В примерах от ST пишется 1
if (direction == 0) { // Read from SD CARD //DMA2_Stream6->NDTR = (DMA2_Stream6->NDTR & ~ DMA_SxNDT) | // (length0 * count / 4 * DMA_SxNDT_0); // Особый случай - регистр игнорируется. В примерах от ST пишется 1
DMA2_Stream6->FCR = 1 * DMA_SxFCR_DMDIS | // use FIFO mode 3 * DMA_SxFCR_FTH_0 | // 11: full FIFO 0;
DMA2_Stream6->CR = 0 * DMA_SxCR_DIR_0 | // 00: Peripheral-to-memory ch * DMA_SxCR_CHSEL_0 | // канал 1 * DMA_SxCR_PFCTRL | // 1: The peripheral is the flow controller (required for SDIO/SDMMC connected DMA) 1 * DMA_SxCR_MBURST_0 | // 01: INCR4 (incremental burst of 4 beats) 1 * DMA_SxCR_PBURST_0 | // 01: INCR4 (incremental burst of 4 beats) //0 * DMA_SxCR_DIR_0 | // 00: Peripheral-to-memory 1 * DMA_SxCR_MINC | //инкремент памяти 2 * DMA_SxCR_MSIZE_0 | //длина в памяти - 32 bit 2 * DMA_SxCR_PSIZE_0 | //длина в DR - 32 bit //1 * DMA_SxCR_CIRC | //циклический режим не требуется при DBM 2 * DMA_SxCR_PL_0 | // Priority level - High 0 * DMA_SxCR_CT | // M0AR selected //0 * DMA_SxCR_DBM | // double buffer mode seelcted 0; } else { // Write to SD CARD
//DMA2_Stream6->NDTR = (DMA2_Stream6->NDTR & ~ DMA_SxNDT) | // (length0 * count * DMA_SxNDT_0); // Особый случай - регистр игнорируется. В примерах от ST пишется 1
DMA2_Stream6->FCR = 1 * DMA_SxFCR_DMDIS | // use FIFO mode 1 * DMA_SxFCR_FTH_0 | // 01: 1/2 full FIFO (changed from read !) 0;
DMA2_Stream6->CR = 1 * DMA_SxCR_DIR_0 | // 01: Memory-to-peripherial ch * DMA_SxCR_CHSEL_0 | // канал 1 * DMA_SxCR_PFCTRL | // 1: The peripheral is the flow controller (required for SDIO/SDMMC connected DMA) 0 * DMA_SxCR_MBURST_0 | // 00: single transfer (changed from read !) 1 * DMA_SxCR_PBURST_0 | // 01: INCR4 (incremental burst of 4 beats) //0 * DMA_SxCR_DIR_0 | // 00: Peripheral-to-memory 1 * DMA_SxCR_MINC | //инкремент памяти 0 * DMA_SxCR_MSIZE_0 | //длина в памяти - 8 bit (changed from read !) 2 * DMA_SxCR_PSIZE_0 | //длина в DR - 32 bit //1 * DMA_SxCR_CIRC | //циклический режим не требуется при DBM 2 * DMA_SxCR_PL_0 | // Priority level - High 0 * DMA_SxCR_CT | // M0AR selected //0 * DMA_SxCR_DBM | // double buffer mode seelcted 0; }
DMA2->HIFCR = (DMA_HIFCR_CTCIF6 /*| DMA_HIFCR_CTEIF6 */); // Clear TC interrupt flag соответствующий stream //DMA2_Stream6->CR |= (DMA_SxCR_TCIE /* | DMA_SxCR_TEIE */); // разрешить прерывания от DMA по TC и TE DMA2_Stream6->CR |= DMA_SxCR_EN;
Сообщение отредактировал IgorKossak - Jul 26 2017, 19:14
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
|
|
|
|
|
Jul 27 2017, 20:03
|
Знающий
   
Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839

|
Цитата(AHTOXA @ Jul 27 2017, 17:46)  А, тут не всё так просто. Вот, почитайте эту тему, я там походил по граблям... У меня такого не может произойти - доступ всегда по выровненным адресам.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|