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.

[参考译文] TMS570LC4357:MPU是否与NMPU相同?

Guru**** 2463330 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1097774/tms570lc4357-is-mpu-same-as-nmpu

部件号:TMS570LC4357

大家好:

  1.我在LC4357数据表(第11章-系统内存保护单元)中找到NMPU (新内存保护单元)。 另外,当我阅读“Cortex-R5技术参考手册”时,我发现 “第7章-内存保护单元”与NMPU非常相似。

  它们是否相同? 如果不是,有什么区别?

  2.我还发现DMA中有内置于MPU。  根据TRM中的图2-1,我对内置MPU,NMPU和MPU感到困惑。 在我看来,当DMA访问SCR时,它应该具有NMPU和MPU;当DMA访问PCR时,它只有一个NMPU或内置MPU?

 3.在MPU中,对于MPU区域访问权限,我理解强涂,可共享,不可共享,但执行和不执行是什么?

  

祝你一切顺利

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    它们是否相同? 如果不是,有什么区别?[/QUOT]

    它们相似,但不同。 MPU用于CPU,但NMPU用于其他主设备,如DMA,EMAC等

    2.在MPU中,对于MPU区域访问权限,我理解强涂,可共享,不可共享,但执行和不执行是什么?

      

    [/引述]

    每个MPU区域都可以被授予无访问权限,只读访问权限或读/写访问权限,每个区域也可以标记为执行从不(XN) ,以防止从该区域获取指令。

    MPU区域中具有设备或按顺序排列的内存类型属性的任何地址都将被隐式授予执行-从不(XN)权限。

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

    谢谢QJ;

     我还发现DMA中有内置于MPU。  根据TRM中的图2-1,我对内置MPU,NMPU和MPU感到困惑。 在我看来,当DMA访问SCR时,它应该具有NMPU和MPU;当DMA访问PCR时,它只有一个NMPU或内置MPU?

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

    正如我所说,NMPU用于DMA/EMAC/Peripheral Interconnect Subsystem,MPU仅用于CPU。  

    多达8个DMA内存保护区域:

    要配置DMA NMPU,NMPU控制寄存器的基本地址为 0xFFFF1A00。  

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

    谢谢你QJ。 最后一个问题,如果使用DMA通过DMA port_A访问数据(在芯片上的RAM中),是否必须配置NMPU?

    如果我不配置NMPU,这意味着我无法通过DMA_port A访问RAM中的数据?

    或者,通过DMA_port b访问ram中的数据又如何?

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

    您不必启用和配置NMPU。

    重置后,NMPU默认为禁用。 如果禁用NMPU,则不会在总线上进行过滤(NMPU权限等)。

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

    谢谢你QJ。 我对NMPU有一些了解,并且"如果我使用DMA通过DMA port_A访问数据(在芯片上的RAM中)",DMA port_A是否是DMA访问芯片上RAM的唯一方式?

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

    是的,DMA通过DMA端口A和CPU互连访问L2 RAM。

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

    谢谢你QJ。  

    我想知道外部内存EMIF SDRAM的地址范围 是“0x8000000000 -- 0x9FFFFFFF” ,它属于 “外围互连子系统”或CPU上的EMIF的EMIF从属设备?

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

    所有总线主控器(DMA,CPU等)都通过CPU互连(而不是外设互连)与EMIF从属设备建立点对点连接。

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

    您的意思是,如果我通过DMA访问SDRAM,方法应该是"DMA port_a"->"CPU互连子系统"->"EMIF",而不是"DMA port_b"->"pcr2"->"EMIF从属"。

    在我的项目中,我有一个WtBuf[256]和RdBuf[256],在SDRAM中定义,当SPI从SD卡接收数据时,DMA将数据从"SPI_RX register"移到RdBuf[256];当我填充WtBuf时,DMA将数据移到"SPI_TX register"。

    但是,当我在SRAM而非SDRAM中定义WtBuf[256]和RdBuf[256]时,DMA不能访问这两个缓冲区;在我看来,DMA的配置可能有问题。

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

    DMA port_b用于访问寄存器而不是EMIF内存。

    定义407.2255万定义WtBuf[256]时,我不能访问两个DMA缓冲区[256]

    我以前没有见过这种问题。 DMA可以访问EMIF内存(SDRAM或SRAM)。

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

    "我在SRAM中定义了WtBuf[256]和RdBuf[256],而不是SDRAM,DMA不能访问这两个缓冲区;"

    这里SRAM是指片上RAM 512KB,其范围为“0x800万 - 0x0807FFFF”。

    我有CPU的MPU设置。 片上RAM的规则与外部SDRAM相同,即" (U32) MPU_PRIV_RW_USER_RO_NOexec |(U32) MPU_NORMAL _OIWBNOWA_SHARed"

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

    请使用我的示例将数据从SRAM中的一个位置传输到SRAM中的另一个位置:

    e2e.ti.com/.../7536.HL_5F00_sys_5F00_main.c

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

    这是链接程序cmd文件,它还定义了数据部分".sharedRAM"

    e2e.ti.com/.../0741.HL_5F00_sys_5F00_link.cmd

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

    感谢您的回答。 也许我知道我在项目中犯了什么错误。

    通过您的演示代码和cmd,我发现 “#pragma set_data_section...”是必需的。 对于MPU设置,关键字为shared和write-through。

    在我的代码中,当我通过DMA访问SDRAM时,我在SDRAM区域中定义了两个bufs,使用"__attribute__(section(".SDRAM_dis32")) u16 nWtBuf[SD_sector_sz * event_sector_NUM/2] ;"

    但是,当我想通过DMA访问片上ram时,我只定义了两个缓冲区,如“U16 WtBuf[256]”,而不使用“__attribute__ ”或#pragma ”在指定的共享区域中定义它们。

    我的问题:在使用DMA转换时,是否有必要定义特定区域的变量? 是否 需要缓存写入? 缓存写回怎么样?

    顺便说一下,".sharedRAM"是专门定义为.bss还是只是用户定义的名称?

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

    这与访问内存的DMA和CPU之间的高速缓存一致性有关。

    在407.2492万在特定区域使用DMA转换时是否需要定义变量? 是否 需要缓存写入?[/QUOT]

    有两个解决方案:

    1.禁用高速缓存

    2.我的示例中使用的方法:将数组或缓冲区放置在MPU设置为直写而不是回写的位置

    3.按代码管理一致性:代码 必须清除或清除缓存中的脏数据,并使旧数据无效。 这种方式占用CPU周期和总线带宽。

    是407.2492万是".sharedRAM"特殊名称或仅定义为.ss/users]?

    是的,它是用户定义的数据部分,类似于.BSS

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

    您好,Li,

    您的问题与原来的问题不同: MPU是否与NMPU相同?

    请打开另一个问题的新主题,谢谢。