在线情况
楼主
  • 头像
  • 级别
    • 积分3
    • 经验44
    • 文章2
    • 注册2014-07-28
    F5529同时配置UCA1和UCB1出错
    [P]楼主自己画的板子,是通过F5529控制前端模拟器件采集 并通过uart传数据到电脑上
     与前端通信是用UCB1的SPI模式,前段时间调通了,并在示波器上看到了正确的数据流

     后来写的UCA1配置UART的程序,单独程序调试时候可以将数据传输至电脑上,串口助手也可以看到正确的数据

     但之后将俩段代码整合在一起时候,发现程序出错,SPI输出一直是低电平,所以串口助手看到全部是00 不知道有没有大神知道是怎么回事?
     贴上代码[/P][P][CODE]//--------------------SPI setup------------------------------------------------  
        P4SEL |= BIT1+BIT2+BIT3;                       // P4.1-3 option select 3-PIN SPI
        P4DIR |= BIT1;                                 // SIMO output
        P4DIR &= ~BIT2;                                // SOMI input
        P4DIR |= BIT3;                                 // CLK output
       
        P4OUT |= BIT0;                                 //P4.0输出高电平 /CS disabled
        P4DIR |= BIT0;                                 //P4.0 for CS
       
        UCB1CTL1 |= UCSWRST;                      // **Put state machine in reset**
        UCB1CTL0 |= UCSYNC+UCMST+UCMSB+UCCKPL;                 //  SPI master  
        UCB1CTL0 &= ~UC7BIT;                      //  8-bit
        UCB1CTL0 &= ~UCCKPH;
        UCB1CTL1 |= UCSSEL_2;                     // SMCLK=1.048M
        UCB1BR0 = 0;                              // 不分频
        UCB1BR1 = 0;                              //
       
        UCB1CTL1 &= ~UCSWRST;
        UCB1IE  = 0;
    [/CODE][/P][P]
    [/P][P][CODE]    UCSCTL4 |= SELA__REFOCLK;      // ACLK = REFOCLK
    //---------------------UART发送到PC机--------------------------------------
        P4SEL = BIT4+BIT5;                        // P4.4,5 = USCI_A1 TXD/RXD
       
        UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**
        UCA1CTL1 |= UCSSEL_1;                     // CLK = ACLK
        UCA1BR0 = 0x03;                           // 32kHz/9600=3.41 (see User's Guide)
        UCA1BR1 = 0x00;                           //
        UCA1MCTL = UCBRS_3+UCBRF_0;               // Modulation UCBRSx=3, UCBRFx=0
    //    UCA1CTL1 |= UCSSEL_2;                     // SMCLK
    //    UCA1BR0 = 6;                              // 1MHz 9600 (see User's Guide)
    //    UCA1BR1 = 0;                              // 1MHz 9600
    //    UCA1MCTL = UCBRS_0 + UCBRF_13 + UCOS16;   // Modln UCBRSx=0, UCBRFx=0,
       
        UCA1CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
    //    UCA1IE |= UCRXIE;                         // Enable USCI_A0 RX interrupt
     
    //--------------------------------------------------------------------------
    [/CODE][/P][P]
    [/P][P]开始以为是都用到SMCLK出错 于是将UART配置成ACLK并将REFO付给ACLK……
    但是依旧出错……有没有大神遇到过这种情况?
     应该IO口都没有复用啊  是中断问题?还是别的?[/P]
    微控网感谢您的参与
    在线情况
    2
    • 头像
    • 级别
    • 门派
    • 职务总版主
    • 声望+9
    • 财富5
    • 积分3065
    • 经验390701
    • 文章6744
    • 注册2006-03-07
    你好,看你发贴还是比较认真对待的,赞一个[EM10]。
    [CODE]P4SEL = BIT4+BIT5;                        // P4.4,5 = USCI_A1 TXD/RXD [/CODE]
    改成这样试试...
    [CODE]P4SEL |= BIT4+BIT5;                        // P4.4,5 = USCI_A1 TXD/RXD [/CODE]
    有结果跟大家分享.
    [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
    在线情况
    3
    • 头像
    • 级别
      • 积分3
      • 经验44
      • 文章2
      • 注册2014-07-28
      首先非常感谢版主大大的回答,一直在微控网下载资料,学到了不少知识。
      这个,先得抽自己一巴掌,居然调了一天多没看出这个问题来,太不细心了。
      下午看到大大的回答,就修改调试了一下,修改后第一次编译调试,SPI的时序就没有问题了,当时代码把UART传输数据的代码block掉了,之后加入那部分代码后第二次调试SPI的时序就又乱了。
      直到现在还没结果……我先再调调……然后再回复= =+
      Powered by LeadBBS 9.2 .
      Page created in 0.1719 seconds with 5 queries.