This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM3352:禁用接口时钟的序列

Guru**** 2895430 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1635693/am3352-sequence-to-disable-a-interface-clock

器件型号: AM3352

未找到有关如何禁用接口时钟的说明。

我曾处理 UART1、它最初是使用寄存器值 0x02 启用的。  我向该寄存器写入 0x0 会禁用它、返回值始终为 0x10000、这意味着在转换时不要更改为 0x30000。

除了在此寄存器中设置 DISABLE 位之外、应该还有一个操作序列。

image.png

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    是否在 Processor SDK TI-RTOS 上进行开发? 如果是、请阅读以下内容: e2e.ti.com/.../notice-regarding-processor-sdk-ti-rtos-for-am335x-am437x-omap-l13x-c674x-k2g-amic110-amic120-devices

    此致、

    Vaibhav

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Vaibhav:

    我想手动禁用一个 UART 模块时钟以验证另一个问题。 基于 RTOS 的代码将更具可读性、但我不会要求提供该代码、因为它将被拒绝和关闭。  

    因此、我只需要 操作步骤说明即可完成此操作、我可以自行实施。

    实际上、我检查了 AM335x Starterware 和 RTOS SDK、没有找到此类功能实现来禁用模块/接口时钟。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请尝试以下禁用序列

    1. 禁用之前、确保 UART1 处于空闲状态:
      - TX FIFO 和移位寄存器必须为空
      - RX FIFO 必须为空
      - RX 线路必须空闲[3]
    2. 在模块忙于通信时更改控制寄存器将导致错误[4]。
    3. 配置 UART 空闲模式:
      1. 检查`UART1.UART_SYSC[4:3]` ILEMODE 位、以确保模块可以响应空闲请求[3]。
    4. 写入 MODULEMODE = 0x0:
      1. CM_PER_UART1_CLKCTRL = 0x0;
    5. 轮询 ILEST、直到达到 0x3
      1. while ((CM_PER_UART1_CLKCTRL & 0x30000)!= 0x30000){
        //等待转换完成
        }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我想我接着执行了一些步骤、但不知道如何检查 RX 线路空闲状态是否仍保持在转换状态。  

    实际上、我刚刚启用了 UART1、没有将其连接到外部组件、数据线上没有数据。

    root@am335x-evm:~# dmesg |grep ttyS*
    [    0.000000] Kernel command line: root=PARTUUID=84550dbc-02 rootwait rw earlycon console=ttyO0,115200n8,115200
    [    0.034459] WARNING: Your 'console=ttyO0' has been replaced by 'ttyS0'
    [    1.619071] 48022000.serial: ttyS1 at MMIO 0x48022000 (irq = 18, base_baud = 3000000) is a 8250
    [    2.240622] 44e09000.serial: ttyS0 at MMIO 0x44e09000 (irq = 37, base_baud = 3000000) is a 8250
    [    2.258610] printk: console [ttyS0] enabled
    [    4.980157] systemd[1]: Created slice Slice /system/getty.
    [    5.064310] systemd[1]: Created slice Slice /system/serial-getty.
    root@am335x-evm:~# devmem2 0x48022054
    /dev/mem opened.
    Memory mapped at address 0xb6f36000.
    Read at address  0x48022054 (0xb6f36054): 0x00000009
    root@am335x-evm:~# devmem2 0x48022014
    /dev/mem opened.
    Memory mapped at address 0xb6ff7000.
    Read at address  0x48022014 (0xb6ff7014): 0x00000060
    root@am335x-evm:~# devmem2 0x44e0006c
    /dev/mem opened.
    Memory mapped at address 0xb6fd0000.
    Read at address  0x44E0006C (0xb6fd006c): 0x00000002
    root@am335x-evm:~# devmem2 0x44e0006c w 0
    /dev/mem opened.
    Memory mapped at address 0xb6f5e000.
    Read at address  0x44E0006C (0xb6f5e06c): 0x00000002
    Write at address 0x44E0006C (0xb6f5e06c): 0x00000000, readback 0x00000000
    root@am335x-evm:~# devmem2 0x44e0006c
    /dev/mem opened.
    Memory mapped at address 0xb6f04000.
    Read at address  0x44E0006C (0xb6f0406c): 0x00010000
    root@am335x-evm:~# 
    root@am335x-evm:~# devmem2 0x48022014
    /dev/mem opened.[ 1033.353309] 8<--- cut here ---
    [ 1033.357534] Unhandled fault: external abort on non-linefetch (0x1018) at 0xb6f78014
    [ 1033.365236] [b6f78014] *pgd=b133a831
    
    Memory mapped at address 0xb6f78000.
    Bus error (core dumped)
    root@am335x-evm:~# devmem2 0x48022054
    /dev/mem opened.[ 1058.553668] 8<--- cut here ---
    [ 1058.557871] Unhandled fault: external abort on non-linefetch (0x1018) at 0xb6f18054
    [ 1058.565578] [b6f18054] *pgd=bb811831
    
    Memory mapped at address 0xb6f18000.
    Bus error (core dumped)
    root@am335x-evm:~# 
    CTRL-A Z for help | 1
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Tony:

    仔细研究一下、稍后会回来联系您。

    此致、

    Vaibhav

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    主题专家将于 4 月 29 日离职。 请期待收到延迟的回复。 谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Tony:

    我想手动禁用一个 UART 模块时钟以验证另一个问题。

    AM335x 的时钟管理由时钟驱动器完成。 我从未通过研究它来了解时钟启用/禁用序列、但如果您只想禁用 UART 的时钟、可通过在 Linux sysfs 中从 UART 器件取消绑定 UART 驱动程序来实现。