This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

有个很急的问题,关于28027的SPI

用28027的SPI驱动12864,上电以后SPI发送的第一个数据没有作用,我发的第一条是清屏指令,如果先发送一个任意数据,再发送清屏指令就可以了,不知道这是为什么,急求高人解答,拜托了。

程序如下:

#include "DSP28x_Project.h"
#define CS GpioDataRegs.GPADAT.bit.GPIO19

void SPI_init(void);
int get;
char table0[]="北京邮电大学";

void Sendbyte(unsigned char bytes)
{
while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG); //上一字节完全移除时该位置为0,就是当发送缓冲器中没有数据时为0,有数据时为1
SpiaRegs.SPITXBUF=(bytes<<8);
get=SpiaRegs.SPIRXBUF;
//DELAY_US(100);
}

void write_com(unsigned char com)
{
//CS=1;DELAY_US(2);
Sendbyte(0xf8);//DELAY_US(10);
Sendbyte(com&0xf0);//DELAY_US(10);
Sendbyte((com&0x0f)<<4);//DELAY_US(10);
//CS=0;DELAY_US(2);
}
void write_data(unsigned char dat)
{
//CS=1;DELAY_US(2);
Sendbyte(0xfa);
Sendbyte(dat&0xf0);
Sendbyte((dat&0x0f)<<4);
//CS=0;DELAY_US(2);
}
void LCD_Init(void)
{
write_com(0x01);
DELAY_US(10000);
write_com(0x30);
DELAY_US(100);
write_com(0x0c);
DELAY_US(100);
write_com(0x06);
DELAY_US(100);
write_com(0x02);
DELAY_US(10000);
}


void main(void)
{
int n;
InitSysCtrl(); // 系统初始化函数
InitSpiaGpio();

DINT; // 关闭CPU中断
InitPieCtrl(); // PIE中断控制
IER = 0x0000; // 关闭中断使能
IFR = 0x0000; // 清除中断标志位
InitPieVectTable();
EINT;
ERTM;
SPI_init();
SpiaRegs.SPITXBUF=0x00;//发送的伪数据,如果不发送这个数据,第一个指令就没作用
//MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);
while(1)
{
/*****************第一行*******************/
LCD_Init();
write_com(0x80);
write_data(0x0b);
write_data(0x0b);
for(n=0;n<12;n++)
{
write_data(table0[n]);
DELAY_US(10);
}
write_data(0x0b);
write_data(0x0b);
/*****************第二行********************/
DELAY_US(1000000);
LCD_Init();
write_com(0x90);
write_data(0x0b);
write_data(0x0b);
for(n=0;n<12;n++)
{
write_data(table0[n]);
DELAY_US(10);
}
write_data(0x0b);
write_data(0x0b);
DELAY_US(1000000);
/*****************第三行********************/
LCD_Init();
write_com(0x88);
write_data(0x0b);
write_data(0x0b);
for(n=0;n<12;n++)
{
write_data(table0[n]);
DELAY_US(10);
}
write_data(0x0b);
write_data(0x0b);
DELAY_US(1000000);
/*****************第四行********************/
LCD_Init();
write_com(0x98);
write_data(0x0b);
write_data(0x0b);
for(n=0;n<12;n++)
{
write_data(table0[n]);
DELAY_US(10);
}
write_data(0x0b);
write_data(0x0b);
DELAY_US(1000000);
}
// while(1);
}


void SPI_init() //SPI的初始化函数
{
EALLOW;
SpiaRegs.***.bit.SPISWRESET=0; // Reset SPI
SpiaRegs.***.all=0x0047; //8-bit character, disable Loopback mode,Rising edge output
SpiaRegs.***.all=0x0006; //Interrupt enabled, Master,no delay
SpiaRegs.SPISTS.all=0x0000; //clear all the status
SpiaRegs.SPIBRR=0x0063; // Baud rate
SpiaRegs.SPIPRI.all=0x0000;
SpiaRegs.***.bit.SPISWRESET=1; // Enable SPI
EDIS;
}