void main(void) { //unsigned long ulTmp = 0; /********************** Configure System clock *************************/ SysCtlClockSet(100000000, SYSCTL_OSC_INT | SYSCTL_XTAL_12_MHZ); SysCtlDelay(TICK_SLOW); // Configure LED(PC3) pin SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); xGPIOSPinTypeGPIOOutput(PC3); // Turn off LED GPIOPinClr(GPIOC_BASE, GPIO_PIN_3); // Disable NVIC RTC interrupt xIntDisable(xINT_RTC); RTCDisable(); RTCIntCallbackInit(RTCHandler); // Enable RTC second increment interrupt. // Enable RTC minute interrupt. RTCIntCfg( INT_SEC_EN | INT_MIN_DIS | INT_HOUR_DIS | INT_DOM_DIS | INT_DOW_DIS | INT_DOY_DIS | INT_MON_DIS | INT_YEAR_DIS | INT_ALARM_SEC_DIS | INT_ALARM_MIN_EN | INT_ALARM_HOUR_DIS | INT_ALARM_DOM_DIS | INT_ALARM_DOW_DIS | INT_ALARM_DOY_DIS | INT_ALARM_MON_DIS | INT_ALARM_YEAR_DIS ); RTCTimeSet(RTC_TIMETYPE_SECOND, 0); RTCTimeSet(RTC_TIMETYPE_MINUTE, 0); RTCTimeSet(RTC_TIMETYPE_HOUR, 0); RTCTimeSet(RTC_TIMETYPE_DAYOFWEEK, 0); RTCTimeSet(RTC_TIMETYPE_DAYOFMONTH, 0); RTCTimeSet(RTC_TIMETYPE_DAYOFYEAR, 0); RTCTimeSet(RTC_TIMETYPE_MONTH, 0); RTCTimeSet(RTC_TIMETYPE_YEAR, 0); RTCAlarmSet(RTC_TIMETYPE_SECOND, 0); RTCAlarmSet(RTC_TIMETYPE_MINUTE, 1); RTCAlarmSet(RTC_TIMETYPE_HOUR, 0); RTCAlarmSet(RTC_TIMETYPE_DAYOFWEEK, 0); RTCAlarmSet(RTC_TIMETYPE_DAYOFMONTH, 0); RTCAlarmSet(RTC_TIMETYPE_DAYOFYEAR, 0); RTCAlarmSet(RTC_TIMETYPE_MONTH, 0); RTCAlarmSet(RTC_TIMETYPE_YEAR, 0); RTCEnable(); RTCCounterReset(); xIntEnable(xINT_RTC); while (1) { ; // DoNothing } }
/* ** RTC configuration function */ static void RTCSetupAndEnable(void) { /* Performing the System Clock configuration for RTC. */ RTCModuleClkConfig(); /* Disabling Write Protection for RTC registers.*/ RTCWriteProtectDisable(RTC_INST_BASE); /* Selecting Internal Clock source for RTC. */ RTC32KClkSourceSelect(RTC_INST_BASE, RTC_INTERNAL_CLK_SRC_SELECT); /* Enabling RTC to receive the Clock inputs. */ RTC32KClkClockControl(RTC_INST_BASE, RTC_32KCLK_ENABLE); /* Enable the RTC module. */ RTCEnable(RTC_INST_BASE); /* Dummy: Programming calendar information in the Calendar registers. */ RTCCalendarSet(RTC_INST_BASE, RTC_CAL_VAL_DUMMY); /* Dummy: Programming the time information in the Time registers. */ RTCTimeSet(RTC_INST_BASE, RTC_TIME_VAL_DUMMY); /* Set the 32KHz counter to run. */ RTCRun(RTC_INST_BASE); /* Enabling RTC interrupts. Configuring RTC to interrupt every second.*/ RTCIntTimerEnable(RTC_INST_BASE, RTC_INT_EVERY_SECOND); /* Enabling the system interrupt in AINTC for RTC. */ IntSystemEnable(RTC_INT_NUM); }
/* ** RTC configuration function */ static void RTCSetupAndEnable(void) { /* Performing the System Clock configuration for RTC. */ RTCModuleClkConfig(); /* Disabling Write Protection for RTC registers.*/ RTCWriteProtectDisable(SOC_RTC_0_REGS); /* Selecting Internal Clock source for RTC. */ RTC32KClkSourceSelect(SOC_RTC_0_REGS, RTC_INTERNAL_CLK_SRC_SELECT); /* Enabling RTC to receive the Clock inputs. */ RTC32KClkClockControl(SOC_RTC_0_REGS, RTC_32KCLK_ENABLE); /* Enable the RTC module. */ RTCEnable(SOC_RTC_0_REGS); /* Dummy: Programming calendar information in the Calendar registers. */ RTCCalendarSet(SOC_RTC_0_REGS, 0x29111000 | RTC_DOTW_MON); /* Dummy: Programming the time information in the Time registers. */ RTCTimeSet(SOC_RTC_0_REGS, (0x08473100 | RTC_ANTE_MERIDIEM)); /* Set the 32KHz counter to run. */ RTCRun(SOC_RTC_0_REGS); /* Enabling RTC interrupts. Configuring RTC to interrupt every second.*/ RTCIntTimerEnable(SOC_RTC_0_REGS, RTC_INT_EVERY_SECOND); /* Enabling the system interrupt in AINTC for RTC. */ IntSystemEnable(SYS_INT_RTCINT); }
unsigned long RTCHandler(void *pvCBData, unsigned long ulEvent, unsigned long ulMsgParam, void *pvMsgData) { // RTC increment interrupt if(RTCIntFlagCheck(RTC_INT_INC)) { //Clear second increment interrupt RTCIntFlagClear(RTC_INT_INC); ToggleLed(); } // RTC alarm match interrupt if(RTCIntFlagCheck(RTC_INT_ALARM)) { //Clear alarm interrupt then reset counter. RTCIntFlagClear(RTC_INT_ALARM); RTCCounterReset(); RTCTimeSet(RTC_TIMETYPE_SECOND, 0); RTCTimeSet(RTC_TIMETYPE_MINUTE, 0); RTCTimeSet(RTC_TIMETYPE_HOUR, 0); RTCTimeSet(RTC_TIMETYPE_DAYOFWEEK, 0); RTCTimeSet(RTC_TIMETYPE_DAYOFMONTH, 0); RTCTimeSet(RTC_TIMETYPE_DAYOFYEAR, 0); RTCTimeSet(RTC_TIMETYPE_MONTH, 0); RTCTimeSet(RTC_TIMETYPE_YEAR, 0); RTCAlarmSet(RTC_TIMETYPE_SECOND, 0); RTCAlarmSet(RTC_TIMETYPE_MINUTE, 1); RTCAlarmSet(RTC_TIMETYPE_HOUR, 0); RTCAlarmSet(RTC_TIMETYPE_DAYOFWEEK, 0); RTCAlarmSet(RTC_TIMETYPE_DAYOFMONTH, 0); RTCAlarmSet(RTC_TIMETYPE_DAYOFYEAR, 0); RTCAlarmSet(RTC_TIMETYPE_MONTH, 0); RTCAlarmSet(RTC_TIMETYPE_YEAR, 0); // Fast blink LED SysCtlDelay(TICK_SLOW); ToggleLed(); SysCtlDelay(TICK_SLOW); ToggleLed(); SysCtlDelay(TICK_SLOW); ToggleLed(); SysCtlDelay(TICK_SLOW); ToggleLed(); SysCtlDelay(TICK_SLOW); ToggleLed(); } return (0); }
/* ** Sets the Time and Calender in the RTC. This is a blocking call. ** The time and date are entered through UART. */ void RtcTimeCalSet(void) { unsigned int time = 0; unsigned int cal = 0; unsigned int temp = 0; UARTPuts("\n\rEnter Hours (0 to 23):", -1); temp = UARTGetNum(); while(temp > 23) { UARTPuts("\n\rValue entered is invalid. Enter value:", -1); temp = UARTGetNum(); } time = (((temp / 10) << 4) << SHIFT_HOUR) | ((temp % 10) << SHIFT_HOUR); UARTPuts("\n\rEnter Minutes (0 to 59):", -1); temp = UARTGetNum(); while(temp > 59) { UARTPuts("\n\rValue entered is invalid. Enter value:", -1); temp = UARTGetNum(); } time |= (((temp / 10) << 4) << SHIFT_MIN) | ((temp % 10) << SHIFT_MIN); UARTPuts("\n\rEnter Seconds (0 to 59):", -1); temp = UARTGetNum(); while(temp > 59) { UARTPuts("\n\rValue entered is invalid. Enter value:", -1); temp = UARTGetNum(); } time |= (((temp / 10) << 4) << SHIFT_SEC) | ((temp % 10) << SHIFT_SEC); UARTPuts("\n\rEnter Date (1 to 31):", -1); temp = UARTGetNum(); while((temp > 31) || (0 == temp)) { UARTPuts("\n\rValue entered is invalid. Enter value:", -1); temp = UARTGetNum(); } cal = (((temp / 10) << 4) << SHIFT_DAY) | ((temp % 10) << SHIFT_DAY); UARTPuts("\n\rEnter Month (1 to 12):", -1); temp = UARTGetNum(); while((temp > 12) || (0 == temp)) { UARTPuts("\n\rValue entered is invalid. Enter value:", -1); temp = UARTGetNum(); } cal |= (((temp / 10) << 4) << SHIFT_MON) | ((temp % 10) << SHIFT_MON); UARTPuts("\n\rEnter Year (0 to 99):", -1); temp = UARTGetNum(); while(temp > 99) { UARTPuts("\n\rValue entered is invalid. Enter value:", -1); temp = UARTGetNum(); } cal |= (((temp / 10) << 4) << SHIFT_YEAR) | ((temp % 10) << SHIFT_YEAR); UARTPuts("\n\rEnter Day Of the week (0 for Sunday...6 for Saturday):", -1); temp = UARTGetNum(); while(temp > 6) { UARTPuts("\n\rValue entered is invalid. Enter value:", -1); temp = UARTGetNum(); } cal |= (((temp / 10) << 4)) | ((temp % 10)); /* Set the calendar registers of RTC with received calendar information.*/ RTCCalendarSet(SOC_RTC_0_REGS, cal); /* Set the time registers of RTC with the received time information.*/ RTCTimeSet(SOC_RTC_0_REGS, time); /* Run the RTC. The seconds tick from now on.*/ RTCRun(SOC_RTC_0_REGS); UARTPuts("\n\rThe Time and Date are set successfully! \n\n\r", -1); rtcSetFlag = TRUE; }