我在LPC2214上使用该芯片,但出现了一些问题,现象描述如下:不论我向芯片的寄存器写入什么数据,读到的一直是0或者0xFF,从示波器的波形看,波形很工整,没发现有什么问题,以下是我的代码,请帮忙看看<br /><br /><br />void SPIInit( INT8U ch )<br />{<br /> if( ch == 0 )<br /> {<br /> }<br /> else if( ch == 1 )<br /> {<br /> // 设置 P0.17~20 为 SPI 功能<br /> PINSEL1 = ( PINSEL0 & 0xFFFFFC03 ) | 0x00002A8;<br /><br /> // 设置片选(P1.18)<br /> PINSEL2 &= 0xFFFFFFF7;<br /> IO1DIR |= 1<<18;<br /> IO1SET = 1<<18;<br /> <br /> S1PCCR = 12; // 时钟分频<br /> S1PCR = 0x20; // CPHA = 0 CPOL = 0<br /> <br /> SPIWrite( 1, SC16IS752IPW_LCR, 0x80); <br /> SPIWrite( 1, SC16IS752IPW_DLL, 0x0C); <br /> SPIWrite( 1, SC16IS752IPW_DLH, 0x00); <br /> SPIWrite( 1, SC16IS752IPW_LCR, 0xBF);<br /> SPIWrite( 1, SC16IS752IPW_EFR, 0X10);<br /> SPIWrite( 1, SC16IS752IPW_LCR, 0x03);<br /> SPIWrite( 1, SC16IS752IPW_FCR, 0x06);<br /> SPIWrite( 1, SC16IS752IPW_FCR, 0x01); <br /> }<br />}<br /><br />INT8U SPISend( INT8U ch, INT8U data )<br />{<br /> INT8U ret;<br /> if( ch == 0 )<br /> {<br /> }<br /> else if( ch == 1 )<br /> {<br /> S1PDR = data ;<br /> while( (S1PSR & 0x80) == 0 ); <br /> ret = S1PDR ;<br /> }<br /> return ret;<br />}<br /><br />/*<br /> * 从SPI接口读入数据<br /> */<br />INT8U SPIRead( INT8U ch, INT8U reg )<br />{<br /> INT8U ret;<br /> <br /> IO1CLR = 1<<18;<br /> SPISend( ch, reg );<br /> ret = SPISend( ch, 0 );<br /> IO1SET = 1<<18;<br /> <br /> return ret;<br />}<br /><br />/*<br /> * 写入数据至SPI接口<br /> */<br />void SPIWrite(INT8U ch, INT8U reg, INT8U data )<br />{<br /> IO1CLR = 1<<18;<br /> SPISend( ch, reg );<br /> SPISend( ch, data );<br /> IO1SET = 1<<18;<br />}<br /><br /><br />void TaskSPI( void *pdata )<br />{<br /> INT8U buf[10];<br /> SPIInit( 1 );<br /> for(;;)<br /> {<br /> buf[0] = UART4RegRead( SC16IS752IPW_LCR );<br /> buf[1] = UART4RegRead( SC16IS752IPW_DLL );<br /> buf[3] = UART4RegRead( SC16IS752IPW_DLH );<br /> buf[4] = UART4RegRead( SC16IS752IPW_LSR );<br /> buf[5] = UART4RegRead( SC16IS752IPW_IER );<br /> buf[6] = UART4RegRead( SC16IS752IPW_IIR );<br /> OSTimeDly( 10 );<br /> }<br />}<br /> |
|