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

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

Подключаемое изделие к микроконтроллеру, может поддерживать SPI только ведомым.

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

 

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


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

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

 

И все из них, которые имеют SPI, могут работать в режиме мастера.

Так может нужно посмотреть соответствующий документ "Руководство по применению модуля SPI в микроконтроллере PICxxXxxxx фирмы Микрочип" ? :laughing:

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


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

Неужели вы думаете что я не читал перед тем как задавать вопрос.

Естественно читал но не понял.

 

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


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

Естественно читал но не понял.

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

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


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

Неужели вы думаете что я не читал перед тем как задавать вопрос.

Естественно читал но не понял.

Если вы намеков не понимаете, то придется сказать прямо:

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

ибо у Микрочипа очень много разных.

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


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

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

 

У всех микроконтроллерах PIC поддерживающих аппаратный SPI одни и те же регистры.

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

 

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


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

Подключаемое изделие к микроконтроллеру, может поддерживать SPI только ведомым.

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

Вы хотите странного. Интерфейс SPI подразумевает, что клок формируется ведущим.

Ну а за режим работы отвечает регистр SSPxCON1, биты SSPM<3:0>

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


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

Так что не важен какой микроконтроллер.

Ну, тогда так:

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 во время синхронизации. Подключенное изделие не может выдавать синхроимпульсы.

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


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

Мне нужно загрузить SSP1BUF во время синхронизации.

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

Синхронизации как какого-то отдельного процесса нет.

 

На каждый CLK, выдаваемый мастером, мастер передает, а слейв принимает один бит,

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

 

Совершенно непонятно, что вам непонятно.

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

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


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

Микроконтроллер должен выдать SCK, и в это же время прочитать SSP1BUF.

Обычно ведущий генерирует SCK и загружает SSP1BUF (передает).

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

 

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


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

У вас в голове смешались аппаратная и программная части.

При аппаратной реализации SPI вам программно нужно только записать передаваемое слейву значение в SPIxBUF,

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

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


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

Всем спасибо.

Вопрос решен.

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

 

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


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

Всем спасибо.

Вопрос решен.

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

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

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


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

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

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...