-
- Таблица есть в Cortex-M3 Technical Reference Manual. Chapter 18 - Instruction Timing. sbb(379 знак., 06.02.2012 17:19, ссылка)
- Спасибо огромное!!! Хоть один человек в состоянии ответить на вопрос по Cortex M3. Я раньше скачивал этот документ, но видимо, был невнимателен. Спасибо! Юрий_СВ(202 знак., 06.02.2012 17:32 - 17:35)
- До одного места. Ну почти. Есть ещё шины. STM32F103 @ 72 MHz, шина APB 36MHz. Между командами STR в шину периферии команды инкремента регистра «растворяются». Т.е. длительность импульса, порождаемого на выводе двумя STR не зависит от наличия между =ReAl=(76 знак., 06.02.2012 22:57, )
- Буферизация на шине, следующий STR задерживается, а другие команды, не обращающиеся к APB исполняются без задержки. sbb(577 знак., 07.02.2012 15:03)
- Может быть, где-то есть cycle-accurate simulator? Keil? - SciFi(06.02.2012 23:02)
- кейл циклы показывает. Но насколько он совпадает с реальностью, я не проверял, поскольку точный подсчёт циклов считаю дурной затеей koyodza(81 знак., 06.02.2012 23:06)
- А как можно корректно сэмулировать работу периферийных модулей, которые отделены от ядра периферийной шиной? Это к вопросу о тактах, программных задержках и ногодрыге. - rezident(06.02.2012 23:06)
- Понятно как: взять у разработчика МК и процессора исходники VHDL/Verilog/etc. Хотя мне кажется, у них так сказать просто best effort. - SciFi(06.02.2012 23:21)
- И как вам помогут исходники ядра? Как симулятор будет учитывать настройки доступа (WS) и ход выполнения программы (занятость шины, например, DMA-транзакцией)? - rezident(06.02.2012 23:32)
- как, как, эмуляцией шины и дма вестимо - =AlexD=(07.02.2012 16:46)
- А в каком симуляторе вы такое видели? - rezident(07.02.2012 17:50)
- в квартусе - SciFi(07.02.2012 18:07)
- В квартусе симулируется исполнение программы? - rezident(07.02.2012 18:10)
- А что, есть проблемы? - =AlexD=(07.02.2012 18:57)
- Конечно. - SciFi(07.02.2012 18:19)
- В квартусе симулируется исполнение программы? - rezident(07.02.2012 18:10)
- Может и не видел, но исключительно по лени и пофигизму симулятороваятелей. JTAG - наше фсё. - =AlexD=(07.02.2012 18:04)
- Понятно. Голимые фантазии. - rezident(07.02.2012 18:07)
- в квартусе - SciFi(07.02.2012 18:07)
- А в каком симуляторе вы такое видели? - rezident(07.02.2012 17:50)
- как, как, эмуляцией шины и дма вестимо - =AlexD=(07.02.2012 16:46)
- И как вам помогут исходники ядра? Как симулятор будет учитывать настройки доступа (WS) и ход выполнения программы (занятость шины, например, DMA-транзакцией)? - rezident(06.02.2012 23:32)
- Понятно как: взять у разработчика МК и процессора исходники VHDL/Verilog/etc. Хотя мне кажется, у них так сказать просто best effort. - SciFi(06.02.2012 23:21)
- удачного изучения. Это как раз тот документ, который нужно тщательно выучить на третьей неделе освоения МК :=) - koyodza(06.02.2012 17:43)
- 3 недели пишу под него. Перед этим 1.5 месяца читал (Ядро (PM0056), полное описание (RM0041-часть), энергонезависимая память (PM0063), пару дней назад подсказали по AMBA - пролистал, сегоня по TRM - полистаю). Юрий_СВ(128 знак., 06.02.2012 17:51)
- подобное бессистемное "галопирующее" изучение совсем не способствует качеству результата koyodza(138 знак., 06.02.2012 17:53)
- 3 недели пишу под него. Перед этим 1.5 месяца читал (Ядро (PM0056), полное описание (RM0041-часть), энергонезависимая память (PM0063), пару дней назад подсказали по AMBA - пролистал, сегоня по TRM - полистаю). Юрий_СВ(128 знак., 06.02.2012 17:51)
- только раздел "3.3.1 Cortex-M3 instructions" - Юрий_СВ(06.02.2012 17:41, ссылка)
- Да, это в свежей редакции DDI0337H. sbb(64 знак., 06.02.2012 18:36)
- До одного места. Ну почти. Есть ещё шины. STM32F103 @ 72 MHz, шина APB 36MHz. Между командами STR в шину периферии команды инкремента регистра «растворяются». Т.е. длительность импульса, порождаемого на выводе двумя STR не зависит от наличия между =ReAl=(76 знак., 06.02.2012 22:57, )
- Спасибо огромное!!! Хоть один человек в состоянии ответить на вопрос по Cortex M3. Я раньше скачивал этот документ, но видимо, был невнимателен. Спасибо! Юрий_СВ(202 знак., 06.02.2012 17:32 - 17:35)
- пора отказываться от старых привычек - koyodza(05.02.2012 21:37)
- А что, разве задержка delay_us() не реализована аппаратно в ядре Cortex M3? - Леонид Иванович(06.02.2012 11:59)
- Таймерами. В ядре SysTick есть. Зато в периферии их, как правило, хватает. - Гудвин(06.02.2012 12:10 - 12:14)
- SysTick слишком грубо. Недетерминированное ядро должно иметь детерминированные задержки. Если их нет, ф топку такое ядро. - Леонид Иванович(06.02.2012 12:22)
- Вы их не фтопку, вы их мне давайте. Я пристрою куда надо :-) - SciFi(06.02.2012 13:03)
- Еще один нищий? Нас двоих форум не вынесет. - Леонид Иванович(06.02.2012 13:43)
- Не, просто кремень жалко. Люди делали, старались, а тут раз - и фтопку. - SciFi(06.02.2012 13:49)
- Есть такое дело. Сколько у меня всего лежит, до чего руки никогда не дойдут (ведь смерть уже близко) - подумать страшно. - Леонид Иванович(06.02.2012 13:57)
- Не, просто кремень жалко. Люди делали, старались, а тут раз - и фтопку. - SciFi(06.02.2012 13:49)
- Еще один нищий? Нас двоих форум не вынесет. - Леонид Иванович(06.02.2012 13:43)
- почему грубо? Может считать на тактовой или на 1/8 от тактовой. Быстрые ядра по-любому тяготеют к недетерминированности времени выполнения команд, это факт. Да и для чего нужны точные временные интервалы? Для чего-то, что подключено снаружи. Вот и koyodza(107 знак., 06.02.2012 12:55)
- Вы их не фтопку, вы их мне давайте. Я пристрою куда надо :-) - SciFi(06.02.2012 13:03)
- SysTick слишком грубо. Недетерминированное ядро должно иметь детерминированные задержки. Если их нет, ф топку такое ядро. - Леонид Иванович(06.02.2012 12:22)
- Таймерами. В ядре SysTick есть. Зато в периферии их, как правило, хватает. - Гудвин(06.02.2012 12:10 - 12:14)
- Не всегда получится. Н-р, при настройке ЖКИ можно и таймерами обойтись (код длинее). А вот при выводе на него - не получится - нужна задержка тактов 10. Приходится в порты выводить без причины (работает). С программной реализацией быстрых Юрий_СВ(55 знак., 05.02.2012 21:58)
- "С программной реализацией быстрых нестандартных интерфейсов" плохо абсолютно на любом ядре - koyodza(05.02.2012 22:16)
- Не скажите. На АВР програмный USB на кварце 12 МГц. iso7816 в so8. 1-провойдый интерфейс, "?вейганд?(СКУД)". Для этого нужно оговоренное время выполнения и вменяемый конвеер. Всё. - Юрий_СВ(05.02.2012 22:36)
- "На АВР програмный USB" имеет смысл в основном как учебное пособие - koyodza(05.02.2012 22:54)
- Скоро так и будет. Но ещё недавно это позволяло снизить цену МК в 3 раза. - Юрий_СВ(05.02.2012 23:12)
- поделки не должны быть для продажи - Vit(05.02.2012 23:15)
- Скоро так и будет. Но ещё недавно это позволяло снизить цену МК в 3 раза. - Юрий_СВ(05.02.2012 23:12)
- "На АВР програмный USB" имеет смысл в основном как учебное пособие - koyodza(05.02.2012 22:54)
- Не скажите. На АВР програмный USB на кварце 12 МГц. iso7816 в so8. 1-провойдый интерфейс, "?вейганд?(СКУД)". Для этого нужно оговоренное время выполнения и вменяемый конвеер. Всё. - Юрий_СВ(05.02.2012 22:36)
- С программной реализацией быстрых нестандартных интерфейсов на этом ядре - совсем плохо. Что-то смысл этой фразы не доходит. Потому, что ядро Cortex-M3 и периферия связаны реализацией в конкретном МК. Какая-то rezident(91 знак., 05.02.2012 22:11)
- ЖКИ на KS0066, МК - STM32F100. А про интерфейсы - отдельно >> - Юрий_СВ(05.02.2012 22:40, ссылка)
- Прав koyodza, пора отказываться. ЖКИ надо цеплять на соотв. аппаратный интерфейс, а не на GPIO - Shura(05.02.2012 22:01)
- можно и на GPIO, причём без тормозов, если отказаться от старых привычек делать программные задержки - koyodza(05.02.2012 22:11, ссылка, ссылка)
- Я таки делаю. Но межлу установкой и снятие строба - 11+ тактов - вагон времени. Чередовать с другими делами - не желательно. Снятие займёт сколько-то (нет не фига в описании) тактов. Остальное - задержка. - Юрий_СВ(05.02.2012 22:43)
- почему нежелательно? Обычно можно найти что-то, что и так выполняется рядом (например, приращение указателя на данные и проверка границ), что вполне можно засунуть между установкой и сбросом строба. Всего-то 9 тактов задержать нужно если 24МГц koyodza(204 знак., 05.02.2012 22:52)
- Откуда знаете, что именно 9 тактов (засада в том, что время исполнения команд (в отличии от АВР) НИГДЕ не описано) ? (по доке ЖКИ - 450 нс, при такте 24 МГц - 41+нс) Юрий_СВ(401 знак., 05.02.2012 23:01)
- от верблюда. Знаю, потому как проверял koyodza(274 знак., 05.02.2012 23:10)
- Откуда знаете, что именно 9 тактов (засада в том, что время исполнения команд (в отличии от АВР) НИГДЕ не описано) ? (по доке ЖКИ - 450 нс, при такте 24 МГц - 41+нс) Юрий_СВ(401 знак., 05.02.2012 23:01)
- почему нежелательно? Обычно можно найти что-то, что и так выполняется рядом (например, приращение указателя на данные и проверка границ), что вполне можно засунуть между установкой и сбросом строба. Всего-то 9 тактов задержать нужно если 24МГц koyodza(204 знак., 05.02.2012 22:52)
- Я делаю также, но между, н-р, установкой E и его снятием 450 нс - вагон времени (11+ тактов). Пусть несколько тактов на снятие - всё равно вагон. Чередование с другими делами - нежелательно. Другого выхода не вижу. - Юрий_СВ(05.02.2012 22:34)reZident
- Ай, от 16х2 тоже пора отказываться :-D - Shura(05.02.2012 22:15)
- :) Ага, счас! Возму ЖКИ в 5 раз дороже и МК в 2 раза из любви к искуству. :) - Юрий_СВ(05.02.2012 22:45)
- да ладно, много где ещё нас переживут. Как 51 семейство - koyodza(05.02.2012 22:17)
- Я таки делаю. Но межлу установкой и снятие строба - 11+ тактов - вагон времени. Чередовать с другими делами - не желательно. Снятие займёт сколько-то (нет не фига в описании) тактов. Остальное - задержка. - Юрий_СВ(05.02.2012 22:43)
- можно и на GPIO, причём без тормозов, если отказаться от старых привычек делать программные задержки - koyodza(05.02.2012 22:11, ссылка, ссылка)
- "С программной реализацией быстрых нестандартных интерфейсов" плохо абсолютно на любом ядре - koyodza(05.02.2012 22:16)
- А что, разве задержка delay_us() не реализована аппаратно в ядре Cortex M3? - Леонид Иванович(06.02.2012 11:59)
- и 2-й вопрос (ответ на который НЕ снижает актуальности первого): какой операций Си лучше воспользоваться для формирования программной задержки (запись в порт (какой поуниверсальнее) или есть ещё варианты ?) - Юрий_СВ(05.02.2012 21:12)
- Операцией вызова ассемблерной функции :-) - SciFi(05.02.2012 22:49)
- Тоже вариант. Для одного и того же компилятора будет постоянное время. Но переносимость между компиляторами... Да и надо там что-то делать. Опять же - лучше всего писать в порт... - Юрий_СВ(05.02.2012 23:05)
- Вот так должно быть переносимо - Dmitry_D(78 знак., 06.02.2012 01:30)
- Задержка в несколько тактов с переносимостью между компиляторами? Оригинально. - SciFi(05.02.2012 23:14)
- А что удивительного ? Ядро одно, частота одно. Команды ассемблера указаны буквально. Если бы не разный синтаксис и особенности передачи параметров и работы со стеком - вполне реально. - Юрий_СВ(05.02.2012 23:17)
- Это всё от лукавого. Когда счёт пошёл на такты, Си не катит, нужен ассемблер. - SciFi(05.02.2012 23:19)
- Вдвойне от лукавого, и ассемблер может не помочь для современных МК, где кеши, акселераторы и им подобное. Даже на STM32F1хх за счет буфера предвыборки задержки на командах переходов будут зависеть от адреса перехода и на какие команды выполняется sbb(14 знак., 06.02.2012 16:51)
- это если ещё не упоминать про то, что с ARM вообще не имеет смысла такты считать - koyodza(05.02.2012 23:27)
- Это всё от лукавого. Когда счёт пошёл на такты, Си не катит, нужен ассемблер. - SciFi(05.02.2012 23:19)
- А что удивительного ? Ядро одно, частота одно. Команды ассемблера указаны буквально. Если бы не разный синтаксис и особенности передачи параметров и работы со стеком - вполне реально. - Юрий_СВ(05.02.2012 23:17)
- Тоже вариант. Для одного и того же компилятора будет постоянное время. Но переносимость между компиляторами... Да и надо там что-то делать. Опять же - лучше всего писать в порт... - Юрий_СВ(05.02.2012 23:05)
- "Запись в порт" -- не операция C. Кроме того, именно обращение к портам может притормозить выполнение на неизвестно сколько (зависит от архитектуры) и иногда достаточно много (пример: обращение к LPT-порту на 3ГГц пеньтиуме...) В общем случае fk0(155 знак., 05.02.2012 21:16)
- :)) Это на АВР таие фокусы проходят. Здесь же НОП только для выравнивания "NOP is not necessarily a time-consuming NOP. The processor might remove it from the pipeline before it reaches the execution stage." - Юрий_СВ(05.02.2012 21:21)
- Зато компилятор cycles-- уже не выкинет в силу того, что (asm volatile...) И как минимум 2*cycles задержка будет. - fk0(05.02.2012 21:32)
- по идее, не будет ни одного - Юрий_СВ(05.02.2012 21:41)
- Зато компилятор cycles-- уже не выкинет в силу того, что (asm volatile...) И как минимум 2*cycles задержка будет. - fk0(05.02.2012 21:32)
- :)) Это на АВР таие фокусы проходят. Здесь же НОП только для выравнивания "NOP is not necessarily a time-consuming NOP. The processor might remove it from the pipeline before it reaches the execution stage." - Юрий_СВ(05.02.2012 21:21)
- Чем использование счетчика циклов ядра не устраивает? - she(05.02.2012 21:14)
- Операцией вызова ассемблерной функции :-) - SciFi(05.02.2012 22:49)
- Таблица есть в Cortex-M3 Technical Reference Manual. Chapter 18 - Instruction Timing. sbb(379 знак., 06.02.2012 17:19, ссылка)