/* ********************************************************************** * File Hello_it.C - Rel. 1.1 con uC/51 V. 1.20.4 * * GRIFO(R) via Dell'Artigiano 8/6 40016 S. Giorgio di Piano (BO) * * Hardware: GMM 932 e GMM 932.11 * * Tel. +39 051 892052 Fax. +39 051 893661 * * http://www.grifo.com http://www.grifo.it * * by Graziano Gaiba del 01.02.06 * ********************************************************************** 01/02/06: Hello_it.C - Rel 1.1 - By Graziano Gaiba Programma precaricato nei mini moduli. Effettua il lampeggiamento del LED di bordo. N.B. Per evitare problemi non eseguire operazioni complesse su una singola riga, specialmente all'interno di procedure sui relativi parametri e/o variabili locali. */ /****************** Header, costanti, strutture dati, ecc.*****************/ #include "lpc932.h" #define RCINT 7372800 // Frequenza clock da RC interno #define QZ11M 11059200 // Frequenza clock da quarzo esterno near unsigned long clk; // Clock della CPU /******************** Dichiarazione procedure e funzioni *******************/ /* Legge il byte di configurazione UCFG1 in FLASH grazie alle procedure IAP del Boot Rom del P89LPC932. Restituisce byte letto nel nome funzione, senza controllare gli eventuali errori. */ unsigned char rd_ucfg1(void) { #asm mov A,#$03 ; Usa comando Misc. Read mov R7,#$00 ; Legge registro UCFG1 lcall $0FF00 ; Chiama procedura IAP ad indirizzo PGM_MTP #endasm } /* Effettua un ritardo software di rit millisecondi, con clock presente sul minimodulo, precedentemente determinato e salvato nella variabile globale clk. */ void ritardo(unsigned int rit) { unsigned int r,rit1ms; if (clk==RCINT) rit1ms=335; // Valore sperimentale per ritardo di 1 msec a 7 MHz else rit1ms=500; // Valore sperimentale per ritardo di 1 msec a 11 MHz //endif do { for (r=0 ; r0); } void init_cpu(void) /* Effettua inoltre le apposite inizializzazioni. */ { EA=0; // Assicura disabilitazione interrupt } /************************ Programma principale *****************************/ void main(void) { unsigned char dr; init_cpu(); // Inizializza sezioni necessarie della CPU clk=RCINT; // Setta clock per RC interno (puo` essere acquisito solo dopo) P0M1=P0M1 | 0x40; // Setta configurazione P0.6 in modo 3=Open Drain P0M2=P0M2 | 0x40; dr=rd_ucfg1(); // Preleva configurazione da FLASH dr=dr & 0x07; // Mantiene configurazione della sorgente di CLK switch (dr) { case 0x00: clk=QZ11M; // Frequenza clock da quarzo esterno break; case 0x03: clk=RCINT; // Frequenza clock da RC interno break; } for(;;) { P0_6=0; // Attiva LED ritardo(200); // Pausa di 200 millisecondi P0_6=1; // Disattiva LED ritardo(200); // Pausa di 200 millisecondi } }