TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430F448的SPI接口配置GP21

用MSP430F448的SPI接口对GP21进行配置时,在发送和接收的过程中,可进入SPI的接收中断和发送中断,但是接收到的数据一直为0。

GP21采用四线SPI接口,Clock Phase Bit = 1,Clock Polarity Bit = 0,当F448的SPI设为四线时,不能进入发送和接收中断,改为三线后,将STE脚作为普通IO实现对GP21中SPI接口SSN的控制(发送和接收数据时将STE脚置低,发送接收完成后置高),此时可进入发送和接收中断。SPI的其他设置为:波特率为9600,ACLK做参考时钟,8位数据,UxTCTL |= CKPH;  UxTCTL &=~ CKPL;

另,将F448中SPI寄存器UxCTL |= LISTEN时,可接受到与发送相同的数。

本人是菜鸟,SPI配置程序是从网上下载的。想问一下,我是否能确定已将F448的SPI接口配置正确,能正常工作?

user3917511:

我写的 MSP430F44X单片机SPI接口驱动C语言程序。。希望对你有帮助。。

#include<msp430x44x.h>   

char MST_Data=0X00,SLV_Data=0XFF;   

void Init(void);   

void main(void)   

{    

  unsigned int i;   

  WDTCTL=WDTPW+WDTHOLD;   

  Init();   

  _EINT();   

  P3OUT&=~0X020;   

  P3OUT|=0X020;   

  i=50000;   

  do(i–);   

  while(i!=0);   

  while(1)   

  {   

    TXBUF0=MST_Data;   

    LPM0;   

  }   

}   

void Init(void)   

{   

  P1OUT=0X000;   

  P1DIR=0X001;   

  P3SEL=0X00E;   

  UCTL0=CHAR+SYNC+MM+SWRST;   

  UTCTL0=STC+SSEL1+CKPL;   

  UBR00=0X02;   

  UBR01=0X00;   

  UMCTL0=0;   

  ME1=USPIE0;   

  UCTL0&=~SWRST;   

  IE1=URXIE0;   

 }   

#pragma vector=USART0RX_VECTOR   

__interrupt void SPI0_rx(void)   

{   

  P3OUT^=0X010;   

  while ((IFG1&UTXIFG0)==0);   

  if (U0RXBUF==SLV_Data)   

  {   

    SLV_Data=SLV_Data-1;   

    MST_Data=MST_Data+1;   

    TXBUF0=MST_Data;   

    P1OUT|=0X001;   

    P1OUT&=~0X001;   

  }     

  else    

  {   

    TXBUF0=MST_Data;   

    P1OUT|=0X001;   

  }   

}   

 

Zhao Li2:

回复 user3917511:

chaosong huang1 谢谢你的回复,我还是想知道为什么我的程序中,既然能进接收中断为什么收到的全是0,是否向你的程序一样,初始化后加一个延时,还是SPI配置完成而是GP21没有工作?

赞(0)
未经允许不得转载:TI中文支持网 » MSP430F448的SPI接口配置GP21
分享到: 更多 (0)