Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Чт апр 20, 2017 23:50:30

Блин, да флаг IF нужно проверять, а не BF :)

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Пт апр 21, 2017 00:01:03

kotbaris1 писал(а):Можете пример кода показать?
Если разберётесь (вырезка из программы под PIC18F26K22)....
В прерывании:
Ожидание окончания передачи байта в MAIN-е (низший приоритет в программе)

-------
Флаг SSP2IF без разрешения прерывания в PIC18 не выставляется!!!

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Пт апр 21, 2017 00:33:40

Аlex писал(а):Блин, да флаг IF нужно проверять, а не BF :)

Если не проверять BF, то на дебагере биты данных что в приеме что в отправке показываются знаком вопроса =)
Но спасибо всем, я решил проблему. В дебагер приходит нужное значение из нужной ячейки, НО, в регистр из буфера копируется что-то непонятное... вот скрин. мое значение 0x05, копирую из буфера в регистр, а туда копируется 0x82...
Изображение

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Пт апр 21, 2017 00:35:56

Мне сложно что-то сказать про ваш дебаггер, поскольку у меня ICD3 (оригинальный) и я работаю с реальным "железом".
------
P.S.
После записи в SSPBUF очередного байта - по получению прерывания всё равно (надо или нет) нужно читать SSPBUF!!!
Последний раз редактировалось Albert_V Пт апр 21, 2017 00:41:45, всего редактировалось 1 раз.

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Пт апр 21, 2017 00:39:27

Albert_V писал(а):Мне сложно что-то сказать про ваш дебаггер, поскольку у меня ICD3 (оригинальный) и я работаю с реальным "железом".

Да не в нем дело... Вот отослал я данные, проверил пока отошлются (флаг BF), потом проверяю SSPIF, когда он в единице переписываю данные из регистр и все. Откуда может взяться не то значение? Мне приходит 3 байта, 0xFF,0xFF, и мой 0x05. Все они как я понимаю, приходят в SSPBUF. Так вот, как мне выцепить оттуда именной мой последний байт?
Еще предупреждение пишет
"Data written SSPBUF whilst MSSP (in master mode) is active - data has been ignored"

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Пт апр 21, 2017 00:47:31

kotbaris1 писал(а):Еще предупреждение пишет

Ну и какого вы забиваете буфер, когда он ещё занят?
Документацию читать будете?

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Пт апр 21, 2017 01:06:20

Albert_V писал(а):
kotbaris1 писал(а):Еще предупреждение пишет

Ну и какого вы забиваете буфер, когда он ещё занят?
Документацию читать будете?

да когда ж он занят, если SSPIF в 1 стоит. Ошибки той уже нет. я лоханулся с btfss и btfsc
Что именно в коде не так?
Код:
movlw 0x20
movwf  SSPBUF
sdata40 
clrwdt
BTFSS  SSPSTAT, BF
GOTO   sdata40
btfsc PIR1,SSPIF
goto givemedate
from_givemedate
incf 0x41
bsf TRISA,SS   


Код:
givemedate

incf 0x30
movf SSPBUF,W
movwf 0x45
bcf PIR1,SSPIF
goto from_givemedate


По моему все в точности как вы говорили.

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Пт апр 21, 2017 13:44:18

Выше я дал вам пример кода.
Если не поняли, после записи байта в SSPBUF надо "сказать" CALL WAITSPI2 и ждать выхода из подпрограммы (и, естественно, в тексте нужно подправить названия регистров).
Не пропустили в моём тексте про то, что нужно всегда читать SSPBUF после окончания передачи байта?
Если хотите трахаться с программой ещё два месяца продолжать проверять флаг SSPSTAT,BF - это ваше право.
-----
P.S.
Специально для вас:
Можете вообще никаких флагов не проверять, поставив "тупую задержку в цикле" после записи байта в SSPBUF на время передачи байта по SPI умноженное на 1,5. :)))

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Сб апр 22, 2017 21:59:31

