※RTCのマクロに"RTC_"プレフィックスをつけることで修正されたようです。(20150422確認)
FatFsのサンプル・プロジェクト(Jan 15, 2014)のlpc176xにマクロ定義の重複があったのでまとめておく。
以下はLPC176x.h、LPC178x.hで共通。
/* RTC */ ~ #define CCR (*(volatile uint32_t*)0x40024008) ~ /* Cortex-M3 SCB */ ~ #define CCR (*(volatile uint32_t*)0xE000ED14)
実際のサンプルでは時間設定時にCCRでRTCの停止・タイムスタンプのリセット・再起動を実行しているようだが、幸か不幸かCCRの値に関わらず時間設定はできてしまっているようである。
(以下、rtc176x.cから)
int rtc_settime (const RTC *rtc)
{
CCR = 0x12; /* Stop RTC */
/* Update RTC registers */
SEC = rtc->sec;
MIN = rtc->min;
HOUR = rtc->hour;
DOW = rtc->wday;
DOM = rtc->mday;
MONTH = rtc->month;
YEAR = rtc->year;
RTC_AUX = _BV(4); /* Clear power fail flag */
CCR = 0x11; /* Restart RTC, Disable calibration feature */
if (RTC_AUX & _BV(4)) {
return 0;
}
return 1;
}
Cortex-M3 SCBのマクロ名は他のプロジェクトでも共通なようなので、RTC側を変更すべきだろうか。
ちなみにIDE(LPCXpresso)にプロジェクトをインポートしたときの警告で判明したため、改造時に何時間もはまるということは避けられた。