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

TTTTTTS

Участник
  • Постов

    39
  • Зарегистрирован

  • Посещение

Весь контент TTTTTTS


  1. инструкция BX

    все куда банальнее, ноль лишний добавил в адрес перехода.. раз десять адрес проверял, как не заметил не пойму
  2. инструкция BX

    все заработало. спасибо за помощь. натупил я, пол дня коту под хвост
  3. инструкция BX

    а причем здесь NOP? нет разницы что там по этому адресу, ноп или не ноп, процессор ведет себя одинаково в моем случае
  4. инструкция BX

    какой эмулятор? я в кейле отладчиком смотрел, в железе. когда в регистре 0 бит равен 0- то выкидывает в хардфаулт когда в регистре 0 бит равен 1 то поведение кейла при отладке мне не ясно, он повисает как будто работает некоторый цикл на микроконтроллере, стоит нажать стоп и я вижу что выкинуло на какой то адрес, совсем не тот на который я планировал, каждый раз этот адрес иной, в зависимости от того когда нажать стоп
  5. инструкция BX

    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
  6. инструкция BX

    Вы невнимательны
  7. инструкция BX

    Приветствую! подскажите что не так с инструкциями BX, BLX. В мануалах пишут что необходимо в регистре, в котором инструкции передается адрес перехода, нулевой бит устанавливать в единицу, иначе генерируется UsageFault. Но это не работает, МК "повисает", в том что адрес верный, я уверен на 100% если в нулевом разряде 0, то хардфаулт. в общем и так не так, и эдак с чем это может быть связано? речь о cortex M7
  8. читал я и не раз, у меня весь код написан мною на ассемблере, если бы не читал доки и не разбирался я бы МК даже не запустил. но не все выходит сразу как описано, да и референс от st суховат. и не работал я раньше с тем что сейчас, опыта нет, когда он есть уже есть с чем сравнивать например остались вопросы по пакетному чтению. по всей видимости оно у меня не работает, и когда незнаешь в чем причина, то начинаешь думать то ли это такой кривой контроллер sdram, такова его логика работы, то ли я что то упускаю. а все это из за отсутствия опыта, неначто опереться.
  9. В общем поэксперементировал я еще, как упоминал память SDRAM 16 битная. В ходе экспериментов выяснил, если писать/читать в память по байту (LDRB, STRB) , то обращаться можно к любому адресу SDRAM. если по пол слова (LDRH, STRH), то только к адресам выравненным на пол слова, если адрес не выравнен- то хардфаулт, аналогично ведет себя МК если писать/читать в SDRAM словами обращение к внутренней SRAM по невыравненным адресам не вызыват хардфаулта честно говоря, я незнаю как должна вести себя правильно SDRAM да еще в связке с контроллером МК
  10. Собственно, похожим образом я и сделал. Читал правда не очень большой блок, но блок Пробовал разные режимы, единственное что помогло это изменил CAS с 3 на 2. В среднем сейчас выходит 95 нС. Все пляски с RBURST и RPIPE ни к чему не привели, как было 95нС так и осталось. Какие мысли у меня, память 16 битная, по всей видимости AHB как и написано в референсе разбивает 32битные обращения на 2 последовательных. Тогда 1 обращение в районе 45 нС по длительности выходит 1такт на сдрам 10нС отсюда: CAS 2 такта + tRSD 2 такта уже 40нС Другой вопрос почему-то не работает пакетное чтение и FIFO в микроконтроллере и еще, незнаю должно быть так или нет, но обращаться к памяти у меня выходит только по адресам выровненным на 32бита, в других случаях выкидывает в хардфаулт
  11. Да нет, собственно я хотел узнать сколько же реально времени у меня занимает доступ к SDRAM, ибо подключить то я ее подключил, но хотелось бы чтобы все работало быстро, а я не уверен что все сделал оптимально. хотел вносить изменения в настройки FMC и с помощью счетчика CYCCNT следить за результатом вот сейчас у меня чтение из SDRAM занимает в среднем 100нС, это при том что ядро тактируется на 200МГц, а на SDRAM- 100МГц
  12. раз так, то получается что сдвинув измеряемый участок кода вверх или вниз относительно всего кода, или переместив его в другое место, мы получим в каждом случае разные значения счетчика CYCCNT . несмотря на то что код по прежнему один и тот же. выходит что показания счетчика корректны для некоторого участка кода только здесь и сейчас, переместил код и значение иное
  13. непонятно мне, ну хорошо, нет линейного соответсвия между количеством исполняемых команд и значением счетчика, как работать то теперь с этим счетчиком, стоит ли ему доверять или нет? 16 нопов - CYCCNT = 15, а 17 нопов CYCCNT равен уже 25 а кто то там еще строит задержки на нопах..
  14. счетчик DWT - аритмия

    Здраствуйте! есть плата от 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 нопах спасибо
×
×
  • Создать...