Подключаемое изделие к микроконтроллеру, может поддерживать SPI только ведомым. Вопрос как настроить регистры интерфейса SPI в микроконтроллере. Что бы импульсы синхронизации выдавал микроконтроллер и одновременно принимал данные.
Baser
Feb 14 2018, 12:26
Если мне не изменяет память, то Микрочип выпускает около 100500 модификаций МК типа PIC.
И все из них, которые имеют SPI, могут работать в режиме мастера. Так может нужно посмотреть соответствующий документ "Руководство по применению модуля SPI в микроконтроллере PICxxXxxxx фирмы Микрочип" ?
nicmicola
Feb 14 2018, 12:31
Неужели вы думаете что я не читал перед тем как задавать вопрос. Естественно читал но не понял.
Tanya
Feb 14 2018, 12:33
Цитата(nicmicola @ Feb 14 2018, 15:31)
Естественно читал но не понял.
Тогда делайте программный. Все будет в Ваших руках.
Baser
Feb 14 2018, 12:38
Цитата(nicmicola @ Feb 14 2018, 14:31)
Неужели вы думаете что я не читал перед тем как задавать вопрос. Естественно читал но не понял.
Если вы намеков не понимаете, то придется сказать прямо: если хотите, чтобы вам кто-нибудь помог, то хотя бы напишите тип вашего контроллера, ибо у Микрочипа очень много разных.
nicmicola
Feb 14 2018, 12:47
Программный сделал все работает. Но вопрос актуален. Не ужели этот режим не предусмотрен?
У всех микроконтроллерах PIC поддерживающих аппаратный SPI одни и те же регистры. Так что не важен какой микроконтроллер. Если вы работали с аппаратным то скажите в каком регистре какой бит? Раз задаю вопрос естественно прошу помощи.
Harvester
Feb 14 2018, 13:05
Цитата(nicmicola @ Feb 14 2018, 15:16)
Подключаемое изделие к микроконтроллеру, может поддерживать SPI только ведомым. Вопрос как настроить регистры интерфейса SPI в микроконтроллере. Что бы импульсы синхронизации выдавал микроконтроллер и одновременно принимал данные.
Вы хотите странного. Интерфейс SPI подразумевает, что клок формируется ведущим. Ну а за режим работы отвечает регистр SSPxCON1, биты SSPM<3:0>
Baser
Feb 14 2018, 13:08
Цитата(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
Feb 14 2018, 13:24
Микроконтроллер начинает выдавать синхронизацию (SCK), после загрузки байта в SSP1BUF. Мне нужно загрузить SSP1BUF во время синхронизации. Подключенное изделие не может выдавать синхроимпульсы.
Baser
Feb 14 2018, 13:51
Цитата(nicmicola @ Feb 14 2018, 15:24)
Мне нужно загрузить SSP1BUF во время синхронизации.
Если вы написали программный SPI, то должны понимать принцип передачи данных в этом интерфейсе. Синхронизации как какого-то отдельного процесса нет.
На каждый CLK, выдаваемый мастером, мастер передает, а слейв принимает один бит, и в это же время слейв передает, и мастер принимает другой бит (по кругу).
Совершенно непонятно, что вам непонятно. Опишите подробно вашу проблему...
nicmicola
Feb 14 2018, 14:22
Микроконтроллер должен выдать SCK, и в это же время прочитать SSP1BUF. Обычно ведущий генерирует SCK и загружает SSP1BUF (передает). Обычно ведомый принимает (читает SSP1BUF) и считывает SCK импульсы (SCK это и есть синхронизация). Я же писал подключаемое изделие может работать только ведомым. Значит не может генерировать SCK (синхронизировать импульсы )
Baser
Feb 14 2018, 14:35
У вас в голове смешались аппаратная и программная части. При аппаратной реализации SPI вам программно нужно только записать передаваемое слейву значение в SPIxBUF, дождаться окончания передачи (по прерыванию или поллингом флага) и прочитать принятое от слейва значение из того-же SPIxBUF. Больше ничего программно делать не нужно, все дерганье ногами CLK и SDO, и прием с SDI контроллер делает сам (аппаратно).
nicmicola
Feb 15 2018, 14:00
Всем спасибо. Вопрос решен. Решение такое перед приемом байта, нужно отослать байт в никуда. Он и сгенерирует необходимые тактовые импульсы.
Lagman
Feb 15 2018, 20:09
Цитата(nicmicola @ Feb 15 2018, 17:00)
Всем спасибо. Вопрос решен. Решение такое перед приемом байта, нужно отослать байт в никуда. Он и сгенерирует необходимые тактовые импульсы.
Это называется dummy bytes и обычно это 0xFF (есть вариант с 0x00). И как вы программную реализацию делали если этого не знали.
ViKo
Feb 16 2018, 04:29
И во временнОй диаграмме на ведомое устройство dummy byte определенно есть (только не называется так). Так все SPI устройства работают.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.