打印

MSP432 SPI3线调试不成功

[复制链接]
2034|37
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在研究432的SPI时,先用的官网3线的收发例程。用的432A1做主机,B1做从机,连了个时钟,MISO和MOSI3根线,程序如下:
#include "msp.h"
#include "driverlib/driverlib.h"
static uint8_t TXData = 0;
static volatile uint8_t RXData = 0;
static volatile uint8_t transmitData = 0x87, receiveData = 0x00;
const eUSCI_SPI_MasterConfig spiMasterConfig =
{
EUSCI_A_SPI_CLOCKSOURCE_SMCLK, // SMCLK Clock Source
3000000, // SMCLK = DCO = 3MHZ
3000000, // SPICLK = 500khz
EUSCI_A_SPI_MSB_FIRST, // MSB First
EUSCI_A_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT,
EUSCI_A_SPI_CLOCKPOLARITY_INACTIVITY_HIGH,
EUSCI_SPI_3PIN
};
const eUSCI_SPI_SlaveConfig spiSlaveConfig =
{
EUSCI_B_SPI_MSB_FIRST, // MSB First
EUSCI_B_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT, // Phase
EUSCI_B_SPI_CLOCKPOLARITY_INACTIVITY_HIGH, // Normal Polarity
EUSCI_SPI_3PIN
};
void main(void)
{
uint8_t aa=0,aaa=0;
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
//主机设置
GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P2,
GPIO_PIN0 | GPIO_PIN1 | GPIO_PIN2 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);
//从机设置
GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P6,
GPIO_PIN2 | GPIO_PIN3 | GPIO_PIN4 | GPIO_PIN5, GPIO_PRIMARY_MODULE_FUNCTION);
SPI_initMaster(EUSCI_A1_BASE, &spiMasterConfig);
SPI_initSlave(EUSCI_B1_BASE, &spiSlaveConfig);
SPI_enableModule(EUSCI_A1_BASE);
SPI_enableModule(EUSCI_B1_BASE);

SPI_enableInterrupt(EUSCI_B1_BASE, EUSCI_B_SPI_RECEIVE_INTERRUPT);
Interrupt_enableInterrupt(INT_EUSCIB1);
Interrupt_enableMaster();
TXData = 0x53;
while (!(SPI_getInterruptStatus(EUSCI_A1_BASE,EUSCI_A_SPI_TRANSMIT_INTERRUPT)));
SPI_transmitData(EUSCI_A1_BASE, TXData++);
while (!(SPI_getInterruptStatus(EUSCI_A1_BASE,EUSCI_A_SPI_RECEIVE_INTERRUPT)));
aa=SPI_receiveData(EUSCI_A1_BASE);
while (!(SPI_getInterruptStatus(EUSCI_A1_BASE,EUSCI_A_SPI_TRANSMIT_INTERRUPT)));
SPI_transmitData(EUSCI_A1_BASE, TXData);
while (!(SPI_getInterruptStatus(EUSCI_A1_BASE,EUSCI_A_SPI_RECEIVE_INTERRUPT)));
aaa=SPI_receiveData(EUSCI_A1_BASE);
while(1);
}
void EUSCIB1_IRQHandler(void)
{
uint32_t status;
status = SPI_getEnabledInterruptStatus(EUSCI_B1_BASE);
SPI_clearInterruptFlag(EUSCI_B1_BASE, status);
if(status & EUSCI_B_SPI_RECEIVE_INTERRUPT)
{
/* USCI_B1 TX buffer ready? */
while (!(SPI_getInterruptStatus(EUSCI_B1_BASE, EUSCI_B_SPI_TRANSMIT_INTERRUPT)));
/* Transmit data to master */
SPI_transmitData(EUSCI_B1_BASE, transmitData++);
//Receive data from master
receiveData = SPI_receiveData(EUSCI_B1_BASE);
}
}
中间绿色那段是我测试的收发段,我的意图是主机发送一个字节,然后从机收到,进入从机接收中断;然后从机再给主机发送一个字节,主机收到。然后再循环一次。但是问题出现在第一次从中断返回的时候,进从机中断的时候可以收到主机发来的数据,但是在中断里由从机给主机发数据的时候,从机TXbuffer显示有发送,但是主机RXbuffer没有数据,然后aa赋值就为0(图1)。但是第二次进中断的时候,主机接收有了从机第一次发送的值(图2)(这个是延时吗?但是我等一好久,主机接收始终没有收到从机发送的第二个值,第二次的值应该是0x88)。


