0 / 0 / 0
Регистрация: 10.05.2024
Сообщений: 12
|
|||||||||||
1 | |||||||||||
Инструкция CPSE неисправна. AVR12.08.2024, 22:40. Показов 833. Ответов 12
Написал код на ASM, не работал. Команда CPSE должна была сравнить первую РОН с нулем и перепрыгнуть через следующую инструкцию, но вместо этого оказывалась на дальней метке, явно продолжая выполнять инструкции. Исправил заменив:
CPSE r17, r19 ;r19 равно Нулю ... на CPI r17, 0 BRBS SREG_Z, zero ;Если Ноль, перепрыгиваем к zero. ... zero ... Все заработало. Но никак не пойму как эта ошибка вызывается!!.А вот тема где началась проблема, но читать необязательно, тут повторю код SPI на AVR через ASSEMBLER Течение этой ошибки: Наш контроллер включает SPI в режиме Slave, получает сообщение от MASTER, ставит HIGH на P7, перезагружается, естественно сбрасывая r17 и P7, а дальше чудо, стоит Даже пальцем дотронуться до контактов MOSI, MISO или SCLK он каким то образом попадает на метку funf и там выставляется HIGH на P7 (ключ), проигнорировав этапы проверки пароля на активацию. Funf находится на 0x3A что выходит за рамки прерываний и вообще виновата логика, если добавить еще кода он все равно переходит на метку. Пробывал в 3-х контроллерах! Сразу говорю, чтобы пройти поэтапные проверки символов r17 должен себе присвоить число больше >7 - 0bxxxxx000. Я предполагал что он с выставлением флагов тоже себе пробивал эти флаги. Но сделав проверку r17 на наличие числа, он оказался пуст. Как он оказывается на метке funf? или почему ставится P7 лишь одним соприкасанием с SCLK? Slave: Кликните здесь для просмотра всего текста
Master: Кликните здесь для просмотра всего текста
0
|
12.08.2024, 22:40 | |
Ответы с готовыми решениями:
12
Неисправна ОП Мышь неисправна GF 6600 неисправна? Неисправна Функция BitBlt |
Просто Лис
|
||||||||||||||||
13.08.2024, 19:56 | 2 | |||||||||||||||
Если честно, мне комбинация команд
cpse + rjmp не нравится. Зачем вам безусловный переход, если есть условный?На мой взгляд, команда cpse создана для реализации условного сложения, например.
Ещё мне не нравится, как у вас сделана таблица прерываний. Может такое произойти, что у вас срабатывается какое-то необратываемое прерывание.
И стек не проинициализирован, хотя вы используете его (при прерываниях). упс!
1
|
3968 / 2512 / 422
Регистрация: 09.09.2017
Сообщений: 11,108
|
|
14.08.2024, 09:51 | 3 |
0
|
0 / 0 / 0
Регистрация: 10.05.2024
Сообщений: 12
|
||||||
14.08.2024, 22:02 [ТС] | 4 | |||||
Очень приятно увидеть новый код.
имею дело с Atmega328p и вроде у всех Mega уже выставлено известное число оперативной памяти Stack Point. У меня 3 маленьких добуцу Atmega328p. И вот попробовал новый код с Наоборот стоящей инициализацией, Теперь P7 загорается без инструкции CPSE. Нули на R17, а он все равно до него доходит до метки funf. Как, если все, кроме spi, прерывания выключены ( ̄ヘ ̄)┌? Кликните здесь для просмотра всего текста
Уже попробовал алгоритмы с CPSE и там все работало. А код выше каким то образом выполняет инструкцию за меткой funf. А ведь ошибка пропадала когда я менял CPSE на SBRS инструкцию.
0
|
Просто Лис
|
||||||
15.08.2024, 16:04 | 5 | |||||
Ты предлагаешь нам без отладчика понять, что происходит в твоём коде? Упрости код, пока он не станет соответствовать твоим ожиданиям, а потом усложняй.
1
|
0 / 0 / 0
Регистрация: 10.05.2024
Сообщений: 12
|
|
15.08.2024, 19:32 [ТС] | 6 |
Я просто уже не знал в какую сторону упрощать. Попался на том что после прошивания Загрузчик очищает РОН, а после перезагрузки РОНы могут быть чем то заполнены.
CPSE исправна, проблема решена: По перепрошиванию МК - Загрузчик очищает РОН ячейки. А после обычного запуска МК - загрузчик запихивает левые значения в РОН. В регистре r19 были левые значения. И это у меня atmega328p и троя они у меня разных производителей а загрузчики одинаковые. Меня еще эмулятор запутал, там пытался выяснить.
0
|
3968 / 2512 / 422
Регистрация: 09.09.2017
Сообщений: 11,108
|
|
15.08.2024, 20:36 | 7 |
А на основании чего вы полагали, что в регистрах будут нули?
И, кстати, надеюсь, вы не ожидаете, что оперативка при включении также содержит нули. Какой еще загрузчик? Свежекупленная микросхема никаких загрузчиков не содержит.
1
|
0 / 0 / 0
Регистрация: 10.05.2024
Сообщений: 12
|
|
15.08.2024, 21:37 [ТС] | 8 |
0
|
11 / 11 / 0
Регистрация: 23.01.2019
Сообщений: 67
|
||||||
16.08.2024, 07:46 | 9 | |||||
Мне тоже ))
Если на "0" проверять, то вместо CPSE наверное лучше tst использовать. И не нужно дополнительный регистр задействовать.
1
|
3968 / 2512 / 422
Регистрация: 09.09.2017
Сообщений: 11,108
|
|
16.08.2024, 12:09 | 10 |
1
|
3968 / 2512 / 422
Регистрация: 09.09.2017
Сообщений: 11,108
|
|
16.08.2024, 15:16 | 12 |
Ладно еще переменные, тот же Си гарантирует, что некоторые "неинициализированные" переменный будут инициализированы нулями. Но как можно ожидать нахождения какого-либо значения в регистрах?!
1
|
0 / 0 / 0
Регистрация: 10.05.2024
Сообщений: 12
|
|
21.08.2024, 11:28 [ТС] | 13 |
А я перепутал TEST AI32 с TST AVR, думал такой мнемоники уже нет, вот и не компилировался
0
|
21.08.2024, 11:28 | |
21.08.2024, 11:28 | |
Помогаю со студенческими работами здесь
13
Неисправна sim-карта Неисправна оперативная память неисправна сетевая карта Неисправна оперативна память AVR JTAG mkI + avarice + avr-gdb + Linux AVR AVRISP STK500 V3.0 USB ISP Programmer for AVR IC Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |