gpt4 book ai didi

linux - 访问 PRO 和 beaglebone 之间的共享内存

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:18 27 4
gpt4 key购买 nike

我需要你的帮助

我在访问 Beaglebone 端的 PRU 共享寄存器时遇到了一些问题。

因此,我在 PRU 端写入所需的内存地址(我可以使用此处提供的 prudebug 工具验证它:https://markayoder.github.io/PRUCookbook/,我可以使用它来检查 PRU 寄存器的内容)。但是当我尝试从 arm 端访问它时,问题就来了:在 Pru 中,我在寄存器 0x​​10000 中写入了值 0xED,但是,在 arm 端我无法读取它。

我想我必须使用内核的 mmap 函数来访问物理内存地址,但我可能在函数本身的使用上做错了什么。任何人都可以阐明这里可能发生的事情吗?

PRU 方面:

#include <stdint.h>
#include <pru_cfg.h>
#include "resource_table_empty.h"

#define PRU_SHARED_MEM_ADDR 0x00010000

void main(void)
{
// enable OCP
CT_CFG.SYSCFG_bit.STANDBY_INIT = 0;
volatile int* buffer = (volatile int *) PRU_SHARED_MEM_ADDR;
buffer[0] = 0xED;
/* Clear SYSCFG[STANDBY_INIT] to enable OCP master port->Shared memory */
CT_CFG.SYSCFG_bit.STANDBY_INIT = 0;
}

ARM 侧:

#include <sys/mman.h>

#define DDR_BASEADDR 0x10000
#define OFFSET_DDR 0x00

int main(int argc, char **argv)
{
int mem_fd = open("/dev/mem", O_RDWR | O_SYNC);
if (mem_fd == -1){
printf("Err");
return 0;
}
volatile void *ddrMapp = NULL;
volatile void *DDR_regaddr1 = NULL;

ddrMapp = mmap(0, 0x0FFFFFFF, PROT_WRITE | PROT_READ, MAP_SHARED, mem_fd, DDR_BASEADDR);

DDR_regaddr1 = ddrMapp + OFFSET_DDR;
printf("PRU address: %X\n", &DDR_regaddr1); // returns 0xBEFFFB00
return(0);
}

ps: 下面是mmap函数的文档:http://man7.org/linux/man-pages/man2/mmap.2.html

最佳答案

根据您的内核版本,我建议使用 PRU Linux Application Loader:

http://processors.wiki.ti.com/index.php/PRU_Linux_Application_Loader_API_Guide

这样你就可以

    /* Get pointers to PRU local memory */
void *pruDataMem;
prussdrv_map_prumem(PRUSS0_PRU0_DATARAM, &pruDataMem);
unsigned int *pruData = (unsigned int *) pruDataMem;

并以 pruData[0] 等方式访问 PRU RAM 中的数据。

关于linux - 访问 PRO 和 beaglebone 之间的共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53431040/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com