Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
DMA_ChannelInitTypeDef DMA_InitStr_TIM1;
DMA_CtrlDataInitTypeDef DMA_PriCtrlStr_TIM1;
DMA_CtrlDataInitTypeDef DMA_AltCtrlStr_TIM1;
........
// ФОРМИРОВАНИЕ СИНУСОИДЫ - ДМА И ЦАП
DMA_DeInit_();
DMA_StructInit(&DMA_InitStr_TIM1);
/* Set Primary Control Data */
DMA_PriCtrlStr_TIM1.DMA_SourceBaseAddr = (uint32_t)Sine12bit1;
DMA_PriCtrlStr_TIM1.DMA_DestBaseAddr = (uint32_t)(&(MDR_DAC->DAC2_DATA));
DMA_PriCtrlStr_TIM1.DMA_SourceIncSize = DMA_SourceIncHalfword;
DMA_PriCtrlStr_TIM1.DMA_DestIncSize = DMA_DestIncNo;
DMA_PriCtrlStr_TIM1.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_PriCtrlStr_TIM1.DMA_Mode = DMA_Mode_PingPong;
DMA_PriCtrlStr_TIM1.DMA_CycleSize = TABLE_SIN_SIZE/2;
DMA_PriCtrlStr_TIM1.DMA_NumContinuous = DMA_Transfers_1;
DMA_PriCtrlStr_TIM1.DMA_SourceProtCtrl = DMA_SourcePrivileged;
DMA_PriCtrlStr_TIM1.DMA_DestProtCtrl = DMA_DestPrivileged;
/* Set Alternate Control Data */
DMA_AltCtrlStr_TIM1.DMA_SourceBaseAddr = (uint32_t)Sine12bit2;
DMA_AltCtrlStr_TIM1.DMA_DestBaseAddr = (uint32_t)(&(MDR_DAC->DAC2_DATA));
DMA_AltCtrlStr_TIM1.DMA_SourceIncSize = DMA_SourceIncHalfword;
DMA_AltCtrlStr_TIM1.DMA_DestIncSize = DMA_DestIncNo;
DMA_AltCtrlStr_TIM1.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_AltCtrlStr_TIM1.DMA_Mode = DMA_Mode_PingPong;
DMA_AltCtrlStr_TIM1.DMA_CycleSize = TABLE_SIN_SIZE/2;
DMA_AltCtrlStr_TIM1.DMA_NumContinuous = DMA_Transfers_1;
DMA_AltCtrlStr_TIM1.DMA_SourceProtCtrl = DMA_SourcePrivileged;
DMA_AltCtrlStr_TIM1.DMA_DestProtCtrl = DMA_DestPrivileged;
/* Set Channel Structure */
DMA_InitStr_TIM1.DMA_PriCtrlData = &DMA_PriCtrlStr_TIM1;
DMA_InitStr_TIM1.DMA_AltCtrlData = &DMA_AltCtrlStr_TIM1;
DMA_InitStr_TIM1.DMA_Priority = DMA_Priority_High;
DMA_InitStr_TIM1.DMA_UseBurst = DMA_BurstClear;
DMA_InitStr_TIM1.DMA_SelectDataStructure = DMA_CTRL_DATA_PRIMARY;
/* Init DMA channel TIM2*/
DMA_Init(DMA_Channel_TIM1, &DMA_InitStr_TIM1);
/* Enable dma_req or dma_sreq to generate DMA request */
MDR_DMA->CHNL_REQ_MASK_CLR = DMA_SELECT(DMA_Channel_TIM1);
MDR_DMA->CHNL_USEBURST_CLR = DMA_SELECT(DMA_Channel_TIM1);
/* Enable DMA_Channel_TIM2 */
DMA_Cmd(DMA_Channel_TIM1, ENABLE);
DMA_AltCtrlStr_TIM1.DMA_CycleSize = TABLE_SIN_SIZE/2;
DMA_PriCtrlStr_TIM1.DMA_CycleSize = TABLE_SIN_SIZE/2;
DMA_Init(DMA_Channel_TIM1, &DMA_InitStr_TIM1);
Переходим с STM32 на российский микроконтроллер К1986ВЕ92QI. Генерируем и воспроизводим звук. Часть вторая: освоение DMA