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

Косяки PIC-контроллеров

здравствуйте!

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

за время работы с пиками выявил 3 особенности их работы

 

1 работа с еепром, бит EECON1|WR

 WR: Write Control bit 1 = Initiates a write cycle (The bit is cleared by hardware once write is complete. The WR bit can only be set, not cleared, in software.) 0 = Write cycle to the data EEPROM is complete

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

проверено на разных пиках, результат одинаков

при контроле аналогичного бита прерывания в INTCON всё работает корректно

 

2 обработка прерывания по внешнему сигналу на RB0/INT

если при выполнении программы присутствует участок кода с запретом прерываний, ограниченный командами "bcf INTCON|GIE .......... bsf INTCON|GIE", то событие возникшее в этом месте будет пропущено, хотя в даташите указано, что оно запоминается и флаг прерывания надо будет сбрасывать программно, по факту флаг либо не устанавливается, либо сам сбрасывается (именно с этим копался на днях, обработчик прерывания вычислял и заносил в память 2 переменных, поэтому при их считывании для рассчетов приходилось на всего 3 команды запрещать прерывание, но этого хватало для хаотичных пропусков и кипения мозга откуда идёт ошибка в данных, решилось введением доп. программного флага в обработчик)

 

3 выполнение перехода по таблице, типа ADDWF PCL,F GOTO m1 GOTOm2 ...

команда сложения в этом случае занимает 2 такта, а не 1

описание данной особенности может где то и есть, специально не искал, всё логично и возникает из-за сбоя конвеера, но в даташите это не отмечено (тоже довольно долго искалась ошибка в куске кода, точно рассчитанному по времени)

 

вот как-то так ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4й косяк вспомнил

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Первые года  два работы с PIC я тоже думал,  что  они  все,  как один,  с косяками. 

PS.

Всю  жизнь  анализирую  EECON1|WR от  PIC12 до  dsPIC  -  все работает.

PS2

Про  косяки надо  писать  в Microchip,  и если  они там есть,  то  они будут  в  Silicon Errata. И так об этом узнают  все.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, Driver_GV said:

Всю  жизнь  анализирую  EECON1|WR от  PIC12 до  dsPIC  -  все работает.

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

если анализировать EEIF бит, то тогда работает нормально

может это как то связано с написанием программы просто в виде тхт-файла в виндос-блокноте без всяких библиотек и прочих сред разработки?

тут то ведь ни одной лишней команды компилятор не додумывает

по сути как бы и фиг с ним, работает и ладно

но косяк с битом EECON1|WR точно есть, как и косяк с битом занятости UART

а вот потеря прерывания как то уже перебор ...

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

 

по прерыванию, кстати, не нашел никаких аппнот дополнительных, очень хотелось бы почитать

причем если GIE бит не сбрасывать\восстанавливать самому, а его блокирует обработчик до выполнения RETFIE, то факт события нормально запоминается и обрабатывается

 

 

Изменено пользователем ddd-ekb

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 25.05.2019 в 22:18, ddd-ekb сказал:

по прерыванию, кстати, не нашел

Это не оно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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