牛卧堂MCU技术交流

标题: nuc980程序 串口设置 [打印本页]

作者: 匿名    时间: 2022-3-6 17:49
标题: nuc980程序 串口设置
我想使用串口6
但是始终没成功
  1. //outpw(REG_CLK_PCLKEN0, inpw(REG_CLK_PCLKEN0) | (0x1 << 17)); // Enable UART1 engine clock 原
  2. outpw(REG_CLK_PCLKEN0, inpw(REG_CLK_PCLKEN0) | (0x1 << 22)); // Enable UART6 engine clock
  3. UART_Open(UART6, 115200);
复制代码

首先,1、设置是否正确?
2、main函数内
  1. outpw(REG_SYS_GPC_MFPL, (inpw(REG_SYS_GPC_MFPL) & 0x000fffff) | 0x77700000); // UART1_RX:PC6, UART1_TX:PC5, UART1_RTS:PC7
  2. 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_RXC6, UART1_TXC5, UART1_RTSC7
outpw(REG_SYS_GPC_MFPH, (inpw(REG_SYS_GPC_MFPH) & 0xfffffff0) | 0x00000007); // UART1_CTSC8

根据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