|
stm32f411 spi1+DMA, непрерывная выдача данных |
|
|
|
Aug 31 2017, 12:24
|
Частый гость
 
Группа: Участник
Сообщений: 121
Регистрация: 27-04-09
Из: Украина
Пользователь №: 48 342

|
Привожу код что и как делаю, вопрос в том, что в прерывание ДМА входит, а вот уже в обработчике прерывания в if не входити ессно нет переключения между массивами, что не так?Надеюсь на конструктивный диалог, заранее спасибо. Код void DMA2_Stream5_IRQHandler ( void ) { uart2_putcharPoll ( 'I' );//, xNoBlock );
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
if ( DMA_GetITStatus ( SPI_DMA_MASTER_Tx_DMA_Stream, DMA_IT_TCIF5 ) == SET ) { uart2_putcharPoll ( 'F' );//, xNoBlock );
// Clear DMA Stream Transfer Complete interrupt pending bit
if ( CurrentBufSPI1 == buf1 ) { CurrentBufSPI1 = buf2; uart2_putcharPoll ( '2' );//, xNoBlock ); }
if ( CurrentBufSPI1 == buf2 ) { CurrentBufSPI1 = buf1; uart2_putcharPoll ( '1' );//, xNoBlock ); } DMA_Cmd ( SPI_DMA_MASTER_Tx_DMA_Stream, DISABLE ); DMA_ClearITPendingBit ( SPI_DMA_MASTER_Tx_DMA_Stream, DMA_IT_TCIF5 ); } xSemaphoreGiveFromISR ( xSemaphore_spi1, &xHigherPriorityTaskWoken ); xTaskResumeFromISR (&xHandleSPI1); uart2_putcharPoll ( 'E' );//, xNoBlock ); portEND_SWITCHING_ISR ( xHigherPriorityTaskWoken ); } Код void Task_SPI1 ( void *pvParameters ) { xSemaphoreTake ( xSemaphore_spi1, portMAX_DELAY );
for (;; ) { if ( CurrentBufSPI1 == buf1 ) { ukladkabufTXSPI1 ( Buffer1TX_SPI1 );
DMA_Config ( Buffer1TX_SPI1, indexTX*8 ); } if ( CurrentBufSPI1 == buf2 ) { ukladkabufTXSPI1 ( Buffer2TX_SPI1 );
DMA_Config ( Buffer2TX_SPI1, indexTX*8 ); } vTaskSuspend ( &xHandleSPI1 );
} } Код [/code]void DMA_Config ( uint8_t * Memory0BaseAddr, uint16_t size ) { DMA_InitTypeDef DMA_InitStructure; NVIC_InitTypeDef NVIC_InitStructure;
// Сброс настроек DMA каналов DMA_DeInit ( SPI_DMA_MASTER_Tx_DMA_Stream );
RCC_AHB1PeriphClockCmd ( SPI_DMA_MASTER_DMA_CLK, ENABLE );
DMA_DeInit(SPIx_TX_DMA_STREAM); /* Configure DMA Initialization Structure */ DMA_InitStructure.DMA_BufferSize = size; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_PeripheralBaseAddr =(uint32_t) (&(SPIx->DR)); DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_Priority = DMA_Priority_High; /* Configure TX DMA */ DMA_InitStructure.DMA_Channel = SPIx_TX_DMA_CHANNEL; DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; DMA_InitStructure.DMA_Memory0BaseAddr =(uint32_t)Memory0BaseAddr; DMA_Init(SPIx_TX_DMA_STREAM, &DMA_InitStructure);
// Configure the DMA interrupt priority NVIC_InitStructure.NVIC_IRQChannel = DMAx_Streamx_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init ( &NVIC_InitStructure );
SPI_I2S_ITConfig ( SPIx, SPI_I2S_IT_TXE, ENABLE );
DMA_ClearITPendingBit ( SPI_DMA_MASTER_Tx_DMA_Stream, SPI_DMA_MASTER_Tx_DMA_IT ); DMA_ClearFlag ( SPI_DMA_MASTER_Tx_DMA_Stream, SPI_DMA_MASTER_Tx_DMA_FLAG );
SPI_I2S_DMACmd ( SPI_DMA_MASTER, SPI_I2S_DMAReq_Tx, ENABLE ); DMA_ITConfig ( SPI_DMA_MASTER_Tx_DMA_Stream, DMA_IT_TC, ENABLE ); DMA_Cmd ( SPI_DMA_MASTER_Tx_DMA_Stream, ENABLE ); } знаю есть режим дабл-буфер в f411, но как его заюзать на SPL? дефайны: Код #define SPI_DMA_MASTER SPI1 #define SPI_DMA_MASTER_DMA DMA2 #define SPI_DMA_MASTER_DMA_CLK RCC_AHB1Periph_DMA2 #define SPI_DMA_MASTER_Tx_DMA_Stream DMA2_Stream5 #define SPI_DMA_MASTER_Tx_DMA_Channel DMA_Channel_3 #define SPI_DMA_MASTER_Tx_DMA_FLAG DMA_FLAG_TCIF5 #define SPI_DMA_MASTER_Tx_DMA_IT DMA_IT_TCIF5 #define DMAx_Streamx_IRQn DMA2_Stream5_IRQn
#define SPIx_DMA DMA2 #define SPIx_DMA_CLK RCC_AHB1Periph_DMA2 #define SPIx_TX_DMA_CHANNEL DMA_Channel_3 #define SPIx_TX_DMA_STREAM DMA2_Stream5 #define SPIx_TX_DMA_FLAG_TCIF DMA_FLAG_TCIF5
Сообщение отредактировал Volldemar - Aug 31 2017, 12:53
|
|
|
|
|
 |
Ответов
|
Sep 4 2017, 10:32
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 27-01-17
Пользователь №: 95 184

|
У себя делал так, на STM32F4x9: CODE #include "globals.h" #include "SPIRoutines.h"
static uint8_t RxDummy; static uint8_t TxDummy;
static xSemaphoreHandle MEM_Complete; static xSemaphoreHandle SpiBusy;
static DMA_InitTypeDef DMA_InitStructure;
_SPI_CS_PIN_STRUCT CS_DevList[] = { { "FLASH", GPIO_Pin_14, GPIOC, RCC_AHB1Periph_GPIOC }, { "FRAM 1", GPIO_Pin_3, GPIOE, RCC_AHB1Periph_GPIOE }, { "FRAM 2", GPIO_Pin_4, GPIOE, RCC_AHB1Periph_GPIOE }, { "FRAM 3", GPIO_Pin_13, GPIOC, RCC_AHB1Periph_GPIOC }, { "FRAM 4", GPIO_Pin_8, GPIOI, RCC_AHB1Periph_GPIOI },
};
void InitSPI4(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure;
// Тактирование модуля SPI, портов, DMA RCC_AHB1PeriphClockCmd(SPI_EXT_MEM_GPIO_RCC, ENABLE); RCC_APB2PeriphClockCmd(SPI_EXT_MEM_RCC, ENABLE); RCC_AHB1PeriphClockCmd(SPI_EXT_MEM_DMA_CLK, ENABLE);
//Настроим порты GPIO_InitStructure.GPIO_Pin = SPI_EXT_MEM_SCK | SPI_EXT_MEM_MOSI | SPI_EXT_MEM_MISO; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(SPI_EXT_MEM_GPIO, &GPIO_InitStructure);
GPIO_PinAFConfig(SPI_EXT_MEM_GPIO ,GPIO_PinSource2 ,GPIO_AF_SPI4 ); GPIO_PinAFConfig(SPI_EXT_MEM_GPIO ,GPIO_PinSource5 ,GPIO_AF_SPI4 ); GPIO_PinAFConfig(SPI_EXT_MEM_GPIO ,GPIO_PinSource6 ,GPIO_AF_SPI4 );
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
for (uint8_t i = 0; i < SPI_EXT_MEM_NUM_CS; i++) { RCC_AHB1PeriphClockCmd( CS_DevList[i].Rcc, ENABLE); GPIO_InitStructure.GPIO_Pin = CS_DevList[i].Pin; GPIO_Init(CS_DevList[i].Port, &GPIO_InitStructure); SPI_CS_High((List_CsDev)i); }
//Заполняем структуру с параметрами SPI модуля SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; // полный дуплекс SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; // передаем по 8 бит SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; // Полярность и SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; // фаза тактового сигнала SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; // Управлять состоянием сигнала NSS программно SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; // Предделитель SCK (APB2 90 MHz) SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; // Первым отправляется старший бит SPI_InitStructure.SPI_Mode = SPI_Mode_Master; // Режим - мастер SPI_Init(SPI_EXT_MEM, &SPI_InitStructure); // Настраиваем SPI1 // SPI_Cmd(SPI_EXT_MEM, ENABLE); // Включаем модуль
SPI_NSSInternalSoftwareConfig(SPI_EXT_MEM, SPI_NSSInternalSoft_Set);
SPI_I2S_DMACmd(SPI_EXT_MEM, SPI_I2S_DMAReq_Rx, ENABLE); SPI_I2S_DMACmd(SPI_EXT_MEM, SPI_I2S_DMAReq_Tx, ENABLE);
//настройка прерываний DMA //Прерывания только по Rx, когда байт уже ушел NVIC_InitStructure.NVIC_IRQChannel = SPI_EXT_MEM_Rx_DMA_IRQ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = SPI_EXT_MEM_Rx_DMA_IRQ_PRIORITY; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
DMA_StructInit(&DMA_InitStructure); DMA_InitStructure.DMA_Channel = SPI_EXT_MEM_DMA_Channel; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&SPI_EXT_MEM->DR; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
vSemaphoreCreateBinary(MEM_Complete); xSemaphoreTake(MEM_Complete, 0);
SpiBusy = xSemaphoreCreateMutex(); }
void SPI4_SetDMA_RxTx(uint32_t MemAddr ,uint16_t NumByte ,List_DMA_Mode Mode ) { xSemaphoreTake(SpiBusy, portMAX_DELAY);
DMA_DeInit(SPI_EXT_MEM_Rx_DMA_Stream); DMA_DeInit(SPI_EXT_MEM_Tx_DMA_Stream);
DMA_InitStructure.DMA_BufferSize = NumByte; if (Mode == DMA_MODE_TX || Mode == DMA_MODE_TX_FILL) { DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&RxDummy; //при записи пишем в переменную-пустышку без инкремента DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; DMA_Init(SPI_EXT_MEM_Rx_DMA_Stream, &DMA_InitStructure);
DMA_InitStructure.DMA_Memory0BaseAddr = MemAddr; if (Mode == DMA_MODE_TX) DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; else DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; DMA_Init(SPI_EXT_MEM_Tx_DMA_Stream, &DMA_InitStructure); } else { DMA_InitStructure.DMA_Memory0BaseAddr = MemAddr; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; DMA_Init(SPI_EXT_MEM_Rx_DMA_Stream, &DMA_InitStructure);
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&TxDummy; //при чтении передаем переменную-пустышку без инкремента DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; DMA_Init(SPI_EXT_MEM_Tx_DMA_Stream, &DMA_InitStructure); } DMA_ITConfig(SPI_EXT_MEM_Rx_DMA_Stream, DMA_IT_TC, ENABLE);
DMA_Cmd(SPI_EXT_MEM_Rx_DMA_Stream, ENABLE); // Запускаем на прием DMA_Cmd(SPI_EXT_MEM_Tx_DMA_Stream, ENABLE); // Запускаем на передачу SPI_Cmd(SPI_EXT_MEM, ENABLE); // Включаем модуль (для одновременного старта RX/TX)
xSemaphoreTake(MEM_Complete, portMAX_DELAY); // Ждем пока отработает
while (DMA_GetCmdStatus(SPI_EXT_MEM_Tx_DMA_Stream) != DISABLE); while (DMA_GetCmdStatus(SPI_EXT_MEM_Rx_DMA_Stream) != DISABLE); SPI_Cmd(SPI_EXT_MEM, DISABLE); // Выключаем модуль
xSemaphoreGive(SpiBusy); }
//Завершение чтения(а оно возникает только после полной записи) DMA void DMA2_Stream0_IRQHandler(void) { static portBASE_TYPE xHigherPriorityTaskWoken; xHigherPriorityTaskWoken = pdFALSE;
if (DMA_GetITStatus(SPI_EXT_MEM_Rx_DMA_Stream ,SPI_EXT_MEM_Rx_DMA_FLAG )) { DMA_ClearITPendingBit(SPI_EXT_MEM_Rx_DMA_Stream, SPI_EXT_MEM_Rx_DMA_FLAG);
xSemaphoreGiveFromISR(MEM_Complete ,&xHigherPriorityTaskWoken ); if( xHigherPriorityTaskWoken == pdTRUE ) taskYIELD(); } }
void SPI_CS_Low(List_CsDev Device) { asm("nop"); GPIO_ResetBits(CS_DevList[Device].Port, CS_DevList[Device].Pin); asm("nop"); }
void SPI_CS_High(List_CsDev Device) { asm("nop"); GPIO_SetBits(CS_DevList[Device].Port, CS_DevList[Device].Pin); asm("nop"); }
CODE #ifndef SPI_ROUTINES_H #define SPI_ROUTINES_H
#define SPI_EXT_MEM SPI4 #define SPI_EXT_MEM_RCC RCC_APB2Periph_SPI4
#define SPI_EXT_MEM_GPIO GPIOE #define SPI_EXT_MEM_GPIO_RCC RCC_AHB1Periph_GPIOE #define SPI_EXT_MEM_SCK GPIO_Pin_2 #define SPI_EXT_MEM_MISO GPIO_Pin_5 #define SPI_EXT_MEM_MOSI GPIO_Pin_6
#define SPI_EXT_MEM_NUM_CS 5
#define SPI_EXT_MEM_DMA_CLK RCC_AHB1Periph_DMA2 #define SPI_EXT_MEM_DMA_Channel DMA_Channel_4 #define SPI_EXT_MEM_Rx_DMA_Stream DMA2_Stream0 #define SPI_EXT_MEM_Tx_DMA_Stream DMA2_Stream1
#define SPI_EXT_MEM_Rx_DMA_IRQ DMA2_Stream0_IRQn #define SPI_EXT_MEM_Rx_DMA_FLAG DMA_IT_TCIF0 #define SPI_EXT_MEM_Rx_DMA_IRQ_PRIORITY 15
typedef enum { EXT_MEM_FLASH = 0, // AT45DB641E EXT_MEM_FRAM1, EXT_MEM_FRAM2, EXT_MEM_FRAM3, EXT_MEM_FRAM4, }List_CsDev;
typedef struct { const uint8_t *Str; uint16_t Pin; GPIO_TypeDef *Port; uint32_t Rcc; } _SPI_CS_PIN_STRUCT;
typedef enum { DMA_MODE_RX=1, // читаем данные DMA_MODE_TX, // пишем данные DMA_MODE_TX_FILL, // Заполняем одним и тем же }List_DMA_Mode;
extern void InitSPI4(void);
extern void SPI_CS_Low(List_CsDev Device); extern void SPI_CS_High(List_CsDev Device);
extern void SPI4_SetDMA_RxTx(uint32_t MemAddr ,uint16_t NumByte ,List_DMA_Mode Mode );
extern _SPI_CS_PIN_STRUCT CS_DevList[];
#endif
Для чтения/записи в нужный CS необходимо лишь: Код SPI_CS_Low(EXT_MEM_FLASH); SPI4_SetDMA_RxTx((uint32_t)TxBuf, 1,DMA_MODE_TX); SPI4_SetDMA_RxTx((uint32_t)RxBuf, 9,DMA_MODE_RX); SPI_CS_High(EXT_MEM_FLASH); Естественно вызывать только из тасков FreeRTOS, т.е. используется ожидания завершения передачи через семафор. В вашем прерывании нет необходимости вызывать: Код DMA_Cmd ( SPI_DMA_MASTER_Tx_DMA_Stream, DISABLE ); Т.к. Stream автоматически выключается после окончания передачи, что явно указано в ДШ:
UPD: И еще важная мелочь - т.к. вы используете только Tx на DMA, фактически, прерывание не гарантирует того, что все данные вышли с MOSI-линии. Это значит лишь то, что DMA закончил работу, и переправил все байты в регистр данных SPI, который буферизирован. Для однозначного отслеживания окончания передачи следует дожидаться флага SPI_SR_BSY в статусном регистре SPI. Это не особо заметно на маленьких скоростях, но на больших это вылазит тут же. Помню долго голову ломал, почему , при снятии CS после срабатывания DMA прерывания по Tx, фактически на осциллографе CS снимался посередине последнего байта, естественно данные портились.
Сообщение отредактировал Hold - Sep 4 2017, 10:51
|
|
|
|
|
Sep 4 2017, 12:09
|
Частый гость
 
Группа: Участник
Сообщений: 121
Регистрация: 27-04-09
Из: Украина
Пользователь №: 48 342

|
Цитата(Сергей Борщ @ Sep 4 2017, 15:02)  Несомненным достижением инженеров ST можно назвать отсутствие прерывания на этот флаг. А разве прерывание: Код SPI_I2S_IT_TXE: Tx buffer empty interrupt mask это не оно? т.е. по опустошению передающего буфера генерится прерывание и сраюатывает этотфлаг
Сообщение отредактировал Volldemar - Sep 4 2017, 12:11
|
|
|
|
Сообщений в этой теме
Volldemar stm32f411 spi1+DMA Aug 31 2017, 12:24 AHTOXA После
if ( CurrentBufSPI1 == buf1 )
нужен else. Ин... Aug 31 2017, 17:59 Volldemar Цитата(AHTOXA @ Aug 31 2017, 20:59) После... Sep 1 2017, 06:06  AHTOXA Код#define SPI_DMA_MASTER_Tx_DMA_Channel DMA_Chann... Sep 1 2017, 15:07   Сергей Борщ QUOTE (AHTOXA @ Sep 1 2017, 18:07) Вы зап... Sep 1 2017, 15:43    AHTOXA А, точно, забыл уже, что там ещё один уровень доба... Sep 1 2017, 19:47 adnega Цитата(Volldemar @ Aug 31 2017, 15:24) На... Sep 1 2017, 19:56 Volldemar Цитата(adnega @ Sep 1 2017, 22:56) Похоже... Sep 4 2017, 05:58  adnega Цитата(Volldemar @ Sep 4 2017, 08:58) я о... Sep 4 2017, 06:12   Volldemar Цитата(adnega @ Sep 4 2017, 09:12) А как ... Sep 4 2017, 06:15    adnega Цитата(Volldemar @ Sep 4 2017, 09:15) нич... Sep 4 2017, 06:58     Volldemar Цитата(adnega @ Sep 4 2017, 09:58) Вы исп... Sep 4 2017, 07:19      adnega Цитата(Volldemar @ Sep 4 2017, 10:19) как... Sep 4 2017, 08:29       Volldemar Цитата(adnega @ Sep 4 2017, 11:29) О, я р... Sep 4 2017, 09:17 Volldemar [quote]
Т.к. Stream автоматически выключается посл... Sep 4 2017, 12:01  Hold Цитата(Сергей Борщ @ Sep 4 2017, 19:02) Н... Sep 5 2017, 04:09   Сергей Борщ QUOTE (Hold @ Sep 5 2017, 07:09) Была уже... Sep 5 2017, 06:13 Hold SPI, по сравнению с I2C, еще относительно безглючн... Sep 5 2017, 06:29 adnega Цитата(Hold @ Sep 5 2017, 09:29) какой-то... Sep 5 2017, 06:37 jcxz Цитата(Hold @ Sep 5 2017, 09:29) SPI, по ... Sep 5 2017, 06:58  Hold Цитата(jcxz @ Sep 5 2017, 13:58) При отсу... Sep 5 2017, 08:18 Volldemar Ребят, канешна спасибо за инфу, очень пригодится в... Sep 5 2017, 07:23 adnega Цитата(Volldemar @ Sep 5 2017, 10:23) Вот... Sep 5 2017, 07:56  Volldemar Цитата(adnega @ Sep 5 2017, 10:56) Значит... Sep 5 2017, 08:12   adnega Цитата(Volldemar @ Sep 5 2017, 11:12) в F... Sep 5 2017, 08:41    Volldemar Цитата(adnega @ Sep 5 2017, 11:41) Вам ну... Sep 5 2017, 08:48     adnega Цитата(Volldemar @ Sep 5 2017, 11:48) DMA... Sep 5 2017, 09:44 Сергей Борщ QUOTE (Volldemar @ Sep 5 2017, 10:23) т.е... Sep 5 2017, 08:41  jcxz Цитата(Сергей Борщ @ Sep 5 2017, 11:41) К... Sep 5 2017, 12:58 Volldemar Инит ДМА вот такой:
Кодvoid DMA_Config ( uint8... Sep 5 2017, 11:22 Hold Как минимум, в функцию DMA_DoubleBufferModeConfig(... Sep 5 2017, 12:18 Volldemar Цитата(Hold @ Sep 5 2017, 15:18) Как мини... Sep 5 2017, 12:20  Сергей Борщ QUOTE (Volldemar @ Sep 5 2017, 15:20) выв... Sep 5 2017, 12:26 Volldemar даже если прописать:
КодDMA_DoubleBufferModeConfig... Sep 5 2017, 12:35 Сергей Борщ QUOTE (Volldemar @ Sep 5 2017, 15:35) даж... Sep 5 2017, 13:04 Aleksandr Baranov Цитата(Volldemar @ Sep 5 2017, 08:35) так... Sep 5 2017, 16:39  Volldemar Цитата(Aleksandr Baranov @ Sep 5 2017, 19... Sep 6 2017, 08:02 Volldemar Сергей Борщ - спасибо, внял вашему совету!... Sep 5 2017, 13:10 Volldemar Вроде зашевелилось!!!
Появилась выдача... Sep 6 2017, 11:43 Aleksandr Baranov Цитата(Volldemar @ Sep 6 2017, 07:43) Поя... Sep 6 2017, 12:14 jcxz Цитата(Volldemar @ Sep 6 2017, 14:43) Поя... Sep 7 2017, 19:36  Volldemar Цитата(jcxz @ Sep 7 2017, 22:36) Если воп... Sep 8 2017, 13:29   jcxz Цитата(Volldemar @ Sep 8 2017, 20:29) как... Sep 8 2017, 15:27
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|