Albert_V писал(а):Выше я дал вам пример кода.
Если не поняли, после записи байта в SSPBUF надо "сказать" CALL WAITSPI2 и ждать выхода из подпрограммы (и, естественно, в тексте нужно подправить названия регистров).
Не пропустили в моём тексте про то, что нужно всегда читать SSPBUF после окончания передачи байта?
Если хотите трахаться с программой ещё два месяца продолжать проверять флаг SSPSTAT,BF - это ваше право.
-----
P.S.
Специально для вас:
Можете вообще никаких флагов не проверять, поставив "тупую задержку в цикле" после записи байта в SSPBUF на время передачи байта по SPI умноженное на 1,5. :)))

Эхехехе. Вы, помоему, мне так и не сможете помочь.
Реализация с задержкой. На выходе в SSPBUF лежит 0xA2, а не 0x45!!! Которое показано, что принялось. Аналогичный результат я кидал выше, с проверкой флага SSPIF, где вы сказали, что не надо проверять BF. В даташите написано, что BF проверяется чтобы понять произошла ли запись в буфер. Если его не проверять, а проерять просто SSPIF, то нихрена не пересылается и не принимается вообще.
Вот реализация с задержкой. А ниже скрин, какое число должно быть получено, а какое итогу лежит в регистре.



Изображение

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Сб апр 22, 2017 22:02:31

После записи в SSPBUF очередного байта - по получению прерывания всё равно (надо или нет) нужно читать SSPBUF!!!
Так видно?

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Сб апр 22, 2017 22:05:32

Albert_V писал(а):Так видно?
После записи в SSPBUF очередного байта - по получению прерывания всё равно (надо или нет) нужно читать SSPBUF!!!

Читать даже после отправке инструкций в память?

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Сб апр 22, 2017 22:09:59

Наконец-то поняли.
Именно ТАК (не зависимо от того что передаёте в понимании, в вашем случае, EEPROM-а)!!!

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Сб апр 22, 2017 22:27:49

Albert_V писал(а):Наконец-то поняли.
Именно ТАК (не зависимо от того что передаёте в понимании, в вашем случае, EEPROM-а)!!!

Сделал так. Но результат аналогичен -- пишет 0xA2 в регистр, а не 0x45.... Читаю SSPBUF после каждой отправки данных --
Проверяю установку SSPIF в 1, потом читаю SSPBUF.


причем байты sspbuf после передачи инструкций пишутся верно... а с этим баг какой-то

Изображение

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Сб апр 22, 2017 22:43:29

Почему закомментировано:
;Сбрасываем SSPIF
;bcf PIR1,SSPIF
???

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Сб апр 22, 2017 22:51:06

Albert_V писал(а):Почему закомментировано:
;Сбрасываем SSPIF
;bcf PIR1,SSPIF
???

Тестил. Оно откоментировано все. проблема не в этом...(

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Сб апр 22, 2017 22:53:38

В моём примере пробовали разобраться?
Он рабочий (в железе).

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Сб апр 22, 2017 22:56:58

Albert_V писал(а):В моём примере пробовали разобраться?
Он рабочий (в железе).

Я разобрался как видите. Но как это влияет на то что у меня такая трабла? Или вы что-то еще скрываете?

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Сб апр 22, 2017 22:59:34

kotbaris1 писал(а):Я разобрался как видите....

Не вижу.
У меня, в отличии от вас, работа по прерыванию и нет проверки SSPSTAT,BF.
Так что, это ваша некая редакция некоего текста программы.

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Сб апр 22, 2017 23:12:04

Albert_V писал(а):
kotbaris1 писал(а):Я разобрался как видите....

Не вижу.
У меня, в отличии от вас, работа по прерыванию и нет проверки SSPSTAT,BF.
Так что, это ваша некая редакция некоего текста программы.

Так какая разница, прерывание или нет. Вы мне сами говорили, что хоть через задержку делай. Через задержку аналогично все, бит танных по пересылке в регистр битый.
Изображение
Я хз как сделать чтоб оно работало.

Re: Проблемы со SPIMEM. Запись во внешнюю EEPROM

Сб апр 22, 2017 23:20:56

Переводной документацией не пользуюсь.
Ваш пример - это, похоже, работа в режиме Slave.
Прочтите программатором вашу 25AA040 и выложите что там сейчас прописано.
----
P.S.
Если есть логический анализатор - выкладывайте "захват" SPI.
Последний раз редактировалось Albert_V Сб апр 22, 2017 23:27:52, всего редактировалось 1 раз.
Ответить