您好,SPI0是没有问题的。可能是您的程序初始化有问题,比如上面的描述“查询方式,即把SPSR设置成0x20”,是查询方式还是中断方式由SPCR里的SPIE位决定。<br /> 上面还描述说有时标志位会置位,有时不会,那么可以检查一下Flash连接是否正确,比如是否出现虚焊造成数据不能稳定传输。<br /> 另外给出一段SPI初始化代码供您参考一下,这是从实现了SPI Flash通信的例程里截取下来的。<br />void mspiInit (void)<br />{ <br /> PINSEL0 = 0x00005500; /* 设置SPI管脚连接 */<br /> PINSEL1 = 0x00000000;<br /> PINSEL2 = PINSEL2 & (~0x08);/* P1[25:16]连接GPIO */<br /> IO1DIR = __SPI_CS; /* 设置P1.24控制口为输出 */<br /> PINSEL0 = (PINSEL0 & (~(0xFF << 8))) | (0x15 << 8) ; /* 配置P0.4=SCK0,P0.5=MISO0 */<br />/* P0.6=MOSI0 */<br />/* (P0.7=GPIO不需要配置) */<br /> SPCCR = 0x52; /* 设置SPI时钟分频 */<br /> SPCR = (0 << 3) | /* CPHA = 0, 数据在SCK 的 */<br /> /* 第一个时钟沿采样 */<br /> (1 << 5) | /* MSTR = 1, SPI 处于主模式 */<br /> (0 << 6) | /* LSBF = 0, SPI 数据传输 */<br /> /* MSB (位7)在先 */<br /> (0 << 7); /* SPIE = 0, SPI 中断被禁止 */<br />}
|