Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如果要启用串口DMA收发数据 应用程序 与 驱动程序需要做什么特别处理 #11

Open
zwjin1210 opened this issue Jun 5, 2024 · 18 comments

Comments

@zwjin1210
Copy link

No description provided.

@ychuang3
Copy link
Contributor

ychuang3 commented Jun 5, 2024

都不需要,從 device tree 指定使用 PDMA 即可

@zwjin1210
Copy link
Author

image
image
这个应该怎么指定

@ychuang3
Copy link
Contributor

ychuang3 commented Jun 7, 2024

只需要修改 uart node
pdma-enable = <1>;

@zwjin1210
Copy link
Author

是不是我不需要关心是哪个 PDMA 只需要pdma-enable = <1>;就可以

@ychuang3
Copy link
Contributor

是的,driver 會自動分配

@zwjin1210
Copy link
Author

zwjin1210 commented Jun 17, 2024

我不开启DMA能正常收到 但是开启了DMA 就不正常 系统都会挂掉
image

image
image
image

@zwjin1210
Copy link
Author

是的,driver 會自動分配

我测试了好像不行

@mjchen1
Copy link
Contributor

mjchen1 commented Jun 20, 2024

可以參考,下面PDMA的設定,
需要指定pdma port(pdma0~3)及pdma channel.

uart1:serial@40710000 {
compatible = "nuvoton,ma35d1-uart";
reg = <0x0 0x40710000 0x0 0x10000>;
interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clk UART1_GATE>;
port-number = <1>;

	/* PDMA Setting  */
	dmas = <&pdma0 0>,<&pdma0 1>;
	dma-names = "tx", "rx";
	pdma-enable = <1>; /* Enable PDMA */

	status = "disabled";

};

@zwjin1210
Copy link
Author

zwjin1210 commented Jun 20, 2024

dmas = <&pdma0 0>,<&pdma0 1>;
dma-names = "tx", "rx";
pdma-enable = <1>; /* Enable PDMA */

这么配置DMA 是没问题但是串口485 好像只能收发一次 ,我显示串口收发控制脚是使用RTS引脚当普通引脚使用 不使用DMA情况下是可以正常收发的 ,但是如果使用DMA 只能收发一次

@mjchen1
Copy link
Contributor

mjchen1 commented Jun 21, 2024

你的RTS引腳,是s/w控制的嗎 ...??

@zwjin1210
Copy link
Author

你的RTS引腳,是s/w控制的嗎 ...??

是的 配置成普通GPIO 因为之前配置成RTS 时 485只能收发一次 然后看论坛里说是当普通GPIO用 可以

@mjchen1
Copy link
Contributor

mjchen1 commented Jun 24, 2024

使用DMA時,需要設置RTS pin,這樣硬體才會自動拉,
用s/w拉的話,可能會來不及

@zwjin1210
Copy link
Author

使用DMA時,需要設置RTS pin,這樣硬體才會自動拉, 用s/w拉的話,可能會來不及
但是我不使用DMA时 配置成RTS pin 就是收发一次

@mjchen1
Copy link
Contributor

mjchen1 commented Jun 27, 2024

main.zip
image
我們試了一下設置硬件的RTS,
看起來並沒有什麼問題,
附件是我們的測試code,你可以參考一下

@zwjin1210
Copy link
Author

main.zip image 我們試了一下設置硬件的RTS, 看起來並沒有什麼問題, 附件是我們的測試code,你可以參考一下
是的我修改成RTS 就好了

@zwjin1210
Copy link
Author

但是修改串口配置 再次设置一下 就收不到数据了 RTS 一直高电平

@mjchen1
Copy link
Contributor

mjchen1 commented Dec 23, 2024

"修改串口配置 再次设置一下",這是怎麼操作的,可以詳細說明一下嗎 ...??

@zwjin1210
Copy link
Author

我发现是我初始化串口 之前设置了485模式就这样 如果初始化串口之后再配置485模式就可以

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants