- #include "msp432p401r.h"
- #include "oled.h"
- void main(void)
- {
-
- WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
- //Terminate all remaining pins on the device
- P1DIR|=0XFF;P1OUT=0;
- P2DIR|=0XFF;P2OUT=0;
- P3DIR|=0XFF;P2OUT=0;
- P4DIR|=0XFF;P2OUT=0;
- P5DIR|=0XFF;P2OUT=0;
- P6DIR|=0XFF;P2OUT=0;
- P7DIR|=0XFF;P2OUT=0;
- P8DIR|=0XFF;P2OUT=0;
- P9DIR|=0XFF;P2OUT=0;
- P10DIR|=0XFF;P2OUT=0;
- // Configure Port J
- PJDIR|=(BIT2+BIT3);PJOUT&=~(BIT2+BIT3);
- PJSEL0|=BIT0+BIT1;//引脚设置为LFXT
- CSKEY=CSKEY_VAL;//解锁CS寄存器操作
- CSCTL2|=LFXT_EN;//打开LFXT
- do
- {
- CSCLRIFG|=CLR_DCORIFG |CLR_HFXTIFG|CLR_LFXTIFG|CLR_FCNTLFIFG;//清除中断标志位
- SYSCTL_NMI_CTLSTAT&=~SYSCTL_NMI_CTLSTAT_CS_SRC;//使能CS中断作为NMI
- }while((SYSCTL_NMI_CTLSTAT|SYSCTL_NMI_CTLSTAT_CS_FLG)&&(CSIFG&LFXTIFG));
- CSCTL1&=~(SELA_M)|SELA_0;//选择ACLK为LFXTCLK
- CSKEY=0;//锁定CS模块
- c=CS_getBCLK();
- //配置RTC
- RTCCTL0=RTCKEY;//解锁RTC+实时时钟时间事件中断启用
- RTCCTL13=RTCHOLD+RTCMODE+RTCBCD+RTCTEV_0+ RTCRDYIE;//停止日历模式以便设置+日历模式+BCD模式+实时时钟事件(分钟)+ 使能读取中断
- //时钟初始化
- RTCYEAR=0X2016;
- RTCDATE=(0X4<<MONTH_OFS)|(0x05|DAY_OFS);//month=4+day=5
- RTCTIM1=(0X01<<DAYOFWEEK_OFS)|(0X10<<HOURS_OFS);//DAY OF WEEK=1 + HOUR=10
- RTCTIM0=(0X32<<MINUTES_OFS)|(0X45<<SECONDS_OFS);//minute=0x32 + second=0x45
- RTCCTL13&=~RTCHOLD;//开启RTC
- RTCCTL0&=~RTCKEY;//关闭RTC
- //初始化oled
- OLED_Init();
- OLED_ShowNum(60,4,10,2,16);
- __enable_irq();
- NVIC_ISER0 =1<<((RTC_C_IRQn)&31);//RTC中断
- SCB_SCR|=SCB_SCR_SLEEPONEXIT;//从中断回来时睡眠
- while(1)
- {
- __wfi();
- }
- }
- void RTC_C_IRQHandler(void)
- {
- if(RTCCTL0&RTCRDYIFG)
- {
- a=RTCSEC;
- OLED_ShowNum(60,4,RTCSEC,2,16);
- }
- }
复制代码
问题:这段代码根本无法进入中断,由于第一次使用中断,还不太会用,实在不知道哪出错了。试验过官方提供代码,但是还是感觉布恩那个正常运行。这个问题比较急,希望看见这个问题的各位大佬都能帮忙解决一下小弟的问题。谢谢了
一周热门 更多>