Other Parts Discussed in Thread: AM6442
器件型号: AM6442
您好:
我尝试访问(AM6442 的)PRU_ICSSG SPINLOCK 以保护在 PRU 0 和 PRU1 之间共享的关键路径。
我现在使用的代码是:
#define SPINLOCK_DEV 0x90 /* PRU XFR Device für spinlocks */
#define BASE_REGISTER 1
#define USE_REmapping 0
静态内联 void spinlock_acquire (uint8_t lock_id){
uint32_t obj = lock_id 和 0x3FU;
执行{
__xin (SPINLOCK_DEV、BASE_REGISTER、USE_REmapping、OBJ);
//结果位在 R1.B3 中
if (((obj >> 24)& 0x01)== 1){
//已获取
返回;
}
//未获取
} while (1);
}
静态内联 void spinlock_release (uint8_t lock_id){
uint32_t obj =(lock_id 和 0x3F)<< 24;//为什么要在此处移位????
__XOUT (SPINLOCK_DEV、BASE_REGISTER、USE_REmapping、OBJ);
}
这个问题在代码中被读了出来:我不知道,为什么我需要转移来释放锁。 如果我不换班、就不起作用。 也许我只是误解了 TRM 中的表 6-98 (p632)、但评论指出:“此断言将清除由选择的标志 R1.b0 /own_req_vector“。
另外、我发现很难找到该主题的 (C -) 示例代码。
感谢您的帮助!
