写了个SPI的程序,但调试时,总跳不出while(!(S0SPSR & 0x80)); 这个循环,啥原因?是不是初始化有问题,但我初始化都是根据SPI0四个引脚进行初始化了。 程序如下:请叫高手了 #include "lpc2103.h" unsigned char const disp_tab[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, 0x88,0x83,0xC6,0xA1,0x86,0x8E}; #define NSS (1<<7) //连接SPI0的SSEL管脚 void delay(unsigned int count) { unsigned int i; for(;count>0;count--) for(i=0;i<5000;i++); } void spi_int(void) { S0SPCCR |= 0x52; //设置SPI时钟分频 S0SPCR = (0<<3)| //CPHA=0,数据在SCK的第一个时钟采样 (1<<4)| //CPOL=1,SCK低电平有效 (1<<5)| //MSTR=1,SPI处于主模式 (0<<6)| //LSBF=0,SPI数据传输MSB(bit7)在先 (0<<7); //SPIE=0,SPI中断禁止 } unsigned char send_data(unsigned char data) { delay(50); //IOCLR=NSS; S0SPDR=data; while(!(S0SPSR & 0x80)); //等待SPIF置位 S0SPSR |= 0x80; //清除SPIF //IOSET=NSS; return(S0SPDR); } int main(void) { // unsigned char rcv_data; unsigned char i; PINSEL0|=0x00005500; //设置SPI0管脚连接 PINSEL1|=0x00000000; IODIR=NSS; spi_int(); while(1) { for(i=0;i<16;i++) { IOCLR=NSS; //主机发出片选信号,低电平有效 send_data(disp_tab); IOSET=NSS; //已发完数据,片选拉成高电平 // delay(50); } } // return(0); } |