<br /><b><font color=#C00000>主机:</font></b><br />void inIt_SPI1(uint8 Fdiv)<br />{<br /> //<br /> PINSEL1&=0xFFFFFC03;<br /> PINSEL1|=0x000002A8;//P0.17,P0.18,P0.19设置成SPI模式 10101000 <br /> //<br /> SPI1_SPCCR=0x52; //SPI时钟计数器设置。<br /> SPI1_SPCR=0x30; //SPI控制寄存器设置:移位时小头在前,spi为主模式,sck低有效。<br /> //<br /> PCONP=PCONP | 0x400; //SPI口使能。<br />} <br />//===============================================================================================<br />//========================================用SPI发送数据==========================================<br />//===============================================================================================<br />uint8 sendDateUseSPI1(uint8 sendDate)<br />{<br /> uint8 recveDate,i;<br /> //<br /> recveDate=SPI1_SPSR; //清状态寄存器。<br /> <br /> //<br /> //SSEL使能。<br /> IO0CLR=0X20000000; <br /> //<br /> SPI1_SPDR=0x55; //发送数据。<br /> //<br /> while(!(SPI1_SPSR & 0X80))<br /> { <br /> UartSend(UART0,0x99);//用串口发送数据,看程序运行到什么地方。<br /> <br /> }<br /> //<br /> IO0SET=0X20000000;//SSEL使能禁止。<br /> //<br /> recveDate=SPI_SPDR;<br /> //<br /> return(recveDate);<br />}<br /><b>====================================================================</b><br /><font color=#C00000><b>从机:</b><br /></font>void __irq IRQ_SPI1(void)<br />{<br /> uint8 receive;<br /> <br /> receive=SPI1_SPSR; //读SPI状态寄存器同时自动清0 <br /> //<br /> //<br /> if(SPI1_SPINT & 0x01) //判断是否是数据传输完毕中断<br /> {<br /> receive=SPI1_SPDR;<br /> //<br /> if(SPI1_SPSR & 0X80) //数据准备好。<br /> {<br /> SPI1_SPDR=0x3f;<br /> //<br /> UartSend(UART0,receive);<br /> //<br /> /*<br /> if(out_SpiTxBuf==in_SpiTxBuf)<br /> {<br /> rst_SpiTxBuf();<br /> }<br /> */<br /> }<br /> else //在发送期间不允许接收数据<br /> {<br /> //Receive_SPI_Bus(receive);<br /> //S1PDR=0x99;<br /> }<br /> //<br /> SPI1_SPINT=0X01; //清中断标志 <br /> }<br /> <br /> VICVectAddr = 0x00;<br />}<br />////<br />void inIt_SPI1(uint8 Fdiv)<br />{<br /> //<br /> PINSEL1&=0xFFFFFC03;<br /> PINSEL1|=0x000002A8;//P0.17,P0.18,P0.19设置成SPI模式 10101000 <br /> //<br /> //<br /> //SPI1_SPCCR=0x52; //SPI时钟计数器设置。<br /> SPI1_SPCR=0x90; //SPI控制寄存器设置:中断使能,移位时小头在前,spi为从模式,sck低有效。<br /> //<br /> VICIntSelect = 0x00000000; // 设置所有通道为IRQ中断<br /> VICVectAddr3 = (int)IRQ_SPI1; // 设置SPI1向量地址<br /> VICVectCntl3 = 0x2B; // SPI中断通道分配到IRQ slot3,<br /> <br /> VICIntEnable |= 0x00000800; // 使能SPI1中断<br />}<br /><br />//===============================================================<br /><font color=#C00000>其实上面只要看主机程序和从机的初始化就可以了,现在问题是主机的“SSEL”信号是有输出的,但是"SCK"没有信号输出。不知问题出在什么地方。</font>
|