Все замечательно получилось. Спасибо за идею.
Код в прерывании DMA
Код
#define DMA_BUF_SZ (512UL)
void DMA1_Channel3_IRQHandler(void)
{
uint32_t i, pos;
uint32_t isr_status = DMA1->ISR;
if( (isr_status & DMA_ISR_HTIF3) || (isr_status & DMA_ISR_TCIF3) )
{
GPIOA->ODR |= (1<<11);
if(isr_status & DMA_ISR_HTIF3) /* half buffer */
{
pos = 0;
DMA1->IFCR = DMA_IFCR_CHTIF3;
}
if(isr_status & DMA_ISR_TCIF3) /* full buffer */
{
pos = DMA_BUF_SZ/2;
DMA1->IFCR = DMA_IFCR_CTCIF3;
}
for(i=0; i<(DMA_BUF_SZ/2); ++i)
{
DMA_buf[pos] = 127+sin_table[table_index >> 23]/amp;
table_index += delta;
++pos;
}
GPIOA->ODR &= ~(1<<11);
}
}
Компилятор GCC, оптимизация O3, получилось в прерывании находится 12.2% времени, т.е. сквжность по ножке PA11 составляет 12.2%
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.