00001 /* 00002 * File: system.c 00003 * Purpose: System initialization functions 00004 * Author: Peter Ivanov, Olimex Ltd. 00005 * Modified by: 00006 * Created: 2007-05-19 11:29:32 00007 * Last modify: 2007-06-10 13:14:02 ivanovp {Time-stamp} 00008 * Copyright: (C) Peter Ivanov, Olimex Ltd., 2005, 2007 00009 * Licence: GPL 00010 */ 00016 /**********************************************************************************/ 00017 /* */ 00018 /* Copyright (C) 2005 OLIMEX LTD. */ 00019 /* */ 00020 /* Module Name : system module */ 00021 /* File Name : system.h */ 00022 /* Revision : 01.00 */ 00023 /* Date : 2006/10/05 initial version */ 00024 /* */ 00025 /**********************************************************************************/ 00026 #include "system.h" 00027 //#include <msp430x44x.h> 00028 #include <msp430xG461x.h> 00029 00030 00031 /****************************************************************************/ 00032 /* Init system frequency */ 00033 /* Function : InitFreq_XT2 */ 00034 /* Parameters */ 00035 /* Input : Nothing */ 00036 /* Output : Nothing */ 00037 /****************************************************************************/ 00038 void InitFreq_XT2(void) 00039 { 00040 // External oscilator 8MHz 00041 00042 /* Watchdog */ 00043 // Stop watchdog timer 00044 WDTCTL = WDTPW + WDTHOLD; 00045 00046 00047 /* FLL+ Control Register 1 */ 00048 // SMCLK on, XT2 on, XT2 for main oscilator, ACLK By 1 00049 FLL_CTL1 = SELM1 + SELS + FLL_DIV_1; 00050 } 00051 00052 /****************************************************************************/ 00053 /* Init system frequency */ 00054 /* Function : InitFreq_XT1 */ 00055 /* Parameters */ 00056 /* Input : Nothing */ 00057 /* Output : Nothing */ 00058 /****************************************************************************/ 00059 void InitFreq_XT1(void) 00060 { 00061 // External oscilator 32kHz 00062 // DCO - off 00063 00064 /* Watchdog */ 00065 // Stop watchdog timer 00066 WDTCTL = WDTPW + WDTHOLD; 00067 00068 /* FLL+ Control Register 1 */ 00069 // SMCLK off, XT2 off, LFXT1CLK for main oscilator, ACLK By 1 00070 FLL_CTL1 = SMCLKOFF + XT2OFF + SELM0 + SELM1 + FLL_DIV_1; 00071 00072 } 00073 00074 /****************************************************************************/ 00075 /* Init system frequency */ 00076 /* Function : InitFreq */ 00077 /* Parameters */ 00078 /* Input : Nothing */ 00079 /* Output : Nothing */ 00080 /****************************************************************************/ 00081 void InitFreq(void) 00082 { 00083 /* Watchdog */ 00084 // Stop watchdog timer 00085 WDTCTL = WDTPW + WDTHOLD; 00086 00087 /* FLL+ Control Register 0 */ 00088 // Low Frequency, Oscillator capacitor ~6 pF 00089 //DCO+ set so freq = xtal 2 x N+1 00090 FLL_CTL0 = DCOPLUS + XCAP10PF; 00091 00092 /* System Clock Control Register */ 00093 // Enable modulation 00094 // fDCOCLK = (N + 1) * fcrystal 00095 // fDCOCLK = (29+1) * 32768 * 2 = 1 966 080 Hz ~ 2MHz 00096 //SCFQCTL = 29; 00097 00098 /* System Clock Control Register */ 00099 // Enable modulation 00100 // fDCOCLK = (N + 1) * fcrystal 00101 // fDCOCLK = (121+1) * 32768 * 2 = 7 995 392 Hz ~ 8MHz 00102 // SCFQCTL = 121; 00103 SCFQCTL = 121; 00104 00105 /* FLL+ Control Register 1 */ 00106 // SMCLK on, XT2 off, DCO for main oscilator, ACLK By 1 00107 // SMCLK clocked from DCO 00108 FLL_CTL1 = XT2OFF + SELM0 + FLL_DIV_1; 00109 #if 0 00110 FLL_CTL0 &= ~XTS_FLL; // XT1 as low-frequency 00111 FLL_CTL0 = XCAP10PF; // set load capacitance for 32k xtal 00112 00113 _BIC_SR (OSCOFF); // turn on XT1 oscillator 00114 00115 do // wait in loop until crystal is stable 00116 { 00117 IFG1 &= ~OFIFG; 00118 } 00119 while (IFG1 & OFIFG); 00120 00121 FLL_CTL1 &= ~FLL_DIV0; // ACLK = XT1 00122 FLL_CTL1 &= ~FLL_DIV1; 00123 00124 IFG1 &= ~OFIFG; // clear osc. fault int. flag 00125 00126 FLL_CTL1 &= ~SELM0; // set DCO as MCLK 00127 FLL_CTL1 &= ~SELM1; 00128 #endif 00129 } 00130 00131 00132 /****************************************************************************/ 00133 /* Preparing board to enter sleep mode - low power consumption */ 00134 /* Function : GoToSleep */ 00135 /* Parameters */ 00136 /* Input : Nothing */ 00137 /* Output : Nothing */ 00138 /****************************************************************************/ 00139 void GoToSleep(void) 00140 { 00141 // Flash CS high - disable 00142 P7DIR |= BIT0; 00143 P7OUT |= BIT0; 00144 00145 // MMA to sleep mode 00146 P8OUT &= ~BIT2; 00147 00148 // LCD turn of light 00149 P7OUT |= BIT6; 00150 00151 // IRDA disable 00152 P7DIR |= BIT7; 00153 P7OUT |= BIT7; 00154 00155 // TX - low 00156 P4DIR |= BIT6; 00157 P4OUT &= ~BIT6; 00158 00159 // MMC card 00160 P3DIR |= (BIT0|BIT2); 00161 P3OUT |= (BIT0|BIT2); 00162 00163 // LCD CS high - disable 00164 P4OUT |= 0x04; 00165 // LCD RESET 00166 P7OUT &= ~BIT4; 00167 00168 // EXT port 00169 P1DIR |= 0x3E; P1OUT &= ~0x3E; 00170 P2DIR |= 0xBF; P2OUT &= ~0xBF; 00171 P3DIR |= 0xF0; P3OUT &= ~0xF0; 00172 P4DIR |= 0x13; P4OUT &= ~0x13; 00173 P5DIR |= 0xFF; P5OUT &= ~0xFF; 00174 P6DIR |= 0x17; P6OUT &= ~0x17; 00175 P8DIR |= 0xFF; P8OUT &= ~0xFF; 00176 P9DIR |= 0xFF; P9OUT &= ~0xFF; 00177 P10DIR |= 0xFF; P10OUT &= ~0xFF; 00178 00179 } 00180 00181
1.5.1