Domanda

ho bisogno di scrivere un programma per implementare orologio in tempo reale per l'architettura ARM. Esempio: LPC213X

Si dovrebbe visualizzare Minute ore e secondi. Non ho idea su ARM in modo da avere difficoltà a iniziare.

Il mio codice qui sotto non funziona

// ...

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;
}
È stato utile?

Soluzione

Questo è tutto per il LPC2468. Abbiamo una funzione di setTime troppo, ma non voglio fare tutto il lavoro per voi. ;) Abbiamo personalizzato registrare i file per la facilità di accesso, ma se si guarda al manuale di LPC, è ovvio dove si correlano. Non vi resta che spostare i valori nel posto giusto, e fare operazioni bit per bit. Ad esempio:

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

Ora 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;

funzioni 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;
}

funzioni di blocco di controllo del sistema:

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

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

Altri suggerimenti

questa descrizione bordo per il LPC213X , viene fornita con un esempio di programma denominato "real-time Clock - dimostra come l'orologio in tempo reale può essere utilizzato". Ciò implica anche che la scheda è dotata di hardware di orologio in tempo reale, che sta per rendere molto più facile.

Vi suggerisco di leggere su quel programma, per capire come parlare con l'hardware RTC. Il passo successivo sarebbe quello di risolvere i requisiti di visualizzazione. Le due scelte ovvie sono o LED a 7 segmenti display , o un LCD .

Entrambe sono tecnologie ben note su cui sono state scritte carichi, segui i link di Wikipedia per saperne di più.

Se avete bisogno di informazioni su ARM allora questo Guida del sistema ARM dello sviluppatore: Software progettazione e l'ottimizzazione del sistema può aiutare.

Abbiamo usato per fare qualche cosa di simile per 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;
    }

Un orologio in tempo reale (RTC) è un orologio del computer (il più delle volte sotto forma di un circuito integrato) che tiene traccia del tempo corrente. Anche se il termine si riferisce spesso ai dispositivi di personal computer, server e sistemi embedded, RTC sono presenti in quasi qualsiasi dispositivo elettronico che ha bisogno di mantenere l'ora esatta.

Si può deferire due collegamento, sono sicuro che vi darà una maggiore comprensione: -

1). ARM Cortex Programmazione con CMSIS: - http://www.firmcodes.com/cmsis/

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top