We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I was following the program. but it doesn't work.
Can you help Are You? Where I'm wrong.
/* WakeUp Interrupt Unit(WIU) -> Vectored Interrupt Controllers(VIC) -> IRQ Handler or Vectored Interrupt Controllers(VIC) -> IRQ Handler @ WIU_Line != VIC_Line. ex) VIC : WIU_ITLine - WIU : WIU_Line 0~31 VIC : EXTIT0_ITLine - WIU : WIU_Line 0~7 = USB, RTC, Port 3.[7:2] VIC : EXTIT2_ITLine - WIU : WIU_Line 16~23 = Port 6.[7:0] interrupts VIC : TIM0_ITLine - no use WIU "Device pin description" reference in Datasheet. */
/* Standard includes. */ #include <stdio.h> #include <string.h>
/* Library includes. */ #include "91x_lib.h" #include "91x_wiu.h" #include "91x_rtc.h" #include "91x_it.h"
RTC_TIME t_rtc; RTC_DATE d_rtc;
#define RTC_FREQ 0x8000 //32768 32.768khz
void RTC_Init(void) { WIU_InitTypeDef WIU_InitStructure;
/* Enable WIU clock */ SCU_APBPeriphClockConfig(__RTC, ENABLE); SCU_AHBPeriphReset(__RTC, DISABLE);
// Configure RTC RTC_DeInit(); RTC_ClearFlag(RTC_FLAG_Per); RTC_ITConfig(__RTC, ENABLE); RTC_PeriodicIntConfig(RTC_Per_128Hz); //RTC_TamperConfig(u32 TamperMode, u32 TamperPol);
// Configure RTC cmd //RTC_TamperCmd(FunctionalState NewState); //RTC_AlarmCmd(FunctionalState NewState); //RTC_CalibClockCmd(ENABLE); //RTC_SRAMBattPowerCmd(FunctionalState NewState);
/* Enable the WIU & Clear the WIU line 1 pending bit */ WIU_Cmd(ENABLE ); WIU_ClearITPendingBit(WIU_Line1);
/* Configure interrupt line */ WIU_DeInit(); WIU_StructInit(&WIU_InitStructure); WIU_InitStructure.WIU_Line = WIU_Line1 ; //WIU_Line0 : USB, WIU_Line1 : RTC WIU_Line 2~7 = port 3 . 2:7 WIU_InitStructure.WIU_TriggerEdge = WIU_RisingEdge; // WIU_FallingEdge; WIU_Init(&WIU_InitStructure);
/* Select WIU line 1 as RTC_ITLine interrupt source */ SCU_WakeUpLineConfig(1);
/* Configure the External interrupt group 0 priority as FIQ interrupt */ VIC_Config(RTC_ITLine, VIC_IRQ, 0);// WIU_ITLine, VIC_IRQ, VIC_FIQ
/* Enable the RTC interrupt */ VIC_ITCmd(RTC_ITLine, ENABLE);
//TimeInit(); //2013.01.01.00:00:00 }
void RTC_IRQHandler(void) { RTC_PeriodicIntConfig (RTC_Per_DISABLE); RTC_ClearFlag (RTC_FLAG_Per);
xPrintf("WIU ON\r\n"); if (WIU_GetITStatus(WIU_Line1)==SET) {
RTC_GetDate(BINARY, &d_rtc); RTC_GetTime(BINARY, &t_rtc);
xPrintf(" %04d %02d %02d %02d:%02d:%02d \r\n", d_rtc.century*100 + d_rtc.year, d_rtc.month, d_rtc.day, t_rtc.hours, t_rtc.minutes, t_rtc.seconds );
WIU_ClearITPendingBit(WIU_Line1); } RTC_PeriodicIntConfig (RTC_Per_128Hz); }
ps. i worked the program use task.
void vRTCTasks( unsigned portBASE_TYPE uxPriority) { RTC_Init(); xTaskCreate( vRTCtesttask, ( signed char * ) "RTC_Test", configMINIMAL_STACK_SIZE +900, NULL, uxPriority, ( xTaskHandle * ) NULL ); } /*-----------------------------------------------------------*/ static portTASK_FUNCTION( vRTCtesttask, pvParameters ) { int ncnt=0; ( void ) pvParameters;
while(1) { if(ncnt>250) { RTC_GetDate(BINARY, &d_rtc); RTC_GetTime(BINARY, &t_rtc); //Ts_a=t_rtc.seconds; // Get the date again if the current time is 00:00:00 (Midnight)
if ((t_rtc.hours == 0) && (t_rtc.minutes == 0) && (t_rtc.seconds == 0)) RTC_GetDate(BINARY, &d_rtc); //if(Ts_b!=Ts_a) //{ xPrintf(" %04d %02d %02d %02d:%02d:%02d \r\n", d_rtc.century*100 + d_rtc.year, d_rtc.month, d_rtc.day, t_rtc.hours, t_rtc.minutes, t_rtc.seconds ); //} //Ts_b=Ts_a; ncnt=0; } vTaskDelay(2); ncnt++; } }
RTCtest.c is the content of the above sources.
main is simple.
void main( void ) { #ifdef DEBUG debug(); #endif
/* Setup any hardware that has not already been configured by the low level init routines. */
xSerialPortInitMinimal( mainCOM_TASK_BAUD_RATE, comBUFFER_LEN , UART1); //UART1 use. xPrintf()
//vGPIOTasks(mainGPIO_TASK_PRIORITY); vRTCTasks(mainRTC_TASK_PRIORITY);
/* Start either the TCP/IP stack or the lwIP TCP/IP stack. */
//omission TCP/IP thread //
sys_set_default_state();
/* Start the scheduler.
NOTE : Tasks run in system mode and the scheduler runs in Supervisor mode. The processor MUST be in supervisor mode when vTaskStartScheduler is called. The demo applications included in the FreeRTOS.org download switch to supervisor mode prior to main being called. If you are not using one of these demo application projects then ensure Supervisor mode is used here. */
vTaskStartScheduler();
/* We should never get here as control is now taken by the scheduler. */ for( ;; ){ };
}