2214主机发送数据是正确的,通过查询方式可以接收到任意字节,就是中断不行<br />程序如下:<br />#define SPI_RCV_BUF 2<br />static UINT8 rcv_buf[SPI_RCV_BUF];<br />static BOOL RcvFinished = FALSE;<br /><br />void __irq IRQ_SPI0( void )<br />{<br /> UINT32 tmp;<br /> <br /> tmp = S0PSR;<br /> rcv_buf[0] = S0PDR;<br /> rcv_buf[1] = tmp;<br /> RcvFinished = TRUE;<br /><br /> S0PINT = 0x01;<br /> VICVectAddr = 0x00;<br /> }<br /><br /><br />void SPI0_Init( void )<br />{<br /> PINSEL0 = (PINSEL0 & (~(0xFF << 8))) | (0x55 << 8) ; // 设置管脚连接SPI<br /> S0PCR = (1 << 3)| // CPHA = 0, 数据在SCK 的第一个时钟沿采样<br /> (1 << 4) | // CPOL = 1, SCK 为低有效<br /> (0 << 5) | // MSTR = 0, SPI 处于从模式<br /> (0 << 6) | // LSBF = 0, SPI 数据传输MSB (位7)在先<br /> (1 << 7); // SPIE = 1, SPI 中断被使能<br /> }<br /><br /><br />void SPI0_INT_Init( void )<br />{<br /> VICIntSelect = 0x00;<br /> VICVectCntl0 = (0x20|10);<br /> VICVectAddr0 = (UINT32)IRQ_SPI0;<br /> VICIntEnable |= (1<<10);<br /> }<br /><br /><br />UINT8 SPI0_GetData( UINT8 *pBuffer )<br />{ <br /> if( RcvFinished==TRUE) <br /> { <br /> RcvFinished = FALSE;<br /> <br /> UART0_COMPuts( rcv_buf,2);<br /> while( UART0_IsSendFinished()==0 );<br /> UART0_ClearBuffer( TRUE,TRUE );<br /> }<br /> else return FALSE;<br /><br /> return TRUE;<br /> }<br /><br /><br />int main(void )<br />{<br /> UINT8 dat[256];<br /> UINT32 i;<br /> <br /> UART0_Init(BPS9600,DB8,SB1,PB0);<br /> UART0_INTInit( ); <br /><br /> SPI0_Init( );<br /> SPI0_INT_Init( );<br /> <br /> IRQEnable( );<br /><br /> while( 1 )<br /> { <br /> SPI0_GetData( dat );<br /> for( i=0;i<0x9ffff;i++ );<br /> }<br /> return 0;<br /> }<br />
|