реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Вопрос по аппаратному SPI в PIC
nicmicola
сообщение Feb 14 2018, 12:16
Сообщение #1





Группа: Участник
Сообщений: 6
Регистрация: 14-02-18
Пользователь №: 101 746



Подключаемое изделие к микроконтроллеру, может поддерживать SPI только ведомым.
Вопрос как настроить регистры интерфейса SPI в микроконтроллере. Что бы импульсы синхронизации выдавал микроконтроллер и одновременно принимал данные.
Go to the top of the page
 
+Quote Post
Baser
сообщение Feb 14 2018, 12:26
Сообщение #2


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Если мне не изменяет память, то Микрочип выпускает около 100500 модификаций МК типа PIC.

И все из них, которые имеют SPI, могут работать в режиме мастера.
Так может нужно посмотреть соответствующий документ "Руководство по применению модуля SPI в микроконтроллере PICxxXxxxx фирмы Микрочип" ? laughing.gif
Go to the top of the page
 
+Quote Post
nicmicola
сообщение Feb 14 2018, 12:31
Сообщение #3





Группа: Участник
Сообщений: 6
Регистрация: 14-02-18
Пользователь №: 101 746



Неужели вы думаете что я не читал перед тем как задавать вопрос.
Естественно читал но не понял.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Feb 14 2018, 12:33
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 745
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(nicmicola @ Feb 14 2018, 15:31) *
Естественно читал но не понял.

Тогда делайте программный. Все будет в Ваших руках.
Go to the top of the page
 
+Quote Post
Baser
сообщение Feb 14 2018, 12:38
Сообщение #5


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(nicmicola @ Feb 14 2018, 14:31) *
Неужели вы думаете что я не читал перед тем как задавать вопрос.
Естественно читал но не понял.

Если вы намеков не понимаете, то придется сказать прямо:
если хотите, чтобы вам кто-нибудь помог, то хотя бы напишите тип вашего контроллера,
ибо у Микрочипа очень много разных.
Go to the top of the page
 
+Quote Post
nicmicola
сообщение Feb 14 2018, 12:47
Сообщение #6





Группа: Участник
Сообщений: 6
Регистрация: 14-02-18
Пользователь №: 101 746



Программный сделал все работает. Но вопрос актуален. Не ужели этот режим не предусмотрен?

У всех микроконтроллерах PIC поддерживающих аппаратный SPI одни и те же регистры.
Так что не важен какой микроконтроллер. Если вы работали с аппаратным то скажите в каком регистре какой бит? Раз задаю вопрос естественно прошу помощи.
Go to the top of the page
 
+Quote Post
Harvester
сообщение Feb 14 2018, 13:05
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(nicmicola @ Feb 14 2018, 15:16) *
Подключаемое изделие к микроконтроллеру, может поддерживать SPI только ведомым.
Вопрос как настроить регистры интерфейса SPI в микроконтроллере. Что бы импульсы синхронизации выдавал микроконтроллер и одновременно принимал данные.

Вы хотите странного. Интерфейс SPI подразумевает, что клок формируется ведущим.
Ну а за режим работы отвечает регистр SSPxCON1, биты SSPM<3:0>


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
Baser
сообщение Feb 14 2018, 13:08
Сообщение #8


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(nicmicola @ Feb 14 2018, 14:47) *
Так что не важен какой микроконтроллер.

Ну, тогда так:
Цитата
To set up the SPIx module for the Master mode of operation:
1. If using interrupts:
• Clear the SPIxIF bit in the respective IFSn register.
• Set the SPIxIE bit in the respective IECn register.
• Write the SPIxIP bits in the respective IPCn register to set the interrupt priority.
2. Write the desired settings to the SPIxCON register with MSTEN (SPIxCON1<5>) = 1.
3. Clear the SPIROV bit (SPIxSTAT<6>).
4. Enable SPIx operation by setting the SPIEN bit (SPIxSTAT<15>).
5. Write the data to be transmitted to the SPIxBUF register. Transmission (and reception) will
start as soon as data is written to the SPIxBUF register.
Go to the top of the page
 
+Quote Post
nicmicola
сообщение Feb 14 2018, 13:24
Сообщение #9





Группа: Участник
Сообщений: 6
Регистрация: 14-02-18
Пользователь №: 101 746



Микроконтроллер начинает выдавать синхронизацию (SCK), после загрузки байта в SSP1BUF. Мне нужно загрузить SSP1BUF во время синхронизации. Подключенное изделие не может выдавать синхроимпульсы.
Go to the top of the page
 
+Quote Post
Baser
сообщение Feb 14 2018, 13:51
Сообщение #10


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(nicmicola @ Feb 14 2018, 15:24) *
Мне нужно загрузить SSP1BUF во время синхронизации.

Если вы написали программный SPI, то должны понимать принцип передачи данных в этом интерфейсе.
Синхронизации как какого-то отдельного процесса нет.

На каждый CLK, выдаваемый мастером, мастер передает, а слейв принимает один бит,
и в это же время слейв передает, и мастер принимает другой бит (по кругу).

Совершенно непонятно, что вам непонятно.
Опишите подробно вашу проблему...
Go to the top of the page
 
+Quote Post
nicmicola
сообщение Feb 14 2018, 14:22
Сообщение #11





Группа: Участник
Сообщений: 6
Регистрация: 14-02-18
Пользователь №: 101 746



Микроконтроллер должен выдать SCK, и в это же время прочитать SSP1BUF.
Обычно ведущий генерирует SCK и загружает SSP1BUF (передает).
Обычно ведомый принимает (читает SSP1BUF) и считывает SCK импульсы (SCK это и есть синхронизация). Я же писал подключаемое изделие может работать только ведомым. Значит не может генерировать SCK (синхронизировать импульсы )
Go to the top of the page
 
+Quote Post
Baser
сообщение Feb 14 2018, 14:35
Сообщение #12


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



У вас в голове смешались аппаратная и программная части.
При аппаратной реализации SPI вам программно нужно только записать передаваемое слейву значение в SPIxBUF,
дождаться окончания передачи (по прерыванию или поллингом флага) и прочитать принятое от слейва значение из того-же SPIxBUF. Больше ничего программно делать не нужно, все дерганье ногами CLK и SDO, и прием с SDI контроллер делает сам (аппаратно).
Go to the top of the page
 
+Quote Post
nicmicola
сообщение Feb 15 2018, 14:00
Сообщение #13





Группа: Участник
Сообщений: 6
Регистрация: 14-02-18
Пользователь №: 101 746



Всем спасибо.
Вопрос решен.
Решение такое перед приемом байта, нужно отослать байт в никуда. Он и сгенерирует необходимые тактовые импульсы.
Go to the top of the page
 
+Quote Post
Lagman
сообщение Feb 15 2018, 20:09
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(nicmicola @ Feb 15 2018, 17:00) *
Всем спасибо.
Вопрос решен.
Решение такое перед приемом байта, нужно отослать байт в никуда. Он и сгенерирует необходимые тактовые импульсы.

Это называется dummy bytes и обычно это 0xFF (есть вариант с 0x00). И как вы программную реализацию делали если этого не знали.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 16 2018, 04:29
Сообщение #15


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 623
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



И во временнОй диаграмме на ведомое устройство dummy byte определенно есть (только не называется так). Так все SPI устройства работают.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd September 2018 - 14:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.00959 секунд с 7
ELECTRONIX ©2004-2016