我想使用 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 中断一次?
我的设置有什么问题吗?
共3条
1/1 1 跳转至页
使用UARTRX信号来触发ERU函数,为什么UARTTX会针对每个数据触发ERU中断一次?
关键词: UART 中断
2楼
UART TX 信号每触发一次 ERU 中断,是因为在每次发送数据时,UART 会产生一个 TX 指示信号,用于表示数据正在发送。
相比之下,UART RX 端口不会像 TX 端口一样产生单独的触发信号。而是当接收到数据时,会通过 RX 端口的中断来触发 ERU 函数。
所以,如果你想使用 UART RX 信号来触发 ERU 函数,你需要在接收到数据时,通过 RX 端口的中断来调用 ERU 函数。在中断处理函数中,你可以检查接收到的数据,并根据需要执行相应的操作。
共3条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |