※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)にプロジェクトをインポートしたときの警告で判明したため、改造時に何時間もはまるということは避けられた。