这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 使用UARTRX信号来触发ERU函数,为什么UARTTX会针对每个数据触发ERU

共3条 1/1 1 跳转至

使用UARTRX信号来触发ERU函数,为什么UARTTX会针对每个数据触发ERU中断一次?

工程师
2024-06-27 20:01:58     打赏

我想使用 UART RX 信号来触发 ERU 函数。 代码如下所示
这适用于 UART1 P2.0 和 P2.1
const XMC_GPIO_CONFIG_t CYBSP_DEBUG_UART_TX_config = {    .mode = (XMC_GPIO_MODE_t)CYBSP_DEBUG_UART_TX_MODE,    .output_level = XMC_GPIO_OUTPUT_LEVEL_LOW,};const XMC_GPIO_CONFIG_t CYBSP_DEBUG_UART_RX_config = {    .mode = (XMC_GPIO_MODE_t)CYBSP_DEBUG_UART_RX_MODE,    .input_hysteresis = XMC_GPIO_INPUT_HYSTERESIS_STANDARD,};    XMC_UART_CH_InitEx(XMC_UART0_CH0,  CYBSP_DEBUG_UART_config, true);    XMC_UART_CH_SetinputSource(XMC_UART0_CH0, (XMC_UART_CH_INPUT_t)XMC_USIC_CH_INPUT_DX0, 4);    XMC_UART_CH_SetSamplePoint(XMC_UART0_CH0, 8U);    XMC_USIC_CH_SetInterruptNodePointer(XMC_UART0_CH0, XMC_USIC_CH_INTERRUPT_NODE_POINTER_RECEIVE, 0U);    XMC_UART_CH_EnableEvent(XMC_UART0_CH0, XMC_UART_CH_EVENT_STANDARD_RECEIVE);                XMC_GPIO_Init(XMC_GPIO_PORT2, 1,  CYBSP_DEBUG_UART_TX_config);    XMC_GPIO_SetHardwareControl(XMC_GPIO_PORT2, 1, XMC_GPIO_HWCTRL_DISABLED);    XMC_GPIO_Init(XMC_GPIO_PORT2, 0,  CYBSP_DEBUG_UART_RX_config);    XMC_GPIO_SetHardwareControl(XMC_GPIO_PORT2, 0, XMC_GPIO_HWCTRL_DISABLED);                    NVIC_SetPriority((IRQn_Type)IRQ9_IRQn, 3);    NVIC_EnableIRQ((IRQn_Type)IRQ9_IRQn);    NVIC_ClearPendingIRQ(IRQ9_IRQn);
请查看数据表,P2.0 是 ERU0.0B0

所以这是我的 ERU 设置。
const XMC_ERU_ETL_CONFIG_t button_event_generator_config = {    .input_b = XMC_ERU_ETL_INPUT_B0,    .enable_output_trigger = 1,    .output_trigger_channel = XMC_ERU_ETL_OUTPUT_TRIGGER_CHANNEL0,    .status_flag_mode = XMC_ERU_ETL_STATUS_FLAG_MODE_SWCTRL,    .source = XMC_ERU_ETL_SOURCE_B,    .edge_detection = XMC_ERU_ETL_EDGE_DETECTION_FALLING,};const XMC_ERU_OGU_CONFIG_t button_event_detection_config = {    .enable_pattern_detection = 1,    .service_request = XMC_ERU_OGU_SERVICE_REQUEST_ON_TRIGGER_AND_PATTERN_MATCH,    .pattern_detection_input = XMC_ERU_OGU_PATTERN_DETECTION_INPUT0,};void ERU_Init(void){XMC_ERU_ETL_Init(ERU0_ETL0,  button_event_generator_config);XMC_ERU_OGU_Init(ERU0_OGU0,  button_event_detection_config);                NVIC_SetPriority(IRQ3_IRQn,NVIC_EncodePriority(NVIC_GetPriorityGrouping(),3, 192));                    NVIC_EnableIRQ(IRQ3_IRQn);                }void ERU_IRQHandler(void){XMC_ERU_ETL_ClearStatusFlag(ERU0_ETL0);}
从 RX 接收到的数据确实进入了 ERU,但是为什么 UART TX 会针对每个数据触发 ERU 中断一次?
我的设置有什么问题吗?




关键词: UART     中断    

助工
2024-06-27 20:02:52     打赏
2楼

UART TX 信号每触发一次 ERU 中断,是因为在每次发送数据时,UART 会产生一个 TX 指示信号,用于表示数据正在发送。

相比之下,UART RX 端口不会像 TX 端口一样产生单独的触发信号。而是当接收到数据时,会通过 RX 端口的中断来触发 ERU 函数。

所以,如果你想使用 UART RX 信号来触发 ERU 函数,你需要在接收到数据时,通过 RX 端口的中断来调用 ERU 函数。在中断处理函数中,你可以检查接收到的数据,并根据需要执行相应的操作。 


专家
2024-06-28 00:39:51     打赏
3楼

感谢楼主分享


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]