我需要知道如何在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?
谢谢
答案 0 :(得分:1)
实现LLCOM_UART本机接口将允许您使用Java中的ECOM COMM。
UART中断由底层BSP(在C中)处理,将接收到的数据缓存在缓冲区中,直到Java线程醒来取回读取的数据为止。因此,在中断处理或“永远循环”之间别无选择,它是:
针对UART的引脚配置和中断处理不是在Java中完成,而是在BSP级别的C语言中完成,仅将Java中的UART用作Java流。
您可以在我们的GitHub [1]中找到使用Java comm连接器的示例。
关于实现LL_UART C端,您可以看看它是如何在现有平台上完成的[2]。在归档文件中,您将找到STM32F7476G-DISCO的BSP实现,该BSP包含LL_UART实现(在platformSource\STM32F746GDISCO-846SI-platformSource.zip\STM32F746GDISCO-846SI-3.1.5-bsp\Projects\STM32746G-Discovery\Applications\MicroEJ\src-comm
中)。
对于GPIO,存在HAL库[3]。
Gaëtan
[3] https://developer.microej.com/javadoc/microej_4.1/foundation/ej/hal/gpio/package-summary.html