TTTTTTS
-
Постов
39 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные TTTTTTS
-
-
все заработало. спасибо за помощь.
натупил я, пол дня коту под хвост
-
2 минуты назад, Forger сказал:
Use NOP for padding, for example to place the following instruction on a 64-bit boundary
а причем здесь NOP? нет разницы что там по этому адресу, ноп или не ноп, процессор ведет себя одинаково в моем случае
-
1 минуту назад, jcxz сказал:
Купили Cortex-M7, а на эмулятор нет денег? Разоритесь уже, чтобы не страдать такой ерундой.
какой эмулятор? я в кейле отладчиком смотрел, в железе.
когда в регистре 0 бит равен 0- то выкидывает в хардфаулт
когда в регистре 0 бит равен 1 то поведение кейла при отладке мне не ясно, он повисает как будто работает некоторый цикл на микроконтроллере, стоит нажать стоп и я вижу что выкинуло на какой то адрес, совсем не тот на который я планировал, каждый раз этот адрес иной, в зависимости от того когда нажать стоп
-
Опубликовано · Изменено пользователем TTTTTTS · Пожаловаться
ARM Cortex-M7 Devices Generic User Guide страница 128
вернее страница 174. там внизу написано 3-128 подумал что это номер страницы
The BX and BLX instructions result in a UsageFault exception if bit[0] of Rm is 0
For BX and BLX, bit[0] of Rm must be 1 for correct execution but a branch occurs to the target
address created by changing bit[0] to 0
-
Вы невнимательны
23 минуты назад, TTTTTTS сказал:В мануалах пишут что необходимо в регистре, в котором инструкции передается адрес перехода, нулевой бит устанавливать в единицу, иначе генерируется UsageFault. Но это не работает
-
Опубликовано · Изменено пользователем TTTTTTS · Пожаловаться
Приветствую!
подскажите что не так с инструкциями BX, BLX. В мануалах пишут что необходимо в регистре, в котором инструкции передается адрес перехода, нулевой бит устанавливать в единицу, иначе генерируется UsageFault. Но это не работает, МК "повисает", в том что адрес верный, я уверен на 100%
если в нулевом разряде 0, то хардфаулт.
в общем и так не так, и эдак
с чем это может быть связано?
речь о cortex M7
-
читал я и не раз, у меня весь код написан мною на ассемблере, если бы не читал доки и не разбирался я бы МК даже не запустил.
но не все выходит сразу как описано, да и референс от st суховат. и не работал я раньше с тем что сейчас, опыта нет, когда он есть уже есть с чем сравнивать
например остались вопросы по пакетному чтению. по всей видимости оно у меня не работает, и когда незнаешь в чем причина, то начинаешь думать то ли это такой кривой контроллер sdram, такова его логика работы, то ли я что то упускаю. а все это из за отсутствия опыта, неначто опереться.
-
В общем поэксперементировал я еще, как упоминал память SDRAM 16 битная. В ходе экспериментов выяснил, если писать/читать в память по байту (LDRB, STRB) , то обращаться можно к любому адресу SDRAM.
если по пол слова (LDRH, STRH), то только к адресам выравненным на пол слова, если адрес не выравнен- то хардфаулт, аналогично ведет себя МК если писать/читать в SDRAM словами
обращение к внутренней SRAM по невыравненным адресам не вызыват хардфаулта
честно говоря, я незнаю как должна вести себя правильно SDRAM да еще в связке с контроллером МК
-
Собственно, похожим образом я и сделал. Читал правда не очень большой блок, но блок
Пробовал разные режимы, единственное что помогло это изменил CAS с 3 на 2. В среднем сейчас выходит 95 нС.
Все пляски с RBURST и RPIPE ни к чему не привели, как было 95нС так и осталось.
Какие мысли у меня, память 16 битная, по всей видимости AHB как и написано в референсе разбивает 32битные обращения на 2 последовательных. Тогда 1 обращение в районе 45 нС по длительности выходит
1такт на сдрам 10нС отсюда: CAS 2 такта + tRSD 2 такта уже 40нС
Другой вопрос почему-то не работает пакетное чтение и FIFO в микроконтроллере
и еще, незнаю должно быть так или нет, но обращаться к памяти у меня выходит только по адресам выровненным на 32бита, в других случаях выкидывает в хардфаулт
-
Опубликовано · Изменено пользователем TTTTTTS · Пожаловаться
1 час назад, KnightIgor сказал:Хотите точное время - используйте таймеры.
Да нет, собственно я хотел узнать сколько же реально времени у меня занимает доступ к SDRAM, ибо подключить то я ее подключил, но хотелось бы чтобы все работало быстро, а я не уверен что все сделал оптимально. хотел вносить изменения в настройки FMC и с помощью счетчика CYCCNT следить за результатом
вот сейчас у меня чтение из SDRAM занимает в среднем 100нС, это при том что ядро тактируется на 200МГц, а на SDRAM- 100МГц
-
раз так, то получается что сдвинув измеряемый участок кода вверх или вниз относительно всего кода, или переместив его в другое место, мы получим в каждом случае разные значения счетчика CYCCNT . несмотря на то что код по прежнему один и тот же. выходит что показания счетчика корректны для некоторого участка кода только здесь и сейчас, переместил код и значение иное
-
непонятно мне, ну хорошо, нет линейного соответсвия между количеством исполняемых команд и значением счетчика, как работать то теперь с этим счетчиком, стоит ли ему доверять или нет?
16 нопов - CYCCNT = 15, а 17 нопов CYCCNT равен уже 25
а кто то там еще строит задержки на нопах..
-
Здраствуйте!
есть плата от WaveShare с МК STM32F746IGT6, в процессе изучения написал такой код
;Включаем системный бит TRCENA MOV32 R0, SCB_DEMCR LDR R1, [R0] ORR R1, #(1 << 24) STR R1, [R0] ;снимаем блокировку MOV32 R0, DWT_LAR MOV32 R1, #0xC5ACCE55 STR R1, [R0] ;очищаем счетчик CYCCNT MOV32 R5, DWT_CYCCNT STR R10, [R5] ;Разрешаем DWT MOV32 R0, DWT_CTRL LDR R1, [R0] ORR R1, R11 ;в нулевой бит CYCCNTENA регистра DWT_CTRL записываем 1. тем самым STR R1, [R0] ;включаем счетчик CYCCNT, запускаем его NOP ;1 5 NOP ;2 5 NOP ;3 6 NOP ;4 5 NOP ;5 10 NOP ;6 10 NOP ;7 11 NOP ;8 11 NOP ;9 12 NOP ;10 12 NOP ;11 13 NOP ;12 13 NOP ;13 14 NOP ;14 14 NOP ;15 15 NOP ;16 15 NOP ;17 25 NOP ;18 25 NOP ;19 26 LDR R3, [R5]
расшифрую колонку с нопами, писался один ноп, МК прошивался, на дисплее который подключен к МК я видел значение счетчика CYCCNT, в комментариях напротив нопа записывал номер нопа и число которое выводилось на дисплей- значение CYCCNT. И так по кругу.
Например при 19 нопах значение CYCCNT = 26.
Явно видна нелинейность значений.
С чем это может быть связано и как это побороть?
Может быть кто-то у кого есть подобный МК прогонит мой код на своем МК хотя бы в нескольких точках, например что покажет у Вас CYCCNT при 19 нопах
спасибо
инструкция BX
в ARM
Опубликовано · Пожаловаться
все куда банальнее, ноль лишний добавил в адрес перехода.. раз десять адрес проверял, как не заметил не пойму