写了个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);
}
|
|