Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 10.03.2008, 14:24   #1
Leonid_O
Member
 
Аватар для Leonid_O
 
Регистрация: 27.05.2007
Сообщений: 74
Вес репутации: 100/47
Leonid_O will become famous soon enoughLeonid_O will become famous soon enough
Unhappy Как засечь в PIC18F, что в модуле MSSP буффер SSPBUF пуст, после передачи байта

Как засечь в PIC18F, что в модуле MSSP буффер SSPBUF пуст, после передачи байта? Что бы слать за ним следующий байт корректно.
MSSP должен работать как ведущий и только на передачу.
Если разрешить преривание SSPIF, то оно останавливае проц и надо прописывать выход из него.
А так что бы без контроля прерывания можно?

Хотя мне по большому надо простой MCI интерфейс (Клок и Дата), может это на другом модуле сделать? Уж больно не охото програмно городить?
Leonid_O вне форума   Ответить с цитированием
Старый 10.03.2008, 14:31   #2
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,877
Вес репутации: 5553/169
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Как засечь в PIC18F, что в модуле MSSP буффер SSPBUF пуст, после передачи байта

Цитата:
Сообщение от Leonid_O Посмотреть сообщение
MSSP должен работать как ведущий и только на передачу.
Если разрешить преривание SSPIF, то оно останавливае проц и надо прописывать выход из него.
А так что бы без контроля прерывания можно?
сам по себе флаг "XXXIF" никак не связан с вызовом прерывания (т.е. нефиг прерывание "разрешать").
И там обычно такая скорость передачи, что можно вообще ничего и не анализировать - пока будете выбирать следующий байт, предыдущий уже уйдёт в линию
Greg вне форума   Ответить с цитированием
Старый 10.03.2008, 14:35   #3
Leonid_O
Member
 
Аватар для Leonid_O
 
Регистрация: 27.05.2007
Сообщений: 74
Вес репутации: 100/47
Leonid_O will become famous soon enoughLeonid_O will become famous soon enough
По умолчанию Re: Как засечь в PIC18F, что в модуле MSSP буффер SSPBUF пуст, после передачи байта

Цитата:
Сообщение от Greg Посмотреть сообщение
сам по себе флаг "XXXIF" никак не связан с вызовом прерывания (т.е. нефиг прерывание "разрешать").
И там обычно такая скорость передачи, что можно вообще ничего и не анализировать - пока будете выбирать следующий байт, предыдущий уже уйдёт в линию
Нифига! Мне PLL программировать треба! Я на минимальной скорости запускаю и второй байт записывается в буффер обнуляя предыдущую передачу и инициируя новую уже на втором бите!
Leonid_O вне форума   Ответить с цитированием
Старый 10.03.2008, 14:37   #4
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,877
Вес репутации: 5553/169
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Как засечь в PIC18F, что в модуле MSSP буффер SSPBUF пуст, после передачи байта

Цитата:
Сообщение от Leonid_O Посмотреть сообщение
Нифига! Мне PLL программировать треба! Я на минимальной скорости запускаю и второй байт записывается в буффер обнуляя предыдущую передачу и инициируя новую уже на втором бите!
что "нифига"? Анализируй себе IF флаг и никаких проблем.
Зачем при этом "разрешать прерывания"?
Greg вне форума   Ответить с цитированием
Старый 10.03.2008, 14:41   #5
Leonid_O
Member
 
Аватар для Leonid_O
 
Регистрация: 27.05.2007
Сообщений: 74
Вес репутации: 100/47
Leonid_O will become famous soon enoughLeonid_O will become famous soon enough
По умолчанию Re: Как засечь в PIC18F, что в модуле MSSP буффер SSPBUF пуст, после передачи байта

Цитата:
Сообщение от Greg Посмотреть сообщение
сам по себе флаг "XXXIF" никак не связан с вызовом прерывания (т.е. нефиг прерывание "разрешать").
А чё же у меня
Код:
 
while (PIR1bits.SSPIF=0){}
Зависает?

Вы уж меня глупого извиняйте!
Leonid_O вне форума   Ответить с цитированием
Старый 10.03.2008, 14:43   #6
urry
Senior Member
 
Аватар для urry
 
Регистрация: 11.10.2007
Возраст: 57
Сообщений: 462
Вес репутации: 228/50
urry has a spectacular aura abouturry has a spectacular aura abouturry has a spectacular aura about
По умолчанию Re: Как засечь в PIC18F, что в модуле MSSP буффер SSPBUF пуст, после передачи байта

