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

msp430F5529 在进行iic通讯时会进死循环 abort();

msp430F5529 在与DAC8571进行i2c通讯时会进死循环  abort();

需要重启单片机或者同时对dac8571重新上电才能恢复正常工作状态。

需要加看门狗吗,还是其他方法?

能提供好的解决方案吗?谢谢。

 

以下是我的程序部分:

#include <msp430.h>

const unsigned char Sine_Tab[] =            // 16 Point 16-bit Sine Table

  0xFF,                                     // MSB Word 0 

  0xFF,                                     // LSB  

 0xF6,                                     // MSB Word 1 

  0x40,                                     // LSB  

 0xDA,                                     // MSB Word 2 

  0x81,                                     // LSB  

……………………….//中间的是正弦波参数表

 0xF6,                                     // MSB Word 15 

  0x40                                      // LSB

 };

int main(void)

{  

 WDTCTL = WDTPW + WDTHOLD;                                              // Stop Watchdog Timer

  P4SEL |= BIT1 + BIT2;                                                                   // Assign I2C pins to USCI_B0  

 P4DS|= BIT1 + BIT2;   UCB1CTL1 |= UCSWRST;                      // Enable SW reset  

 UCB1CTL0 = UCMST + UCMODE_3 + UCSYNC;                    // I2C Master, synchronous mode

 UCB1CTL1 = UCSSEL_2 + UCSWRST;                                   // Use SMCLK, keep SW reset  

 UCB1BR0 = 12;                                                                          // fSCL = SMCLK/12 = ~100kHz  

 UCB1BR1 = 0;

 UCB1I2CSA = 0x4c;                                   // Set slave address  

 UCB1CTL1 &= ~UCSWRST;                     // Clear SW reset, resume operation  

UCB1IE |= UCTXIE;                                       // Enable TX ready interrupt  

 UCB1CTL1 |= UCTR + UCTXSTT;               // I2C TX, start condition

  UCB1TXBUF = 0x010;                                    // Write DAC control byte  

__bis_SR_register(GIE);                               // Enter LPM0 w/ interrupts

 }

 

//中断

// USCI_B0 Data ISR

 #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)

#pragma vector = USCI_B1_VECTOR

 __interrupt void USCI_B1_ISR(void)

 #elif defined(__GNUC__)

void __attribute__ ((interrupt(USCI_B1_VECTOR))) USCI_B1_ISR (void)

 #else

 #error Compiler not supported!

#endif

 {

   static unsigned char ByteCtr;  

   UCB1TXBUF = Sine_Tab[ByteCtr++];          // Transmit data byte  

   ByteCtr &= 0x1f;  

}

keda lv:

下面这个函数就是在main函数执行完后就进入的程序,中断也没进。

 

文件为 BOOT.C

/*****************************************************************************/

 /* C_INT00_NOEXIT() – Specialized version of _c_int00 that directly calls    */

 /*                    abort and skips cleanup in exit.                       */

/*****************************************************************************/

 #pragma CLINK(_c_int00_noexit)

 extern void __interrupt _c_int00_noexit()

 {    STACK_INIT();  

  INIT_LOCKS();  

  if(_system_pre_init() != 0) _auto_init();  

  main(0);   

 abort();

 }

 

 

文件为 exit.C

/****************************************************************************/

/* ABORT – ABNORMAL PROGRAM TERMINATION.  CURRENTLY JUST HALTS EXECUTION.   */

/****************************************************************************/

 void abort(void) {   

 /*——————————————————————-*/   

 /* SET C$$EXIT LABEL SO THE DEBUGGER KNOWS WHEN THE C++ PROGRAM HAS  */

   /* COMPLETED.  THIS CAN BE REMOVED IF THE DEBUGGER IS NOT USED.      */  

  /*——————————————————————-*/

    __asm("        .global C$$EXIT");

    __asm("C$$EXIT: nop");

   for (;;);   /* SPINS FOREVER */ //这里就一直在死循环了

}

赞(0)
未经允许不得转载:TI中文支持网 » msp430F5529 在进行iic通讯时会进死循环 abort();
分享到: 更多 (0)