jenya7 0 3 июня, 2018 Опубликовано 3 июня, 2018 (изменено) · Жалоба Мне нужно переслать по SPI большой блок данных (4096 байт). Я нашел пример void vfnInitDMA_SPITxMstr(void) { SIM->SCGC6 |= SIM_SCGC6_DMAMUX_MASK; SIM->SCGC7 |= SIM_SCGC7_DMA_MASK; /******************************************************************************** **************************************************/ /******************************************************************************** **************************************************/ /* Look for the DMA request sources table on your RM for a complete list of available sources */ DMAMUX->CHCFG[0] |= DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(17); //SPI0 TX /*start the sequence*/ //DMA_ERQ |= DMA_ERQ_ERQ0_MASK; /* This example has no table of data to */ /* transfer, making only a single minor loop necessary to complete a major loop */ DMA0->TCD[0].SADDR = (uint32_t)&MstrDataSend_Buff; //Source address /* Destination address */ DMA0->TCD[0].DADDR = (unsigned long)(&SPI0->PUSHR); // /* Source offset disabled */ DMA0->TCD[0].SOFF = 0x04; /* Source and Destination Modulo off, source and destination size 2 = 32 bits */ DMA0->TCD[0].ATTR = DMA_ATTR_SSIZE(2) | DMA_ATTR_DSIZE(2); /* Transfer 4 bytes per transaction */ DMA0->TCD[0].NBYTES_MLNO = 0x04; /* No adjust needed */ DMA0->TCD[0].SLAST = -32; /* Destination offset disabled */ DMA0->TCD[0].DOFF = 0x00; /* No link channel to channel, 1 transaction */ DMA0->TCD[0].CITER_ELINKNO = DMA_CITER_ELINKNO_CITER(8); /* No adjustment to destination address */ DMA0->TCD[0].DLAST_SGA = 0; DMA0->TCD[0].BITER_ELINKNO = DMA_BITER_ELINKNO_BITER(8); DMA0->TCD[0].CSR = DMA_CSR_INTMAJOR_MASK | DMA_CSR_DREQ_MASK; } Есть пара непонятных моментов. DMA0->TCD[0].ATTR = DMA_ATTR_SSIZE(2) | DMA_ATTR_DSIZE(2); - это размер единичной посылки или размер всего блока? где задается размер пересылаемого блока? Изменено 3 июня, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dvil 0 28 января, 2019 Опубликовано 28 января, 2019 · Жалоба DMA_ATTR_SSIZE - вот это не оно ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Integro 0 29 января, 2019 Опубликовано 29 января, 2019 · Жалоба On 6/3/2018 at 9:58 AM, jenya7 said: DMA0->TCD[0].ATTR = DMA_ATTR_SSIZE(2) | DMA_ATTR_DSIZE(2); - это размер единичной посылки или размер всего блока? где задается размер пересылаемого блока? Это размер одной транзакции как написано в комментарии для Sourse и Destination соответственно. 2-соответствует 32bit Количество транзакций определяется DMA0->TCD[0].NBYTES_MLNO Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 29 января, 2019 Опубликовано 29 января, 2019 (изменено) · Жалоба 1 hour ago, Integro said: Это размер одной транзакции как написано в комментарии для Sourse и Destination соответственно. 2-соответствует 32bit Количество транзакций определяется DMA0->TCD[0].NBYTES_MLNO размер транзакции это количество байт на посылку? а если мне надо послать 4096 байт? Изменено 29 января, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Integro 0 29 января, 2019 Опубликовано 29 января, 2019 · Жалоба 4 hours ago, jenya7 said: а если мне надо послать 4096 байт? либо делаете так: DMA0->TCD[0].ATTR = DMA_ATTR_SSIZE(0) | DMA_ATTR_DSIZE(0); DMA0->TCD[0].NBYTES_MLNO = 4096; Либо так: DMA0->TCD[0].ATTR = DMA_ATTR_SSIZE(2) | DMA_ATTR_DSIZE(2); DMA0->TCD[0].NBYTES_MLNO = 4096/4; Но это все зависит от слейва, могут быть заморочки с порядком байт, но могу ошибаться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 30 января, 2019 Опубликовано 30 января, 2019 · Жалоба 14 hours ago, Integro said: либо делаете так: DMA0->TCD[0].ATTR = DMA_ATTR_SSIZE(0) | DMA_ATTR_DSIZE(0); DMA0->TCD[0].NBYTES_MLNO = 4096; Либо так: DMA0->TCD[0].ATTR = DMA_ATTR_SSIZE(2) | DMA_ATTR_DSIZE(2); DMA0->TCD[0].NBYTES_MLNO = 4096/4; Но это все зависит от слейва, могут быть заморочки с порядком байт, но могу ошибаться спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Integro 0 30 января, 2019 Опубликовано 30 января, 2019 · Жалоба 1 hour ago, jenya7 said: спасибо. @jenya7, поздравляю Вас! 2000 сообщений, мне кажется, Вы только что стали Гуру :) Пора заканчивать с простыми вопросами! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 30 января, 2019 Опубликовано 30 января, 2019 · Жалоба 19 minutes ago, Integro said: @jenya7, поздравляю Вас! 2000 сообщений, мне кажется, Вы только что стали Гуру :) Пора заканчивать с простымы вопросами! я очень далек от Гуру. я бы отменил автоматическое присвоение регалий. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 30 января, 2019 Опубликовано 30 января, 2019 · Жалоба 29 минут назад, Integro сказал: @jenya7Пора заканчивать с простымы вопросами! Видимо бывают гуру по задаванию вопросов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться