MicroEJ UART и другие прерывания GPIO с помощью STM32F746G-DISCO - PullRequest
0 голосов
/ 27 мая 2019

Мне нужно знать, как использовать прерывание UART в MicroEJ (при получении данных выполнять свою работу).Я не хочу использовать поток с while (true) (forever loop) для чтения входного потока.у нас есть эти функции в C

LLCOMM_UART_callback and LLCOMM_BUFFERED_CONNECTION_dataReceived

//main uart interrupt

void USART6_IRQHandler(void)
{
    LLCOMM_UART_callback(&LLCOMM_UARTs[UART6_INDEX]);
}
/* Interrupt callback --------------------------------------------------------*/
void LLCOMM_UART_callback(LLCOMM_UART* llcomm)
{
    // retrieve LLCOM environment for given comIndex
    LLCOMM_BUFFERED_CONNECTION* env = &llcomm->header;
    UART_HandleTypeDef* handle = &llcomm->hal_uart_handle;

    uint8_t leave = interrupt_enter();

    // check RX
    if (__HAL_UART_GET_IT(handle, UART_IT_RXNE))
    {
        // read data, clear the interrupt and send data to MicroEJ framework
        LLCOMM_BUFFERED_CONNECTION_dataReceived(env, handle->Instance->RDR);
    }
}

, но я не могу найти, как реализовать эти интерфейсы для Java?

2-я часть, как использовать прерывания входных контактов и интерфейс их для Java?есть ли API для этого ??

Спасибо

1 Ответ

1 голос
/ 29 мая 2019

Реализация собственного интерфейса LLCOM_UART позволит вам использовать ECOM COMM в Java.

Прерывание UART обрабатывается нижележащим BSP (в C), кэширующим данные, полученные в буфере, до тех пор, пока поток Java не проснется, чтобы вернуть данные чтения. Таким образом, нет выбора между обработкой прерывания или «циклом навсегда», это:

  • обработка прерываний в C, чтение данных затем кэшируется в буфер
  • Поток Java периодически просыпается и проверяет наличие данных в буфере

Настройка выводов и обработка прерываний для UART выполняются не в Java, а в C на уровне BSP, используя UART в Java только в качестве потока Java.

Пример использования коннекторов связи Java можно найти в нашем GitHub [1].

Что касается реализации стороны LL_UART C, вы можете посмотреть, как это было сделано для существующей платформы [2]. Внутри архива вы найдете реализацию BSP для STM32F7476G-DISCO, этот BSP содержит реализацию LL_UART (в platformSource\STM32F746GDISCO-846SI-platformSource.zip\STM32F746GDISCO-846SI-3.1.5-bsp\Projects\STM32746G-Discovery\Applications\MicroEJ\src-comm).

Для GPIO существует библиотека HAL [3].

Гаэтан

[1] https://github.com/MicroEJ/Example-Standalone-Foundation-Libraries/tree/master/com.microej.example.foundation.ecom.reader

[2] http://developer.microej.com/packages/referenceimplementations/846SI/3.1.5/STM32F746GDISCO-846SI-fullPackaging-eval-3.1.5.zip

[3] https://developer.microej.com/javadoc/microej_4.1/foundation/ej/hal/gpio/package-summary.html

...