а почему не == ?
urry вне форума   Ответить с цитированием
Старый 10.03.2008, 14:50   #7
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,877
Вес репутации: 5553/169
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Как засечь в PIC18F, что в модуле MSSP буффер SSPBUF пуст, после передачи байта

Цитата:
Сообщение от Leonid_O Посмотреть сообщение
А чё же у меня
Код:
 
while (PIR1bits.SSPIF=0){}
Зависает?

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

Код:
while (0 == PIR1bits.SSPIF){}
половина вопросов отпадёт сразу, и не придётся извиняться
Greg вне форума   Ответить с цитированием
Старый 10.03.2008, 14:51   #8
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/101
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Re: Как засечь в PIC18F, что в модуле MSSP буффер SSPBUF пуст, после передачи байта

Цитата:
Сообщение от Leonid_O Посмотреть сообщение
А чё же у меня
Код:
 
while (PIR1bits.SSPIF=0){}
Зависает?

Вы уж меня глупого извиняйте!
Тут уже много раз повторяли, такая запись
Код:
 while (0==PIR1bits.SSPIF){}
позволяет вылавливать подобные ошибки компилятору.

Самому, когда глаз замылен, увидеть подобное бывает сложно.
DL36 вне форума   Ответить с цитированием
Старый 10.03.2008, 14:52   #9
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/101
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Опередили чуток

Цитата:
Сообщение от Greg Посмотреть сообщение
для конструкций проверки условия чрезвычайно эффективно производить запись в обратном порядке, типа

Код:
while (0 == PIR1bits.SSPIF){}
половина вопросов отпадёт сразу, и не прийдётся извиняться
DL36 вне форума   Ответить с цитированием
Старый 10.03.2008, 15:22   #10
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,877
Вес репутации: 5553/169
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Опередили чуток

Цитата:
Сообщение от DL36 Посмотреть сообщение
хотя для битовых переменных более "ортогонально"
Код:
while (!PIR1bits.SSPIF){}
Greg вне форума   Ответить с цитированием
Старый 10.03.2008, 15:34   #11
Leonid_O
Member
 
Аватар для Leonid_O
 
Регистрация: 27.05.2007
Сообщений: 74
Вес репутации: 100/47
Leonid_O will become famous soon enoughLeonid_O will become famous soon enough
По умолчанию Re: Как засечь в PIC18F, что в модуле MSSP буффер SSPBUF пуст, после передачи байта

Вы правы! Но я, тут, подчитал и оказывается это не решает мою проблему, так как:
Цитата:
После загрузки принятых данных в регистр SSPBUF устанавливается флаг прерываний SSPIF в "1"
Так в книжке написано. То есть это верно для принятого байта, а мне надо отследить отосланый.
Неуж-то прийдётся задержку ставить? нету другого способа?
Leonid_O вне форума   Ответить с цитированием
Старый 10.03.2008, 15:35   #12
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/101
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Это да, но автор видимо еще не понял.

Цитата:
Сообщение от Greg Посмотреть сообщение
хотя для битовых переменных более "ортогонально"
Код:
while (!PIR1bits.SSPIF){}
!
DL36 вне форума   Ответить с цитированием
Старый 10.03.2008, 15:36   #13
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,877
Вес репутации: 5553/169
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Как засечь в PIC18F, что в модуле MSSP буффер SSPBUF пуст, после передачи байта

Цитата:
Сообщение от Leonid_O Посмотреть сообщение
Вы правы! Но я, тут, подчитал и оказывается это не решает мою проблему, так как:

Так в книжке написано. То есть это верно для принятого байта, а мне надо отследить отосланый.
Неуж-то прийдётся задержку ставить? нету другого способа?
если стоит ХХIF, то можно посылать следующий. Если в этом вопрос
Greg вне форума   Ответить с цитированием
Старый 10.03.2008, 15:38   #14
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/101
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Так это SPI или нет.

Цитата:
Сообщение от Leonid_O Посмотреть сообщение
Вы правы! Но я, тут, подчитал и оказывается это не решает мою проблему, так как:

Так в книжке написано. То есть это верно для принятого байта, а мне надо отследить отосланый.
Неуж-то прийдётся задержку ставить? нету другого способа?
Прием и передача идет одновременно.
DL36 вне форума   Ответить с цитированием
Старый 10.03.2008, 16:01   #15
Leonid_O
Member
 