这我就不太明白了,明明我也加了接收寄存器判断的啊。不太懂,不知道有没有高人指点下,谢谢!

相关帖子

沙发
dirtwillfly| | 2017-6-13 08:22 | 只看该作者
这是主机的程序?建议先用串口助手调试一下再和从机调试。
觉得你的程序有些问题,就是你说绿色的部分。用手机上网,还没仔细看

使用特权

评论回复
板凳
ccczzzyyy|  楼主 | 2017-6-13 09:50 | 只看该作者
dirtwillfly 发表于 2017-6-13 08:22
这是主机的程序?建议先用串口助手调试一下再和从机调试。
觉得你的程序有些问题,就是你说绿色的部分。用 ...

串口助手?串口是异步的,请问这个同步的该怎么测啊?
我再看看程序

使用特权

评论回复
地板
dirtwillfly| | 2017-6-13 14:23 | 只看该作者
ccczzzyyy 发表于 2017-6-13 09:50
串口助手?串口是异步的,请问这个同步的该怎么测啊?
我再看看程序

有spi转uart模块,就能用串口助手观察了

使用特权

评论回复
5
dirtwillfly| | 2017-6-13 14:23 | 只看该作者
或者用逻辑分析仪观察也行的,看看哪里和预想的不同

使用特权

评论回复
6
ccczzzyyy|  楼主 | 2017-6-13 14:45 | 只看该作者
dirtwillfly 发表于 2017-6-13 14:23
有spi转uart模块,就能用串口助手观察了

我刚才看了看spi收发中断标志寄存器,发现点问题,发了个新帖,我觉得是我在这个贴里描述的问题的原因,您可以看看,中断寄存器有点问题。

使用特权

评论回复
7
firstblood| | 2017-6-13 22:30 | 只看该作者
看着代码设计的还是蛮复杂的

使用特权

评论回复
8
firstblood| | 2017-6-13 22:31 | 只看该作者
需要好好消化一下的,

使用特权

评论回复
9
ccczzzyyy|  楼主 | 2017-6-14 09:03 | 只看该作者
firstblood 发表于 2017-6-13 22:31
需要好好消化一下的,

不复杂。。就是很简单的想试试SPI的功能,后来知道哪有问题了。
http://www.deyisupport.com/quest ... h=Search-CN-Support这个帖子里有说

使用特权

评论回复
10
aspoke| | 2017-6-14 22:11 | 只看该作者
楼主的单步调试吗?

使用特权

评论回复
11
232321122| | 2017-6-14 22:11 | 只看该作者
以前都是使用的模拟SPI。

使用特权

评论回复
12
ghuca| | 2017-6-14 22:12 | 只看该作者
使用中断接收还没有使用过。

使用特权

评论回复
13
soodesyt| | 2017-6-14 22:12 | 只看该作者
数据有缓存吗?

使用特权

评论回复
14
mnynt121| | 2017-6-14 22:13 | 只看该作者
SPI的通信信号发送了吗?

使用特权

评论回复
15
plsbackup| | 2017-6-14 22:13 | 只看该作者
官网的程序是在哪下载的

使用特权

评论回复
16
kmzuaz| | 2017-6-14 22:13 | 只看该作者
数据保存了,应该是没有读取。

使用特权

评论回复
17
qiufengsd| | 2017-6-14 22:14 | 只看该作者
楼主的判断标志位正确?

使用特权

评论回复
18
wengh2016| | 2017-6-14 22:15 | 只看该作者
status & EUSCI_B_SPI_RECEIVE_INTERRUPT  这个什么进入中断

使用特权

评论回复
19
aspoke| | 2017-6-14 22:16 | 只看该作者
这个通信数据不是正确的吗?

使用特权

评论回复
20
232321122| | 2017-6-14 22:16 | 只看该作者
模拟的SPI数据通信简单一些。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

87

帖子

0

粉丝