工具/软件:Code Composer Studio
您好!
我将开始为 MSP430FR5949开发一个相当简单的代码。 我首先创建一些函数库、然后创建主文件。 在从其他项目导入一些基本配置(我仍然不太清楚)之后、我调用一些函数来配置 RTC 电流时间、i2c 引脚等 东西是:MSP 在调用这些函数中的任何一个时停止。 我在调用任何函数时以及在每个函数的第一行上都放置了断点、并意识到 MSP 似乎调用了该函数、但不执行函数的第一行、而是转到某个 esse。 当我暂停执行时、大部分时间它在 ZI_FUNCTION 上、停留在循环中的最后一行。 我无法理解为什么它无法正确调用任何函数。
代码:
#include #include #include #include "serial.h" #include "serialalelo.h" #include "i2c.h" #include "controlador.h" volatile uint16_t CONT_TIMEOUT_Rx; volatile uint16_t IND_rx0、IND_rx1、CONT_rx0、CONT_rx1; volatile uint8_t UART = 1; volatile uint8_t rx0_buffer[TMN_buffer_rx0]、rx1_buffer[TMN_buffer_rx1]; // RTC uint8_t CURRENT_TIME[6]={0、0、0、0、0、0、0}; // I2C 变量 volatile uint16_t i_controlpragma (#t_set =.TI.noinit" ) volatile uintnatile uint16_t rure_time_time_controlpragma (#t_set =#t.controluintnature_time_time_time_time_time_time_controlpragma = 0);// void #pragma SET_DATA_SECTION () #pragma vector = TIMER0_A0_VECTOR _中断 void Timer_A (void) { if (counter_plan) counter_plan -; if (i2c_timeout) i2c_timeout-; } // 计时器 B0 #pragma vector = TIMER0_B0_MODE_SIMPLE_TRIPE _(void ) TI_TRIP_0_TRIPE = TI_TRIPE = TIVECT_U0 (void)~~UCCTRIP_0_0_TRIPE = TI_0_TRIPE = TIVECU0_0_TRIPE +(void) //清除中断 rx0_buffer[ind_rx0]=UCA0RXBUF; ind_rx0++; if (ind_buffer_rx0) ind_rx0; cont_timeout_rx=0; // limpa cont_time_rx } // UART 1 #pragma vector = tid_rx1 ~; // rtc1 = rn_unif_rx1 = n_r1;// rtc1 = rn_r1 = n_r= r1 inu1 = u1;// rtc1 = r1 r1 inu_r= r1 r1 r1 = u1 = u_r1 = u1 r1 r1 = u1 = u1;// rtc1 = u1 r1 r1 r1 = u1 in1 r1 r1 r1 r1 r1 r1 r1 r= u1 = u1 = u1 = u1 = u1 inu1 = u1 = u1 = u1;// r1 r //停止 RTC 日历 RTCYEAR = CURRENT_TIME[2]; //年 RTCMON = CURRENT_TIME[1]; //月 RTCDAY = CURRENT_TIME[0]; //天 //RTCDOW = 0x01; //周中某天= 0x01 =星期一 RTCHOUR = CURRENT_TIME[3]; //小时 RTCCOW = 0x01;// 当前 时间= RTCCW[RTCC0]/分钟~;//当前时间= RTCCTLCHRN = 4秒;//当前时间= RTCCW[RTCCTE] //开始 RTC 日历模式 } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void get_time (void) { while (!(RTCCTL01和 RTCRDY)); current_time[2]= RTCYEAR; //年 Current_time[1]= RTCMON; //月 Current_time[0]= RTCDAY; //天 // RTCDOW = 0x01; //周中的一天= RTCMOUR = 0x4[MINUAR] =当前时间 ;//当前时间= RTCDOW[RTC0]/分钟= RTCDOW]= 0x4小时;//当前时间= RTCDOW[RTC000_TIME]= RTC000[RTC000_TIME]= RTCDOW/分钟 //秒 } int main (void) { WDTCTL = WDTPW + WDTHOLD;//停止 WDT PM5CTL0 &=~LOCKLPM5; // FRAM Configuração //FRCTL0_H = 0xA5; //解锁 FRAM 寄存器 //FRCTL0_L = NWAITS0; // FCLK = 0xCSCL0 ;//解锁 FCL0 = 0xCTR0;// FCL0 = 0xCTRL0 = 0xC0;// FCL0 = 0xCTRL0 = 0xCTRL0;// TCL0 = 0xCTRL0 = 0xCTRL0 //将 DCO 设置为8MHz CSCTL2 = SELA_LFXTCLK | SELM_DCOCLK | SELM_DCOCLK; // ACLK = SMCLK = DCO CSCTL3 = DIVA_1 | DIVM_1; // f (CLK )= MCLK = DCO CSCTL3 = DIVA_1;// f (CLK = DIV1/ f)寄存器;// f (CLK = MCLK = MCLK = 1)/ f (CLK = MCLK);/ f (CLK = 1) -/ * Px.7 Px.6 Px.5 Px.4 Px.3 Px.2 Px.1 Px.0 */ PJDIR = 0b00000000; P1DIR = 0b00000000; P2DIR = 0b00000000; P3DIR = 0b00000000; // TimerA 配置 TA0CC0 = 0CCTR0 ;中断= 0CCTR0;/中断= 0CCTRCTRC500;中断= 0CCTRCCTR0 = 0CCTRCTR0;中断= 0CCTRCAP // Timer A 计数直到12500 (12500 = 100ms) TA0CTL = tassel_2 | MC_1 | ID_3; // SMCLK、向上计数模式、TCLK/8 TA0EX0 |= TAIDEX_7; // TCLK/8 // TimerB 配置 TB0CCTL0 = CCIE;/ TBR0 = TB0 + TBTR0;// TBR0 = TB0 = TB0 + TB0;/ TBTR0 = TB0 + TR0 ~ //引脚 P2.0 e P2.1作为 UART P2SEL1 |= BIT0 + BIT1;//引脚 P2.0 e P2.1作为 UART UCA0CTLW0 = UCSWRST; //将 eUSCI 置于复位 UCA0CTLW0 |= UCSSLW_SMCLK; // BRCLK = SMCLK UCS0CTK;// UCABR0 = UCC016 | UCABR0 = UCABR0 | UCA0BR0 = UCA9600/ UCCR0 = UCA0 | UCABR0 = UCA0BR0 ~ //初始化 eUSCI UCA0IE |= UCRXIE; //启用 USCI_A1 RX 中断 //--- // UART1配置 P2SEL0 &=~(BIT5 + BIT6);//引脚 P2.5 e P2.6作为 UART 引脚 P2SEL1 |= BIT5 + BIT6;//UCS2.5 eUCSST_ UCT0 = UCSLW1 复位 // BRCLK = SMCLK UCA1BR0 = 52; // int (BRCLK/16/9600) UCA1BR1 = 0x00; UCA1MCTLW |= UCOS16 | UCBRF_1; UCA1CTLW0 &=~ ~ UCSWRST;//初始化 eUSCI UCA1IE |= UCBRF_1;= UCA1CTJPJUSCI_4 + UCCTR1;//使能 寄存器 UCCTR1 + BJPJTR1;// UCCTR1 = UCI_4 + UCCTR1 + UCI_4 + UCCTR1;// BTR1 = UCI_4 + BTR1 // Habilit性 interrupção GLOBAL_TIME[0] = 17; CURRENT_TIME[1]= 1; CURRENT_TIME[2]= 16; CURRENT_TIME[3]= 19; CURRENT_TIME[4]= 55; CURRENT_TIME[5]= 00; SET_TIME (); //它通常在此处停止执行 i2c_init (); serialparalelo_init ();
代码打开...