В контексте STM32 выполнять код из SPI может STM32L4 серия, с задержками 1-2WS. В доке указано в зависимости от режима 0,469 и 0,754 выборки на МГц, что естественно медленнее чем из внутренней Flash.
Reflector, Подскажите данные Блу пилл 103C8T6 Есть код слив 6К самплов c АЦП в порт А0-А7 на 3000 +-сампле рассинхрон клока и защелкивания данных в порту (выбросы кода АЦП + 127+-) а потом что самое интенсное через 200 + -тактов снова синхрон клок 1/6 от тактовой 96 итого 16 мегасамплов в сек
Код:
// tim1 htim1.Init.Period = 5; sConfigOC.Pulse = 3; // pure 1/2 Meandr 16MHz HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); //adc clock //disable all IRQ ? __disable_irq (); SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; // void PORTA_ADC( ) //6000 sample { __HAL_TIM_SET_COUNTER(&htim1, 0); //Reset timer1(ADC clock) for sync to ADC adc_data[0]= GPIOA->IDR; adc_data[1]= GPIOA->IDR; adc_data[2]= GPIOA->IDR; adc_data[3]= GPIOA->IDR; adc_data[4]= GPIOA->IDR; adc_data[5]= GPIOA->IDR; // up to 5999
adc_data[0]= GPIOA->IDR; adc_data[1]= GPIOA->IDR; adc_data[2]= GPIOA->IDR; adc_data[3]= GPIOA->IDR; adc_data[4]= GPIOA->IDR; adc_data[5]= GPIOA->IDR; // up to 5999
Нельзя так делать, о чем ранее в теме уже писалось. Даже если этот будут отдельные asm инструкции нет никаких гарантий, что компилятор так все и оставит. Должен быть один asm блок, типа такого:
такая конструкция сколько Даст мегасаплов ? может ли контроллер одновременно делать GPIOA->BSRR = GPIO_BSRR_BS0; и adc_data[0]= GPIOA->IDR; ? ведь первое это какой то атомарный доступ авторое обычный а если такая же контрукция но развернутый цикл
Нужно замерять, я не могу хотя бы потому, что от всех F1 уже избавился.
Цитата:
может ли контроллер одновременно делать GPIOA->BSRR = GPIO_BSRR_BS0; и adc_data[0]= GPIOA->IDR; ?
Не важно какой доступ, данные с портов читаются через шины, для F1 -это APB, к ней доступ идет через AHB чтобы его еще больше замедляет, потому F1 с портами работает так медленно. У большинства мк порты на AHB, тогда вместо 6-ти тактов обычно получается 4, а F3 работает с портами напрямую, минуя шину, тогда можно и 2 такта получить. Одновременно читать и писать с портов можно только если шины разные и в качестве второго мастера выступает DMA. Если хочешь большую скорость, то впаяй на свой Блу пилл F303, он по ногам совместим. Как вариант, можно генерить строб таймером который вдобавок пинает DMA читающий данные, я делал так на вывод, но это тактов 12 минимум...
Я про это и говорил, сам раз столкнулся, причем там было все на ассме, но отдельными строками и примерно через сотню команд между LDR/STR компилятор нагенерил всякого, а потом до самого конца опять все нормально
Сейчас этот форум просматривают: shalfey и гости: 19
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения