ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
2 июля
447812 Топик полностью
rual (27.09.2013 11:58, просмотров: 84) ответил SciFi на Можно, конечно, тупо сделать этому DMA сброс. А можно поразбираться. Помнится, повторная инициализация DMA должна быть такой же полной, как и первая.
Я думал над этим, но поток нельзя сбросить отдельно, только с контроллером ПДП. Первая и повторная инициализация выполняется одной и той же функцией   /* подадим такт на контроллер ПДП2 */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); /* запретим работу ПДП */ DMA_Cmd (DMA2_Stream3, DISABLE); /* сначала запретим запись(!!!!) */ while(DMA_GetCmdStatus(DMA2_Stream3) != DISABLE); DMA_Cmd (DMA2_Stream2, DISABLE); while(DMA_GetCmdStatus(DMA2_Stream2) != DISABLE); /* заполняем структуру ПДП по умолчанию */ DMA_StructInit(&DMA_InitStruct); DMA_InitStruct.DMA_Channel = DMA_Channel_3; /* канал */ DMA_InitStruct.DMA_BufferSize = 4; /* указываем число пересылаемых данных */ DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable; /* инкрементальный адрес перефирии */ DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; /* размерность - слово 32 бита */ DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; /* обмен 8 бит */ DMA_InitStruct.DMA_Mode = DMA_Mode_Normal; /* однократный режим */ DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable; /* счетчик данных увеличивается */ DMA_InitStruct.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStruct.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; DMA_InitStruct.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t) &SPI1->DR; DMA_InitStruct.DMA_Memory0BaseAddr = (uint32_t) &MPUbuffer; /* задаем адрес источника данных */ /* применяем структуру для чтения */ DMA_InitStruct.DMA_Priority = DMA_Priority_VeryHigh; /* приоретет чтения высокий */ DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralToMemory; /* порт - источник */ DMA_Init(DMA2_Stream2, &DMA_InitStruct); /* применяем структуру для записи */ DMA_InitStruct.DMA_Priority = DMA_Priority_High; /* приоретет записи средний */ DMA_InitStruct.DMA_DIR = DMA_DIR_MemoryToPeripheral; /* порт - приемник */ DMA_Init(DMA2_Stream3, &DMA_InitStruct);