Аватар для Leonid_O
 
Регистрация: 27.05.2007
Сообщений: 74
Вес репутации: 100/47
Leonid_O will become famous soon enoughLeonid_O will become famous soon enough
По умолчанию Re: Так это SPI или нет.

Нифига! Только один байт отсылается!
Цитата:
SSPBUF = dataByte[0]; //Start Transmit data
while (0 == PIR1bits.SSPIF)
{}
SSPBUF = dataByte[1]; //Start Transmit data
хоть теперь и не виснет
Leonid_O вне форума   Ответить с цитированием
Старый 10.03.2008, 16:22   #16
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,877
Вес репутации: 5553/169
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Так это SPI или нет.

Цитата:
Сообщение от Leonid_O Посмотреть сообщение
Нифига! Только один байт отсылается!

Код:
SSPBUF = dataByte[0]; //Start Transmit data
while (0 == PIR1bits.SSPIF)
{}
SSPBUF = dataByte[1]; //Start Transmit data
хоть теперь и не виснет
этот бит надо (предварительно) очищать вручную. Может так

Код:
PIR1bits.SSPIF = 0;
SSPBUF = dataByte[0]; //Start Transmit data
  while (!PIR1bits.SSPIF);
SSPBUF = dataByte[1]; //Start Transmit data 
и т.д.
и всё-таки http://www.microchip.su/showthread.p...=SPI#post22604
Greg вне форума   Ответить с цитированием
Старый 10.03.2008, 16:36   #17
urry
Senior Member
 
Аватар для urry
 
Регистрация: 11.10.2007
Возраст: 57
Сообщений: 462
Вес репутации: 228/50
urry has a spectacular aura abouturry has a spectacular aura abouturry has a spectacular aura about
По умолчанию Re: Как засечь в PIC18F, что в модуле MSSP буффер SSPBUF пуст, после передачи байта

Интересно с вами... цитата
Код:
 Но всё же злит - я его в нескольких местах сбрасываю, а он не сбрасывается, я его сбрасываю, а он...блин...  не устали? надо же было даташит сначала почитать - этот флаг read only
Все, полез в даташит...
urry вне форума   Ответить с цитированием
Старый 10.03.2008, 16:46   #18
Leonid_O
Member
 
Аватар для Leonid_O
 
Регистрация: 27.05.2007
Сообщений: 74
Вес репутации: 100/47
Leonid_O will become famous soon enoughLeonid_O will become famous soon enough
По умолчанию Re: Так это SPI или нет.

Цитата:
Сообщение от Greg Посмотреть сообщение
и всё таки там нет моей проблемы! Там другие глюки в передаче, а в основном там про приём.

Извиняюсь за то что отнял время! Буду таймер ставить.

Или...... Блин! SSPSR недоступен, при поступлении в SSPBUF данные сразу пересылаются в SSPSR, новая порция в SSPBUF убивает неуспевшую убежать инфу в SSPSR.
В даташите нету инфы чем ловить момент освобождения SSPSR, по крайней мере я не нашёл ни в PIC16_Manual.pdf, ни в PIC18F2455-2550-4455-4550 Data sheet.pdf

Последний раз редактировалось Leonid_O; 10.03.2008 в 16:55.
Leonid_O вне форума   Ответить с цитированием
Старый 10.03.2008, 16:54   #19
urry
Senior Member
 
Аватар для urry
 
Регистрация: 11.10.2007
Возраст: 57
Сообщений: 462
Вес репутации: 228/50
urry has a spectacular aura abouturry has a spectacular aura abouturry has a spectacular aura about
По умолчанию Re: Как засечь в PIC18F, что в модуле MSSP буффер SSPBUF пуст, после передачи байта

Ну, я даташите увидел бит конфликта wcol - если при передаче послать в буфер данные, то они игнорятся а бит становится в 1. Его обнулить и пробовать еще...
urry вне форума   Ответить с цитированием
Старый 10.03.2008, 16:57   #20
Leonid_O
Member
 
Аватар для Leonid_O
 
Регистрация: 27.05.2007
Сообщений: 74
Вес репутации: 100/47
Leonid_O will become famous soon enoughLeonid_O will become famous soon enough
По умолчанию Re: Как засечь в PIC18F, что в модуле MSSP буффер SSPBUF пуст, после передачи байта

