牛卧堂MCU技术交流
标题:
nuc980程序 串口设置
[打印本页]
作者:
匿名
时间:
2022-3-6 17:49
标题:
nuc980程序 串口设置
我想使用串口6
但是始终没成功
//outpw(REG_CLK_PCLKEN0, inpw(REG_CLK_PCLKEN0) | (0x1 << 17)); // Enable UART1 engine clock 原
outpw(REG_CLK_PCLKEN0, inpw(REG_CLK_PCLKEN0) | (0x1 << 22)); // Enable UART6 engine clock
UART_Open(UART6, 115200);
复制代码
首先,1、设置是否正确?
2、main函数内
outpw(REG_SYS_GPC_MFPL, (inpw(REG_SYS_GPC_MFPL) & 0x000fffff) | 0x77700000); // UART1_RX:PC6, UART1_TX:PC5, UART1_RTS:PC7
outpw(REG_SYS_GPC_MFPH, (inpw(REG_SYS_GPC_MFPH) & 0xfffffff0) | 0x00000007); // UART1_CTS:PC8
复制代码
是否需要更改
3、NUC980 Series Technical Reference Manual (TRM) 文件在 主页下载不了 显示500,资料还有链接吗?谢谢
作者:
arthur
时间:
2022-3-7 10:50
内核配置:Device Drivers --> Character devices --> Serial drivers 打开相应的脚位配置,如下面
(x) Rx: PA4, Tx: PA5
官方串口驱动已经事先集成到了内核中去,只需要在内核配置中打开即可,请先检查硬件电路实际连接情况。
原则上驱动代码都不需要修改的。串口的硬件驱动初始化分下面几步
(1)时钟配置
1.1 选择UART6外设时钟源 UART6_S (CLK_DIVCTL5[20:19]
1.2 选择UART6外设时钟源分倍数(divider) UART6_N (CLK_DIVCTL5[23:21]
1.3 启用UART6外设时钟 UART6CKEN (CLK_APBCLK0[22])
(2) 复位配置
UART6RST (SYS_APBIPRST0[22])
(3) 脚位配置
通过内核配置打开相应的配置即可(make menuconfig) multifunction pin, pinctrl
作者:
arthur
时间:
2022-3-7 13:09
从代码看,提问者似乎是在 non-OS BSP上修改UART驱动,
第1步,开启 UART6的外设时钟(peripheral clock)是对的 (outpw(REG_CLK_PCLKEN0, inpw(REG_CLK_PCLKEN0) | (0x1 << 22)); // Enable UART6 engine clock)
第2步 main 函数里,有两句代码:
outpw(REG_SYS_GPC_MFPL, (inpw(REG_SYS_GPC_MFPL) & 0x000fffff) | 0x77700000); // UART1_RX
C6, UART1_TX
C5, UART1_RTS
C7
outpw(REG_SYS_GPC_MFPH, (inpw(REG_SYS_GPC_MFPH) & 0xfffffff0) | 0x00000007); // UART1_CTS
C8
根据TRM 136页 SYS_GPC_MFPL 的描述 (0x77700000 --> 0111 0111 0111 0000 0000 0000 0000 0000)
[31:28] MFP_GPC7 PC.7 multifunc selection (0111) --> TRM page 42 --> UART1_RTS
[27:24] MFP_GPC6 PC.6 multifunc selection (0111) --> TRM page 42 --> UART1_RXD
[23:20] MFP_GPC5 PC.5 multifunc selection (0111) --> TRM page 42 --> UART1_TXD
[19:16] MFP_GPC4 PC.4 multifunc selection
[15:12] MFP_GPC3 PC.3 multifunc selection
[11:08] MFP_GPC2 PC.2 multifunc selection
[07:04] MFP_GPC1 PC.1 multifunc selection
[03:00] MFP_GPC0 PC.0 multifunc selection
根据 TRM 137页对 SYS_GPC_MFPH的描述:(0x00000007 --> 0000 0000 0000 0000 0000 0000 0000 0000 0111)
[31:28] MFP_GPC15 PC.15 multifunc selection
[27:24] MFP_GPC14 PC.14 multifunc selection
[23:20] MFP_GPC13 PC.13 multifunc selection
[19:16] MFP_GPC12 PC.12 multifunc selection
[15:12] MFP_GPC11 PC.11 multifunc selection
[11:08] MFP_GPC10 PC.10 multifunc selection
[07:04] MFP_GPC09 PC.09 multifunc selection
[03:00] MFP_GPC08 PC.08 multifunc selection (0111) ---> TRM page 43 --> UART1_CTS
由此可见,main函数的这两句代码,分别设置的是UART1_RTS, UART1_RXD, UART1_TXD, UART1_CTS
需要配置成 UART6所需要的 RTS/CTS, RXD/TXD
UART6_CTS PA.2 MFP1
PD.8 MFP2
UART6_RTS PA.3 MFP1
PD.9 MFP2
UART6_RXD PA.4 MFP1
PD.11 MFP2
PE.8 MFP5
UART6_TXD PA.5 MFP1
PD.10 MFP2
PE.9 MFP5
为了简单方便,假设CTS PA.2 MFP1, RTS PA.3 MFP1, RXD PA.4 MFP1, TXD PA.5 MFP1,
需要配置 SYS_GPA_MFPL (TRM page 132) 为 0000 0000 0001 0001 0001 0001 0000 0000 即 0x111100
outpw(REG_SYS_GPC_MFPL, (inpw(REG_SYS_GPC_MFPL) & 0xff0000ff) | 0x00111100);
作者:
匿名
时间:
2022-3-7 21:45
主要是 TRM 文件,在新唐 官网 下载不了
nuc980新唐介绍
。
在百度上找了一圈,下载了 手册 ,然后参照你给的回复,最终根据手册,自己也摸索了一遍
outpw(REG_SYS_GPA_MFPL, (inpw(REG_SYS_GPA_MFPL) & 0x0000f) | 0x11110); // PA.2345 UART6
测试成功,非常感谢。。。解释非常到位。。
欢迎光临 牛卧堂MCU技术交流 (http://nuvoton-mcu.com/)
Powered by Discuz! X3.2