spi接收数据与发送不一致

2019-03-24 11:15发布

    采用的教材上的例程,SPI的自收自发没问题,但是将两片430f6638的spi接口连接起来时,作为接收端的从机总是出现溢出的错误,接收到的数据也很乱,不知道怎么回事,同时主机的UCTXIFG总是为1,当将数据写入UCA1TXBUF时仍然为1,好多问题,希望论坛里的高手给予帮助,谢谢了!
下面是我的从机接收端的程序,程序不长,还麻烦大家帮帮忙
#include <msp430f6638.h>
unsigned int MST_Data,SLV_Data;
unsigned char temp;
void main(void)
{
    volatile unsigned int i;
        WDTCTL = WDTPW+WDTHOLD;        // Stop watchdog timer
        P8SEL = BIT1+BIT2+BIT3;      //USCI_A1的8.2为SIMO,8.3为SOMI,8.1为USCI_A1的CLK
        P8DIR = BIT3;              //SOMI端口设为输出
        P8DIR &= ~BIT2;          // SIMO端口设为输入
        P8DIR &= ~BIT1;          //CLK设为输入
         P1REN |= BIT4;                            // Enable P1.4 internal resistance
         P1OUT |= BIT4;                            // Set P1.4 as pull-Up resistance
         P1IES &= ~BIT4;                           // P1.4 Lo/Hi edge
         P1IFG &= ~BIT4;                           // P1.4 IFG cleared
         P1IE |= BIT4;                             // P1.4 interrupt enabled
         UCA1CTL1|=UCSWRST;
         UCA1CTL0|= UCSYNC+UCCKPL+UCMSB;
         UCA1CTL1&=~UCSWRST;
        __bis_SR_register(LPM0_bits+GIE);
}

#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
        switch(__even_in_range(UCA1IV,4))
            {
                case 0: break;
                case 2:
                    while (!(UCA1IFG&UCTXIFG))
                    UCA1TXBUF =  UCA1RXBUF;
                    __delay_cycles(500);
                    break;
                case 4: break;
                default: break;
            }
}

#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
  P1IFG &= ~BIT4;                           // Clear P1.4 IFG
  P1IE &= ~ BIT4;                            // Clear P1.4 IE
  UCA1CTL1 |= UCSWRST;                // Master is ready
  UCA1CTL1 &= ~UCSWRST;             // Re-init slave state machine
  UCA1IE |= UCRXIE;                        // Enable RX interrupt
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
lcofjp
1楼-- · 2019-03-24 21:51
__delay_cycles(500);
这句起什么作用??
xiaoyumao333
2楼-- · 2019-03-24 23:59
< :TI_MSP430_内容页_SA7 -->
lcofjp 发表于 2014-7-21 21:52
__delay_cycles(500);
这句起什么作用??

这是之前作为主机发送时的程序修改了,忘了注释了,应该删了
xiaoyumao333
3楼-- · 2019-03-25 00:54
 精彩回答 2  元偷偷看……
lcofjp
4楼-- · 2019-03-25 01:43
xiaoyumao333 发表于 2014-7-21 22:03
这是教材的接收程序,关于P1.4也就是最后的中断程序不理解其作用,也不知道进入中断的条件,能否帮帮 ...

不知道你能不能仿真,看看能不能进入接收中断?
你的P1.4中断是开启SPI中断用的。

xiaoyumao333
5楼-- · 2019-03-25 05:22
lcofjp 发表于 2014-7-21 22:07
不知道你能不能仿真,看看能不能进入接收中断?
你的P1.4中断是开启SPI中断用的。

将主机上的任意一个引脚比如P2.0或者P1.2之类的与从机的P1.4相连接,能进入中断,但是感觉很奇怪,在P1.4的中断第一句话加断点,然后将从机全速运行,主机单步执行,每次进入中断的语句都不一样;不连接从机的P1.4,进入不了中断,所以对最后这个中断程序进入中断的条件很迷惑,看了TI的例程,好像也有这么一个中断程序
lcofjp
6楼-- · 2019-03-25 08:47
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章