map_base_uart=(unsigned int *)mmap(0,4096,PROT_READ|PROT_WRITE,MAP_SHARED,fbb,0x481a0000);
if(map_base_uart == NULL){ printf("UART mmap err!\n");}else{ printf("UART mmap ok!\n");}recv_spi[0]= (*(volatile unsigned int *)(map_base_uart)&0xff);//printf("usrt 0H value :%d \n ",recv_spi[0]);printf("\n");
分别试了SPI0 和SPI1都不行,报如下错误
root@am335x-evm:/mnt/nfs# ./spi spi mode: 0[ 2820.799835] Unhandled fault: external abort on non-linefetch (0x1018) at 0x40091000 bits per word: 8 max speed: 500000 Hz (500 KHz) UART mmap ok! Bus error root@am335x-evm:/mnt/nfs#
然后分别试了,GPIO0-3; UART0-3 这几个地址,读基地址都可以读到内容。 ,为啥操作SPI 就是不行,但是APP方式调用标准SPI驱动就可以正常收发数据呢?
Jian Zhou:
这个和驱动有关,估计你调这个驱动的时候,SPI的寄存器地址空间已经被SPI驱动占用了
zhongquan sha:
回复 Jian Zhou:
周一已经解决了
你说的没错哦,是和驱动有关,说和驱动有关,的确是修改了驱动后,再MMAP就OK了
说和驱动没关系呢,也可以,找到办法了,不知道手册问题,还是理解问题,反正没发下手
SPI时钟找不到控制寄存器, 手册有描述可以,但没找到在什么地方!
Jian Zhou:
回复 zhongquan sha:
驱动文件里面应该有时钟配置寄存器的定义啊
zhongquan sha:
回复 Jian Zhou:
时钟配置,不受控感觉
MMAP方式修改了后,再读取,发现值未能修改成功
估计还要啥相关地方的寄存器没有设置或设置的不对,,
TI中文支持网