Мне нужна ваша помощь
У меня возникли проблемы с доступом к общим регистрам PRU на стороне Beaglebone.
Итак, я пишу в нужные адреса памяти на стороне PRU (я могу проверить это с помощью инструмента prudebug, предоставленного здесь: https://markayoder.github.io/PRUCookbook/, который я могу использовать для проверки содержимогоПРУ регистрируется).Но проблема возникает, когда я пытаюсь получить к нему доступ со стороны руки: в Pru я записал значение 0xED в регистры 0x10000, однако со стороны руки я не могу его прочитать.
Я думаю, что мне нужно использовать функцию 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;
}
Сторона плеча:
#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