您好!
使用MSP432微控制器设置SPI传输时遇到一些问题。
我是这款控制器的新手,所以这个问题可能很明显。
基本上,我正在尝试驱动一个带有SPI接口的EA DOGL-128图形LCD显示器。
SPI接口的初始化方式如下:
#include <driverlib.h>
#include <SPI_drv.h>/*
SPI主配置参数*/
const eUSI_SPI_MasterConfig spiMasterConfig ={
EUSCI_B_SPI_CLOCKSOURCE_SMCLK, // SMCLK时钟源
1200万, // SMCLK = DCO = 12MHz
1万, // SPICLK = 10kHz
EUSCI_B_SPI_MSB_FIRST, // MSB优先
EUSCI_B_SPI_PHASE DATA_Changed_ONFIRST_Captured_on_NEXT,//相位
EUSCI_B_SPI_CLOCKPOLARITY_INactivity HIGH,//高极性
EUSCI_B_SPI_3引脚 // 3Wire SPI模式
};
Public void SPI_init(void)
{
/*在SPI模式下选择WFP 1.5 和WFP 1.6 */
GPIO _setAsPeripheralModuleFunctionInputPin (GPIO_PORT_P1,
GPIO _PIN5 | GPIO _PIN6,GPIO主要模块功能);
//将引脚4.3 设置为CS引脚。
GPIO _setAsOutputPin (GPIO端口P4,GPIO _PIN3);
/*我们应该给CS引脚提供下降边缘,但不完全确定是否有必要这样做。 */
/*可能我们必须捕获传输中断,然后控制CS??? 尚不清楚这是如何工作的。 */
GPIO _setOutputHighOnPin (GPIO端口P4,GPIO _PIN3);
/*在3Wire主模式下配置SPI */
SPI_initMaster(EUSI_B0_BASE,&spiMasterConfig);
/*启用SPI模块*/
SPI_enableModule(EUSI_B0_BASE;
}
这就是传输函数的外观:
公共空SPI_Transmit_Byte (U8字节)
{
/*轮询以查看TX缓冲区是否就绪*/
同时(!(SPI_getInterruptStatus (EUSCI_B0_BBASE,EUSCI_B_SPI_Transmit_Interrupt)));
/*将数据传输到从属设备*/
SPI_SPI_SpenDate(EUSI_B0_Base,byte);
}
现在SPI传输本身工作正常,使用逻辑分析器进行检查,似乎没有问题。
问题是液晶屏上有一个A0针脚,该针脚主要确定是否应该解释我发送的命令
作为写入数据或作为命令。 需要在SPI字节传输结束时将A0引脚设置为低/高。
我一开始就尝试这样控制它:
私有void disp_command(U8 cmd,布尔注册选择){
IF (REG_SELECT)
{
GPIO _setOutputHighOnPin (GPIO_PORT_P1, GPIO _PIN7);
}
否则
{
GPIO _setOutputLowOnPin (GPIO_PORT_P1, GPIO _PIN7);
}
SPI_Transmit_Byte (cmd);
}
但这不起作用,因为A0针脚在前一字节完成发送之前就已设置好。
所以我尝试在SPI_Transmit_Byte函数中设置A0。
公共空SPI_Transmit_Byte (U8字节,布尔REG_SELECT)
{
/*轮询以查看TX缓冲区是否就绪*/
同时(!(SPI_getInterruptStatus (EUSCI_B0_BBASE,EUSCI_B_SPI_Transmit_Interrupt)));
/*将数据传输到从属*/
IF (REG_SELECT)
{
GPIO _setOutputHighOnPin (GPIO_PORT_P1, GPIO _PIN7);
}
否则
{
GPIO _setOutputLowOnPin (GPIO_PORT_P1, GPIO _PIN7);
}
SPI_SPI_SpenDate(EUSI_B0_Base,byte);
}
但是,在这种情况下,A0也设置在错误的时间。 更确切地说,它是在上一个过程中设置的
字节,因此传输不正确。 基本上我理解它的方式是,EUSCI_B_SPI_Transmit_Interrupt被激发
当SPI接口已准备好用于新字节,但旧字节尚未完成发送时。 我需要做的是抓住时机
当MCU开始实际发送一个字节,然后控制A0引脚时。 现在我看不到一个好的方法。也许有人遇到过类似的问题。
PS! 在代码中有以下定义:
#定义公共
#定义私有静态