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.

[参考译文] PROCESSOR-SDK-AM437X:PRU-ICSS0上 PRU0的 RPMsg 问题

Guru**** 2595800 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/587861/processor-sdk-am437x-rpmsg-issues-with-pru0-on-pru-icss0

器件型号:PROCESSOR-SDK-AM437X

您好!

我尝试在我的解决方案中使用 PRU0、PRU-ICSS0。

PRU0的 GPIO 可以正常工作、直到现在为止。

我尝试在 PRU0 PRU-ICSS0中使用 RPMsg、然后遇到一些问题。  

我使用的 SDK 版本是 ti-processor-sdk-linux-rt-am437x-evm-02.00.02.11。

问题是当 PRU 执行以下代码时、它将崩溃。

int16_t PRU_virtqueue_get_ave_buf (
struct pru_virtqueue* vq、
void** buf、
uint32_t* len
)
{
int16_thead;
struct vring _descdesc;
struct vring _avid* avail;

avail = vq->vring。avail;

/*没有任何可用的*/
如果(VQ->LAST_AVAK_IDx =AVA--> IDx)//It 在此损毁。
返回 PRU_virtqueue_no_BUF_available;

//
*获取 ARM 主机广播的下一个描述符编号,
*递增我们看到的最后一个可用索引。
*/
head = AVA-->环[VQ->LAST_AVAK_IDx++&(VQ->vring .num-1)];
desc = VQ->vring.desc[head];
*buf =(void *)(UINT32_t)desc.addr;
*len = desc.len;
返回(头部);
} 

然后我检查了参考手册并找到了一些句子:

  1. PRU-ICSS0不能直接访问子系统外的存储器
  2. 若要访问外部主机映射的0x0000_0000–0x0007_FFFF 之间的地址、 可通过 PRU-ICSS CFG 寄存器空间的 PMAO 寄存器启用–0x0008_0000的地址偏移。 请注意 、所有到 PRU-ICSS0的外部访问都通过 PRU-ICSS1进行路由。

它似乎可以像 PRU_ICSS1一样轻松地将 PRU_ICSS0与 RPMsg 配合使用。  您能给我一些关于如何在 PRU_ICSS0中使用 RPMsg 的建议吗?

转发您的回复。

此致

Jerry-Shuo.Liu