рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рди!
рдпрд╣ рдХрднреА рдирд╣реАрдВ рд╣реБрдЖ рдФрд░ рдпрд╣рд╛рдБ рдлрд┐рд░ рд╕реЗ ред рдореЗрд░реЗ
рдЖрдЦрд┐рд░реА рд▓реЗрдЦ рдХреЗ рдмрд╛рдж рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рдмреАрдд рдЪреБрдХрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдирдИ рдЪреБрдиреМрддрд┐рдпрд╛рдВ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдореИрдВ 100 рдПрдордмреАрдкреАрдПрд╕ рдХреА рдЧрддрд┐ рд╕реЗ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рддрд╛ рдерд╛, рддреЛ рдЕрдм рдореБрдЭреЗ 1600 рдПрдордмреАрдкреАрдПрд╕ рдкрд░ рд╕реНрд╡рд┐рдВрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ...
рдХреЗрдбреАрдкреАрд╡реА рдкрд░ - рд╣рдорд╛рд░реЗ рдЙрдкрдиреНрдпрд╛рд╕ рдХреЗ рдирд╛рдпрдХ - рд╡рд╣ рдЗрддрдиреА рдЧрддрд┐ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛!

рдЗрд╕рд▓рд┐рдП, рдореЗрд░реА рдЕрдЧрд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ 50 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХреА рдЧрддрд┐ рд╕реЗ 32-рдмрд┐рдЯ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдкрдврд╝рдиреЗ рдХреА рдорд╛рдВрдЧ рдХреА рдЧрдИ (рдпрд╣, рд╡реИрд╕реЗ, рд╡рд╣реА 1.6 Gbps рд╣реЛрдЧрд╛) рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рд░рд╛рд╢рд┐ рдореЗрдВ рд╣реИ - рдЗрд╕реЗ 10000 рд╣реЛрдиреЗ рджреЗрдВред рдПрдХ рдкреЛрд░реНрдЯ рд╕реЗ рдбреАрдПрдордП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрдврд╝рдирд╛ рдареАрдХ рд░рд╣реЗрдЧрд╛ - рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХреЛрдИ рдЙрдкрдпреБрдХреНрдд рдкреНрд░реЛрд╕реЗрд╕рд░ рдирд╣реАрдВ рдереЗ (рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рд╣реА рдХрд░рддрд╛ рд╣реИ), рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рд╕рднреА рдкреЛрд░реНрдЯ рдЬреЛ рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ, рдХрд┐рд╕реА рдХрд╛рд░рдг 16-рдмрд┐рдЯ рдХреЗ рд▓рд┐рдП рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рддрд┐рдкрд╣рд┐рдпрд╛ рд╣рдореЗрдВ рдирд╣реАрдВ рд░реЛрдХреЗрдВрдЧреЗ - рд╣рдо рдПрдХ рдмрд╛рд░ рдореЗрдВ рджреЛ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рд╕реЗ рдкрдврд╝реЗрдВрдЧреЗ! рд╕рдЪ рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд╣рдореЗрд╢рд╛ рдЖрд╡рд╢реНрдпрдХ рдбрд┐рдЧреНрд░реА рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рд╕рдордХрд╛рд▓рд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рджреБрдЦрдж рдирд╣реАрдВ рд╣реИ - рдПрдХ рд╕рдВрдХреЗрдд рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдкреЛрд░реНрдЯ рдкрд░ 20 рдПрдирдПрд╕ рдбреЗрдЯрд╛ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред
рдФрд░ рдЬрдм рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╣реИ 400mHz рдкрд░ stm32h750, рдФрд░ 200 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдкрд░ рдмрд╕ рдФрд░ рдЯрд╛рдЗрдорд░, рдлрд┐рд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ - рдПрдХ рд╕рд┐рдЧреНрдирд▓ рдкрд░ рдПрдХрд▓ рдбреАрдПрдордП рдЕрдЧреНрд░реЗрд╖рдг рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ DMA рдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреЛрдИ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рд╣реИ - рдкреЛрд░реНрдЯ рдПрдХ рдмрд╛рдзрд╛ рдЬрд╛рд░реА рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ DMA рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ - рдбреАрдПрдордПрдПрдордпреВрдПрдХреНрд╕, рдЬрд┐рд╕рдореЗрдВ рдбреАрдПрдордП рдЪреИрдирд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрд╡реЗрдВрдЯ рдЬрдирд░реЗрдЯрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рджреЛ рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ - рдпрд╛ рддреЛ рдПрдХреНрд╕реНрдЯрд┐рдЯреВ рдЗрдВрдЯрд░рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдпрд╛ TIM12 рдЯрд╛рдЗрдорд░ рд╕реЗ рд╕рд┐рдЧреНрдирд▓ (рдЪрд┐рдк рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкрд╛рд╕ рдРрд╕реА рдЕрдЬреАрдм рдлрдВрддрд╛рд╕реА рдереА)ред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░реБрдХрд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд╣реАрдВ рд╣реИ - рд╣рдореЗрдВ рдЦрд╛рд▓реА рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 47 рдШрдбрд╝реА рдЪрдХреНрд░реЛрдВ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдШрдбрд╝реА рдХрд╛ рдЪрдХреНрд░ рд▓рдЧрднрдЧ рд╢реВрдиреНрдп рд╣реИ ...
рд▓реЗрдХрд┐рди рд╕рдордп рдореЗрдВ рдПрдХ рдЯрд╛рдЗрдорд░ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдХреЗрд╡рд▓ 100 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХреЗ рдмрд╛рд╣рд░реА рд╕рд┐рдЧреНрдирд▓ рд╕реЗ рдЯрд╛рдЗрдорд░ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рдЯрд╛рдЗрдорд░ рдХреА рд▓рдВрдмрд╛рдИ 1 рддрдХ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ TRGO рдЖрдЙрдЯрдкреБрдЯ DMAMUX рдЬрдирд░реЗрдЯрд░ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдЧрд╛, рдФрд░ рдлрд┐рд░ рдпрд╣ рдбреАрдПрдордП рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджреЗрд╢ рдЬрд╛рд░реА рдХрд░реЗрдЧрд╛ рдФрд░ рдпрд╣ рдкреЛрд░реНрдЯ рдХреЛ рдкрдврд╝реЗрдЧрд╛ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рднреЗрдЬ рджреЗрдЧрд╛ред
рд▓реЗрдХрд┐рди рд░реБрдХрд┐рдП! рдкреЛрд░реНрдЯ 16-рдмрд┐рдЯ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 32 рд╣реИ ... рдареАрдХ рд╣реИ, рдЖрдк рдПрдХ рдФрд░ рджреВрд╕рд░рд╛ рдкреЛрд░реНрдЯ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ... рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдбреАрдПрдордП рдЪреИрдирд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдПрдХ рд╣реА рдмрд╕ рд▓реЗ рдЬрд╛рдПрдЧрд╛ - рдЕрд░реНрдерд╛рдд, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдореЗрдореЛрд░реА рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред рдЦреИрд░, рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдЗрд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рдореЗрдореЛрд░реА рд╣реЛрддреА рд╣реИ, рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдВрд░рдЪрдирд╛ рдХреА рдПрдХ рдмрдбрд╝реА рддрд╕реНрд╡реАрд░ рдореЗрдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдбреАрдПрдордП рдФрд░ рд░реИрдо_ рдбреА 1 рдореЗрдореЛрд░реА рджреЛрдиреЛрдВ рдПрдХ рд╣реА рдмрд╕ рдореЗрдВ 200 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдмреИрдареЗ рд╣реИрдВред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред
DMA1->LIFCR |= ~0; DMA1_Stream0->CR = (0b11 << DMA_SxCR_PL_Pos) | (0b01 << DMA_SxCR_MSIZE_Pos) | (0b01 << DMA_SxCR_PSIZE_Pos) | DMA_SxCR_MINC; DMA1_Stream0->M0AR = (uint32_t) data; DMA1_Stream0->PAR = (uint32_t) &(GPIOE->IDR); DMA1_Stream0->NDTR = 10000; DMA1_Stream1->CR = (0b11 << DMA_SxCR_PL_Pos) | (0b01 << DMA_SxCR_MSIZE_Pos) | (0b01 << DMA_SxCR_PSIZE_Pos) | DMA_SxCR_MINC; DMA1_Stream1->M0AR = (uint32_t) data2; DMA1_Stream1->PAR = (uint32_t) &(GPIOD->IDR); DMA1_Stream1->NDTR = 10000; DMAMUX1_Channel0->CCR = DMAMUX_CxCR_EGE | (1); DMAMUX1_Channel1->CCR = DMAMUX_CxCR_EGE | (2); DMAMUX1_RequestGenerator0->RGCR = DMAMUX_RGxCR_GE | (0b01 << DMAMUX_RGxCR_GPOL_Pos) | (7); DMAMUX1_RequestGenerator1->RGCR = DMAMUX_RGxCR_GE | (0b01 << DMAMUX_RGxCR_GPOL_Pos) | (7); DMA1_Stream0->CR |= DMA_SxCR_EN; DMA1_Stream1->CR |= DMA_SxCR_EN; TIM12->CNT = 0; TIM12->CCMR1 |= TIM_CCMR1_CC2S_0; TIM12->CR2 = (0b010 << TIM_CR2_MMS_Pos); TIM12->CR1 |= TIM_CR1_CEN; while (DMA1_Stream0->NDTR) i++; TIM12->CR1 &= ~TIM_CR1_CEN;
рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдореЗрдореЛрд░реА рд╕реЗрдЧрдореЗрдВрдЯ рдореЗрдВ рдбреЗрдЯрд╛ рдФрд░ рдбреЗрдЯрд╛ 2 рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
__attribute__((section(".dma_buffer"))) uint16_t data[10240],data2[10240];
рдФрд░ рд▓рд┐рдВрдХрд░ рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдореЗрдВ:
.dma_buffer : { *(.dma_buffer) } >RAM_D1
рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдФрд░ рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рдмрд╕ рдмреЗрд╡рдХреВрдл рдирдХрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рд╕реАрдкреАрдпреВ (рдЕрднреА рднреА 400 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ):
uint16_t * ptr = cpudata; volatile uint16_t * src = &(GPIOE->IDR); volatile uint16_t * src2 = &(GPIOD->IDR); for (register int i = 0; i < 10000; i++) { *ptr++ = *src; *ptr++ = *src2; }
рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП, cpudata рдбреЗрдЯрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдерд┐рдд рдерд╛, рд╕рдмрд╕реЗ рддреЗрдЬрд╝ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╣ рд╕рдЪ рд╣реИ, рдХреЗрд╡рд▓ 64K) рд╕рдмрд╕реЗ рддреЗрдЬ рдореЗрдореЛрд░реА (400 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ) DTCMRAM рднреА рдерд╛ред
рдкрд░рд┐рдгрд╛рдо
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рджреМрд░рд╛рди, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕реАрдкреАрдпреВ рдХреА рдорджрдж рд╕реЗ рджреЛ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рд╕реЗ 12.5 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХреА рдЧрддрд┐ рд╕реЗ рдкрдврд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдФрд░ рдПрдХ рд╕реЗ 25 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬред рддреЛ рд╡рд┐рдХрд▓реНрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ...
рдбреАрдПрдордП рдФрд░
рдРрд╕реА рдорд╛рдВ рдХреА рдорджрдж рд╕реЗ
, TIM12 50 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХреА рдЧрддрд┐ рд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рдФрд░ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рдПрдХ рднреА рддреНрд░реБрдЯрд┐ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рд╣реБрдЖред рджреЛрдиреЛрдВ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЛ рдкрдврд╝рд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднреА рддрдХ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ рдХрд┐ рджреВрд╕рд░реЗ рдбреАрдПрдордП рд▓реИрдЧ рдкрд░ рдкрдврд╝рдирд╛ рдХрд┐рддрдирд╛ рджреВрд░ рд╣реИ ...
рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ (рдереЛрдбрд╝реЗ рдкрддрд┐рдд) рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ 32x50 = 1600 рдПрдордмреАрдкреАрдПрд╕ рдХреА рдЧрддрд┐ рд╕реЗ stm32h750 рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд╕реВрдЪрдирд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреА рдЧрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред