我想使用 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 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 基于MCP23S17的输入输出功能模块控制被打赏¥20元 | |
| 【S32K3XX】SPD 软件包使用Link文件修改被打赏¥22元 | |
| Switch-Case局部变量定义问题被打赏¥23元 | |
| 基于米尔TIAM62L开发板的串口通信及应用被打赏¥20元 | |
| PCF8574功能模块及其使用被打赏¥20元 | |
| 传感器LSM6DSO及LIS3MDL的功能检测被打赏¥18元 | |
| LPS25HB气压传感器及其检测被打赏¥18元 | |
| HTS221温湿度传感器及其检测被打赏¥18元 | |
| 【S32K3XX】HSE FW 版本更新被打赏¥21元 | |
| 基于ArduinoUNO开发板的AT24C02读写测试被打赏¥16元 | |
我要赚赏金
