Merhaba arkadaşlar , bu yazımızda RTC de alarm modunu inceleyeceğiz.
RTC ‘de istediğimiz anlara interrupt oluşturup o anlarda istediğimiz kodları çalıştırabiliriz.

Buna ek olarak bu işlemi gayet kolay bir şekilde ve kod kalabalığı olmadan yapabilirz.

Kısa olarak RTC alarm diagramını gösterecek olursak.

Mikroişlemcimizin saati ile kurduğumuz alarmın değerleri birbirine eşit olduğunda interruptın çalıştığını diagrama bakarak bir kez daha doğruluyoruz.


Bu işlemlerden sonra MASKSS diye bir kavramla karşılaşıyoruz. Bu seçmek istediğimiz aralık boyutunu belirleyen bir tanımdır.
MASKSS mod seçerek oluşturabiliriz. Modları datasheet’ten bakacak olursak :

Ben bu uygulamada mikroişlemci uyku moduna girdikten sonra belirli aralıklarla mikroişlemciyi uyandırmak için kullandım. RTC alarm’ın timer’lardan farklı olarak en büyük özelliği mikroişlemcinin en az güç tükettiği uyku modundan çıkarma işlemini yapabilmesidir.

RTC alarm kodlarını yazacak olursak :
[codesyntax lang=”php”]

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_BackupAccessCmd(ENABLE);

/* StandBy flag'ımız set edilme kontrolünü yapıyoruz */
if (PWR_GetFlagStatus(PWR_FLAG_SB) != RESET)
{

/* Flag'ımızı temizliyoruz */
PWR_ClearFlag(PWR_FLAG_SB);

/* Flag'ımızı temizlediğimizden emin oluyoruz */
if (PWR_GetFlagStatus(PWR_FLAG_SB) != RESET)
{
while(1);
}
/* Genel RTC alarm ayarlarımızı yapıyoruz */
RTC_WaitForSynchro();
RTC_Init(&RTC_InitStructure);

/* Alarm için genel ayarları yapıyoruz.
Alarm formatı , saat , dakika , saniye */
RTC_AlarmStructure.RTC_AlarmTime.RTC_H12 = RTC_H12_AM;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours = AlarmSaat;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes = AlarmDakika;
RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds = AlarmSaniye;

/* Alarm genel ayarları */
RTC_AlarmStructure.RTC_AlarmDateWeekDay = 0x31;
RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date;
RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_DateWeekDay;
RTC_SetAlarm(RTC_Format_BCD, RTC_Alarm_A, &RTC_AlarmStructure);

/* RTC Alarm interrupt'ını oluşturuyoruz */
RTC_ITConfig(RTC_IT_ALRA, ENABLE);

/* Alarm'ı açıyoruz */
RTC_AlarmCmd(RTC_Alarm_A, ENABLE);
}
/* Uyanma flag'ını açıyoruz */
PWR_ClearFlag(PWR_FLAG_WU);
RTC_ClearFlag(RTC_FLAG_ALRAF);

[/codesyntax]

Bir sonraki yazımızda görüşmek dileğiyle arkadaşlar.

______
Gökhan TARIM