Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
01.02.2010, 15:08
|
|
Вид на жительство
Регистрация: 18.06.2006
Сообщений: 434
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
аппаратный I2C-Slave на PIC18
Настраиваю Slave, отправляю отладчиком START с адресом.
В результате контроллер генерируе прерывание SSPIF, устанавливает BF в '1' и устанавливает бит ACK, даже если адресс не совпадает с значением в SSPADD. Что я не так делаю?
Код:
|
void interrupt general(void)
{
if (SSPIF && !flagI2C)//в режиме ведомого
{
if(BF) arr[i]=SSPBUF, i++;
SSPIF=0;
}
else if (SSPIF)//в режиме ведущего
{
SSPIF=0;
}
}
void I2C_SlaveIn(void)
{
TRISC3=TRISC4=1;
SSPIE=0;//запретить прерывания MSSP
SSPCON1=0b00110110;
SSPCON2|=0x01;
flagI2C=0;
SSPADD=0x0f;
SSPIE=1;//разрешить прерывания MSSP
} |
Последний раз редактировалось maxNTF; 01.02.2010 в 18:17.
|
|
|
|
01.02.2010, 18:23
|
|
Вид на жительство
Регистрация: 18.06.2006
Сообщений: 434
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: аппаратный I2C на PIC18
Код пробовал только в протеусе, может это он глючит?
|
|
|
|
01.02.2010, 19:49
|
|
Вид на жительство
Регистрация: 18.06.2006
Сообщений: 434
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: аппаратный I2C на PIC18
Кстати обрыл все форумы, данный вопрос всплывал, но ни одного ответа на него не было дано. Вче тут дело?
|
|
|
|
02.02.2010, 12:38
|
|
Вид на жительство
Регистрация: 18.06.2006
Сообщений: 434
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: аппаратный I2C на PIC18
Гуру Вы где-е-е? Отзовитесь?
Мне кажется что такая проблема возникала у многих. Не ужели нет ответа на данный вопрос?
Похоже что в MSSP нужно было писать не Slave mode (with general address call) , а Slave mode (only with general address call)!!! Потому как похоже что аппаратно ни чего не сравнивается, а считается как будто адрес общего вызова!
|
|
|
|
03.02.2010, 00:40
|
|
Временная регистрация
Регистрация: 09.10.2006
Сообщений: 58
Сказал спасибо: 4
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: аппаратный I2C на PIC18
Вы читали AN на аппаратный слейв - там прерывания по многим причинам будут, не только ведь при совпадении адреса ... И так на первый взгляд - а почему адрес нечетный....
|
|
|
|
03.02.2010, 11:50
|
|
Вид на жительство
Регистрация: 18.06.2006
Сообщений: 434
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: аппаратный I2C на PIC18
Сообщение от SGordon
|
Вы читали AN на аппаратный слейв - там прерывания по многим причинам будут, не только ведь при совпадении адреса ... И так на первый взгляд - а почему адрес нечетный....
|
При настройке модуля I2C в режиме ведомого при приеме данных может сгенерировать прерывание либо только по приему байта (адресного или данные) SSPSTAT‹3:0›=0110, и при SSPSTAT‹3:0›=1110 по приему байта (адресного или данные), обнаружении команды START и STOP. Какие Вы там еще нашли прерывания?
Во вторых по приему START и адресного байта генерируется прерывание и если адрес совпал то только в том случае генерируется бит подтверждения! Что я и писал в первом посте. И что то я не понял по поводу четности адреса, где об этом сказано?
|
|
|
|
03.02.2010, 17:12
|
|
Временная регистрация
Регистрация: 09.10.2006
Сообщений: 58
Сказал спасибо: 4
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: аппаратный I2C на PIC18
Сообщение от maxNTF
|
И что то я не понял по поводу четности адреса, где об этом сказано?
|
Ну наверно в толстой книжке с наклейкой I2C -)
|
|
|
|
04.02.2010, 02:05
|
|
Прописка
Регистрация: 25.11.2006
Адрес: Харьков
Сообщений: 295
Сказал спасибо: 25
Сказали Спасибо 71 раз(а) в 60 сообщении(ях)
|
Re: аппаратный I2C на PIC18
Сообщение от maxNTF
|
И что то я не понял по поводу четности адреса, где об этом сказано?
|
Дело в том, что адрес слейва в I2C занимает только 7 бит, начиная с 1го. А "нулевой" бит - признак цикла чтение/запись. Поэтому в SSPADD должно быть записано значение с нулем в "нулевом" бите, то есть "четное".
|
|
|
|
04.02.2010, 11:24
|
|
Вид на жительство
Регистрация: 18.06.2006
Сообщений: 434
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
|
Re: аппаратный I2C на PIC18
То же самое, даже если SSPADD=0x0e к примеру.
|
|
|
|
04.02.2010, 13:47
|
|
Временная регистрация
Регистрация: 09.10.2006
Сообщений: 58
Сказал спасибо: 4
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: аппаратный I2C на PIC18
Вы все же попробуйте AN734 (он для всех MidRange), у меня на 16F887 ( там по моему прерывания и флажки уже как на 1 работает и в протезе и на железяке...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:20.
|
|