打印

msp430关于spi接收数据错误的问题

[复制链接]
6386|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
robbins37|  楼主 | 2012-9-14 17:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求助:430单片机与TMS320VC5510的SPI通信方案

设置TMS320为主机,430为从机
TMS320能正确发射spi波形

而430接收到的数据老是出错,会出现数据内部移位情况,比如一直发送数据0x51(01010001),而接收到的为0xA8(10101000),就是右移了移位,有时候还会不止移动移位,不知道是什么原因,请求大家帮助!

下面是我430的spi的初始化代码
void Init_spi_slave(void)
{
UCTL1 |= SWRST;
UCTL1 = CHAR+SYNC;//char=1,8bit,sync=1,spi mode,mm=0,slave
UTCTL1 = CKPH+CKPL;//stc,3pin;ckph=1,uclk is delay,CKPL=1,上升沿跳变
UBR01 = 0x00; //
UBR11 = 0x00;
UMCTL1 = 0;
ME2 = USPIE1;
UCTL1 &= ~SWRST;
P5SEL =0x0F;
P5DIR = 0xF4 ;
IE2 |=URXIE1;
}
另外还有一个问题,
以下是我的接收中断函数
#pragma vector = UART1RX_VECTOR
__interrupt void UART1RX()//UART1中断函数
{
Data=RXBUF1;
show_flag=1;
}
当发射数据发射的太快的情况下,会使得URXIFG1一直为1,就一直处于中断函数中,解决这个问题的方法是,我在发射数据的程序中加入一定的时延后,才可以使得中断正常跳出,想问,会不会是因为我的中断函数没有写正确的原因呢?
请教大家

相关帖子

沙发
dwananqinyan| | 2012-9-14 17:59 | 只看该作者
1、SPI接口问题 有个条件要确认下,你接收是用的SPI接收中断做的吧?SPI接收中断,只要CLK接到8个clk就会中断一次,所以你得看看SCLK发送的过程中有没有多的跳变

使用特权

评论回复
板凳
happy啦啦啦| | 2012-9-14 19:59 | 只看该作者
是不是产生其他中断影响接收了

使用特权

评论回复
地板
hawksabre| | 2012-9-15 20:21 | 只看该作者
spi为同步通信   所以你必须保证他们波特率相同   且时钟频率相同   如果要可靠通信   建议降低波特率

使用特权

评论回复
5
teabottle| | 2012-9-17 18:58 | 只看该作者
两个器件的波特率不一定要相同的,因为spi就是设计给不同速度的器件之间通信用的

使用特权

评论回复
6
jinpaidianzi| | 2012-9-17 19:31 | 只看该作者
貌似没有spi的时钟子程序

使用特权

评论回复
7
acer4736| | 2012-9-17 19:47 | 只看该作者
CLK同步在哪里

使用特权

评论回复
8
wjzx111056| | 2012-9-17 20:03 | 只看该作者
关于SPI的总结:
SPI是Serial Peripheral Interface,即串行外设接口。本质上是一个硬件,也就是一个芯片。这个芯片的作用和串口的作用差不多。不同的是,这个芯片使用起来需要满足:
        1.由MCU提供数据传输的时钟
        2.单片机(主设备)和从设备都要有这样一个硬件,收和发
这样看来,我们可以将这个芯片当成一个移位寄存器(输入一个8位的数据,然后一个一个的输出。)来看待,首先要给这个芯片一个时钟CLK,当一个并行数据输入时,这个移位寄存器就开始工作,即一个一个的将这个并行数据输出,完成并行转串行的功能。当然,现在我们只是把并行数据输出,还没有说明输出到哪里。现在我们在加上一个移位寄存器,刚才的输出就输入这个移位寄存器里面。我们首先把同样的CLK给这个移位寄存器,那么这两个移位寄存器就可以同步工作了,即工作在同一个CLK下。而后一个移位寄存器的输出的串行数据就可以转换为并行的数据,放在从设备相应的空间中。
所以,一般来说,使用一个这样的SPI,如果只是发送数据,就需要3根线即可,即CLK,MOSI,CS,其中,CLK是共同的时钟,由MCU提供。MOSI是Master Output Subordinate In,即主输出从输入。CS是片选信号,即选中从设备,这里我们可以将CS理解为从设备SPI芯片的使能信号,即当CS被设置时,才可以进行SPI数据传输。
上面只是发送数据的情况。如果MCU还要从从设备中接受数据,就要加上另一根数据线MISO,即Master In Subordinate Output。这样就变成全双工通信。

使用特权

评论回复
9
dayu1111| | 2012-9-20 17:24 | 只看该作者
看高手分析

使用特权

评论回复
10
51xlf| | 2012-9-20 23:49 | 只看该作者
使用模拟口 试一试

使用特权

评论回复
11
laoxianccc| | 2015-8-7 15:08 | 只看该作者
楼主你好,请问你这个问题解决了么,我现在用AX8052f151的spi和stm32f407的通讯也存在这个问题,希望楼主能告知一下

使用特权

评论回复
12
laoxianccc| | 2015-8-7 15:09 | 只看该作者

clk同步是怎么实现的?

使用特权

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

本版积分规则

10

主题

160

帖子

2

粉丝