我觉得问题还没有弄清楚,以NSS0为例子.<br /> 首先:NSS0可以影射到三根引脚:GPG2,GPE3,GPD15.<br /> 然后看2410对SPI的一些描述:<br /> (1)SPI接口描述<br /> SPIMISO[1:0]- IO- SPIMISO is the master data input line, when SPI is configured as a master. When SPI is configured as a slave, these pins reverse its role.<br /> SPIMOSI[1:0] -IO -SPIMOSI is the master data output line, when SPI is configured as a master. When SPI is configured as a slave, these pins reverse its role.<br /> SPICLK[1:0] -IO -SPI clock<br /> nSS[1:0] -I -SPI chip select(only for slave mode),这里说只针对从机模式.<br /> (2)状态寄存器的Multi Master Error Flag描述<br /> This flag is set if the nSS signal goes to active low while<br />the SPI is configured as a master, and SPPINn's ENMUL bit is multi master errors detect mode. MULF is cleared by reading SPSTAn.<br /> 0 = not detect, 1 = multi master error detect<br /> (3)SPI PIN CONTROL REGISTER寄存器描述<br /> When the SPI system is enabled, the direction of pins, except nSS pin, is controlled by MSTR bit of SPCONn register. The direction of nSS pin is always input.(这里说NSS永远作为输入)<br /> When the SPI is a master, nSS pin is used to check multi-master error, provided the SPPIN's ENMUL bit is active, and another GPIO should be used to select a slave.(这里说要选择另外一个GPIO来选择从机,那NSS0影射到哪个引脚?)<br /> If the SPI is configured as a slave, the nSS pin is used to select SPI as a slave by one master.<br /> 其中的Multi Master error detect Enable (ENMUL)标志描述:<br /> The /SS pin is used as an input to detect multi master error when the SPI system is a master.<br /> 0 = disable (general purpose)<br /> 1 = multi master error detect enable<br /> <br /> 接着:如果做为从机,这点很好理解.按照SPI协议,肯定要有/SS引脚.这时,NSS0可以影射到3根引脚的任何一根作为NSS0输入.(这里有个疑问,如果把3根引脚同时影射为NSS0会有什么结果?)<br /> <br /> 最后:如果作为主机,NSS0影射到哪个引脚?是不是有以下几种情况:<br /> (1)选择一根GPIO线做输出(不包括上面提到的可以影射到NSS0的三根引脚:GPG2,GPE3,GPD15),连接到从机的/SS,这时,普通GPIO根本不能检测多主机冲突.<br /> (2)从机的/SS管脚总是接低电平,主机没有任何引脚输出来选择从机,这种情况应该也是可以.<br /> (3)选择可以影射到NSS0的三根引脚之一:GPG2,GPE3,GPD15,但这里不影射为/SS,只作普通GPIO,作为从机的/SS输入,这时是不是也不能检测多主机冲突?<br /> (4)选择可以影射到NSS0的三根引脚之一:GPG2,GPE3,GPD15,而且是配置为/SS功能,作为输出来控制从机的/SS引脚.这种情况有很多疑问:作为主机,哪根引脚可以作为输出来控制从机的/SS,GPG2,GPE3,GPD15能不能用来做这种功能?检测多主机冲突要求S3C2410与从机怎么个连接方法?<br /> 特别是第(4)种情况,总觉得跟数据手册说的很多出入.<br /><br /> 看看AVR单片机的描述,比较清楚,但疑问,就是SS配置为输出,能不能检测到多主机冲突?它这里说配置为输入时可以检测.<br /> SS 引脚的功能<br /> 从机模式:当SPI 配置为主机时,从机选择引脚SS 总是为输入。SS 为低将激活SPI 接口,MISO成为输出( 用户必须进行相应的端口配置) 引脚,其他引脚成为输入引脚。当SS 为高时所有的引脚成为输入, SPI 逻辑复位,不再接收数据。SS引脚对于数据包/字节的同步非常有用,可以使从机的位计数器与主机的时钟发生器同步。当SS 拉高时SPI从机立即复位接收和发送逻辑,并丢弃移位寄存器里不完整的数据。<br /> 主机模式:当SPI 配置为主机时(MSTR 的SPCR 置位),用户可以决定SS 引脚的方向。若SS 配置为输出,则此引脚可以用作普通的I/O 口而不影响SPI 系统。典型应用是用来驱动从机的SS 引脚。如果SS 配置为输入,必须保持为高以保证SPI 的正常工作。若系统配置为主机,SS 为输入,但被外设拉低,则SPI 系统会将此低电平解释为有一个外部主机将自己选择为从机。为了防止总线冲突, SPI 系统将实现如下动作:<br /> 1. 清零SPCR 的MSTR 位,使SPI 成为从机,从而MOSI 和SCK 变为输入。<br /> 2. SPSR 的SPIF 置位。若SPI 中断和全局中断开放,则中断服务程序将得到执行。因此,使用中断方式处理SPI 主机的数据传输,并且存在SS 被拉低的可能性时,中断服务程序应该检查MSTR 是否为"1”。若被清零,用户必须将其置位,以重新使能SPI 主机模式。<br /><br /> 还请啊南和大家多多指教<br />
|