This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请帮提供蓝牙(从属设备)中断处理程序

Other Parts Discussed in Thread: MSP430F5229

大家好:

    我们购买了BT-MSPAUDSOURCE Tools Bluetooth and MSP430 Audio开发板(MSP430F5229),希望提供中断处理程序(最好主设备,从属设备各一套);最好完整一些(宏定义,初始化,执行完整部分)  

      谢谢!

 

  • 有些不太理解您的意思。能否详细描述一下

    您现在是说的哪部分的中断处理程序?

    之前已经在相关帖子内回复了

    e2echina.ti.com/.../179331
  • SuSan,  您好:

         按照“蓝牙传输”的理论, 我们希望蓝牙主设备采用“广播方式”发出数据包;蓝牙从设备接收到数据,产生中断,解析数据包内容,进行相应处理!

         我们使用的MSP430F5229芯片(开发板是:BT-MSPAUDSOURCE Tools Bluetooth and MSP430 Audio开发板),我们希望以它为基础的

    蓝牙(从属设备)中断处理程序

  • 大家好:

       您看如下的MSP430的蓝牙接收中断处理程序,改装时注意几项?

       

    #pragma vector = USCIAB0RX_VECTOR //接收中断
    __interrupt void USCI0RX_ISR(void)//中断程序,串口通讯的规则设计
    {
        while ( !(IFG2&UCA0TXIFG) ); //确保发送缓冲区准备好
        a=UCA0RXBUF;

        if (a=='1')
       {
            b++;
            flag=1;
        
            P1OUT^=BIT0;

         }
       
        UCA0TXBUF=UCA0RXBUF;
        IFG2 &=~ UCA0TXIFG;
        //接收指示灯状态改变
     }

  • MSP430 的 UART 例程您可以参考

    /* --COPYRIGHT--,BSD_EX
     * Copyright (c) 2012, Texas Instruments Incorporated
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     * *  Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *
     * *  Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * *  Neither the name of Texas Instruments Incorporated nor the names of
     *    its contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     *
     *******************************************************************************
     * 
     *                       MSP430 CODE EXAMPLE DISCLAIMER
     *
     * MSP430 code examples are self-contained low-level programs that typically
     * demonstrate a single peripheral function or device feature in a highly
     * concise manner. For this the code may rely on the device's power-on default
     * register values and settings such as the clock configuration and care must
     * be taken when combining code from several examples to avoid potential side
     * effects. Also see www.ti.com/grace for a GUI- and www.ti.com/msp430ware
     * for an API functional library-approach to peripheral configuration.
     *
     * --/COPYRIGHT--*/
    //******************************************************************************
    //   MSP430F552x Demo - USCI_A0, Ultra-Low Pwr UART 2400 Echo ISR, 32kHz ACLK
    //
    //   Description: Echo a received character, RX ISR used. Normal mode is LPM3,
    //   USCI_A0 RX interrupt triggers TX Echo.
    //   ACLK = REFO = ~32768Hz, MCLK = SMCLK = DCO ~1.045MHz
    //   Baud rate divider with 32768Hz XTAL @2400 -- from User's Guide
    //   See User Guide for baud rate divider table
    //
    //                 MSP430F552x
    //             -----------------
    //         /|\|                 |
    //          | |                 |
    //          --|RST              |
    //            |                 |
    //            |     P3.3/UCA0TXD|------------>
    //            |                 | 2400 - 8N1
    //            |     P3.4/UCA0RXD|<------------
    //
    //   Bhargavi Nisarga
    //   Texas Instruments Inc.
    //   April 2009
    //   Built with CCSv4 and IAR Embedded Workbench Version: 4.21
    //******************************************************************************
    
    #include <msp430.h>
    
    int main(void)
    {
      WDTCTL = WDTPW | WDTHOLD;                 // Stop WDT
      
      P3SEL = BIT3+BIT4;                        // P3.4,5 = USCI_A0 TXD/RXD
      
      UCA0CTL1 |= UCSWRST;                      // **Put state machine in reset**
      UCA0CTL1 |= UCSSEL_1;                     // CLK = ACLK
      UCA0BR0 = 0x0D;                           // 2400 (see User's Guide)
      UCA0BR1 = 0x00;                           //
      UCA0MCTL |= UCBRS_6+UCBRF_0;              // Modulation UCBRSx=6, UCBRFx=0
      UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
      UCA0IE |= UCRXIE;                         // Enable USCI_A1 RX interrupt
     
      __bis_SR_register(LPM3_bits + GIE);       // Enter LPM3, interrupts enabled
      __no_operation();                         // For debugger
    }
    
    // Echo back RXed character, confirm TX buffer is ready first
    #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
    #pragma vector=USCI_A0_VECTOR
    __interrupt void USCI_A0_ISR(void)
    #elif defined(__GNUC__)
    void __attribute__ ((interrupt(USCI_A0_VECTOR))) USCI_A0_ISR (void)
    #else
    #error Compiler not supported!
    #endif
    {
      switch(__even_in_range(UCA0IV,4))
      {
      case 0:break;                             // Vector 0 - no interrupt
      case 2:                                   // Vector 2 - RXIFG
        while (!(UCA0IFG&UCTXIFG));             // USCI_A1 TX buffer ready?
        UCA0TXBUF = UCA0RXBUF;                  // TX -> RXed character
        break;
      case 4:break;                             // Vector 4 - TXIFG
      default: break;
      }  
    }
    

  • 谢谢! 我将仔细研读
  • 大家好:

         经过“理论“确认,USCI_A0_VECTOR(HCI_RX_1V8_CC---->MSP430F5229的37管脚:P3.3/UCA0TXD)正是我们蓝牙的主接收端口!

         但我们将这个中断处理程序写入后, (

              请参考:

             

    // Echo back RXed character, confirm TX buffer is ready first
    #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
    #pragma vector=USCI_A0_VECTOR
    __interrupt void USCI_A0_ISR(void)
    #elif defined(__GNUC__)
    void __attribute__ ((interrupt(USCI_A0_VECTOR))) USCI_A0_ISR (void)
    #else
    #error Compiler not supported!
    #endif
    {
      switch(__even_in_range(UCA0IV,4))
      {
      case 0:break;                             // Vector 0 - no interrupt
      case 2:                                   // Vector 2 - RXIFG
        while (!(UCA0IFG&UCTXIFG));             // USCI_A1 TX buffer ready?
        UCA0TXBUF = UCA0RXBUF;                  // TX -> RXed character
        break;
      case 4:break;                             // Vector 4 - TXIFG
      default: break;
      
    }

     

    程序下载后就跑飞了, 不能跳转到main()入口处!

    如何破解?

  • 单从这段代码看,是没有问题的。方便的话建议提供完整代码或工程。

  • 谢谢! 请帮参考!

    奇怪的是: 如果没有加上那段(#pragma vector=USCI_A0_VECTOR......)中断处理程序,一切正常!

    但......A3DPDemo_SNK.zip

  • 大家好:
    在这个应用中,我们希望解决如下问题:
    1). 用“GAP_LE_Perform_Scan(”获得当前范围内的“蓝牙设备”,用中断处理程序"USCI_A0_ISR"来获得它们的“设备名称”
    2). 指定自己为“主设备”, 其它特定的设备为“从设备”
    3). “主设备”广播发送数据,同步“从设备”

    请问我们的实现策略合理吗?
  • 1 您可以使用GetRemoteName 来获取设备的名称

    /* The following function is responsible for querying the Bluetooth */
    /* Device Name of the specified remote Bluetooth Device. This */
    /* function returns zero on successful execution and a negative value*/
    /* on all errors.

    2 您可以使用HCI_Role_Discovery来查看当前的role

    static Boolean_t LocalDeviceIsMaster; /* Boolean that tells if the local */
    /* device is the master of the */
    /* current connection. */

    3 您是想通过广播来同步?

    另外建议您若是遇到新问题请重新发帖,以便于回复与查看,谢谢
  • dirtwillfly, 您好:

        我认同您关于工程设置的假设,它的报错信息:

         “Verify error at address 0xfff0 on target 0x92 in file 0x84

          Verify error at address 0xfff0, Value should be 0x84 but is 0x92.

          Failed to load debugee: F:\ti\.....\Exe\A3DPDemo_SNK.d43”