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