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.

SPI总线驱动12864显示屏



数据通过SPI写入液晶屏没有反应,发送的是8位的字符,不知道是不是SPI配置的问题,代码如下:

SPI端口的初始化:

void spi_init()
{
SpiaRegs.***.all =0x0007; // 重置, 上升沿,8位字符位
SpiaRegs.***.all =0x0006; // 启用主模式, 正相,启用发送功能,使能中断

SpiaRegs.SPIBRR =0x007F; //设置波特率,波特率计算手册上有
SpiaRegs.***.all =0x0087; //enable SPI
SpiaRegs.SPIPRI.bit.FREE =1; // Set so breakpoints don't disturb xmission
}

//-----------------写指令或者数据--------------------
void spi_xmit(Uint8 cmda, Uint8 data)
{
CS = 0;
DI = cmda; //将写入数据或者是命令进行赋值
SpiaRegs.SPITXBUF = data<<8; //写入SPITXBUF时是左对齐,而读入SPIRXBUF是右对齐
while(SpiaRegs.SPIFFTX.bit.TXFFST !=1){}
}

void spi_fifo_init() //初始化 SPI FIFO 寄存器
{
SpiaRegs.SPIFFTX.all=0xE040;
SpiaRegs.SPIFFRX.all=0x2044;
SpiaRegs.SPIFFCT.all=0x0;
}

SPI的GPIO配置:

void InitSpiaGpio()
{
EALLOW;

/* 使选定的引脚内部上拉 */
// 用户可以启用或禁用“拉”窗口
// 这将使指定的引脚的上拉电阻

GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0; // Enable pull-up on GPIO16 (SPISIMOA)
GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0; // Enable pull-up on GPIO17 (SPISOMIA)
GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0; // Enable pull-up on GPIO18 (***)

GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0; // Enable pull-up on GPIO19 (SPISTEA)CS位
GpioCtrlRegs.GPAPUD.bit.GPIO20 = 0; //di位,确定是输出的指令还是数据
GpioCtrlRegs.GPAPUD.bit.GPIO21 = 0; //rst位,发出复位信号

/* Set qualification for selected pins to asynch only */
// This will select asynch (no qualification) for the selected pins.
// Comment out other unwanted lines.
//GPIO输入限制选择寄存器GPxQSELy(x=A,B,C;y=1,2)指定了采样窗是3个采样点还是6个采样点。
/* 控制GPIO0到GPIO15为输入引脚时的模式. 有4种模式可选, 其中3种是与系统时钟同步, 第四种为非同步.
同步的3种还分为每个时钟波都更新一次, 连续3个采样都一样才更新, 和连续6个采样都一样才更新. */

GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3; // Asynch input GPIO16 (SPISIMOA)异步转移模式
GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; // Asynch input GPIO17 (SPISOMIA)
GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3; // Asynch input GPIO18 (***)

GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3; // Asynch input GPIO19 (SPISTEA)
GpioCtrlRegs.GPAQSEL2.bit.GPIO20 = 3; //di位
GpioCtrlRegs.GPAQSEL2.bit.GPIO21 = 3; //rst位,发出复位信号

/* Configure SPI-A pins using GPIO regs*/
// This specifies which of the possible GPIO pins will be SPI functional pins.
// Comment out other unwanted lines.

GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1; // Configure GPIO16 as SPISIMOA
GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; // Configure GPIO17 as SPISOMIA
GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; // Configure GPIO18 as ***

GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0; // Configure GPIO19 as SPISTEA,配置成I/O端口
GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 0; //di位,配置成 I/O端口
GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 0; //rst位,发出复位信号

GpioCtrlRegs.GPADIR.bit.GPIO19 = 1; //设置GPIO19为输出,用于片选
GpioCtrlRegs.GPADIR.bit.GPIO20 = 1; //设置GPIO20为输出,用以判断输出的是数据还是指令
GpioCtrlRegs.GPADIR.bit.GPIO21 = 1; //引脚配置成输出
EDIS;

GpioDataRegs.GPADAT.bit.GPIO19 = 1;
GpioDataRegs.GPADAT.bit.GPIO21 = 1; //rst位,发出复位信号
GpioDataRegs.GPADAT.bit.GPIO20 = 1; //设置GPIO20为输出,用以判断输出的是数据还是指令

}
#endif // endif DSP28_SPIA

请大神解答,多谢