lanshine 发表于 2011-11-1 18:11:33

MSP430硬件SPI速度达不到声称的4M,有图有真相,求验证求解释

UART spi模式下,spi时钟设置成4M时,主程序给txbuf一个字节时,spi接口却会连续重复发送两次该字节!

附测试程序,及SCK和SIMO波形图,求解释。



器件:MSP430F1611

IAR: 5.10



测试程序:

#include <msp430x16x.h>

void InitUART(void)

{

   //时钟设置

   BCSCTL1 &=~XT2OFF;//开启8M时钟

   BCSCTL2 += SELM_2;    //设置MCLK为8M时钟输入

   P3SEL |= BIT1 + BIT2 + BIT3;//0x3E;          // P3.1,2,3,4,5 = USART0 SIMO, SOMI,UCLK

   P3DIR |= BIT1 + BIT3 + BIT0;//0x1B;          //

   P3DIR &= ~BIT2;//

   P3OUT |= BIT0;   //

   P5DIR |= BIT4;

   P5OUT |= BIT4;

   UCTL0 |= SWRST;

   ME1 |= USPIE0;                           // Enable USART0 T/RXD   

   IE1 |= URXIE0; // enable interrupts

   IE1 |= UTXIE0;

   UCTL0 |= CHAR+SYNC+MM;                      // 8-bit character, SPI mode, Master

   UTCTL0 |= SSEL1+STC+CKPL;                        // UCLK = SMCLK,3pin SPI mode

   BCSCTL2 |= SELS + DIVS_0;                  //SMCLK = MCLK/1

   UBR00 = 0x02;//0x20;                           // 8M/2=4M

   UBR10 = 0x00;                           //

   UCTL0 &= ~SWRST;                        // Initialize USART state machine   

}

main( void )

{

// Stop watchdog timer to prevent time out reset

WDTCTL = WDTPW + WDTHOLD;

InitUART();

while(1)

{

   while (!(IFG1 & UTXIFG0));            //判断发送缓存是否为空

   TXBUF0 = 0x01;

   while (!(IFG1 & UTXIFG0));            //判断发送缓存是否为空

   TXBUF0 = 0x0F;

}

}

主程序: spi轮流输出0x01,0x0F.



实测IO:
http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_690764ZEXA54.jpg
黄色信号为SCK,蓝色信号为SIMO。可以看到,从左到右SIMO依次传输数据为:0x0F,0x0F,0x01,0x01 (原文件名:20111031484.jpg)

http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_690765FZTOOJ.jpg
水平时基1us下的视图: (原文件名:20111031485.jpg)

lanshine 发表于 2011-11-2 18:48:51

回复【楼主位】lanshine
-----------------------------------------------------------------------
已解决!

vavcmabtk 发表于 2012-2-29 08:14:36

马上就要做这个了 参考下
页: [1]
查看完整版本: MSP430硬件SPI速度达不到声称的4M,有图有真相,求验证求解释