Перейти к содержанию
    

На какой частоте работает АЛУ в STM32?

Добрый день.

 

Если в качестве источника тактирования STM32F103 выбран внутренний высокоскоростной источник HSI (8 МГц), а все делители в древе тактирования установлены в единицу, то на какой частоте будет работать АЛУ?

 

Я пишу прошивку для STM32F103 и некоторые её фрагменты необходимо выполнять за минимально возможное время. В ходе отладки я вывел на пин MCO тактирование HSI и обнаружил, что GPIO переключается то по переднему фронту HSI, то по заднему, то ровно посередине между фронтами. Такое ощущение, что АЛУ работает в 4 раза быстрее, чем HSI. Я попробовал вывести на MCO тактирование от SYSCLK (путём установки RCC_MCO1SOURCE_SYSCLK в функции HAL_RCC_MCOConfig), но линия MCO установилась в верхний уровень и не выдала ничего.

 

Собственно, основной вопрос: на какой частоте будет работать АЛУ? И побочный - почему SYSCLK не выводится на MCO, хотя HSI - вполне выводится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, flammmable said:

то на какой частоте будет работать АЛУ?

На этот вопрос даёт ответ схема тактирования микроконтроллера. Она приводится в разделе Reset and Clock Control (RCC). Для каждой модификации микроконтроллера эта схема может отличаться даже внутри подсемейства, например для STM32F091 и STM32F051. Таже возле переключателей и мультиплексоров указаны биты регистров, отвечающих за конфигурацию. Всё это нужно собрать вместе, и это даст Вам ответ. Просто так ответить нельзя.

1 hour ago, flammmable said:

АЛУ работает в 4 раза быстрее, чем HSI

ФАПЧ?

1 hour ago, flammmable said:

то на какой частоте будет работать АЛУ?

HCLK 8 МГц, если всё так, как Вы говорите.

Теперь смотрите по схеме, что у Вас там включено.

image.thumb.png.278cb0a0bc31a0658092484a6abe687f.png

1 hour ago, flammmable said:

Я попробовал вывести на MCO тактирование от SYSCL

HSI частота должна появиться на MCO один к одному без деления.

image.png.649b99d9a0eaa07ed4fe7851313d4745.png

Это не забыли выполнить?

image.thumb.png.05d4aed6e136c78121600b1e9b79406e.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Внутренняя схема АЛУ подразумевает несколько активных фронтов одного тактового сигнала. Но в широком доступе этой схемы конечно же нету. 
Однако, сигналы на выходах синхронизируются по тактам шины ABP2 (в F103). Получившиеся же непонятки, вероятно, связаны с плохим качеством эксперимента.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, flammmable сказал:

ощущение, что АЛУ работает в 4 раза быстрее

Из определения архитектуры, безусловная команда выполняется за один такт, но не каждый тип памяти настолько быстрый, поэтому между ними и АЛУ вставлен конвейер, отсюда и разное время для одного и того же кода, а в целом это выглядит так:

bad-735.gif.8f00f47b94c56957ee35e5fdfdce0815.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Начинать надо не с этого вопроса, а с ознакомления сообщества с тем, что явилось предпосылкой к нему...
 

2 часа назад, flammmable сказал:

Я пишу прошивку для STM32F103 и некоторые её фрагменты необходимо выполнять за минимально возможное время. В ходе отладки я вывел на пин MCO тактирование HSI и обнаружил, что GPIO переключается то по переднему фронту HSI, то по заднему, то ровно посередине между фронтами.

Сколько ж времени должно пройти, чтобы люди осознали, что измерения ногодрыгами GPIO на ARM это словно измерять радиус экватора резинкой от трусов:smile:

2 часа назад, flammmable сказал:

Если в качестве источника тактирования STM32F103 выбран внутренний высокоскоростной источник HSI (8 МГц), а все делители в древе тактирования установлены в единицу, то на какой частоте будет работать АЛУ?

На 8 МГц, разумеется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, flammmable said:

Добрый день.

 

Если в качестве источника тактирования STM32F103 выбран внутренний высокоскоростной источник HSI (8 МГц), а все делители в древе тактирования установлены в единицу, то на какой частоте будет работать АЛУ?

 

Я пишу прошивку для STM32F103 и некоторые её фрагменты необходимо выполнять за минимально возможное время. В ходе отладки я вывел на пин MCO тактирование HSI и обнаружил, что GPIO переключается то по переднему фронту HSI, то по заднему, то ровно посередине между фронтами. Такое ощущение, что АЛУ работает в 4 раза быстрее, чем HSI. Я попробовал вывести на MCO тактирование от SYSCLK (путём установки RCC_MCO1SOURCE_SYSCLK в функции HAL_RCC_MCOConfig), но линия MCO установилась в верхний уровень и не выдала ничего.

 

Собственно, основной вопрос: на какой частоте будет работать АЛУ? И побочный - почему SYSCLK не выводится на MCO, хотя HSI - вполне выводится.

DWT и гугл в помощь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и по поводу смены состояния ножки. если оно делается HAL, то ничего нельзя сказать (там целая цепочка вызовов). если делается логической операцией с номером ножки и регистром ODR то это занимает порядка 5 ассемблерных команд ,  если регистром BSRR то 2 ассемблерных команды. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 hours ago, Arlleex said:

Сколько ж времени должно пройти, чтобы люди осознали, что измерения ногодрыгами GPIO на ARM это словно измерять радиус экватора резинкой от трусов:smile:

Там же пин MCO:blum: Он аппаратно дёргается. 8 МГЦ - не такая большая частота, чтобы показать её.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, haker_fox сказал:

Там же пин MCO:blum: Он аппаратно дёргается. 8 МГЦ - не такая большая частота, чтобы показать её.

Моя внутренняя ванга сообщает мне, что ТС вывел на MCO частоту (клоки) CPU, и относительно них смотрит на программно переключаемый GPIO (который не MCO):wink:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насколько я помню свои старые  эксперименты, ногу можно переключить за 2 такта одной асмовой инструкцией str. Таким образом, самый быстрый ногодрыг вдвое медленнее системной частоты. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем спасибо, но короче отбой. Я затупился и в сгенерённый Кубом код скопипастил инициализацию тактирования с включённым PLL. Когда я нашёл ошибку и переключился на чистый HSI всё заработало как надо - GPIO щёлкают исключительно по восходящему фронту HSI.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

35 minutes ago, flammmable said:

Я затупился и в сгенерённый Кубом код скопипастил инициализацию тактирования с включённым PLL.

РРР! Я даже когда инициализирую регистры сам, а я делаю это всегда, иногда проверяю их содержимое хотя бы в отладчике...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...