Вопросы по настройке PIC SPI

У меня есть вопросы, связанные с регистрами SPIxCON SPI. Использую PIC18F26K83. 1) Существует SPIxTCNTH: SPI TRANSFER COUNTER MSB REGISTER. И я могу установить на нем первые 3 бита, которые подсчитывают передаваемые биты. И в соответствии с таблицей данных это бит с возможностью записи. Согласно таблице данных он считает биты, которые будут переданы, тогда почему он доступен для записи? Нужно ли мне писать в соответствии с битами, которые я пришлю? Или это нужно для информирования пользователя.

2) Есть SPIxTWIDTH: SPI TRANSFER WIDTH REGISTER. В случае BMODE = 1 это размер (в битах) каждой передачи, подсчитанный счетчиком передач. Я буду отправлять такие значения, как 1,1 или 2,3, в DAC. В этом случае, что мне установить? Есть ли у этого регистра стандартное значение?

3) Я не мог понять, для чего нужны регистры FIFO, согласно таблице данных, мы не можем контролировать их с помощью программного обеспечения. Разве это не буфер? Поэтому, если я пишу в регистр передачи быстрее, чем скорость передачи, передаваемые данные будут помещены в FIFO. И один за другим они будут передаваться. Я прав? Мне не нужно ничего кроме записи в буфер передачи.

4) Я прочитал, но не смог понять биты полярности в SPIxCON1. Ничего страшного, если я не трогаю эти биты в регистре управления? Я не хочу облажаться.

5) Как выбрать рабов? В регистре SPIxCON2 есть SSET (бит разрешения выбора ведомого). Я могу сделать 1, но как тогда выбрать раб?

Спасибо за ответ. Я новичок. Извините за простые и, может быть, бессмысленные вопросы. Или я могу просто показать свой код конфигурации, но я считаю, что его будет сложнее анализировать.


person Günkut Ağabeyoğlu    schedule 19.04.2019    source источник


Ответы (1)


1) В счетчик передачи (когда он используется) записывается количество байтов или частичных байтов для отправки или получения (в зависимости от режима). Таким образом, вы должны установить его, если вы его используете (BMODE = 0 или TXR = 0), на количество байтов, которое вы ожидаете отправить или получить.

2) Вам нужно будет посмотреть на ваше двоичное представление этих чисел, чтобы узнать, сколько бит вы отправляете в каждом случае. Стандартное значение - полный байт.

3) FIFO являются скрытыми элементами, запись в SPIxTXB или чтение из регистров SPIxRXB обеспечивает доступ к соответствующему FIFO. FIFO имеют глубину всего два байта, поэтому вам все равно нужно будет проверять переполнение, если вы отправляете быстрый бит TXWE (iirc), но если у вас много данных для быстрой передачи, я бы рекомендовал использовать DMA для выполнения передачи, тогда вы ' Я бы просто настроил его и позволил ему уйти и мог бы заниматься другими делами, пока он не будет закончен.

4) Я думаю, что биты полярности просто устанавливают уровень линии в состоянии ожидания на высокий или низкий. Он должен быть одинаковым для всех (мастеров и рабов).

5) Если у вас только одно ведомое устройство, вы можете привязать эту линию к линии включения ведомых устройств. Если у вас более одного подчиненного устройства, вам необходимо настроить линию gpio для каждого и (для каждого из них) ИЛИ сигналов вместе и присоединить выход ИЛИ к включению подчиненного устройства (если он активен на низком уровне, что обычно и есть) . Убедитесь, что одновременно активен только один ведомый. Также можно сделать последовательную цепочку подчиненных. Я не работал с такой установкой.

person estabroo    schedule 19.04.2019
comment
Если вы не читали его, таблица данных - хороший источник ответов. ww1.microchip.com/downloads/en/DeviceDoc/40001943A.pdf - person estabroo; 19.04.2019