|
我用LPC2132做主机发送数据,用LPC2134做从机接收数据,测试时主机能发送,但是从机无法进入中段函数,是在找不到原因了,新手求解惑。
volatile uint8 Rcvdata;
volatile uint8 Rcvflag;
void delayns(uint8 delay)
{
uint16 i;
for(;delay>0;delay--)
for(i=0;i<50000;i++);
}
void __irq SPI_IRQ(void)
{
uint32 tmp;
tmp = SPI_SPSR; //before SPI read SPDR ,SPI must read SPSR first, clear SPIF bit
Rcvdata = SPI_SPDR; //receive data
Rcvflag = 0x01; //have received new data
SPI_SPINT = 0x01; //clear flag bit
VICVectAddr = 0x00;
}
void SPI_Init(void)
{
S0PCR = (0<<3) | //CPHA=0
(1<<4) | //CPOL=1
(0<<5) | //MSTR=0
(0<<6) | //LSBF=0
(1<<7) ; //SPIE=1 , enable interrupt
}
void spisdrecvinitial()
{
PINSEL0=(PINSEL0&0xFFFF00FF)|0x00005500;
//S0PCCR=0x52;
S0PCR=(0<<3)|
(1<<4)|
(0<<5)|
(0<<6)|
(1<<7);//允许SPI中断,不要关闭这个初始化的中断
}
uint8 const DISPsendtab[8]={
0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xF8
};
uint8 DISPrecvtab[8]={0xA5,0x00,0x20,0x20,0x50,0x12,0x01,0xAA};
void main()//
{
PINSEL0 = (PINSEL0&0xFFFF00FF)|0x00005500; //set SPI0 pin connect
IRQEnable();
SPI_Init();
VICIntSelect = 0x00000000; //set all interrupt is IRQ
VICVectCntl0 = (0x20 | 10); //set SPI interrupt is the highest priority
VICVectAddr0 = (int32)SPI_IRQ;
VICIntEnable = (1<<10); //permit SPI interrupt
while(1)
{
if(Rcvflag !=0) //if receive new data
{
RF2052_set(DISPrecvtab);
RF2052_set2(DISPrecvtab);
}
}
}
这是从机,请帮忙看下,谢谢各位了! |
|