Видимо уже совсем мозги не соображают. Глаз замылился. Надо туда стукнуть чем поприличней.
Такая версия звучала:
В порт выводится значение. Я честно ответил, что я туда ничего не вывожу из других мест. Оказывается это происходит по моему недопониманию. Я и сейчас непонимаю. Или переклинило мозг.
Поясните без обид, что я делаю не так. Мне и так уже стыдно.
Я вывожу код строки. Объявление в файле - такое:
#define STR0 19 // Выход дешифратора строки
#define STR1 20 // Выход дешифратора строки
#define STR2 21 // Выход дешифратора строки
Хомут происходит в следующей строке прерывания FIQ
_IOCLR = 7UL<<STR0; _IOSET = (uint32_t)Str_Dec<<STR0; // Вывести в порт E адрес строки
Я пытаюсь обнулить предыдущее значение и вывести новое.
Строка выводится начиная с 20.
Вкладываю Вам скриншот из под J-Link.
Там видно следующее:
В позиции 4 видно что значение Str_Ekr = 1, а адрес его 40009136
В позиции 3 видно, что по адресу ..35 размещена 2, а в 36 - 1
В позиции 2 виден асмовый листинг этого куска, где видно что значение извлекается по адресу r2 со смещением 97. (я не силён в ARM асме. Это я так полагаю)
В позиции 1 видно значение R2 = ...90d4. Если прибавить 97, то получаем ..9135 на калькуляторе. Там как мы видим находится 2.
В позиции 5 видно, что в R12 загрузилась именно эта 2. По листингу далее видно, что её планируется сдвинуть на 19 позиций, в результате чего 1 окажется в бите D20, а не D19 ка бы мне того хотелось на ночь глядя.
Если присмотрется выше позиции 2, то видно что в R12 заносится число 0x380000. Это 7 сдвинутая на 19. Что говорит о том, что STR0 действительно 19, да и ниже видно тоже.
Где я заблуждаюсь.
PS: Больно не бейте.
Эскизы прикрепленных изображений