-
- я на тм4с1294 получал ровно половину тактовой 120 yyy(28 знак., 05.11.2019 20:14, )
- в cortex-m4 есть битбандинг, читать биты быстрее - сразу грузится бит в переменную с пина. обычным способом - считывается весь регистр idr а потом еще битовые маска накладывается, первое быстрее. но если битов много то как написать.. нужно klen(36 знак., 03.11.2019 13:17)
- Однозначно шустрее считать порт один раз. Оно же потом хранится в регистре ЦПУ. Иначе каждый раз загружать в регистр - замахаешься. - SciFi(26.10.2019 12:19)
- Поддержу. потому как AHB/APB далеко не всегда работают на частоте ядра. Плюс если побитово, то за время анализа могут состояния измениться. То есть мы прочитали состояние ножки в tn, а состояние другой уже будет tn+1. - Dingo(01.11.2019 10:41)
- У stm32f4 регистры GPIO сидят на AHB, и именно на частоте ядра. Пугать, конечно, полезно, но лучше по делу. - SciFi(01.11.2019 11:01)
- Проверил. Вы правы, AHB == MCU у этих МК. - Dingo(01.11.2019 12:33)
- У stm32f4 регистры GPIO сидят на AHB, и именно на частоте ядра. Пугать, конечно, полезно, но лучше по делу. - SciFi(01.11.2019 11:01)
- Какой тогда самый медленный способ опросить один порт (16 бит)? Через функции HAL ? Насколько можно "затянуть" этот процесс при написании кода руками, растущими из самых разных мест? - AU08(26.10.2019 12:20 - 12:22)
- Если есть задача замедлить, это мы легко. Что надо-то? :-) - SciFi(26.10.2019 12:22)
- Если (цитата) "на чтение 16-битного порта уходит ~0.1 мкс" (это свыше 120 циклов при F_cpu 168 МГц) то можно подозревать, что шаловливые ручки вместо простого чтения решили "функцию чтения" написать и вызывать? - AU08(26.10.2019 12:28 - 12:30)
- А порт при чтении точно не вызывает задержки на полсотни тактов, например? Потому, что логика везде, например, синхронная, а периферия тактируется существенно более низкой частотой. - fk0(26.10.2019 12:40)
- Дело не в тактировании. Данные передаются по шине AHB, которой нужно как минимум два такта на операцию чтения/записи в связи с пошаговой синхронизацией, в точном числе тактов могу ошибаться. evgeniy1294(131 знак., 03.11.2019 14:40)
- Нет, у stm32f4 всё просто вроде бы. Во всяком случае, делал DMA->GPIO на внешний ЦАП десятки MSPS - работает. - SciFi(26.10.2019 12:44)
- Сколько десятков? - Крок(03.11.2019 14:21)
- Как минимум два. - SciFi(03.11.2019 14:22)
- Неплохо. Как у пиков - Крок(03.11.2019 17:48)
- Как минимум два. - SciFi(03.11.2019 14:22)
- Спасибо! - AU08(26.10.2019 12:47)
- Кстати, вот --> SciFi(45 знак., 26.10.2019 12:53, ссылка)
- Сколько десятков? - Крок(03.11.2019 14:21)
- Да мало ли цитат? За всеми не уследишь. Хз, кто и что там имел в виду. - SciFi(26.10.2019 12:30)
- Меня пытались убедить, что быстрее 0,1 мкс прочитать ОДИН порт (16 бит) типа нельзя. Где в этом кубике, интересно, можно Asm код посмотреть? - AU08(26.10.2019 12:32)
- При чём здесь кубик? "int port = *(int volatile*)0x12345678;" Это сильно быстрее, чем 0,1 мкс. - SciFi(26.10.2019 12:36)
- Спасибо! - AU08(26.10.2019 12:49)
- При чём здесь кубик? "int port = *(int volatile*)0x12345678;" Это сильно быстрее, чем 0,1 мкс. - SciFi(26.10.2019 12:36)
- Меня пытались убедить, что быстрее 0,1 мкс прочитать ОДИН порт (16 бит) типа нельзя. Где в этом кубике, интересно, можно Asm код посмотреть? - AU08(26.10.2019 12:32)
- А порт при чтении точно не вызывает задержки на полсотни тактов, например? Потому, что логика везде, например, синхронная, а периферия тактируется существенно более низкой частотой. - fk0(26.10.2019 12:40)
- Если (цитата) "на чтение 16-битного порта уходит ~0.1 мкс" (это свыше 120 циклов при F_cpu 168 МГц) то можно подозревать, что шаловливые ручки вместо простого чтения решили "функцию чтения" написать и вызывать? - AU08(26.10.2019 12:28 - 12:30)
- Если есть задача замедлить, это мы легко. Что надо-то? :-) - SciFi(26.10.2019 12:22)
- Поддержу. потому как AHB/APB далеко не всегда работают на частоте ядра. Плюс если побитово, то за время анализа могут состояния измениться. То есть мы прочитали состояние ножки в tn, а состояние другой уже будет tn+1. - Dingo(01.11.2019 10:41)