From fc6412adf060aeb2ac27a092b304f1cc4459acb0 Mon Sep 17 00:00:00 2001 From: andy <1414772332@qq.com> Date: Sat, 12 Apr 2025 17:17:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=80=E4=BA=9Bgpio=5Fmtx?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- driver/src/hw3/gpio_mtx.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/driver/src/hw3/gpio_mtx.c b/driver/src/hw3/gpio_mtx.c index ccf68c0..f5a5f91 100644 --- a/driver/src/hw3/gpio_mtx.c +++ b/driver/src/hw3/gpio_mtx.c @@ -153,6 +153,9 @@ uint8_t gpio_pin_func_get(uint32_t gpio) return 0; } +// 配置gpio输入的时候如果有gpio的func选通了这个外设,则这个外设可以选择接收mtx的信号还是gpio的信号 +// 指定外设输入连接的通路,0通过矩阵连接,1直连到gpio,对于有func的那一路起作用 +// offset要操作的寄存器偏移地址 val值 void IRAM_ATTR gpio_mtx_sig_in_set_core(uint32_t offset, uint32_t val) { uint32_t tmp; @@ -163,6 +166,7 @@ void IRAM_ATTR gpio_mtx_sig_in_set_core(uint32_t offset, uint32_t val) GPIO_MTX_WRITE_REG(offset, tmp); } +// mtx sig信号到外设的输入源,0通过mtx进来,1常为0,2常为1,3通过mtx反向 void IRAM_ATTR gpio_mtx_sig_in_set_def(uint32_t offset, uint32_t val) { uint32_t tmp; @@ -171,6 +175,7 @@ void IRAM_ATTR gpio_mtx_sig_in_set_def(uint32_t offset, uint32_t val) GPIO_MTX_WRITE_REG(offset, tmp); } +// mtx 信号来自哪个gpio,val gpio序号 void IRAM_ATTR gpio_mtx_sig_in_set_gpio(uint32_t offset, uint32_t val) { uint32_t tmp; @@ -180,6 +185,7 @@ void IRAM_ATTR gpio_mtx_sig_in_set_gpio(uint32_t offset, uint32_t val) GPIO_MTX_WRITE_REG(offset, tmp); } +// 找到指定信号连接的gpio序号 uint8_t IRAM_ATTR gpio_mtx_sig_in_get_gpio(uint8_t sig_id) { uint32_t sig_addr; @@ -190,6 +196,8 @@ uint8_t IRAM_ATTR gpio_mtx_sig_in_get_gpio(uint8_t sig_id) return (uint8_t)REG_FIELD_GET(SIG_IN_GPIO_SEL, rd_gpio); } +// 指定gpio输出到哪个mtx sig上,为255时使用gpio软控 +// offset 寄存器偏移地址, val mtx sig信号id void IRAM_ATTR gpio_mtx_sig_out_set_sel(uint32_t offset, uint32_t val) { uint32_t tmp; @@ -198,6 +206,7 @@ void IRAM_ATTR gpio_mtx_sig_out_set_sel(uint32_t offset, uint32_t val) GPIO_MTX_WRITE_REG(offset, tmp); } +// 为mtx sig id绑定gpio,输入是sig绑定gpio,输出是gpio绑sig void IRAM_ATTR gpio_mtx_sig_in(uint8_t id, uint8_t gpio, uint32_t mode) { uint32_t offset; @@ -226,6 +235,8 @@ void IRAM_ATTR gpio_mtx_sig_in_default(uint8_t id) gpio_mtx_sig_in_set_def(offset, 2); } +// 外设要通过mtx输出信号到gpio,gpio的func必须设置为0,并且id不为255 +// 如果id为255,则连接到gpio控制 void IRAM_ATTR gpio_mtx_sig_out(uint8_t id, uint8_t gpio) { uint32_t offset; @@ -257,7 +268,8 @@ void gpio_module_pin_select(gpio_sig_info_t *info) } } -void gpio_module_sig_select(gpio_sig_info_t *info, uint32_t mode) +// 选择gpio到外设的信号通路,mode为0时通过func连接,mode为1时通过mtx连接 +void gpio_module_sig_select(gpio_sig_info_t* info, uint32_t mode) { int i = 0; uint8_t gpio = 0;