Question

Je dois écrire un programme pour mettre en œuvre l'horloge en temps réel pour l'architecture ARM. exemple: LPC213x

Il devrait afficher Heure Minute et secondes. Je ne sais pas à propos de ARM afin d'avoir du mal à commencer.

Mon code ne fonctionne pas ci-dessous

// ...

int main (void) {
    int hour=0;
    int min=0;
    int sec;
    init_serial(); /* Init UART */
    Initialize();
    CCR=0x11;
    PCONP=0x1815BE; 
    ILR=0x1;         //  Clearing Interrupt

    //printf("\nTime is %02d:%02x:%02d",hour,min,sec);

    while (1) { /* Loop forever */
    }
}

void Initialize()
{
VPBDIV=0x0;
//CCR=0x2; 
//ILR=0x3; 
HOUR=0x0;
SEC=0x0;
MIN=0x0;


ILR = 0x03; 
CCR = (1<<4) | (1<<0); 

VICVectAddr13 = (unsigned)read_rtc; 
VICVectCntl13 |= 0x20 | VIC_RTC; 
VICIntEnable |= (1 << VIC_RTC);

}
/* Interrupt Service Routine*/
__irq void read_rtc() 
{
int hour=0;
int min=0;
int sec;
ILR=0x1;         //  Clearing Interrupt
hour=(CTIME0 & MASKHR)>>16;
min= (CTIME0 & MASKMIN)>>8;
sec=CTIME0 & MASKSEC;

printf("\nTime is %02d:%02x:%02d",hour,min,sec);

//VICVectAddr=0xff;
VICVectAddr = 0;
}
Était-ce utile?

La solution

est pour le LPC2468. Nous avons une fonction setTime aussi, mais je ne veux pas faire tout le travail pour vous. ;) Nous avons enregistrer des fichiers personnalisés pour faciliter l'accès, mais si vous regardez le manuel du PLC, il est évident où ils corrèlent. Il suffit de changer les valeurs dans le bon endroit, et faire des opérations au niveau du bit. Par exemple:

#define RTC_HOUR       (*(volatile RTC_HOUR_t *)(RTC_BASE_ADDR + (uint32_t)0x28))

Temps struture:

typedef struct {
  uint8_t  seconds;        /* Second value - [0,59] */
  uint8_t  minutes;        /* Minute value - [0,59] */
  uint8_t  hour;           /* Hour value - [0,23] */
  uint8_t  mDay;           /* Day of the month value - [1,31] */
  uint8_t  month;          /* Month value - [1,12] */
  uint16_t year;           /* Year value - [0,4095] */
  uint8_t  wDay;           /* Day of week value - [0,6] */
  uint16_t yDay;           /* Day of year value - [1,365] */
} rtcTime_t;

Fonctions RTC:

void rtc_ClockStart(void) {
  /* Enable CLOCK into RTC */
  scb_ClockStart(M_RTC);
  RTC_CCR.B.CLKSRC = 1;
  RTC_CCR.B.CLKEN  = 1;
  return;
}

void rtc_ClockStop(void) {
  RTC_CCR.B.CLKEN = 0;
  /* Disable CLOCK into RTC */
  scb_ClockStop(M_RTC);
  return;
}

void rtc_GetTime(rtcTime_t *p_localTime) {
  /* Set RTC timer value */
  p_localTime->seconds = RTC_SEC.R;
  p_localTime->minutes = RTC_MIN.R;
  p_localTime->hour    = RTC_HOUR.R;
  p_localTime->mDay    = RTC_DOM.R;
  p_localTime->wDay    = RTC_DOW.R;
  p_localTime->yDay    = RTC_DOY.R;
  p_localTime->month   = RTC_MONTH.R;
  p_localTime->year    = RTC_YEAR.R;
}

fonctions de bloc de contrôle du système:

void scb_ClockStart(module_t module) {
  PCONP.R |= (uint32_t)1 << module;
}

void scb_ClockStop(module_t module) {
  PCONP.R &= ~((uint32_t)1 << module);
}

Autres conseils

Selon cette description du conseil de la LPC213x, il est livré avec un exemple de programme appelé « horloge temps réel - illustre comment l'horloge temps réel peut être utilisé ». Cela implique également que le conseil d'administration dispose du matériel d'horloge en temps réel, ce qui va rendre beaucoup plus facile.

Je vous suggère de lire sur ce programme, pour savoir comment parler au matériel RTC. L'étape suivante serait de résoudre les besoins d'affichage. Les deux choix évidents sont soit LED 7 segments affiche , ou un LCD.

sont deux technologies bien connues dont les charges ont été écrites, suivez les liens Wikipédia pour en savoir plus.

Si vous avez besoin d'informations sur ARM alors ce Guide ARM système développeur: Conception et optimisation du logiciel système peut vous aider.

Nous avions l'habitude de faire quelque chose comme ça pour ARM.

    #include "LPC21xx.h"
    void rtc()
    {
         *IODIR1 = 0x00FF0000;
             // Set LED ports to output
         *IOSET1 = 0x00020000;
         *PREINT = 0x000001C8;
            // Set RTC prescaler for 12.000Mhz Xtal
         *PREFRAC = 0x000061C0;
         *CCR = 0x01;
        *SEC = 0;
        *MIN = 0;
        *HOUR= 0;
    }

Une horloge en temps réel (RTC) est une horloge d'ordinateur (le plus souvent sous la forme d'un circuit intégré) qui garde la trace de l'heure actuelle. Bien que le terme se réfère souvent aux appareils dans les ordinateurs personnels, les serveurs et les systèmes embarqués, CRFP sont présents dans presque tous les appareils électroniques qui doit garder le temps précis.

Vous pouvez consulter ce lien deux, je suis sûr que cela vous donnera une meilleure compréhension: -

1). ARM Cortex Programmation à l'aide CMSIS: - http://www.firmcodes.com/cmsis/

2). RTC Programmation avec ARM7: - http: // www. firmcodes.com/microcontrollers/arm/real-time-clock-of-arm7-lpc2148/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top