ddd-ekb 0 25 мая, 2019 Опубликовано 25 мая, 2019 · Жалоба здравствуйте! после очередного долгого отлаживания крайне простого куска программы решил поделиться, вдруг кому поможет чем то за время работы с пиками выявил 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 описание данной особенности может где то и есть, специально не искал, всё логично и возникает из-за сбоя конвеера, но в даташите это не отмечено (тоже довольно долго искалась ошибка в куске кода, точно рассчитанному по времени) вот как-то так ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ddd-ekb 0 25 мая, 2019 Опубликовано 25 мая, 2019 · Жалоба 4й косяк вспомнил при отправке потока данных через UART, бит занятости устанавливается с задержкой на 1 команду, так что его нельзя контролировать прямо сразу, надо хотя бы 1 NOP воткнуть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Driver_GV 1 25 мая, 2019 Опубликовано 25 мая, 2019 · Жалоба Если не учить химию, физику, математику, ...даташиты, .... то весь мир наполнится магией и чудесами. Первые года два работы с PIC я тоже думал, что они все, как один, с косяками. PS. Всю жизнь анализирую EECON1|WR от PIC12 до dsPIC - все работает. PS2 Про косяки надо писать в Microchip, и если они там есть, то они будут в Silicon Errata. И так об этом узнают все. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ddd-ekb 0 25 мая, 2019 Опубликовано 25 мая, 2019 (изменено) · Жалоба 6 hours ago, Driver_GV said: Всю жизнь анализирую EECON1|WR от PIC12 до dsPIC - все работает. у меня почему то при этом всегда только первый байт записывается, а остальные в никуда если анализировать EEIF бит, то тогда работает нормально может это как то связано с написанием программы просто в виде тхт-файла в виндос-блокноте без всяких библиотек и прочих сред разработки? тут то ведь ни одной лишней команды компилятор не додумывает по сути как бы и фиг с ним, работает и ладно но косяк с битом EECON1|WR точно есть, как и косяк с битом занятости UART а вот потеря прерывания как то уже перебор ... ладно тут это залечилось доп. программным флагом, а если лезть в еепром, например, то там без временного запрета прерываний не обойтись по прерыванию, кстати, не нашел никаких аппнот дополнительных, очень хотелось бы почитать причем если GIE бит не сбрасывать\восстанавливать самому, а его блокирует обработчик до выполнения RETFIE, то факт события нормально запоминается и обрабатывается Изменено 25 мая, 2019 пользователем ddd-ekb Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Smen 3 14 июня, 2019 Опубликовано 14 июня, 2019 · Жалоба В 25.05.2019 в 22:18, ddd-ekb сказал: по прерыванию, кстати, не нашел Это не оно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться