大家好!
我尝试使 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);
}
}

