Hallo zusammen,
ben=F6tige mal die Hilfe eines ARM7-Experten (NXP 2368). Ich habe die interne Uhr des 2368 oder auch 2378 auf den entsprechenden = Keil-Evaluationboards programmiert (besitze beide Boards). Die Uhr = l=E4uft auch mit dem 32-kHz Oszillator, jedoch etwa 3-fach zu schnell = (auf beiden Boards). Der Sekunden-Interrupt wird ausgel=F6st (lt. Breakpoint in der ISR), = aber viel zu oft. 3.3 V liegen am VBAT-Eingang an.
Ich wei=DF nicht, was ich an dem bisschen Code falsch gemacht habe. Habe = ihn mal (was die Uhr betrifft) angeh=E4ngt. Hab schon alles probiert, = jedoch erfolglos.
Bin f=FCr jeden Tip dankbar!
Freundlicher Gru=DF
Roland Kuhn
#include =20 #include
void read_rtc(void) __irq; // Prototypen void initialize(void);
unsigned char s[3]; unsigned char m[3]; unsigned char h[3];
void read_rtc(void) __irq // ISR {
if (RTC_ILR & 0x00000001) // Sekundeninterrupt ausgel=F6st? { =20 sprintf(h,"%d",RTC_HOUR); // Wandlung in char wegen Displayausgabe sprintf(m,"%d",RTC_MIN); sprintf(s,"%d",RTC_SEC); .=20 .
// Aubereitung der Daten ins Format hh:mm:ss
RTC_ILR =3D0x00000001; // Interrupt zur=FCcksetzen
VICVectAddr=3D0x00000000; }=20 }
int main(void) {
PCONP =3D PCONP | BD09; // RTC einschalten
initialize();
while(1) {
// Ausgabe des Datums =FCber die LCD-Anzeige
} }void initialize(void) { =20 RTC_CCR=3D0x02; // Disable Clock and Reset Clock Tick Counter RTC_ILR=3D0x07; // Reset all Interrupts =20 RTC_HOUR=3D23; // Set Time=20 RTC_MIN=3D59; RTC_SEC=3D1;
RTC_CIIR=3D0x00000001; // pro Sec einen Interrupt ausl=F6sen RTC_CISS=3D0x07; // Sub-Sec-Interrupts disablen
RTC_CCR=3D0x11; // 32 kHz (RTC-) Oszillator verwenden, Reset=20 // aufheben und Clock enablen
VICVectAddr13=3D(unsigned) read_rtc; // Interrupt-Adresse setzen VICVectPriority13 =3D 0x0000000D; // Priority setzen =20 VICIntEnable|=3D 0x00002000; // Interrupt enablen
}