我需要知道如何在MicroEJ中使用UART中断(当数据接收时,做我的工作)。 我不想使用带有 while(true)(永久循环)的线程来读取输入流。 我们在 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 ?
第二部分是如何使用输入引脚中断并将它们连接到Java? 有没有这方面的API??
谢谢
实现LLCOM_UART本机接口将允许您在 Java 中使用 ECOM COMM。
UART 中断由底层 BSP(C 语言)处理,缓存缓冲区中接收的数据,直到 Java 线程唤醒以取回读取的数据。因此,在中断处理或"永远循环"之间没有选择,它是:
- C语言中的中断处理,读取数据然后缓存到缓冲区中
- Java 线程定期唤醒并检查缓冲区中是否有数据
UART的引脚配置和中断处理不是在Java中完成的,而是在BSP级别的C中完成的,仅将Java中的UART用作Java流。
您可以在我们的GitHub [1]中找到使用Java通信连接器的示例。
至于实现LL_UART C端,你可以看看它是如何在现有平台上完成的[2]。在存档中,您将找到用于STM32F7476G-DISCO的BSP实现,该BSP包含一个LL_UART实现(platformSourceSTM32F746GDISCO-846SI-platformSource.zipSTM32F746GDISCO-846SI-3.1.5-bspProjectsSTM32746G-DiscoveryApplicationsMicroEJsrc-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