diff --git a/labd2.c b/labd2.c index 8243212..c9b0130 100755 --- a/labd2.c +++ b/labd2.c @@ -1,242 +1,76 @@ -// LABD2.C -// -// From TI examples -// -//****************************************************************************** -// MSP430F20xx Demo - Software Toggle P1.0, MCLK = VLO/8 -// -// Description; Pulse P1.0 with a 1/100 active duty cycle using software. -// Ultra-low frequency ~ 1.5kHz, ultra-low power active mode demonstrated. -// ACLK = VL0, MCLK = VLO/8 ~1.5kHz, SMCLK = n/a -// -// MSP430F20xx -// ----------------- -// /|\| XIN|- -// | | | -// --|RST XOUT|- -// | | -// | P1.0|-->LED -// -// M.Buccini / L. Westlund -// Texas Instruments, Inc -// October 2005 -// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.40A -//****************************************************************************** +// programma labd2.c -//#include +#include +volatile unsigned int cnt = 0; //izveidojam globalo mainigo skititajam - -//void main(void) -//{ -// -// laboratorijas darba 5.punkts -// WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer -// P1DIR |= 0x01; // Set P1.0 to output direction -// -// // from example msp430x20x3_1_vlo.c -// BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO -// IFG1 &= ~OFIFG; // Clear OSCFault flag -// __bis_SR_register(SCG1 + SCG0); // Stop DCO -// BCSCTL2 |= SELM_3; // MCLK = LFXT1 -// -// for(;;) -// { -// //volatile unsigned int a;// Force compiler not optimize integer a -// P1OUT ^= 0x01; // P1.0 = toggle -// } -//} - -//laboratorijas darba 8.punkts - -// from example msp430x20x3_ta_04.c - -//****************************************************************************** -// MSP430F20xx Demo - Timer_A, Toggle P1.0, Overflow ISR, 32kHz ACLK -// -// Description: Toggle P1.0 using software and the Timer_A overflow ISR. -// In this example an ISR triggers when TA overflows. Inside the ISR P1.0 -// is toggled. Toggle rate is exactly 0.5Hz. Proper use of the TAIV interrupt -// vector generator is demonstrated. -// ACLK = TACLK = 32768Hz, MCLK = SMCLK = default DCO -// //* An external watch crystal on XIN XOUT is required for ACLK *// -// -// MSP430F20xx -// --------------- -// /|\| XIN|- -// | | | 32kHz -// --|RST XOUT|- -// | | -// | P1.0|-->LED -// -// M. Buccini / L. Westlund -// Texas Instruments Inc. -// September 2005 -// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.40A -//****************************************************************************** - - - -//int main(void) -//{ -// WDTCTL = WDTPW + WDTHOLD; // Stop WDT -// P1DIR |= 0x01; // P1.0 output -// -// P1SEL |= 0x01; // P1.0 option select -// CCTL0 = OUTMOD_4; // CCR0 toggle mode OUTMOD_4 -> Izeju pārslēdz uz pretējo, kad TAR ir vienāds ar TACCRx -// CCR0 = 10-1; -// -// // In this -// // example, CCR0 is loaded with 10-1 and TA0 will toggle P1.1 at TACLK/10. -// // Thus the output frequency on P1.1 will be the TACLK/20. No CPU or software -// // resources required. Normal operating mode is LPM3. -// -// TACTL = TASSEL_1 + MC_1; // ACLK, up_mode -// -// -//} -//// Timer_A3 Interrupt Vector (TAIV) handler -// -// -//// Vai šo vajag ja augšā jau ir toggle????????? -////Taimera pārtraukuma apstrādes funkcija -//#pragma vector = TIMERA1_VECTOR; -//interrupt void myTimer(void) -// { -// if(TAIV==10) // overflow -// // Taimera pārpildīšanās TAR == TACCR0 -// { -// P1OUT^=0x01; //pārslēdzam LED -// } -//} - - -// Laboratorijas darba 13.punkts -// 13. Noskaņot DCO uz 1MHz frekvenci, izmantojot DCO kalibrētās vērtības [1,16.lpp]. - -// msp430x20xx_dco_flashcal.c DCO Calibration Constants Programmer - -//****************************************************************************** -// MSP430F20xx Demo - DCO Calibration Constants Programmer -// -// NOTE: THIS CODE REPLACES THE TI FACTORY-PROGRAMMED DCO CALIBRATION -// CONSTANTS LOCATED IN INFOA WITH NEW VALUES. USE ONLY IF THE ORIGINAL -// CONSTANTS ACCIDENTALLY GOT CORRUPTED OR ERASED. -// -// Description: This code re-programs the F2xx DCO calibration constants. -// A software FLL mechanism is used to set the DCO based on an external -// 32kHz reference clock. After each calibration, the values from the -// clock system are read out and stored in a temporary variable. The final -// frequency the DCO is set to is 1MHz, and this frequency is also used -// during Flash programming of the constants. The program end is indicated -// by the blinking LED. -// ACLK = LFXT1/8 = 32768/8, MCLK = SMCLK = target DCO -// //* External watch crystal installed on XIN XOUT is required for ACLK *// -// -// MSP430F20xx -// --------------- -// /|\| XIN|- -// | | | 32kHz -// --|RST XOUT|- -// | | -// | P1.0|--> LED -// | P1.4|--> SMLCK = target DCO -// -// A. Dannenberg -// Texas Instruments Inc. -// May 2007 -// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.42A -//****************************************************************************** - -// msp430x20x3_ta_16.c - -//****************************************************************************** -// MSP430F20xx Demo - Timer_A, PWM TA1-2, Up Mode, DCO SMCLK -// -// Description: This program generates one PWM output on P1.2 using -// Timer_A configured for up mode. The value in CCR0, 512-1, defines the PWM -// period and the value in CCR1 the PWM duty cycles. -// A 75% duty cycle on P1.2. -// ACLK = na, SMCLK = MCLK = TACLK = default DCO -// -// MSP430F20xx -// ----------------- -// /|\| XIN|- -// | | | -// --|RST XOUT|- -// | | -// | P1.2/TA1|--> CCR1 - 75% PWM -// -// M.Buccini / L. Westlund -// Texas Instruments, Inc -// October 2005 -// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.40A -//****************************************************************************** - -int main(void) +void main (void) { - WDTCTL = WDTPW + WDTHOLD; // Stop WDT - P1DIR |= 0x01; // P1.0 0 output - P1SEL |= 0x01; // P1.0 0 TA1/2 options -// DCO kalibrēšanas vērtību -// lietošana +WDTCTL = WDTPW+WDTHOLD; // apturam WDT +P1DIR=0x01; // P1.0 bus izeja - DCOCTL = 0; - BCSCTL1 = CALBC1_1MHZ; - DCOCTL = CALDCO_1MHZ; +/////////////////// DCO parslegsana uz kalibretam vertibam. +//13.punkts - 1MHz; 17.punkts - 12 MHz frekvenci +DCOCTL = 0; +BCSCTL1 = CALBC1_12MHZ; +DCOCTL = CALDCO_12MHZ; +////////////////////////////////////////// - CCR0 = 512-1; // PWM Period - CCTL1 = OUTMOD_7; // CCR1 reset/set - CCR1 = 384; // CCR1 PWM duty cycle - TACTL = TASSEL_2 + MC_1; // SMCLK, up mode +BCSCTL3 |= LFXT1S_2; // Signala avots VLOCLK 5.1. punkts - - - __bis_SR_register(CPUOFF); // Enter LPM0 +/////////////////// Cilpas cikls gaidisanai lai stabilizejas oscilators +for (;;) +{ +IFG1 &= ~OFIFG; // Izdzesam Osc Fault partraukuma karodzinu +__delay_cycles(60); // Gaidam 60 ciklus +if ( (IFG1 & OFIFG) == 0 ) // Parbaudam karodzinus +break; // izejam no cilpas cikla } +////////////////////////////////////////// +BCSCTL2 |= SELM_3; // Izvelamies MCLK signala avotu, lai butu LFTX1 oscillator +//BCSCTL2 |= SELS; // Izvelamies MCLK signala avotu, lai butu LFXT1; Atslegts, lai pieslegt DCO -13.punkts -// Vai šo vajag ja augšā jau ir toggle????????? -//Taimera pārtraukuma apstrādes funkcija +/////////////////// Taimer A konfiguresana +CCR0 = 62500; +//TACTL = TAIE + TACLR + TASSEL_1 + MC_1; // 8.punkts TaimerA partraukumu atlausana + nodzes TAR + ACLK + up_mode +TACTL = TAIE + TACLR + TASSEL_2 + MC_1 + ID_3; // 14.punkts (ieprieksejo rindinu atsl.) TaimerA partraukumu atlausana + nodzes TAR + SMCLK + up_mode + ieejas dalitajs f/8 +////////////////////////////////////////// + +_enable_interrupts(); //Atlaut maskejamos partraukumus + +/////////////////// Programmas galvenais cikls +// Lidz 12.punktam +// Pec 12.punkta iznemam darbibu ar LED'u +while(1) + { +// volatile unsigned int i; //iekomentets pec 12.punkta +// P1OUT^=0x01; // invertējam izeju //iekomentets pec 12.punkta +// i=500; // sagatavojam aizturi //iekomentets pec 12.punkta +// while(i) //iekomentets pec 12.punkta +// { //iekomentets pec 12.punkta +// i--; // aizture //iekomentets pec 12.punkta + } +// } //iekomentets pec 12.punkta +} +//////////////////////////////////////// + +///////////////////// Taimera partraukuma apstrades funkcija +//Nokopets no 9.punkta #pragma vector = TIMERA1_VECTOR; interrupt void myTimer(void) { if(TAIV==10) // overflow - // Taimera pārpildīšanās TAR == TACCR0 + // Taimera parpildisanas TAR == TACCR0 { - P1OUT^=0x01; //pārslēdzam LED + cnt++; //skaititaja vertibas unarais inkrements //Pielikts sakot ar 13.punktu + if (cnt == 12) //salidzinam vertibu //Pielikts sakot ar 13.punktu + { //Pielikts sakot ar 13.punktu + P1OUT^=0x01; //parsledzam LED + cnt = 0; // nonullejam skatitaju //Pielikts sakot ar 13.punktu + } //Pielikts sakot ar 13.punktu } } +//////////////////////////////////////// -/* - MCLK pārslēgšana uz VLO,LFXT1, XT2 -do { - ... ... ... - } - while( IFG1 & OFIFG ); - */ - - - -/* -Pārtraukuma apstrādes procedūra - -#pragma vector = TIMERA1_VECTOR -interrupt void myTimer(void) - { - ...... - } -*/ - -/* - TAIFG pārbaude TAIV reģistrā - -if(TAIV == 10) // ? TAIFG - { - // apstrādes procedūra - ... - } - - Vairāku pārtraukumu gadījumā lietosim switch, case, break konstrukciju - */