#pic #spi
#pic #spi
Вопрос:
У меня есть несколько вопросов, связанных с регистрами SPIxCON SPI. Я использую PIC18F26K83. 1) Существует РЕГИСТР MSB SPIxTCNTH: СЧЕТЧИК ПЕРЕДАЧИ SPI. И я могу установить на нем первые 3 бита, которые подсчитывают передаваемые биты. И, согласно спецификации, это бит, доступный для записи. В соответствии с таблицей данных он подсчитывает биты, которые будут переданы, тогда почему он доступен для записи? Нужно ли мне записывать его в соответствии с битами, которые я буду отправлять? Или он существует для информирования пользователя.
2) Существует SPIxTWIDTH: РЕГИСТР ШИРИНЫ ПЕРЕДАЧИ SPI. В случае BMODE = 1, это размер (в битах) каждой передачи, подсчитанный счетчиком передачи, я буду отправлять в ЦАП такие значения, как 1.1 или 2.3. В этом случае, на что я должен его установить? Существует ли стандартное значение для этого регистра?
3) Я не мог понять, для чего предназначены регистры FIFO в соответствии с таблицей данных, мы не можем управлять ими с помощью программного обеспечения. Разве это не похоже на буфер? Поэтому, если я записываю в регистр передачи быстрее, чем скорость передачи, передаваемые данные будут помещены в FIFO. И один за другим они будут переданы. Я прав? Мне не нужно ничего, кроме записи в буфер передачи.
4) Я прочитал, но не смог понять биты полярности в SPIxCON1. Ничего, если я не буду касаться этих битов в управляющем регистре? Я не хочу все испортить.
5) Как я могу выбрать ведомые устройства? В регистре SPIxCON2 есть SSET (бит разрешения выбора подчиненного устройства). Я могу сделать это 1, но тогда как я могу выбрать ведомое устройство?
Спасибо за ваши ответы. Я новичок. Извините за простые и, возможно, бессмысленные вопросы. Или я могу просто показать свой код конфигурации, но я считаю, что его будет сложнее проанализировать.
Ответ №1:
1) В счетчик передачи (при использовании) записывается количество байтов или частичных байтов для отправки или получения (в зависимости от режима). Таким образом, вы бы установили его, если вы его используете (BMODE = 0 или TXR = 0) на количество байтов, которые вы ожидаете отправить или получить.
2) Вам нужно будет посмотреть на ваше двоичное представление этих чисел, чтобы увидеть, сколько битов вы будете отправлять в каждом случае. Стандартное значение — это полный байт.
3) FIFO являются скрытыми элементами, запись в SPIxTXB или чтение из регистров SPIxRXB обращаются к соответствующему FIFO. fifo имеют глубину всего в два байта, поэтому вам все равно нужно будет проверять переполнение, если вы отправляете быстрый бит TXWE (iirc), но если у вас много данных для быстрой передачи, я бы рекомендовал использовать DMA для выполнения передачи, тогда вы просто настроите его и отпустите, и сможете сделатьдругие вещи, пока он не будет завершен.
4) Я думаю, что биты полярности просто устанавливают уровень линии во время состояния ожидания на высокий или низкий. Он должен быть установлен одинаково для всех (ведущих и ведомых).
5) Если у вас есть только один подчиненный, вы можете связать эту строку с линией включения подчиненных устройств. Если у вас более одного ведомого устройства, вам нужно настроить линию gpio для каждого и (для каждого из них) или сигналов вместе и подключить вывод ИЛИ к разрешению ведомого устройства (если он активен на низком уровне, что обычно и происходит). Убедитесь, что одновременно активен только один подчиненный сервер. Также можно выполнить последовательную цепочку подчиненных устройств. Я не работал с такой настройкой.
Комментарии:
1. В случае, если вы не ознакомились с ним, таблица данных является хорошим источником ответов. ww1.microchip.com/downloads/en/DeviceDoc/40001943A.pdf