#include void main(void) { WDTCTL = WDTPW + WDTHOLD; P1DIR |= 0x01; for (;;) { volatile unsigned int i; P1OUT ^= 0x01; i = 50000; do (i--); while (i != 0); } msp430x20x3_1.c -Software Toggle P1.0 Άσκηση. 1.Μεταγλωττίστε και τρέξτε τον κώδικα. 2.Συμπληρώστε τα σχόλια που να εξηγούν τί κάνει ο κώδικας. 3.Ποιο υποσύστημα ρολογιού χρησιμοποιεί;
msp430x20x3_1_vlo.c -Software Toggle P1.0, MCLK = VLO/8 #include void main(void) { volatile unsigned int i; // ___________________________________ WDTCTL = WDTPW + WDTHOLD; // ___________________________________ BCSCTL3 |= LFXT1S_2; // ___________________________________ IFG1 &= ~OFIFG; // ___________________________________ __bis_SR_register(SCG1 + SCG0); // ___________________________________ BCSCTL2 |= SELM_3 + DIVM_3; // ___________________________________ P1DIR = 0xFF; // ___________________________________ P1OUT = 0; // ___________________________________ P2DIR = 0xFF; // ___________________________________ P2OUT = 0; // ___________________________________ for (;;) { P1OUT |= 0x01; // ___________________________________ for (i = 10; i > 0; i--); // ___________________________________ P1OUT &= ~0x01; // ___________________________________ for (i = 1000; i > 0; i--); // ___________________________________ } Άσκηση. 1.Μεταγλωττίστε και τρέξτε τον κώδικα. 2.Συμπληρώστε τα σχόλια που να εξηγούν τί κάνει ο κώδικας. 3.Με ποια συχνότητα τροφοδοτείται μέσω λογισμικού και ποιός ακροδέκτης; 4.Σε τί διαμόρφωση βρίσκεται το ACLK, το MCLK και το SMCLK;
msp430x20x3_clks.c-Basic Clock, Output Buffered SMCLK, ACLK and MCLK/10 #include void main(void) { WDTCTL = WDTPW +WDTHOLD; // ___________________________________ P1DIR |= 0x13; // ___________________________________ P1SEL |= 0x11; // ___________________________________ while(1) { P1OUT |= 0x02; // ___________________________________ P1OUT &= ~0x02; // ___________________________________ } Άσκηση. 1.Μεταγλωττίστε και τρέξτε τον κώδικα. 2.Συμπληρώστε τα σχόλια που να εξηγούν τί κάνει ο κώδικας. 3.Πώς έχουν οι συνδέσεις των ACLK, MCLK, SMCLK;
msp430x20xx_dco_flashcal.c-DCO Calibration Constants Programmer #include void main(void) { WDTCTL = WDTPW +WDTHOLD; // ___________________________________ if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) { while(1); // ___________________________________ // ___________________________________ } //1Mhz BCSCTL1 = CALBC1_1MHZ; // ___________________________________ DCOCTL = CALDCO_1MHZ; // ___________________________________ /* //8Mhz BCSCTL1 = CALBC1_8MHZ; // ___________________________________ DCOCTL = CALDCO_8MHZ; // ___________________________________ /* //12Mhz BCSCTL1 = CALBC1_12MHZ; // ___________________________________ DCOCTL = CALDCO_12MHZ; // ___________________________________ /* //16Mhz BCSCTL1 = CALBC1_16MHZ; // ___________________________________ DCOCTL = CALDCO_16MHZ; // ___________________________________ P1DIR |= 0x13; // ___________________________________ P1SEL |= 0x11; // ___________________________________ while(1) { P1OUT |= 0x02; // ___________________________________ P1OUT &= ~0x02; // ___________________________________ } Άσκηση. 1.Μεταγλωττίστε και τρέξτε τον κώδικα. 2.Συμπληρώστε τα σχόλια που να εξηγούν τί κάνει ο κώδικας. 3.Πως έχουν οι συνδέσεις των ACLK, MCLK, SMCLK.
msp430x20x3_flashwrite_01.c- Flash In-System Programming, Copy SegC to SegD #include char value; // ___________________________________ // Function prototypes void write_SegC (char value); void copy_C2D (void); void main(void) { WDTCTL = WDTPW + WDTHOLD; // ___________________________________ if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) { while(1); // ___________________________________ // ___________________________________ } BCSCTL1 = CALBC1_1MHZ; // ___________________________________ DCOCTL = CALDCO_1MHZ; FCTL2 = FWKEY + FSSEL0 + FN1; // ___________________________________ value = 0; // ___________________________________ while(1) // ___________________________________ { write_SegC(value++); // ___________________________________ copy_C2D(); // ___________________________________ _NOP(); // ___________________________________ } void write_SegC (char value) { char *Flash_ptr; // ___________________________________ unsigned int i; Flash_ptr = (char *) 0x1040; // ___________________________________ FCTL1 = FWKEY + ERASE; // ___________________________________ FCTL3 = FWKEY; // ___________________________________ *Flash_ptr = 0; // ___________________________________ FCTL1 = FWKEY + WRT; // ___________________________________ for (i=0; i<64; i++) { *Flash_ptr++ = value; // ___________________________________ } FCTL1 = FWKEY; // ___________________________________ FCTL3 = FWKEY + LOCK; // ___________________________________ } void copy_C2D (void) { char *Flash_ptrC; // ___________________________________ char *Flash_ptrD; // ___________________________________ unsigned int i; Flash_ptrC = (char *) 0x1040; // ___________________________________ Flash_ptrD = (char *) 0x1000; // ___________________________________ FCTL1 = FWKEY + ERASE; // ___________________________________ FCTL3 = FWKEY; // ___________________________________ *Flash_ptrD = 0; // ___________________________________ FCTL1 = FWKEY + WRT; // ___________________________________ for (i=0; i<64; i++) { *Flash_ptrD++ = *Flash_ptrC++; // ___________________________________ } FCTL1 = FWKEY; // ___________________________________ FCTL3 = FWKEY + LOCK; // ___________________________________ } Άσκηση. 1.Μεταγλωττίστε και τρέξτε τον κώδικα. 2.Συμπληρώστε τα σχόλια που να εξηγούν τί κάνει ο κώδικας. 3.Ποια είναι η συχνότητα του MCLK; 4.Ποιος ο ρόλος του _NOP();
msp430x20x3_LFxtal_nmi.c-LFXT1 Oscillator Fault Detection #include volatile unsigned int i; void main(void) { WDTCTL = WDT_ADLY_1000; // ___________________________________ IE1 |= WDTIE; // ___________________________________ P1DIR = 0xFF; // ___________________________________ P1OUT = 0; // ___________________________________ P2DIR = 0xFF; // ___________________________________ P2OUT = 0; // ___________________________________ IE1 |= OFIE; // ___________________________________ while(1) { P1OUT ^= 0x01; // ___________________________________ _BIS_SR(LPM3_bits + GIE); // ___________________________________ } #pragma vector=WDT_VECTOR __interrupt void watchdog_timer (void) { _BIC_SR_IRQ(LPM3_bits); // ___________________________________ } #pragma vector=NMI_VECTOR __interrupt void nmi_ (void) { do { IFG1 &= ~OFIFG; // ___________________________________ for (i = 0xFFF; i > 0; i--); // ___________________________________ P1OUT ^= 0x01; // ___________________________________ } while (IFG1 & OFIFG); // ___________________________________ IE1 |= OFIE; / // ___________________________________ } Άσκηση. 1.Μεταγλωττίστε και τρέξτε τον κώδικα. 2.Συμπληρώστε τα σχόλια που να εξηγούν τί κάνει ο κώδικας. 3.Σε ποιον τρόπο λειτουργίας εκτελείται το πρόγραμμας 4.Πώς έχουν οι συνδέσεις και οι συχνότητες των ACLK, MCLK, SMCLK;