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.

[参考译文] RTOS/PROCESSOR-SDK-AM335X:PRU 初始化问题

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/658350/rtos-processor-sdk-am335x-pru-initialization-issue

器件型号:PROCESSOR-SDK-AM335X
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

您好!  

我正在尝试从 ARM cortex A8运行和加载 PRU、但当我的代码想要执行 PRUICCS_CREATE ()函数时、结果出现错误  

CortxA8:未处理的 ADP_Stopped 异常0x20023

然后转至 DO _ AngelSWI()


是否有人有与我相似的孔布? 这是我的代码:

/*
*==== main.c ======
*

#include
#include
#include
#include
#include
#include

#include
#include

#include

/*
*==== taskFxn ====
*

PRUICSS_Handle handle =空;
uint32_t instance = PRUICCSS_instance_one;

extern char binBuff[8192];

空任务初始化(UARg a0、UARg A1)

system_printf ("enter taskFxn ()\n");

PRUICSS_Config * pruss_config;
PRUICSS_socGetInitCfg (&pruss_config);

/*为 PRUICSS 实例创建句柄*/
Handle = PRUICSS_create (pruss_config、实例);
//PRUICSS_HwAttrs const *hwAttrs = handle->hwAttrs;

//PRUICSS_pinMuxConfig (handle、0x0);/* PRUSS 引脚多路复用*

PRUICSS_pruDisable (handle、PRUICCSS_PRU0);
PRUICSS_pruDisable (handle、PRUICCSS_PRU1);

UART_printf ("\n\rPRU 以加载应用!\n"\});

PRUICSS_setPRUBuffer (handle、PRUICCSS_PRU0、binBuff、(11*10));
PRUICSS_setPRUBuffer (handle、PRUICCSS_PRU1、binBuff、(11*10));

PRUICSS_enableOCPMasterAccess (handle);

PRUICSS_pruExecProgram (handle、PRUICCSS_PRU0);
PRUICSS_pruExecProgram (handle、PRUICCSS_PRU1);

//PRUICSS_IntcInitData pruss_intc_initdata = PRUSS_INTC_INITDATA;
//PRUICSS_pruIntcInit (handle、&pruss_intc_initdata);


PRUICSS_pruEnable (handle、PRUICCSS_PRU0);
PRUICSS_pruEnable (handle、PRUICCSS_PRU1);

UART_printf ("\n\rPRU 加载!\n");
Task_sleep (10);

system_printf ("exit taskFxn ()\n"\});

/*
*==== main ====
*
int main()

/*
*使用 ROV->SysMin 查看循环缓冲区中的字符
*
system_printf ("enter main()\n");


board_initCfg boardCfg;


boardCfg = Board_init_module_clock |
Board_init_ICSS_PINMUX;

board_init (boardCfg);

BIOS_start();/*不返回*/
返回(0);



这就是我在 GEL 文件中启用 PRU 的方法:

#define PRCM_BASE_ADDR             (0x44E00000)
#define CM_PER_PRU_ICSS_CLKCTRL  (PRCM_BASE_ADDR + 0x0E8)

#define CM_DPLL                      (0x44E00500)
#define CLKSEL_PRU_ICSS_OCP_CLK   (CM_DPLL + 0x030)


WR_MEM_32 (CM_PER_PRU_ICSS_CLKCTRL、0x2);
WR_MEM_32 (CLKSEL_PRU_ICSS_OCP_CLK、0x1);

GEL_TextOut ("PRU_ICSS 已启用。\n");

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为在启用 PRU COS 时出现了问题当我在内存浏览器中检查 PRU_ICSS 地址(0x4A300000)时、它仅显示?????????? 因此、我认为这可能是问题所在。 有人知道如何修复它?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Rafal:

    您可以使用 ti\ccsv7\ccs_base\emulation\boards\BeagleBone\gel 中的 GEL 文件 AM335x_PRU_ICSS.gel 来启用 PRU、也可以在加载应用之前尝试在 CCS 中执行 System_Reset。

    此致、
    Garrett

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

    我尝试使用 GEL 文件、但最终遇到 了到达0x4a300000地址(我发现的地址)的问题 、我认为启用 PRU_ICSS 后应该可以访问该地址、但不可以访问。 我不知道为什么它不想工作。 在打印屏幕上,您可以看到运行 script->PRU_ICSS->PRU_ICSS_Init GEL 函数后会发生什么情况

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

    您有与目标配置相关联的 beaglebonebine.gel、对吗? AM335x_BeagleBlack_Initialization ()应在 PRU_ICSS GEL 函数之前完成,CCS v7中的 GEL 文件应按原样工作。

    我没有焊接带 JTAG 的 BBB 来重现此问题、您是否碰巧有 AM335x ICEv2板? 因此、您可以参考 PDK 中的一些现有 PRU 示例、例如 ICSS_EMAC、而无需花费时间进行 BBB 设置、除非您确实希望在 BeagleBone 板上开发项目、而不是像在另一个线程中针对 AM572x 所述的 PRU 项目。

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

    感谢您的回复、它能为我提供很多帮助! 另外、对于阅读此主题的其他人、我必须在 app.cfg 文件中的 MMU my PRU_ICSS。 这就是我要补充的内容:

    /*定义外设所在的1Meg 页的基址。 *
    VAR 外设 BaseAddr = 0x4a300000;

    /*相应地配置相应的 MMU 页描述符*/
    Mmu.setFirstLevelDescMeta(peripheralBaseAddr、
    peripheralBaseAddr、
    外设属性)

    添加此项后、一切开始正常工作!