Цитата:
Сообщение от urry Посмотреть сообщение
Ну, я даташите увидел бит конфликта wcol - если при передаче послать в буфер данные, то они игнорятся а бит становится в 1. Его обнулить и пробовать еще...
Это верно только для ведущего режима в I2C.
А вот в описании SSPOV так прямо и говорится, что старая инфа уничтожается.
Leonid_O вне форума   Ответить с цитированием
Старый 10.03.2008, 17:05   #21
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,877
Вес репутации: 5553/169
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Как засечь в PIC18F, что в модуле MSSP буффер SSPBUF пуст, после передачи байта

Цитата:
Сообщение от urry Посмотреть сообщение
Интересно с вами... цитата
Код:
 Но всё же злит - я его в нескольких местах сбрасываю,
а он не сбрасывается, я его сбрасываю, а он...блин...
 не устали? надо же было даташит сначала почитать - 
этот флаг read only
Все, полез в даташит...

вы не перепутали с RCIF или TXIF?
те - да...

SSPIF бит - read/write и как прописано в ds - "The transmission/reception is complete (must be cleared in software)"

а, нашёл - речь шла о BF... (read only)
Greg вне форума   Ответить с цитированием
Старый 10.03.2008, 17:11   #22
urry
Senior Member
 
Аватар для urry
 
Регистрация: 11.10.2007
Возраст: 57
Сообщений: 462
Вес репутации: 228/50
urry has a spectacular aura abouturry has a spectacular aura abouturry has a spectacular aura about
По умолчанию Re: Как засечь в PIC18F, что в модуле MSSP буффер SSPBUF пуст, после передачи байта

Greg, сорри...
Код:
 SSPIF=0;  SSPBUF = dataByte[0]; //Start Transmit data   while (1 == PIR1bits.SSPIF) {} ;  SSPIF=0;  SSPBUF = dataByte[1]; //Start Transmit data

Последний раз редактировалось urry; 10.03.2008 в 17:27.
urry вне форума   Ответить с цитированием
Старый 10.03.2008, 17:13   #23
IgorV
Senior Member
 
Аватар для IgorV
 
Регистрация: 25.02.2007
Адрес: всем пока
Возраст: 49
Сообщений: 4,100
Вес репутации: 1883/105
IgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant future
Отправить сообщение для IgorV с помощью Skype™
По умолчанию Re: Так это SPI или нет.

разве этого мало?
Миниатюры
message.JPG  
IgorV вне форума   Ответить с цитированием
Старый 10.03.2008, 17:41   #24
Leonid_O
Member
 
Аватар для Leonid_O
 
Регистрация: 27.05.2007
Сообщений: 74
Вес репутации: 100/47
Leonid_O will become famous soon enoughLeonid_O will become famous soon enough
Unhappy Re: Как засечь в PIC18F, что в модуле MSSP буффер SSPBUF пуст, после передачи байта

Цитата:
Сообщение от urry Посмотреть сообщение
Greg, сорри...
Код:
 SSPIF=0;  SSPBUF = dataByte[0]; //Start Transmit data   while (1 == PIR1bits.SSPIF) {} ;  SSPIF=0;  SSPBUF = dataByte[1]; //Start Transmit data
Код:
PIR1bits.SSPIF=0;  
     SSPBUF = dataByte[0]; //Start Transmit data   
     while (1 == PIR1bits.SSPIF) {} ;  
     PIR1bits.SSPIF=0;  
     SSPBUF = dataByte[1]; //Start Transmit data
Всё равно 1 байт отсылается!
Интересно почему 9 клоков я вижу? В даташите что привёл IgorV (3-я линейка) явно 8 штук должно выскочить!
Leonid_O вне форума   Ответить с цитированием
Старый 10.03.2008, 17:49   #25
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,877
Вес репутации: 5553/169
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Как засечь в PIC18F, что в модуле MSSP буффер SSPBUF пуст, после передачи байта

Цитата:
Сообщение от Leonid_O Посмотреть сообщение
Код:
PIR1bits.SSPIF=0;  
     SSPBUF = dataByte[0]; //Start Transmit data   
     while (1 == PIR1bits.SSPIF) {} ;  
     PIR1bits.SSPIF=0;  
     SSPBUF = dataByte[1]; //Start Transmit data
Всё равно 1 байт отсылается!
Интересно почему 9 клоков я вижу? В даташите что привёл IgorV (3-я линейка) явно 8 штук должно выскочить!
поставьте вместо это while 8 (или 80) штук нопов и посмотрите. или покажите весь проект
Greg вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +3, время: 19:23.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot