00001 /* ################################################################### 00002 ** - lowinit.c - 00003 ** 00004 **The function __low_level_init is called by the start-up code before doing 00005 **the normal initialization of data segments. If the return value is zero, 00006 **initialization is not performed. 00007 **In the run-time library there is a dummy __low_level_init, which does 00008 **nothing but return 1. This means that the start-up routine proceeds with 00009 **initialization of data segments. 00010 ** 00011 ** _00: 00012 ** _01. Funciona correctamente al ralentizar el reloj y cambiar la 00013 ** gestion de las interrupciones 00014 ** _02. Refinamiento, a ver si funciona 00015 ** _03. Se reinicia en los cambios de alimentación, así que se elimina 00016 ** la inicialización de la hora en ese transitorio 00017 ** _04. Cambio en la definicion de dia y mes, junto con la funcion 00018 ** CalculaDiaSemana, para soluccionar el fallo de cambio de día. 00019 ** ###################################################################*/ 00020 #include <msp430x12x2.h> 00021 #include "rtc_display_def.h" 00022 00023 /* 00024 ** ################################################################### 00025 ** DEFINICION DE TIPOS 00026 ** ###################################################################*/ 00027 #ifndef _MIS_TIPOS 00028 #define _MIS_TIPOS 00029 typedef unsigned char BOOL; 00030 typedef unsigned char BYTE; 00031 //typedef signed char CHAR; 00032 typedef unsigned int WORD; 00033 typedef signed int INT; 00034 typedef unsigned long DWORD; 00035 typedef signed long LONG; 00036 #endif //_MIS_TIPOS 00037 00038 /* Insert your low-level initializations here */ 00039 // *********************************** 00040 // Inicialización del hardware 00041 // *********************************** 00042 //int __InicializaRecursos(void) { 00043 int __low_level_init(void) { 00044 //int i; 00045 00046 // *****Relojes ***************** 00047 WDTCTL = WDTPW + WDTHOLD; // Stop Watchdog Timer 00048 //BCSCTL1 = RSEL2 + RSEL1 + RSEL0; // DCO= 3Mhz; 00049 BCSCTL1 = RSEL_NOM; // DCO= 3Mhz; 00050 // BCSCTL1 |= XTS; // ACLK = LFXT1 = HF XTAL 00051 BCSCTL1 |= XT2OFF; 00052 DCOCTL = DCO1 + DCO0; 00053 _BIC_SR(OSCOFF); 00054 _BIC_SR(SCG1); // ACLK = LFXT1 = 32Khz (low frecuency) 00055 BCSCTL2 = 0x00; // MCLK = SMCLK = DCO 00056 BCSCTL1 &= ~XTS; // ACLK = LFXT1 = LF XTAL 32Khz 00057 00058 // *****Puertos IO*************** 00059 P1DIR = 0x00; // Entradas 00060 P1SEL = 0x00; 00061 P1OUT = 0x00; 00062 00063 P2DIR = 0x04; // Entradas y salida de datos 00064 P2SEL = 0x00; 00065 P2OUT = 0x00; 00066 00067 P3DIR = 0x70; // Depuracion 00068 //P3DIR = 0x00; // Entradas 00069 P3OUT = 0x00; 00070 P3SEL = 0x00; 00071 00072 // *****Watchdog Timer ********** 00073 WDTCTL = WDT_ADLY_1_9; //Watchdog = ACLK/2^6 = 1.953 mseg 00074 IE1 |= WDTIE; 00075 00076 /*==================================*/ 00077 /* Choose if segment initialization */ 00078 /* should be done or not. */ 00079 /* Return: 0 to omit seg_init */ 00080 /* 1 to run seg_init */ 00081 /*==================================*/ 00082 return (0);//Al volver con 1 se borra la pila y vuelve a la 00083 //dirección 0 --> se cuelga 00084 //Al menos en la versión de evaluación inicial, Ahora hace falta 00085 } 00086