大家好!
我尝试使 MSP430FR5994开发板的 LED 闪烁一段时间、该时间必须通过使用 MSP430FR5994的 RTC 进行设置。 我已经编写了一些 IF 条件。 但我只获得 RTC 输出、但 LED 不闪烁。 我在 RTC 中断服务例程上写入了相同的 IF 条件、但输出仍然没有变化。 有人能告诉我我哪里失踪了吗? 我将共享下面的代码。
#include <msp430.h> #include <stdio.h> #include <string.h> #include <stdint.h> #include <stdlib.h> #include <rtc.h> unsigned char addr[30]=""; void pin_setup() { P1DIR |= 0x03; __delay_cycles(8000000); P1OUT &=~0X01; PM5CTL0=LOCKLPM5; } void clk_setp() { CSCTL0_H = CSKEY_H; CSCTL1 = DCOFSEL_6; //8MHz |DCOFSEL_0 -1MHz CSCTL2 = SELA__VLOCLK | SELS__DCOCLK | SELM__DCOCLK; // Set SMCLK = MCLK = DCO CSCTL3 = DIVA_1|DIVS__1|DIVM__1; CSCTL0_H = 0; } void RTC_clk_setup() { /* P1DIR |= BIT0; P1OUT &= ~BIT0;// Set P1.0 as output*/ PJSEL0 = BIT4 | BIT5; // Initialize LFXT pins // Disable the GPIO power-on default high-impedance mode to activate // previously configured port settings PM5CTL0 &= ~LOCKLPM5; // Configure LFXT 32kHz crystal CSCTL0_H = CSKEY_H; // Unlock CS registers CSCTL4 &= ~LFXTOFF; // Enable LFXT do { CSCTL5 &= ~LFXTOFFG; // Clear LFXT fault flag SFRIFG1 &= ~OFIFG; } while (SFRIFG1 & OFIFG); // Test oscillator fault flag CSCTL0_H = 0; // Lock CS registers*/ } void uart_config() { P2SEL0 &= ~(BIT0 | BIT1); P2SEL1 |= (BIT0 | BIT1); PM5CTL0 &= ~LOCKLPM5; UCA0CTLW0=UCSWRST; UCA0CTLW0 |=UCSSEL__SMCLK; UCA0BRW = 52; UCA0MCTLW |= UCOS16 | UCBRF_1 | 0x49; UCA0CTLW0 &= ~UCSWRST; // Initialize eUSCI UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt } void print(unsigned char *str) { strcpy(Data, str); size = strlen(Data); Tx_index=0; UCA0IE |= UCTXIE | UCTXCPTIE; UCA0TXBUF=Data[Tx_index]; Tx_index++; __bis_SR_register(LPM0_bits|GIE); } void RTC_init() { RTC_clk_setup(); RTCCTL0_H = RTCKEY_H; // Unlock RTC RTCCTL0_L = RTCTEVIE_L | RTCRDYIE_L; // enable RTC read ready interrupt // enable RTC time event interrupt RTCCTL13 = RTCBCD | RTCHOLD | RTCMODE; // RTC enable, BCD mode, RTC hold RTCYEAR = 0x2022; // Year = 0x2022 RTCMON = 0x11; // Month = 0x10 = nov RTCDAY = 0x02; // Day = 0x26 = 26th RTCDOW = 0x03; // Day of week = 0x04 = thurs RTCHOUR = 0x11; // Hour = 0x23 RTCMIN = 0x44; // Minute = 0x00 RTCSEC = 0x00; // Seconds = 0x00 RTCCTL13 &= ~(RTCHOLD); // Start RTC __bis_SR_register(GIE); // Enter LPM3 mode w/ interrupts enabled __no_operation(); return 0; } int main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop Watchdog Timer clk_setp(); uart_config(); RTC_init(); pin_setup(); while(1) { if((hours==11)&&(mins==45)) { P1OUT |= 0x01; __delay_cycles((8000000)*60); P1OUT &= ~0x01; } else if((hours==11)&&(mins==47)) { P1OUT |= 0x02; __delay_cycles((8000000)*60); P1OUT &= ~0x02; } else { sprintf(addr, "TIME = %x:%x:%x DATE=%x-%x-%x\r\n", hours,mins,secs,day,month,year); print(addr); __delay_cycles(8000000); } }