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

TTTTTTS

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

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

  • Посещение

Сообщения, опубликованные TTTTTTS


  1. 2 минуты назад, Forger сказал:

    Use NOP for padding, for example to place the following instruction on a 64-bit boundary

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

  2. 1 минуту назад, jcxz сказал:

    Купили Cortex-M7, а на эмулятор нет денег? Разоритесь уже, чтобы не страдать такой ерундой.

    какой эмулятор? я в кейле отладчиком смотрел, в железе.

    когда в регистре 0 бит равен 0- то выкидывает в хардфаулт

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

  3. 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
     

  4. Вы невнимательны

    23 минуты назад, TTTTTTS сказал:

    В мануалах пишут что необходимо в регистре, в котором инструкции передается адрес перехода, нулевой бит устанавливать в единицу, иначе генерируется UsageFault. Но это не работает

     

  5. Приветствую!

    подскажите что не так с инструкциями BX, BLX. В мануалах пишут что необходимо в регистре, в котором инструкции передается адрес перехода, нулевой бит устанавливать в единицу, иначе генерируется UsageFault. Но это не работает, МК "повисает", в том что адрес верный, я уверен на 100%

    если в нулевом разряде 0, то хардфаулт.

    в общем и так не так, и эдак

    с чем это может быть связано?

    речь о cortex M7
     

  6. читал я и не раз, у меня весь код написан мною на ассемблере, если бы не читал доки и не разбирался я бы МК даже не запустил.

    но не все выходит сразу как описано, да и референс от st суховат. и не работал я раньше с тем что сейчас, опыта нет, когда он есть уже есть с чем сравнивать

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

     

  7. В общем поэксперементировал я еще, как упоминал память SDRAM 16 битная. В ходе экспериментов выяснил, если писать/читать в память по байту (LDRB, STRB) , то обращаться можно к любому адресу SDRAM.

    если по пол слова (LDRH, STRH), то только к адресам выравненным на пол слова, если адрес не выравнен- то хардфаулт, аналогично ведет себя МК если писать/читать в SDRAM словами

    обращение к внутренней SRAM по невыравненным адресам не вызыват хардфаулта

    честно говоря, я незнаю как должна вести себя правильно SDRAM да еще в связке с контроллером МК

     

  8. Собственно, похожим образом я и сделал. Читал правда не очень большой блок, но блок

    Пробовал разные режимы, единственное что помогло это изменил CAS с 3 на 2. В среднем сейчас выходит 95 нС.

    Все пляски с RBURST и RPIPE  ни к чему не привели, как было 95нС так и осталось.

    Какие мысли у меня, память 16 битная, по всей видимости AHB как и написано в референсе разбивает 32битные обращения на 2 последовательных. Тогда 1 обращение в районе 45 нС по длительности выходит

    1такт на сдрам 10нС отсюда:  CAS  2 такта + tRSD 2 такта уже 40нС

     

    Другой вопрос почему-то не работает пакетное чтение и FIFO в микроконтроллере

    и еще, незнаю должно быть так или нет, но обращаться к памяти у меня выходит только по адресам выровненным на 32бита, в других случаях выкидывает в хардфаулт

  9. 1 час назад, KnightIgor сказал:

    Хотите точное время - используйте таймеры.

    Да нет, собственно я хотел узнать сколько же реально времени у меня занимает доступ к SDRAM, ибо подключить то я ее подключил, но хотелось бы чтобы все работало быстро, а я не уверен что все сделал оптимально. хотел вносить изменения в настройки FMC и с помощью счетчика  CYCCNT следить за результатом

    вот сейчас у меня чтение из SDRAM занимает в среднем 100нС, это при том что ядро тактируется на 200МГц, а на SDRAM- 100МГц

  10. раз так, то получается что сдвинув измеряемый участок кода вверх или вниз относительно всего кода, или переместив его в другое место, мы получим в каждом случае разные значения счетчика CYCCNT . несмотря на то что код по прежнему один и тот же. выходит что показания счетчика корректны для некоторого участка кода только здесь и сейчас, переместил код и значение иное

  11. непонятно мне, ну хорошо, нет линейного соответсвия  между количеством исполняемых команд и значением счетчика, как работать то теперь с этим счетчиком, стоит ли ему доверять или нет?

    16 нопов - CYCCNT = 15, а 17 нопов  CYCCNT равен уже 25

     

    а кто то там еще строит задержки на нопах..

     

  12. Здраствуйте!

    есть плата от 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 нопах

    спасибо

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