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