TI中文支持网
TI专业的中文技术问题搜集分享网站

66K2G12 PRU通过constant table访问不了SPI

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访问会慢很多,这个是否可以通过什么修改配置的方法解决

Shine:

SPI0: org = 0x21805400 len = 0x00000200CREGISTER=6
cmd文件len = 0x00000200大于x100,把 cregister里near改成far试试。

volatile __far pruSpi CT_SPI0 __attribute__((cregister("SPI0", far), peripheral));

volatile __far pruSpi CT_SPI1 __attribute__((cregister("SPI1", far), peripheral));

Liven Deng:

回复 Shine:

感谢您的帮助

按照这个建议做了修改,现在通过constant table已经可以读到SPI的SPIREV寄存器的内容,constant table和global地址方式操作的结果一致了,但是SPI寄存器写还是有问题

 

在PRU里面要对SPI寄存器写操作,是否需要配置,我这边有什么可以检查一下?

Shine:

回复 Liven Deng:

写操作具体是什么问题?

Yong Yang:

回复 Shine:

就是属性是W/R的SPI寄存器写不进去,如对SPIGCR0写1,写完回读一直是0,但是我试相同的方式写UART的寄存器是可以写进去的
SPI寄存器我在ARM中写是可以的,但是在PRU中对SPI的寄存器写操作就写不了,通过constant table和物理地址操作都是一样现象

赞(0)
未经允许不得转载:TI中文支持网 » 66K2G12 PRU通过constant table访问不了SPI
分享到: 更多 (0)