Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по аппаратному SPI в PIC
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
nicmicola
Подключаемое изделие к микроконтроллеру, может поддерживать SPI только ведомым.
Вопрос как настроить регистры интерфейса SPI в микроконтроллере. Что бы импульсы синхронизации выдавал микроконтроллер и одновременно принимал данные.
Baser
Если мне не изменяет память, то Микрочип выпускает около 100500 модификаций МК типа PIC.

И все из них, которые имеют SPI, могут работать в режиме мастера.
Так может нужно посмотреть соответствующий документ "Руководство по применению модуля SPI в микроконтроллере PICxxXxxxx фирмы Микрочип" ? laughing.gif
nicmicola
Неужели вы думаете что я не читал перед тем как задавать вопрос.
Естественно читал но не понял.
Tanya
Цитата(nicmicola @ Feb 14 2018, 15:31) *
Естественно читал но не понял.

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

Если вы намеков не понимаете, то придется сказать прямо:
если хотите, чтобы вам кто-нибудь помог, то хотя бы напишите тип вашего контроллера,
ибо у Микрочипа очень много разных.
nicmicola
Программный сделал все работает. Но вопрос актуален. Не ужели этот режим не предусмотрен?

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

Вы хотите странного. Интерфейс SPI подразумевает, что клок формируется ведущим.
Ну а за режим работы отвечает регистр SSPxCON1, биты SSPM<3:0>
Baser
Цитата(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.
nicmicola
Микроконтроллер начинает выдавать синхронизацию (SCK), после загрузки байта в SSP1BUF. Мне нужно загрузить SSP1BUF во время синхронизации. Подключенное изделие не может выдавать синхроимпульсы.
Baser
Цитата(nicmicola @ Feb 14 2018, 15:24) *
Мне нужно загрузить SSP1BUF во время синхронизации.

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

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

Совершенно непонятно, что вам непонятно.
Опишите подробно вашу проблему...
nicmicola
Микроконтроллер должен выдать SCK, и в это же время прочитать SSP1BUF.
Обычно ведущий генерирует SCK и загружает SSP1BUF (передает).
Обычно ведомый принимает (читает SSP1BUF) и считывает SCK импульсы (SCK это и есть синхронизация). Я же писал подключаемое изделие может работать только ведомым. Значит не может генерировать SCK (синхронизировать импульсы )
Baser
У вас в голове смешались аппаратная и программная части.
При аппаратной реализации SPI вам программно нужно только записать передаваемое слейву значение в SPIxBUF,
дождаться окончания передачи (по прерыванию или поллингом флага) и прочитать принятое от слейва значение из того-же SPIxBUF. Больше ничего программно делать не нужно, все дерганье ногами CLK и SDO, и прием с SDI контроллер делает сам (аппаратно).
nicmicola
Всем спасибо.
Вопрос решен.
Решение такое перед приемом байта, нужно отослать байт в никуда. Он и сгенерирует необходимые тактовые импульсы.
Lagman
Цитата(nicmicola @ Feb 15 2018, 17:00) *
Всем спасибо.
Вопрос решен.
Решение такое перед приемом байта, нужно отослать байт в никуда. Он и сгенерирует необходимые тактовые импульсы.

Это называется dummy bytes и обычно это 0xFF (есть вариант с 0x00). И как вы программную реализацию делали если этого не знали.
ViKo
И во временнОй диаграмме на ведомое устройство dummy byte определенно есть (только не называется так). Так все SPI устройства работают.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.