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.

[参考译文] 编译器/TMS320C6748:PRU 编译器和链接器

Guru**** 2551110 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/767762/compiler-tms320c6748-pru-compiler-and-linker

器件型号:TMS320C6748

工具/软件:TI C/C++编译器

下面是我用于使 PRU 运行的代码片段:

PRU0_DisableAndReset();
PRU0_Load (PRUSandbox_image_0、(sizeof (PRUSandbox_image_0)/sizeof (int)));
PRU0_Run();
//表示(crc=0;crc<15000;crc++);

while (!PRU0_IsRunning());

我使用 CCS v8.2通过共享存储器和 PRU 寄存器间接进行调试。  问题是,在 PRU0_Run()之后没有一些延迟,代码就不会执行。  是否缺少 PRU 设置的初始化步骤?  在 PRU 代码本身中、我将使用默认生成的任何编译器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您使用的是哪个软件版本? 还是这是自定义代码?

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

    我不确定您所说的软件是什么、但下面是我要处理的内容:

    Code Composer Studio v8.2.0.00007

    PRU 编译器为"ti-cgt-PRU_2.3.1"

    与--zero_init=off 链接。  (十六进制实用程序仅生成代码数组)

    表示生成的代码的无符号 int 数的十六进制数组-粘贴到主机代码中并传输到 PRU。

    加载和启用 PRU 的调用顺序如下。

    int main (void){

    uint16 crc、i、j、k;
    uint8 * bptr;
    uint8 far *CPTR;

    InitSharedRAM();
    InitMsgIDs();

    /*打开 PRU */
    PSCModuleControl (SOC_PSC_0_regs、HW_PSC_PRU、PSC_POWERDOMAIN_AYST_ON、
    PSC_MDCTL_NEW_ENABLE);

    PRU0_DisableAndReset();
    PRU0_Load (PRUSandbox_image_0、(sizeof (PRUSandbox_image_0)/sizeof (int)));


    PRU0_Run();
    对于(crc=0;crc<5000;crc++);

    while (!PRU0_IsRunning());

    相关代码如下:

    #define PRU_CONTRAL_ALLDISABLE (0x000000000000)
    #define PRU_CONTRAL_COUNTENABLE (0x00000008u)
    #define PRU_CONTRAL_ENABLE (0x00000002u)
    #define PRU_CONTROL_RUNSTATE (0x00008000u)
    #define PRU0_PROG_RAM_START (0x01C38000)
    #define PRU1_PROG_RAM_START (0x01C3C000)
    #define PRU0_DATA_RAM_START (0x01C30000)
    #define PRU1_DATA_RAM_START (0x01C32000)

    void PRU0_DisableAndReset (void){
    /*计数使能(位3)和使能(位1)设置为零(禁用)*/
    /*软复位(bit0)*/
    HWREG (SOC_PRUCORE_0_regs)= PRU_CONTRAL_ALLDISABLE;

    /*启用 PRU */
    void PRU0_Run (void){

    HWREG (SOC_PRUCORE_0_regs)|= PRU_CONTRAL_COUNTENABLE;
    HWREG (SOC_PRUCORE_0_regs)|= PRU_CONTRAL_ENABLE;

    /*检查 PRU 是否正在运行*/
    bool PRU0_IsRunning (void){

    返回((HWREG (SOC_PRUCORE_0_regs)&PRU_CONTROL_RUNSTATE)
    = PRU_CONTROL_RUNSTATE);


    /*将二进制代码加载到 PRU 的 RAM 中*/
    void PRU0_Load (const UINT32* pruCode、UINT32代码大小 InWords){
    //void PRU0_Load (uint32* restrict pruCode、uint32 codesteSizeInWords){
    uint32 i;
    uint32 * pruIram;
    pruIram =(UINT32 *) PRU0_PROG_RAM_START;
    for (i=0;<codeSizeInWords; i++)

    pruIram[i]= pruCode[i];

    /*检查 PRU 是否正在运行*/
    bool PRU0_IsRunning (void){

    返回((HWREG (SOC_PRUCORE_0_regs)&PRU_CONTROL_RUNSTATE)
    = PRU_CONTROL_RUNSTATE);

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

    请查看主题中的回复- e2e.ti.com/.../767811
    我想关闭这个重复的。

    谢谢、
    Garrett