Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Загрузчик для PIC18 /16
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
skyv
Привет.
В Ap.Note AN1310 описан загрузчик для PIC18 /16.
В исходном коде загрузчика для пика есть реализация 16-bit CCIT CRC.
Значение полинома в статье не приводится, но судя по наименованию
CRC он должен быть равен 0x1021.
В отладчике MPLAB решил проверить работу этой функции.
Подсчитал CRC для стандартной последовательности – 123456789
и получил значение 0x2378 (при исходном 0) и 0x3B0A (при исходном 0xFFFF) .
В калькуляторах по расчету CRC получаю 0x31C3 (при исходном 0) и
0x29B1 (при исходном 0xFFFF). В чем проблема не могу понять.
Эту вставку я дописал для проверки.
movlw .1 rcall AddCrc
movlw .2 rcall AddCrc
movlw .3 rcall AddCrc
movlw .4 rcall AddCrc
movlw .5 rcall AddCrc
movlw .6 rcall AddCrc
movlw .7 rcall AddCrc
movlw .8 rcall AddCrc
movlw .9 rcall AddCrc
Kolia
http://www.zorc.breitbandkatze.de/crc.html

Final XOR value = 12BB
skyv
Цитата(Kolia @ Apr 3 2012, 12:41) *


Этим калькулятором я пользовался.
Его результаты не совпадают с результатами вычисления
CRC функцией в коде загрузчика для PIC.
Об этом я выше и написал.
Что означает Ваше Final XOR value = 12BB
и при каких условиях оно получено я не понял.
Kolia
Цитата(skyv @ Apr 3 2012, 14:59) *
Этим калькулятором я пользовался.
Его результаты не совпадают с результатами вычисления
CRC функцией в коде загрузчика для PIC.
Об этом я выше и написал.
Что означает Ваше Final XOR value = 12BB
и при каких условиях оно получено я не понял.


Так в этом калькулятор этот пункт есть, а значит это что после вычисление crc с результатом проводят операцию XOR, кода я не видел но чисто эмпирически похоже на это wink.gif
fox2trot
При подсчете CRC не забывайте про бит переноса. Встречал, такое что в некоторых аппноутах об этом не упоминается, но используется. Сам напоролся, когда первый раз писал подсчет по описанию алгоритма. Так что читайте предельно внимательно и проверяйте.
skyv
В asm коде загрузчика увидел интересный для себя ход в том месте алгоритма,
где принят фрейм команды и надо переходить к вычислению CRC.

movff POSTDEC0, PRODH.

Этой командой мы записываем последний принятый байт фрейма (это байт CRCH) в
старший байт регистра результата умножителя для временного хранения. В документе PIC18F2682/2685/4682/4685 я нигде не увидел
обозначение доступа (r, w) к этому регистру. Только на рисунке fig1.1 к нему подходят двунаправленные стрелки.
Мы имеем право писать в этот регистр?
Kolia
Цитата(skyv @ Apr 9 2012, 15:09) *


Если в описании ничего не написано и есть под рукой контроллер - можно и самому проверить sm.gif
fox2trot
Плохо искали значит:
All PIC18 devices include an 8 x 8 hardware multiplier
as part of the ALU. The multiplier performs an unsigned
operation and yields a 16-bit result that is stored in the
product register pair, PRODH:PRODL. The multiplier’s
operation does not affect any flags in the Status
register.
POSTDEC0 - NOTE: 4: This is not a physical register.
С обеими регистрами можно производить операции чтение\модификация\запись.
ГМ, как же вы пишете программы, если толком не знаете структуру контроллера ???
skyv
Цитата(fox2trot @ Apr 12 2012, 19:27) *
...
С обеими регистрами можно производить операции чтение\модификация\запись.
...

Это Вы сами придумали? Где в приведенном Вами тексте об этом написано?
Ildar Belkin
Цитата(skyv @ Apr 9 2012, 16:09) *
В asm коде загрузчика увидел интересный для себя ход в том месте алгоритма,
где принят фрейм команды и надо переходить к вычислению CRC.

movff POSTDEC0, PRODH.

Этой командой мы записываем последний принятый байт фрейма (это байт CRCH) в
старший байт регистра результата умножителя для временного хранения. В документе PIC18F2682/2685/4682/4685 я нигде не увидел
обозначение доступа (r, w) к этому регистру. Только на рисунке fig1.1 к нему подходят двунаправленные стрелки.
Мы имеем право писать в этот регистр?


100% можно использовать. Мой код для PIC18F46K22 изобилует вариациями на чтение/модификации с PRODH:PRODL, в том числе movff POSTDEC0,PRODH. Как минимум в разделе 8.0 Hardware 8x8 multiplier есть пример, где используется subwf PRODH,F - что не двусмысленно намекает на возможность записи в регистр.
Согласен что явного указания о возможности записи в регистр не указано
skyv
Цитата(Ildar Belkin @ Jun 4 2012, 11:31) *
100% можно использовать. Мой код для PIC18F46K22 изобилует вариациями на чтение/модификации с PRODH:PRODL, в том числе movff POSTDEC0,PRODH. Как минимум в разделе 8.0 Hardware 8x8 multiplier есть пример, где используется subwf PRODH,F - что не двусмысленно намекает на возможность записи в регистр.
Согласен что явного указания о возможности записи в регистр не указано


Полностью со всем согласен.
Код загрузчика применил со своими небольшими доработками.
Пока все работает без проблем.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.