Розширене використання бібліотеки SPI з Due
SPI
Розширене використання бібліотеки SPI з Due
Ці API не мають використовуватися у нових проектах. Використайте SPISettings та SPI.beginTransaction(), щоб сконфігурувати параметри SPI.
На Arduino Due SAM3X має поліпшені можливості SPI. Можливо використовувати ці розширені методи на AVR-базованих платах.
Розширене API може використовувати піни 4, 10 та 52 для CS.
Використання
Потрібно вказати кожен пін, який Ви хочете використовувати як CS для SPI-пристроївДля Due можливо автоматично опрацьовувати вибір чіпа між численними пристроями, що ділять шину SPI. Кожен пристрій також може мати різні атрибути, такі як швидкість та режим запису даних.
Якщо Ви використовуєте кілька пристроїв з різними пінами CS, потрібно буде оголосити ці піни у setup(). У прикладі нижче є два пристрої, які поділяють піни SPI MISO, MOSI та SCK. Один пристрій приєднаний до піна 4, інший до піна 10.
void setup(){
// ініціалізувати шину для пристрою на піні 4
SPI.begin(4);
// ініціалізувати шину для пристрою на піні 10
SPI.begin(10);
}Після того, як пін проголошений як пін CS, можливо також змінити його поведінку за замовчуванням. Наприклад, якщо пристрої запускаються з різною тактовою частотою, setup() може виглядати так:
void setup(){
// ініціалізувати шину для пристрою на піні 4
SPI.begin(4);
// встановити тактову частоту 21 на піні 4
SPI.setClockDivider(4, 21);
// ініціалізувати шину для пристрою на піні 10
SPI.begin(10);
// встановити тактову частоту 84 на піні 10
SPI.setClockDivider(10, 84);
}Передача одного байта до пристрою на піні 4 виглядатиме так:
void loop(){
byte response = SPI.transfer(4, 0xFF);
}Зверху “0xFF” передається до пристрою SPI на піні 4, і дані, що надходять від MISO, зберігаються всередині відповіді змінної. Вибір чіпа опрацьовується автоматично SPI-контролером, команда передачі передбачає наступне:
- вибір пристрою налаштуванням піна на LOW;
- надіслати 0xFF через шину SPI та повернути отриманий байт;
- відмінити вибір пристрою налаштуванням піна на HIGH.
Можливо надсилати більше, ніж один байт в межах операції, вказуючи команді передачі не скасовувати вибір пристрою SPI після передачі.
void loop(){
// передати 0x0F до пристрою на піні 10, зберегти вибір чіпа
SPI.transfer(10, 0xF0, SPI_CONTINUE);
// передати 0x00 до пристрою на піні 10, зберегти вибір чіпа
SPI.transfer(10, 0×00, SPI_CONTINUE);
// передати 0x00 до пристрою на піні 10, зберегти отриманий байт у response1, зберегти вибір чіпа
byte response1 = SPI.transfer(10, 0×00, SPI_CONTINUE);
// передати 0x00 до пристрою на піні 10, зберегти отриманий байт у response2, скасувати вибір чіпа
byte response2 = SPI.transfer(10, 0×00);
}Параметр SPI_CONTINUE запевняє, що вибір чіпа зберігається активним між передачами. В останній передачі SPI_CONTINUE не визначений, так як його останній байт переданий.
Дивіться сторінки setClockDivider(), setDataMode(), transfer(), setBitOrder() для правильного синтаксису при використанні розширених методів.
Примітка: після виклику SPI.begin() оголошений пін не буде доступний як пін I/O загального призначення.
Повернутись до головної

Коментарі 0