Hi
我这边在使用K2GEVM进行一些软件的前期验证,遇到一个PRU访问SPI寄存器的问题需要请教一下
我们在K2GEVM的demo板上做了一些实验,发现PRU通过constant table访问不了SPI,读和写都不行,而通过global地址来访问,只能读,写仍然写不进去
下面是我的PRU工程中用到的cmd配置
MMC0 : org = 0x23000000 len = 0x00000300 CREGISTER=5
SPI0 : org = 0x21805400 len = 0x00000200 CREGISTER=6
…………………………
SPI1 : org = 0x21805800 len = 0x00000200 CREGISTER=16
I2C_1 : org = 0x02530400 len = 0x0000003C CREGISTER=17
在我的test code中对应定义了SPI
volatile __far pruSpi CT_SPI0 __attribute__((cregister("SPI0", near), peripheral));
volatile __far pruSpi CT_SPI1 __attribute__((cregister("SPI1", near), peripheral));
1) 通过constant table的方式访问
ulTmp = CT_SPI1.SPIREV; 读不到SPIREV的内容
CT_SPI1.SPIGCR0 = 1;
ulTmp = CT_SPI1.SPIGCR0; 回读仍是0,看PRU的临时变量和从ARM侧看SPI寄存器都是这样
CT_UART1.IER = 0x0c;
ulTmp = CT_UART1.IER; UART通过constant table访问,读写都是正常的
2) 通过global方式
ulTmp = REG(SPI2_GCR0 + 0x1FC); 可以读到SPIREV的内容
REG(SPI2_GCR0) = 1;
ulTmp = REG(SPI2_GCR0); 回读仍是0,看PRU的临时变量和从ARM侧看SPI寄存器都是这样
请帮忙看看这个是什么原因,是否我有什么配置可以再检查一下,我使用的测试环境是K2GEVM的demo板,上面是K2G02
另外从芯片资料中了解到,PRU可以通过内部的constant table访问,但只能访问SPI0/1,SPI2/3只能通过global 的方式访问,但是访问效率比通过constant table访问会慢很多,这个是否可以通过什么修改配置的方法解决