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.

[参考译文] MCU-PLUS-SDK-AM243X:需要PRU Spinlock示例

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1094477/mcu-plus-sdk-am243x-pru-spinlock-example-needed

部件号:MCU-PLUS-SDK-AM243X

您好,

我正在寻找一个简单的PRU Spinlock示例 ,该示例与IPC_spinlock_sharedmem_am243x_LP_SYSTEM_FreeRTOS_nortos示例的行相同。 是否有一个? 或者是否可以提供PRU汇编程序片段?

我尝试的是共享内存的一小部分(例如256字节),由PRU (从外部 外围设备读取)更新 ,然后由R5F内核读取和处理。

我想象着R5F内核上的RTOS线程正在等待spinlock。 更新速率为40kHz (如果可以使其工作,则更高)。  

谢谢,Steve

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

    您好,Steve,

    I正在寻找一个简单的PRU Spinlock示例 ,该示例是在系统的spinme_rfem_rfem_rfarm_spanlp系统中。 是否有一个可用[/QUOT]

    否,没有任何使用Spinlock硬件的PRU示例。 我检查了AM64x和AM243x MCU+SDK 08_02_00_31以及PSSP。

    从AM64x/AM243x TRM和AM243x MCU+SDK驱动程序来看,使用Spinlock硬件似乎很简单。 只需读取或写入MMR即可实现所需的锁定。

    MCU+SDK驱动程序文件MCU_PLUS_SDK_am243x_08_02_00_31\SOURC\DRIVERS\spinlock\V0\spinlock.c中的以下代码片段显示了锁定和解锁功能:

                int32_t Spinlock_lock(uint32_t baseAddr, uint32_t lockNumber)
                {
                    int32_t         lockStatus = SystemP_FAILURE;
                    CSL_spinlockRegs *pSpinlockRegs = (CSL_spinlockRegs *)((uintptr_t)baseAddr);
    
                    if(lockNumber < Spinlock_getNumLocks(baseAddr))
                    {
                        lockStatus = CSL_REG32_RD(&pSpinlockRegs->LOCK_REG[lockNumber]);
                    }
    
                    return (lockStatus);
                }
    
                void Spinlock_unlock(uint32_t baseAddr, uint32_t lockNumber)
                {
                    CSL_spinlockRegs *pSpinlockRegs = (CSL_spinlockRegs *)((uintptr_t)baseAddr);
    
                    if(lockNumber < Spinlock_getNumLocks(baseAddr))
                    {
                        CSL_REG32_WR(&pSpinlockRegs->LOCK_REG[lockNumber], CSL_SPINLOCK_LOCK_REG_TAKEN_FREE);
                    }
    
                    return;
                }
    

    PRU内核可以访问所有SOC资源,因此PRU内核可以以相同的方式读取/写入Spinlock寄存器。

    这不是完整的示例,但以下代码PRU汇编片段将读取SPINLOCK REG_0:

                LDI32   r0, 0x2A000800
                LBBO    &r1, r0, 0, 4
    

    类似的内容应该适用于编写Spinlock。

    如果Nick对这个话题有更多的了解,我会在他的报告中循环。

    此致,
    弗兰克

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

    没有什么可补充的,Frank做的很好。

    对于未来的读取器,AM64x和AM24x PRU_ICSSG中也有自旋锁。 有关详细信息,请参阅TRM。

    此致,

    尼克

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

    谢谢Nick。