Перейти к содержанию

Вопрос по аппаратному SPI в PIC

Подключаемое изделие к микроконтроллеру, может поддерживать SPI только ведомым.
Вопрос как настроить регистры интерфейса SPI в микроконтроллере. Что бы импульсы синхронизации выдавал микроконтроллер и одновременно принимал данные.

Поделиться сообщением


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

И все из них, которые имеют SPI, могут работать в режиме мастера.
Так может нужно посмотреть соответствующий документ "Руководство по применению модуля SPI в микроконтроллере PICxxXxxxx фирмы Микрочип" ? laughing.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Неужели вы думаете что я не читал перед тем как задавать вопрос.
Естественно читал но не понял.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(nicmicola @ Feb 14 2018, 15:31) <{POST_SNAPBACK}>
Естественно читал но не понял.

Тогда делайте программный. Все будет в Ваших руках.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(nicmicola @ Feb 14 2018, 14:31) <{POST_SNAPBACK}>
Неужели вы думаете что я не читал перед тем как задавать вопрос.
Естественно читал но не понял.

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

Поделиться сообщением


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

У всех микроконтроллерах PIC поддерживающих аппаратный SPI одни и те же регистры.
Так что не важен какой микроконтроллер. Если вы работали с аппаратным то скажите в каком регистре какой бит? Раз задаю вопрос естественно прошу помощи.

Поделиться сообщением


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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(nicmicola @ Feb 14 2018, 14:47) <{POST_SNAPBACK}>
Так что не важен какой микроконтроллер.

Ну, тогда так:
Цитата
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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Микроконтроллер начинает выдавать синхронизацию (SCK), после загрузки байта в SSP1BUF. Мне нужно загрузить SSP1BUF во время синхронизации. Подключенное изделие не может выдавать синхроимпульсы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(nicmicola @ Feb 14 2018, 15:24) <{POST_SNAPBACK}>
Мне нужно загрузить SSP1BUF во время синхронизации.

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

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

Совершенно непонятно, что вам непонятно.
Опишите подробно вашу проблему...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Микроконтроллер должен выдать SCK, и в это же время прочитать SSP1BUF.
Обычно ведущий генерирует SCK и загружает SSP1BUF (передает).
Обычно ведомый принимает (читает SSP1BUF) и считывает SCK импульсы (SCK это и есть синхронизация). Я же писал подключаемое изделие может работать только ведомым. Значит не может генерировать SCK (синхронизировать импульсы )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
У вас в голове смешались аппаратная и программная части.
При аппаратной реализации SPI вам программно нужно только записать передаваемое слейву значение в SPIxBUF,
дождаться окончания передачи (по прерыванию или поллингом флага) и прочитать принятое от слейва значение из того-же SPIxBUF. Больше ничего программно делать не нужно, все дерганье ногами CLK и SDO, и прием с SDI контроллер делает сам (аппаратно).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Всем спасибо.
Вопрос решен.
Решение такое перед приемом байта, нужно отослать байт в никуда. Он и сгенерирует необходимые тактовые импульсы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(nicmicola @ Feb 15 2018, 17:00) <{POST_SNAPBACK}>
Всем спасибо.
Вопрос решен.
Решение такое перед приемом байта, нужно отослать байт в никуда. Он и сгенерирует необходимые тактовые импульсы.

Это называется dummy bytes и обычно это 0xFF (есть вариант с 0x00). И как вы программную реализацию делали если этого не знали.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
И во временнОй диаграмме на ведомое устройство dummy byte определенно есть (только не называется так). Так все SPI устройства работают.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация