试验:我用一片2214得两个SPI口进行数据交换,试验交换数据正确,SPI0为主,SPI1为从,中断接收数据。初始化和中断服务程序如下:<br /> PINSEL0 = 0x00005500; // 设置SPI0管脚连接<br /> PINSEL1 = 0x000002a8;<br /> IO0DIR = HC595_CS;<br /> <br /> S0PCCR = 0x08; // 设置SPI时钟分频<br /> S0PCR = 0x30;<br /> S1PCR = 0x90;<br /> VICIntSelect=0x00;<br /> VICVectCntl1=0x20|11;<br /> VICVectAddr1=(int)IRQ_SPI1;<br /> VICIntEnable=0x00000800; <br />SPI1得中断服务程序如下:<br />void __irq IRQ_SPI1(void)<br />{<br /> flag=S1PSR;<br /> k++;<br /> if(k>10) k=0;<br /> s1_data=S1PDR; <br /> S1PDR=x[k]; <br /> S1PINT=0x01;<br /> VICVectAddr=0;<br />}<br />在一片2214中,SPI0和SPI1通信状况良好,但是现在我想做的是:两片2214分别用自己得SPI0口进行通信,一块设为主机,一块设为从机;<br />主机设置如下:<br /> PINSEL0=0x00005500; //设置SPI硬件引脚<br /> S0PCCR=0x08; //SPI传送速度Fcclk/8;<br /> S0PCR=0x30; <br /><br /> IO0CLR=CJ_CS; //数据发送<br /> S0PDR=data;<br /> while(0==(S0PSR&0x80));<br /> IO0SET=CJ_CS;<br />程序写完后,检查主机MOSI,CS,SCK等信号均正确。<br />从机设置:<br /> PINSEL0=0x00005500;//引脚设置<br /><br /> S0PCR=0x90; //开中断,从模式,其他设置同主机一样<br /> VICIntSelect=0x00;<br /> VICVectCntl0=0x20|10;<br /> VICVectAddr0=(int)IRQ_SPI0;<br /> VICIntEnable=0x00000400;<br />从机接受中断服务程序<br />void __irq IRQ_SPI0(void) //接受中断<br />{<br /> flag=S0PSR;<br /> rec_stack=S0PDR;<br /> S1PINT=0x01;<br /> VICVectAddr=0;<br />}<br />从机中断服务程序完全仿照一片2214得SPI通信得设置,但是,从机就是不能进入中断,接受不到数据,我想请教一下,这大概是什么方面的问题,有什么解决的思路?<br />因为以前做的都是处理器直接用SPI去写数据,不用去管接受数据的情况,现在碰到这问题还不知道是哪里得原因,请大家不吝赐教!<br /><br /><br /> |
|