Що таке кільцевої буфер?

Драйвер UART STM32

Після запуску буфера, він повинен бути інтегрований в драйвер UART. Спочатку як глобальний елемент у файлі, тому необхідно оголосити:

  • “descriptor_rbd” та буферну пам’ять “_rbmem: static rbd_t _rbd”;
  • “static char _rbmem [8]”.

Оскільки це драйвер UART, де кожен символ має бути 8-розрядним, створення масиву символів допустимо. Якщо використовується 9 – або 10-бітний режим, то кожен елемент повинен бути “uint16_t”. Контейнер розраховується таким чином, щоб уникнути втрати даних.

Часто модулі черг містять статистичну інформацію, що дозволяє відстежувати максимальне використання. У функції ініціалізації «uart_init» буфер повинен бути ініціалізований шляхом виклику «ring_buffer_init» і передачі структури атрибутів з кожним членом, якому призначено обговорювані значення. Якщо він успішно ініціалізується, модуль UART виводиться з скидання, переривання прийому дозволено в IFG2.

Друга функція, яка повинна бути змінена, – це “uart_getchar”. Зчитування отриманого символу з периферійного пристрою UART замінюється читанням з черги. Якщо черга порожня, функція повинна повернути -1. Далі потрібно впровадити UART для отримання ISR. Відкривають файл заголовка “msp430g2553.h”, прокручують вниз до секції векторів переривань, де знаходять вектор з іменем USCIAB0RX. Іменування має на увазі, що це воно використовується модулями USCI A0 і B0. Статус переривання прийому USCI A0 можна прочитати IFG2. Якщо він встановлений, прапор повинен бути очищений, а дані в приймальному відсіку поміщені в буфер за допомогою «ring_buffer_put».