时钟初始化 /* Select HCLK as the clock source of SPI0 */
CLK_SetModuleClock(SPI0_MODULE, CLK_CLKSEL1_SPI0_S_HCLK, MODULE_NoMsk);
/* Enable SPI0 peripheral clock */
CLK_EnableModuleClock(SPI0_MODULE);
PIN初始化,没有使用PC2(MISO)
/* Setup SPI0 multi-function pins */
SYS->GPC_MFP &= ~(SYS_GPC_MFP_PC0_Msk | SYS_GPC_MFP_PC1_Msk | SYS_GPC_MFP_PC3_Msk); // SYS_GPC_MFP_PC2_Msk
SYS->GPC_MFP |= SYS_GPC_MFP_PC0_SPI0_SS0 | SYS_GPC_MFP_PC1_SPI0_CLK | SYS_GPC_MFP_PC3_SPI0_MOSI0; // SYS_GPC_MFP_PC2_SPI0_MISO0
SYS->ALT_MFP &= ~(SYS_ALT_MFP_PC0_Msk | SYS_ALT_MFP_PC1_Msk | SYS_ALT_MFP_PC3_Msk); // SYS_ALT_MFP_PC2_Msk
SYS->ALT_MFP |= SYS_ALT_MFP_PC0_SPI0_SS0 | SYS_ALT_MFP_PC1_SPI0_CLK | SYS_ALT_MFP_PC3_SPI0_MOSI0; // SYS_ALT_MFP_PC2_SPI0_MISO0
SPI0配置
void SPI0_Init(void)
{
SPI_Open(SPI0, SPI_MASTER, SPI_MODE_0, 0, 9000000);
SPI_EnableAutoSS(SPI0, SPI_SS0, SPI_SS_ACTIVE_LOW);
}
OLED读写
#ifdef SOFT_SPI
void OLED_WR_Byte(u8 dat,u8 cmd)
{
u8 i;
if(cmd)
OLED_DC_Set();
else
OLED_DC_Clr();
OLED_CS_Clr();
for(i = 0; i < 8; i++)
{
OLED_SCL_Clr();
if(dat & 0x80)
OLED_SDA_Set();
else
OLED_SDA_Clr();
OLED_SCL_Set();
dat <<= 1;
}
OLED_CS_Set();
OLED_DC_Set();
}
#else
void OLED_WR_Byte(u8 dat, u8 cmd)
{
if(cmd)
OLED_DC_Set();
else
OLED_DC_Clr();
SPI_WRITE_TX0(SPI0, dat);
OLED_DC_Set();
}
#endif
main函数
#ifdef SOFT_SPI
SPI0_Init_Soft();
#else
SPI0_Init();
#endif
delay_ms(100);
OLED_Init();
UART_SetTimeoutCnt(UART0, 40);
UART0->FCR |= (3 << 4); // 设置UART0的串口FIFO为14字节
UART_EnableInt(UART0, (UART_IER_RDA_IEN_Msk | UART_IER_RTO_IEN_Msk));
printf("\n\nCPU [url=home.php?mod=space&uid=72445]@[/url] %dHz\n", SystemCoreClock);
printf("\n\nUART Sample Program\n");
t1.IDString = (uint8_t*)"LCC1 V0.0.1";
printf("please input data:\n");
delay_ms(500);
AD5764_Init();
while(1)
{
OLED_Refresh();
OLED_ShowString(0, 1, t1.IDString, 16, 1);
}
如果我使用软件模拟SPI,屏幕可以点亮且正常显示,一旦使用硬件SPI0,则不行,起初我以为是SPI的模式、bit数不对,但SPI_MODE_0到SPI_MODE_3,bit数8和32都试过了,还是点不亮,求做过的大佬指点一下吧。急急急。
|