|
楼主 |
发表于 2011-7-13 10:40:23
|
显示全部楼层
已经搞定,可能是老卡,速度不够高,确实是初始化时要等待一下,要不然老卡,特别是MMC老卡不容易通过初始化!
初始化部分改进:
void LPC17xx_SPI_Init (void)
{
uint32_t dummy;
dummy = dummy; // avoid warning
/* Initialize and enable the SSP0 Interface module. */
LPC_SC->PCONP |= (1 << 21); /* Enable power to SSPI0 block */
/* SSEL is GPIO, output set to high. */
LPC_GPIO0->FIODIR |= (1<<16); /* P0.16 is output */
LPC_PINCON->PINSEL1 &= ~(3<<0); /* P0.16 SSEL (used as GPIO) */
LPC17xx_SPI_DeSelect (); /* set P0.16 high (SSEL inactiv) */
/* SCK, MISO, MOSI are SSP pins. */
LPC_PINCON->PINSEL0 &= ~(3UL<<30); /* P0.15 cleared */
LPC_PINCON->PINSEL0 |= (2UL<<30); /* P0.15 SCK0 */
LPC_PINCON->PINSEL1 &= ~((3<<2) | (3<<4)); /* P0.17, P0.18 cleared */
LPC_PINCON->PINSEL1 |= ((2<<2) | (2<<4)); /* P0.17 MISO0, P0.18 MOSI0 */
/* PCLK_SSP0=CCLK */
LPC_SC->PCLKSEL1 &= ~(3<<10); /* PCLKSP0 = CCLK/4 (18MHz) */
LPC_SC->PCLKSEL1 |= (1<<10); /* PCLKSP0 = CCLK (72MHz) */
LPC_SSP0->CR0 = 0x0007; /* 8Bit, CPOL=0, CPHA=0 */
LPC_SSP0->CR1 = 0x0002; /* SSP0 enable, master */
LPC17xx_SPI_SetSpeed (SPI_SPEED_400kHz);
////// ---------------------------------------------------------
///// 可以用如下办法解决,是最好的方法,官方的
/* wait for busy gone */
while( LPC_SSP0->SR & ( 1 << SSPSR_BSY ) );
/* drain SPI RX FIFO */
while( LPC_SSP0->SR & ( 1 << SSPSR_RNE ) )
{
dummy = LPC_SSP0->DR;
}
///// ---------
///// 也可以用延时等待的方式
/* -------------------------
int i=60000; ///// 定义在开头,否则会报错
while(i--){};
///// ------------------------------------------------------------
}
注意,在这里最好使用官方的例程,考虑的很详细和仔细,其他的例程作为参考。
上次用了一个专门针对路虎1768开发板的例程,没通过,加了例程里面留的一个QQ好吗想请教一下
结果被告知他没有义务告诉我原因,还好一整奚落!
不过,还是要感谢坛子里的大侠们! |
|