05.11.2014, 22:19
|
|
Временная регистрация
Регистрация: 30.03.2005
Адрес: Нижний Новгород
Сообщений: 75
Сказал спасибо: 29
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Soft_SPI на MikroC
Господа, использую Soft_SPI для общения PIC с ПЛИС.
PIC отправляет 11 байт, потом должен бы принять 5 байт от ПЛИС.
ПЛИС соответственно выставляет на шину MISO свои 5 байт только после приема 11 байт по MOSI.
В итоге по ТТЛ виден вполне верный обмен, но в массив DHT1 заносится почему-то только 2 байта, а потом нули.
В чем может быть дело?
Код:
|
Zaslonka_Select = 0; // Select CPLD
for (i=0;i‹11;i++){
Soft_SPI_Write(CPLD[i]);
}
for (i=0;i‹5;i++){
DHT1[i]= Soft_SPI_Read(data_send);
}
Zaslonka_Select = 1; // Deselect CPLD |
|
|
|
|
05.11.2014, 22:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.11.2008
Адрес: г.Смоленск
Сообщений: 2,018
Сказал спасибо: 348
Сказали Спасибо 1,024 раз(а) в 552 сообщении(ях)
|
Re: Soft_SPI на MikroC
data_send у вас массив или байт?
Без тела Soft_SPI_Read() трудно сказать, что у вас эта функция возвращает.
|
|
|
|
05.11.2014, 23:00
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Soft_SPI на MikroC
Вообще должно работать. Но раз не работает, значит какие-то проблемы с этой функцией. Напишите свою. Благо всего несколько строчек.
|
|
|
|
06.11.2014, 01:13
|
|
Временная регистрация
Регистрация: 30.03.2005
Адрес: Нижний Новгород
Сообщений: 75
Сказал спасибо: 29
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Soft_SPI на MikroC
Переписал код, теперь вроде верно использую функцию, но все равно вижу только 2 байта первые с линии MISO.
Код:
|
unsigned short DHT1[11];
char CPLD[i];
//-----
unsigned int CPLD_softSPI3() {
char i;
Zaslonka_Select = 0; // Select SS
for (i=0;i‹11;i++){
DHT1[i]= Soft_SPI_Read(CPLD[i]);
}
Zaslonka_Select = 1; // Deselect SS
}
} |
|
|
|
|
06.11.2014, 03:06
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.11.2008
Адрес: г.Смоленск
Сообщений: 2,018
Сказал спасибо: 348
Сказали Спасибо 1,024 раз(а) в 552 сообщении(ях)
|
Re: Soft_SPI на MikroC
Просмотрел функцию Soft_SPI_Read().
Получается по последнему вашему коду так, PIC отправил байт CPLD[] ПЛИС, читаем ответ в приемнике и заносим в DHT1[], и так 11 раз.
По идее смотрите, что ПЛИС шлет в ответ. Сделайте тест, отправили 0, получили в ответ 3, если есть отклонения, ищите баг там, кто первый отправили или ответил неправильно.
|
|
|
|
06.11.2014, 11:22
|
|
Временная регистрация
Регистрация: 30.03.2005
Адрес: Нижний Новгород
Сообщений: 75
Сказал спасибо: 29
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Soft_SPI на MikroC
Спасибо за комментарии!
То, что плис шлет в ответ видно на диаграмме ТТЛ на линии MISO, что интересно сам софт ТТЛ-анализатора ВСЕГДА расшифровывает ответ ПЛИС верно.
А в массив DHT1 всегда верно заносятся первые два значения, а потом нули. Я подумал, даже если рассинхрон (что невозможно теоретически и не подтверждается ТТЛ анализатором), то заносились бы какие-нибудь левые данные или сдвинутые на бит положим. Тут же просто 0.
|
|
|
|
06.11.2014, 11:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Soft_SPI на MikroC
вот эта конструкция Вас не смущает?
char CPLD[i];
Чему i равно?
|
|
|
Сказали "Спасибо" Boba_spb
|
|
|
06.11.2014, 11:29
|
|
Временная регистрация
Регистрация: 30.03.2005
Адрес: Нижний Новгород
Сообщений: 75
Сказал спасибо: 29
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Soft_SPI на MikroC
Вроде не смущает, i равно когда как - от 0 до 10. В соответтствии с конструкцией:
Код:
|
for (i=0;i‹11;i++){} |
Понял, вы про объявление массива! Там конечно 11, а не i. Это я неправильно участок кода скопировал. В программе char CPLD[11]; конечно.
Последний раз редактировалось feo; 06.11.2014 в 11:32.
|
|
|
|
06.11.2014, 12:28
|
|
Гражданин KAZUS.RU
Регистрация: 27.11.2012
Адрес: 30км от Софии
Сообщений: 732
Сказал спасибо: 89
Сказали Спасибо 310 раз(а) в 180 сообщении(ях)
|
Re: Soft_SPI на MikroC
Прерывания запретили во время Soft_SPI ?
|
|
|
|
06.11.2014, 12:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Soft_SPI на MikroC
Сообщение от feo
|
Понял, вы про объявление массива! Там конечно 11, а не i. Это я неправильно участок кода скопировал. В программе char CPLD[11]; конечно.
|
Посмотрите "здесь", почему не работает "там" - занятная ситуации
Исходники бы показали подпрграмм чтения и записи.
Интересно что за аргумент в чтении Soft_SPI_Read( CPLD[i])?
Или при копировании аргумент вставился ?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:18.
|
|