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:TMS570LC4357 RTP 似乎不能在跟踪模式下工作

Guru**** 2482105 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/710194/tms570lc4357-tms570lc4357-rtp-does-not-appear-to-work-in-trace-mode

器件型号:TMS570LC4357

您好!

通过将端口设置为16位并将 GLBCTRL 寄存 器分配为如下、我能够使 RTP 在直接数据模式下工作:我允许时钟自由运行、并且我禁用 RTPENA 引脚、以便它可以溢出。 在这个配置后写入 DDMW (加上启用端口16位、无 ENA 引脚)所有引脚输出、ENA 除外。

rtpREG->GLBCTRL =((UINT32) 0U \
|(uint32)((uint32) 1U << 1U)\
|(uint32)((uint32) 0U << 2U)\
|(uint32)((uint32) 1U << 3U)\
|(uint32)((uint32) 0U << 4U)\
|(uint32)((uint32) 0U << 5U)\
|(uint32)((uint32) 1U << 6U)\
|(uint32)((uint32) 0U << 7U)\
|(uint32)((uint32) 1U << 8U)\
|(uint32)((uint32) 1U << 9U)\
|(uint32)((uint32) 1U << 10U)\
|(uint32)((uint32) 1U << 11U)\
|(uint32)((uint32) 0U << 12U)\
|(uint32)((uint32) 1U << 13U)\
|(uint32)((uint32) 0U << 14U)\
|(uint32)((uint32) 0U << 15U)\
|(uint32)((uint32) 1U << 16U)\
|(uint32)((uint32) 1U << 17U)\
|(uint32)((uint32) 1U <<18U);

/**- RTP 端口输出值*/
rtpREG->PC3 =(uint32) 0U /* data[0]*/
|(uint32)((uint32) 0U << 1U)/* data[1]*/
|(uint32)((uint32) 0U << 2U)/* data[2]*/
|(uint32)((uint32) 0U << 3U)/* data[3]*/
|(uint32)((uint32) 0U << 4U)/* data[4]*/
|(uint32)((uint32) 0U << 5U)/* data[5]*/
|(uint32)((uint32) 0U << 6U)/* data[6]*/
|(uint32)((uint32) 0U << 7U)/* data[7]*/
|(uint32)((uint32) 0U << 8U)/* data[8]*/
|(uint32)((uint32) 0U << 9U)/* data[9]*/
|(uint32)((uint32) 0U << 10U)/* data[10]*/
|(uint32)((uint32) 0U << 11U)/* data[11]*/
|(uint32)((uint32) 0U << 12U)/* data[12]*/
|(uint32)((uint32) 0U << 13U)/* data[13]*/
|(uint32)((uint32) 0U << 14U)/* data[14]*/
|(uint32)((uint32) 0U << 15U)/* data[15]*/
|(UINT32)((UINT32) 0U << 16U)/* RTP SYNC */
|(UINT32)((UINT32) 0U << 17U)/* RTP CLK */
|(UINT32)((UINT32) 0U << 18U);/* RTP ENA *

/**- RTP 端口方向*/
rtpREG->PC1 =(UINT32) 1U /* data[0]*/
|(uint32)((uint32) 1U << 1U)/* data[1]*/
|(uint32)((uint32) 1U << 2U)/* data[2]*/
|(uint32)((uint32) 1U << 3U)/* data[3]*/
|(uint32)((uint32) 1U << 4U)/* data[4]*/
|(uint32)((uint32) 1U << 5U)/* data[5]*/
|(uint32)((uint32) 1U << 6U)/* data[6]*/
|(uint32)((uint32) 1U << 7U)/* data[7]*/
|(uint32)((uint32) 1U << 8U)/* data[8]*/
|(uint32)((uint32) 1U << 9U)/* data[9]*/
|(uint32)((uint32) 1U << 10U)/* data[10]*/
|(uint32)((uint32) 1U << 11U)/* data[11]*/
|(uint32)((uint32) 1U <<12U)/* data[12]*/
|(uint32)((uint32) 1U << 13U)/* data[13]*/
|(uint32)((uint32) 1U << 14U)/* data[14]*/
|(uint32)((uint32) 1U << 15U)/* data[15]*/
|(UINT32)((UINT32) 1U << 16U)/* RTP SYNC */
|(uint32)((uint32) 1U << 17U)/* RTP CLK */
|(UINT32)((UINT32) 0U << 18U);/* RTP ENA *

/**- RTP 端口开漏启用*/
rtpREG->PC6 =(uint32) 0U /* data[0]*/
|(uint32)((uint32) 0U << 1U)/* data[1]*/
|(uint32)((uint32) 0U << 2U)/* data[2]*/
|(uint32)((uint32) 0U << 3U)/* data[3]*/
|(uint32)((uint32) 0U << 4U)/* data[4]*/
|(uint32)((uint32) 0U << 5U)/* data[5]*/
|(uint32)((uint32) 0U << 6U)/* data[6]*/
|(uint32)((uint32) 0U << 7U)/* data[7]*/
|(uint32)((uint32) 0U << 8U)/* data[8]*/
|(uint32)((uint32) 0U << 9U)/* data[9]*/
|(uint32)((uint32) 0U << 10U)/* data[10]*/
|(uint32)((uint32) 0U << 11U)/* data[11]*/
|(uint32)((uint32) 0U << 12U)/* data[12]*/
|(uint32)((uint32) 0U << 13U)/* data[13]*/
|(uint32)((uint32) 0U << 14U)/* data[14]*/
|(uint32)((uint32) 0U << 15U)/* data[15]*/
|(UINT32)((UINT32) 0U << 16U)/* RTP SYNC */
|(UINT32)((UINT32) 0U << 17U)/* RTP CLK */
|(UINT32)((UINT32) 0U << 18U);/* RTP ENA *

/**- RTP 端口上拉/下拉选择*/
rtpREG->PC8 =(uint32) 1U /* data[0]*/
|(uint32)((uint32) 1U << 1U)/* data[1]*/
|(uint32)((uint32) 1U << 2U)/* data[2]*/
|(uint32)((uint32) 1U << 3U)/* data[3]*/
|(uint32)((uint32) 1U << 4U)/* data[4]*/
|(uint32)((uint32) 1U << 5U)/* data[5]*/
|(uint32)((uint32) 1U << 6U)/* data[6]*/
|(uint32)((uint32) 1U << 7U)/* data[7]*/
|(uint32)((uint32) 1U << 8U)/* data[8]*/
|(uint32)((uint32) 1U << 9U)/* data[9]*/
|(uint32)((uint32) 1U << 10U)/* data[10]*/
|(uint32)((uint32) 1U << 11U)/* data[11]*/
|(uint32)((uint32) 1U <<12U)/* data[12]*/
|(uint32)((uint32) 1U << 13U)/* data[13]*/
|(uint32)((uint32) 1U << 14U)/* data[14]*/
|(uint32)((uint32) 1U << 15U)/* data[15]*/
|(UINT32)((UINT32) 1U << 16U)/* RTP SYNC */
|(uint32)((uint32) 1U << 17U)/* RTP CLK */
|(uint32)((uint32) 1U << 18U);/* RTP ENA*

/**- RTP 端口上拉/下拉使能*/
rtpREG->PC7 =(uint32) 0U /* data[0]*/
|(uint32)((uint32) 0U << 1U)/* data[1]*/
|(uint32)((uint32) 0U << 2U)/* data[2]*/
|(uint32)((uint32) 0U << 3U)/* data[3]*/
|(uint32)((uint32) 0U << 4U)/* data[4]*/
|(uint32)((uint32) 0U << 5U)/* data[5]*/
|(uint32)((uint32) 0U << 6U)/* data[6]*/
|(uint32)((uint32) 0U << 7U)/* data[7]*/
|(uint32)((uint32) 0U << 8U)/* data[8]*/
|(uint32)((uint32) 0U << 9U)/* data[9]*/
|(uint32)((uint32) 0U << 10U)/* data[10]*/
|(uint32)((uint32) 0U << 11U)/* data[11]*/
|(uint32)((uint32) 0U << 12U)/* data[12]*/
|(uint32)((uint32) 0U << 13U)/* data[13]*/
|(uint32)((uint32) 0U << 14U)/* data[14]*/
|(uint32)((uint32) 0U << 15U)/* data[15]*/
|(UINT32)((UINT32) 0U << 16U)/* RTP SYNC */
|(UINT32)((UINT32) 0U << 17U)/* RTP CLK */
|(UINT32)((UINT32) 0U << 18U);/* RTP ENA *

/* RTP 将所有引脚设置为功能*/
rtpREG->PC0 =(uint32) 1U /* data[0]*/
|(uint32)((uint32) 1U << 1U)/* data[1]*/
|(uint32)((uint32) 1U << 2U)/* data[2]*/
|(uint32)((uint32) 1U << 3U)/* data[3]*/
|(uint32)((uint32) 1U << 4U)/* data[4]*/
|(uint32)((uint32) 1U << 5U)/* data[5]*/
|(uint32)((uint32) 1U << 6U)/* data[6]*/
|(uint32)((uint32) 1U << 7U)/* data[7]*/
|(uint32)((uint32) 1U << 8U)/* data[8]*/
|(uint32)((uint32) 1U << 9U)/* data[9]*/
|(uint32)((uint32) 1U << 10U)/* data[10]*/
|(uint32)((uint32) 1U << 11U)/* data[11]*/
|(uint32)((uint32) 1U <<12U)/* data[12]*/
|(uint32)((uint32) 1U << 13U)/* data[13]*/
|(uint32)((uint32) 1U << 14U)/* data[14]*/
|(uint32)((uint32) 1U << 15U)/* data[15]*/
|(UINT32)((UINT32) 1U << 16U)/* RTP SYNC */
|(uint32)((uint32) 1U << 17U)/* RTP CLK */
|(UINT32)((UINT32) 0U << 18U);/* RTP ENA *

但是、当我尝试将端口配置为跟踪模式时、 并使用0x08001000的存储器地址并使用以下代码开启跟踪;当我尝试写入0x08001000至0x08001FFF 范围内的某个地址时、我看不到 RTP 跟踪时钟或任何数据发出。

//设置全局跟踪参数:

//0 FIFO RAM 未映射
//111 HCLK/8 (针对更快速度进行调整)
//00保留
///00 DDM 宽度不是跟踪模式所必需的
跟踪模式不需要//0 DDM_RW
//0跟踪模式
//11 16位宽
//0超出复位状态
//1 clk 自由运行(?)
//0目前无溢出保护
定义区域内的//0跟踪
//1010启用跟踪("0xA")

rtpREG->GLBCTRL =((UINT32) 0U \
|(uint32)((uint32) 1U << 1U)\
|(uint32)((uint32) 0U << 2U)\
|(uint32)((uint32) 1U << 3U)\
|(uint32)((uint32) 0U << 4U)\
|(uint32)((uint32) 0U << 5U)\
|(uint32)((uint32) 1U << 6U)\
|(uint32)((uint32) 0U << 7U)\
|(uint32)((uint32) 1U << 8U)\
|(uint32)((uint32) 1U << 9U)\
|(uint32)((uint32) 0U << 10U)\
|(uint32)((uint32) 0U << 11U)\
|(uint32)((uint32) 0U << 12U)\
|(uint32)((uint32) 0U << 13U)\
|(uint32)((uint32) 0U << 14U)\
|(uint32)((uint32) 0U << 15U)\
|(uint32)((uint32) 1U << 16U)\
|(uint32)((uint32) 1U << 17U)\
|(uint32)((uint32) 1U <<18U);

端口配置寄存器与之前相同:

/**- RTP 端口输出值*/
rtpREG->PC3 =(uint32) 0U /* data[0]*/
|(uint32)((uint32) 0U << 1U)/* data[1]*/
|(uint32)((uint32) 0U << 2U)/* data[2]*/
|(uint32)((uint32) 0U << 3U)/* data[3]*/
|(uint32)((uint32) 0U << 4U)/* data[4]*/
|(uint32)((uint32) 0U << 5U)/* data[5]*/
|(uint32)((uint32) 0U << 6U)/* data[6]*/
|(uint32)((uint32) 0U << 7U)/* data[7]*/
|(uint32)((uint32) 0U << 8U)/* data[8]*/
|(uint32)((uint32) 0U << 9U)/* data[9]*/
|(uint32)((uint32) 0U << 10U)/* data[10]*/
|(uint32)((uint32) 0U << 11U)/* data[11]*/
|(uint32)((uint32) 0U << 12U)/* data[12]*/
|(uint32)((uint32) 0U << 13U)/* data[13]*/
|(uint32)((uint32) 0U << 14U)/* data[14]*/
|(uint32)((uint32) 0U << 15U)/* data[15]*/
|(UINT32)((UINT32) 0U << 16U)/* RTP SYNC */
|(UINT32)((UINT32) 0U << 17U)/* RTP CLK */
|(UINT32)((UINT32) 0U << 18U);/* RTP ENA *

/**- RTP 端口方向*/
rtpREG->PC1 =(UINT32) 1U /* data[0]*/
|(uint32)((uint32) 1U << 1U)/* data[1]*/
|(uint32)((uint32) 1U << 2U)/* data[2]*/
|(uint32)((uint32) 1U << 3U)/* data[3]*/
|(uint32)((uint32) 1U << 4U)/* data[4]*/
|(uint32)((uint32) 1U << 5U)/* data[5]*/
|(uint32)((uint32) 1U << 6U)/* data[6]*/
|(uint32)((uint32) 1U << 7U)/* data[7]*/
|(uint32)((uint32) 1U << 8U)/* data[8]*/
|(uint32)((uint32) 1U << 9U)/* data[9]*/
|(uint32)((uint32) 1U << 10U)/* data[10]*/
|(uint32)((uint32) 1U << 11U)/* data[11]*/
|(uint32)((uint32) 1U <<12U)/* data[12]*/
|(uint32)((uint32) 1U << 13U)/* data[13]*/
|(uint32)((uint32) 1U << 14U)/* data[14]*/
|(uint32)((uint32) 1U << 15U)/* data[15]*/
|(UINT32)((UINT32) 1U << 16U)/* RTP SYNC */
|(uint32)((uint32) 1U << 17U)/* RTP CLK */
|(UINT32)((UINT32) 0U << 18U);/* RTP ENA *

/**- RTP 端口开漏启用*/
rtpREG->PC6 =(uint32) 0U /* data[0]*/
|(uint32)((uint32) 0U << 1U)/* data[1]*/
|(uint32)((uint32) 0U << 2U)/* data[2]*/
|(uint32)((uint32) 0U << 3U)/* data[3]*/
|(uint32)((uint32) 0U << 4U)/* data[4]*/
|(uint32)((uint32) 0U << 5U)/* data[5]*/
|(uint32)((uint32) 0U << 6U)/* data[6]*/
|(uint32)((uint32) 0U << 7U)/* data[7]*/
|(uint32)((uint32) 0U << 8U)/* data[8]*/
|(uint32)((uint32) 0U << 9U)/* data[9]*/
|(uint32)((uint32) 0U << 10U)/* data[10]*/
|(uint32)((uint32) 0U << 11U)/* data[11]*/
|(uint32)((uint32) 0U << 12U)/* data[12]*/
|(uint32)((uint32) 0U << 13U)/* data[13]*/
|(uint32)((uint32) 0U << 14U)/* data[14]*/
|(uint32)((uint32) 0U << 15U)/* data[15]*/
|(UINT32)((UINT32) 0U << 16U)/* RTP SYNC */
|(UINT32)((UINT32) 0U << 17U)/* RTP CLK */
|(UINT32)((UINT32) 0U << 18U);/* RTP ENA *

/**- RTP 端口上拉/下拉选择*/
rtpREG->PC8 =(uint32) 1U /* data[0]*/
|(uint32)((uint32) 1U << 1U)/* data[1]*/
|(uint32)((uint32) 1U << 2U)/* data[2]*/
|(uint32)((uint32) 1U << 3U)/* data[3]*/
|(uint32)((uint32) 1U << 4U)/* data[4]*/
|(uint32)((uint32) 1U << 5U)/* data[5]*/
|(uint32)((uint32) 1U << 6U)/* data[6]*/
|(uint32)((uint32) 1U << 7U)/* data[7]*/
|(uint32)((uint32) 1U << 8U)/* data[8]*/
|(uint32)((uint32) 1U << 9U)/* data[9]*/
|(uint32)((uint32) 1U << 10U)/* data[10]*/
|(uint32)((uint32) 1U << 11U)/* data[11]*/
|(uint32)((uint32) 1U <<12U)/* data[12]*/
|(uint32)((uint32) 1U << 13U)/* data[13]*/
|(uint32)((uint32) 1U << 14U)/* data[14]*/
|(uint32)((uint32) 1U << 15U)/* data[15]*/
|(UINT32)((UINT32) 1U << 16U)/* RTP SYNC */
|(uint32)((uint32) 1U << 17U)/* RTP CLK */
|(uint32)((uint32) 1U << 18U);/* RTP ENA*

/**- RTP 端口上拉/下拉使能*/
rtpREG->PC7 =(uint32) 0U /* data[0]*/
|(uint32)((uint32) 0U << 1U)/* data[1]*/
|(uint32)((uint32) 0U << 2U)/* data[2]*/
|(uint32)((uint32) 0U << 3U)/* data[3]*/
|(uint32)((uint32) 0U << 4U)/* data[4]*/
|(uint32)((uint32) 0U << 5U)/* data[5]*/
|(uint32)((uint32) 0U << 6U)/* data[6]*/
|(uint32)((uint32) 0U << 7U)/* data[7]*/
|(uint32)((uint32) 0U << 8U)/* data[8]*/
|(uint32)((uint32) 0U << 9U)/* data[9]*/
|(uint32)((uint32) 0U << 10U)/* data[10]*/
|(uint32)((uint32) 0U << 11U)/* data[11]*/
|(uint32)((uint32) 0U << 12U)/* data[12]*/
|(uint32)((uint32) 0U << 13U)/* data[13]*/
|(uint32)((uint32) 0U << 14U)/* data[14]*/
|(uint32)((uint32) 0U << 15U)/* data[15]*/
|(UINT32)((UINT32) 0U << 16U)/* RTP SYNC */
|(UINT32)((UINT32) 0U << 17U)/* RTP CLK */
|(UINT32)((UINT32) 0U << 18U);/* RTP ENA *

/* RTP 将所有引脚设置为功能*/
rtpREG->PC0 =(uint32) 1U /* data[0]*/
|(uint32)((uint32) 1U << 1U)/* data[1]*/
|(uint32)((uint32) 1U << 2U)/* data[2]*/
|(uint32)((uint32) 1U << 3U)/* data[3]*/
|(uint32)((uint32) 1U << 4U)/* data[4]*/
|(uint32)((uint32) 1U << 5U)/* data[5]*/
|(uint32)((uint32) 1U << 6U)/* data[6]*/
|(uint32)((uint32) 1U << 7U)/* data[7]*/
|(uint32)((uint32) 1U << 8U)/* data[8]*/
|(uint32)((uint32) 1U << 9U)/* data[9]*/
|(uint32)((uint32) 1U << 10U)/* data[10]*/
|(uint32)((uint32) 1U << 11U)/* data[11]*/
|(uint32)((uint32) 1U <<12U)/* data[12]*/
|(uint32)((uint32) 1U << 13U)/* data[13]*/
|(uint32)((uint32) 1U << 14U)/* data[14]*/
|(uint32)((uint32) 1U << 15U)/* data[15]*/
|(UINT32)((UINT32) 1U << 16U)/* RTP SYNC */
|(uint32)((uint32) 1U << 17U)/* RTP CLK */
|(UINT32)((UINT32) 0U << 18U);/* RTP ENA *

//map 1K from memory region 8001000、only writes

rtpREG->RAM1REG1 =0x13001000;

//为 RAM 块1设置跟踪
rtpREG->TRENA|=0x01;

当我用 rtpInit()初始化 RTP 并为内存分配一个指针以进行内存读取/写入时:

 uint32_t* MemRegion=(uint32_t *) 0x08001000;   

我写这个存储器区域*MemRegion=0xAA55AA55 (或0x08001000到0x08001FFF 区域中的任何位置)

跟踪端口不应自动复制该区域并将其发送到 FIFO 以从端口进行传输?

最棒的

Josh Karch

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

    对此进行了任何更新? 我不清楚我是否在这里出现问题、但一旦我将配置从直接数据模式切换到跟踪模式、数据就不会输出。

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

    我们的专家之一正在研究 RTP 测试、并将很快回来。 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Josh、

    我今天不能处理这个问题。 将尝试在周一前回来。

    此致、

    Sunil

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

    简单地考虑一下:地址0x08000000处的片上 SRAM 是 TMS570LC MCU 上的2级存储器。 您能否确认 CPU 缓存是打开还是关闭? 如果 CPU 写入发生在定义为可缓存的存储器中、如果配置为回写缓存区域、RAM 可能不会立即"看到"访问。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sunil、

    我可以检查这一点、但我要说、我在循环中多次写入该存储器、并且从未看到跟踪端口出任何内容。

    最棒的

    Josh

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

    Sunil、

    关闭 CPU 缓存似乎会导致数据现在从 RTP 中传出。 这并没有很好地记录下来。 TRM 的第2157页指出:"注意:此器件实现了1级高速缓存。 读取和写入2级 RAM
    被声明为可高速缓存的 RAM 会导致与不对应的 RAM 跟踪
    软件的原始意图。 在这种情况下、完全没有出现任何结果、这可能是因为可能发生了错误的跟踪、但文档应反映应禁用 CPU 缓存以使用 RTP。 此外、我想知道 RTP 模式是否因 L2 RAM 存储器空间中禁用的缓存而对许多人而言实际是有价值的。 另外奇怪的是、多次写入 RAM 存储器空间永远不会激活 RTP、这意味着禁用缓存是在此存储器区域中使用 RTP 的前提条件。

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

    您可以将存储器区域配置为可缓存写入、并查看更好的结果。 如果您尝试跟踪从 RAM 读取的数据、问题仍然存在。

    此致、
    Sunil
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sunil 听起来不错,看起来像是缓存阻止的操作,因此感谢您提出修复建议。
    最好
    Josh Karch