|
SSP0挂了片SPI FLASH,程序调了一天没成功,请大家帮忙看一下初始化代码是否有问题。
//the bit frequency is PCLK / (CPSDVSR * [SCR+1])
#define CLK_SRC 1//
#define CLK_CPSDVSR 6//between 2-254
#define GPIO_FUCTION0 (0x00)
#define GPIO_FUCTION1 (0x01)
#define GPIO_FUCTION2 (0x02)
#define GPIO_FUCTION3 (0x03)
#define GPIO_FUCTION4 (0x04)
#define GPIO_FUCTION5 (0x05)
#define GPIO_FUCTION6 (0x06)
#define GPIO_FUCTION7 (0x07)
#define GPIO_ENABLE_PULLDOWN (1<<3)
#define GPIO_DISABLE_PULLDOWN (0<<3)
#define GPIO_ENABLE_PULLUP (0<<4)
#define GPIO_DISABLE_PULLUP (1<<4)
#define GPIO_SLEWRATE_LOW (0<<5)
#define GPIO_SLEWRATE_HIGH (1<<5)
#define GPIO_DISABLE_INPUTBUFFER (0<<6)
#define GPIO_ENABLE_INPUTBUFFER (1<<6)
#define GPIO_ENABLE_ZIF (0<<7)
#define GPIO_DISABLE_ZIF (1<<7)
void SSP0_Init(void)
{
LPC_CGU->BASE_SSP0_CLK = (0x09<<24) | (1<<11);//连接时钟到PLL1
//ʹÄÜʱÖÓ
LPC_CCU2->CLK_APB0_SSP0_CFG = CCU_CLK_CFG_AUTO | CCU_CLK_CFG_RUN;
while (!(LPC_CCU2->CLK_APB0_SSP0_STAT & CCU_CLK_STAT_RUN));
LPC_SCU->SFSPF_0 = GPIO_FUCTION0|GPIO_DISABLE_PULLUP|GPIO_SLEWRATE_HIGH;//CLK
LPC_SCU->SFSPF_2 = GPIO_FUCTION2|GPIO_DISABLE_PULLUP|GPIO_SLEWRATE_HIGH|GPIO_ENABLE_INPUTBUFFER;//MISO
LPC_SCU->SFSPF_3 = GPIO_FUCTION2|GPIO_DISABLE_PULLUP|GPIO_SLEWRATE_HIGH;//MOSI
LPC_SSP0->CR0 = (CLK_SRC<<8)|0X07;//SPI,8Bit,
LPC_SSP0->CPSR = CLK_CPSDVSR;
LPC_SSP0->DMACR = (1<<1)|(1<<0);
LPC_SSP0->ICR = (1<<1)|(1<<0);
LPC_SSP0->CR1 = (1<<1);//启动SSP0
}
u8 SSP0_ReadWriteByte(u8 Data)
{
while(!(LPC_SSP0->SR&SSP_STAT_TNF));//TX FIFO is not full
LPC_SSP0->DR = Data;
while(!(LPC_SSP0->SR&SSP_STAT_RNE));//RX FIFO is not empty
return LPC_SSP0->DR;
} |
|