RTC_SetWakeUpCounter(1023);
void RTC_SetWakeUpCounter(uint16_t RTC_WakeupCounter)
{
/* Disable the write protection for RTC registers */
RTC->WPR = 0xCA;
RTC->WPR = 0x53;
/* Configure the Wakeup Timer counter */
RTC->WUTRH = (uint8_t)(RTC_WakeupCounter >> 8);
RTC->WUTRL = (uint8_t)(RTC_WakeupCounter);
/* Enable the write protection for RTC registers */
RTC->WPR = 0xFF;
}
RTC->WPR = 0xCA;
RTC->WPR = 0x53;
이게 왜 이러는지 모르겠습니다 . 데이터시트에 보면 읽기보호에 RTC레지스터 쓰기 금지처리 한다고 나와있는것 같은데 왜 금지인가요??
그리고 마지막에 RTC->WPR = 0xFF; 인데 0xFF 인건지 왜 해주는건지 모르겠습니다 .
그리고 이게 wakeupcounter인데 카운터 하고 인터럽트 오버플로우 되면 인터럽트 되는건가요? 계산은 어떻게 하는건가요?
데이터시트를 잘 봐도 이해가 안갑니다. 물론 영어 실력이 딸려 이해가 더더욱 안될수도 있고요
혹시 아시는분 있으시면 답변 부탁드립니다,
감사합니다.
RTC의 Part Number를 모르니 정확한 답변을 하기가 곤란하군요.
비밀인지 모르지만 최소한의 정보는 제공해야 하지 않을까요.
일단 샘플코드를 보고 유추해보면
WPR은 아마도 Write Protect Register를 말하는 것 같군요.
잘못된 코드나 폭주로 인해 RTC의 Register의 값이 바뀌는 걸 방지하기 위하여 이런 메커니즘을 많이 사용하지요.
즉 원하는 Register의 값을 바꾸기 위해서는 일단 Write가 가능하도록 해야겠지요.(보통 default로 Write protect가 되어있고)
그래서 정해진 시퀀스에 따라 0xCA와 0x53을 순서대로 WPR에 써넣으면 보호된 Register의 값을 바꿀 수 있게 됩니다.
바꾸고 나면 다시 보호되도록 해야겠지요. 그래서 마지막에 0xff를 써넣는 것입니다. 물론 다른 값으로 써넣어도 되는지는 알 수 없지만...