Приветствую Вас ГостьСреда, 08.01.2025, 11:51

AVR & ARDUINO




Каталог статей

Главная » Статьи » Справочник

Использование расширенных возможностей SPI на Arduino Due

Описание

Микроконтроллер SAM3X на Arduino Due предоставляет разработчику расширенные возможности по работе с интерфейсом SPI. При этом можно использовать как расширенное API, так и традиционный подходы, характерные платам на базе AVR-микроконтроллеров.

Расширенное API в качестве линий SS позволяет использовать контакты 4, 10 и 52.

Использование

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

Arduino Due может автоматически управлять этими контактами, распределяя доступ к шине SPI между ведомыми устройствами. При этом каждое устройство может иметь индивидуальные настройки SPI-интерфейса, такие, как режим работы и скорость передачи данных.

Таким образом, для управления несколькими ведомыми устройствами необходимо объявить соответствующие им выводы SS в функции setup(). Ниже показан пример работы с двумя устройствами, расположенными на одной SPI-шине. Вывод SS одного устройства подключен к контакту 4, другого - к контакту 10.

void setup(){
 // инициализируем шину для устройства, подключенного к контакту 4
 SPI.begin(4);
 // инициализируем шину для устройства, подключенного к контакту 10
 SPI.begin(10);
}

После объявления контакту SS, каждому Slave можно задать индивидуальные настройки интерфейса SPI. Например, если устройства работают на разной тактовой частоте, функция setup() будет выглядеть следующим образом:

void setup(){
 // инициализируем шину для устройства, подключенного к контакту 4
 SPI.begin(4);
 // устанавливаем для этого устройства коэффициент деления тактовой частоты 21
 SPI.setClockDivider(4, 21); 
 // инициализируем шину для устройства, подключенного к контакту 10
 SPI.begin(10);
 // устанавливаем для этого устройства коэффициент деления тактовой частоты 84
 SPI.setClockDivider(10, 84);
}

Простая передача байта ведомому устройству, подключенному к контакту 4, будет выглядеть так:

void loop(){
 byte response = SPI.transfer(4, 0xFF);
}

В результате выполнения этого кода, значение "0xFF" будет отправлено SPI-устройству, подключенному к контакту 4, а ответные данные, пришедшие от устройства по линии MISO, будут помещены в переменную response. Управление линией SS осуществляется контроллером интерфейса SPI автоматически. Таким образом, метод transfer выполняет следующие операции:

  • активизирует ведомое устройство, формируя на контакте 4 низкий уровень сигнала (LOW)
  • отправляет значение 0xFF по шине SPI и возвращает полученный байт
  • отключает ведомое устройство от шины SPI, формируя на контакте 4 высокий уровень сигнала (HIGH)

Также возможна отправка нескольких байт за одну транзакцию. Для этого команде transfer необходимо указать параметр, который заставит ее не отключать ведомое устройство после передачи байта:

void loop(){
//передаем 0x0F устройству, подключенному к контакту 10, оставляя его активным
SPI.transfer(10, 0xF0, SPI_CONTINUE);
 
//передаем 0x00 устройству, подключенному к контакту 10, оставляя его активным
SPI.transfer(10, 0x00, SPI_CONTINUE);
 
//передаем 0x00 устройству, подключенному к контакту 10, и сохраняем полученный
//байт в переменной response1. По прежнему оставляем устройство активным
byte response1 = SPI.transfer(10, 0x00, SPI_CONTINUE);
 
//передаем 0x00 устройству, подключенному к контакту 10, и сохраняем полученный
//байт в переменной response2, отключая устройство.
byte response2 = SPI.transfer(10, 0x00);
}

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

Примечание: после вызова функции SPI.begin(), контакт, переданный ей в качестве параметра, нельзя использовать в качестве контакта общего назначения.

Смотрите также

begin()

end()

setBitOrder()

setClockDivider()

setDataMode()

transfer()


Библиотека SPI

Справочник

Материалы взяты с официального сайта проекта Arduino и представлены по лицензии Creative Commons Attribution-ShareAlike 3.0 License.



Источник: http://arduino.cc/en/Reference/SPITransfer
Категория: Справочник | Добавил: magi (21.02.2015)
Просмотров: 1123 | Теги: SPI, Последовательный периферийный интер, arduino | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Поиск
Вход на сайт
На правах рекламы

Мы переезжаем на сайт Arduino по-русски