void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) { while(1); // If calibration constants erased // do not load, trap CPU!! } BCSCTL1 = CALBC1_1MHZ; // Set DCO to 1MHz DCOCTL = CALDCO_1MHZ; FCTL2 = FWKEY + FSSEL0 + FN1; // MCLK/3 for Flash Timing Generator P1DIR |= 0x01; // P1.0 output TACCTL0 = CCIE; // TACCR0 interrupt enabled TACCR0 = 50000; TACTL = TASSEL_2 + MC_1; // SMCLK, upmode value = 0; // initialize value __enable_interrupt(); // enable interrupts while(1) // Repeat forever { write_SegC(value++); // Write segment C, increment value copy_C2D(); // Copy segment C to D __no_operation(); // SET BREAKPOINT HERE } }
//------------------------------------------------------------------------------ // Input = value, holds value to write to Seg C //------------------------------------------------------------------------------ void write_SegC_Allocate_Addr(uint8 Addr_OFFSET, uint16 *value) { unsigned int i; char *Flash_ptrC; char *Flash_ptrD; Flash_ptrC = (char *) 0x1880; // Initialize Flash segment C ptr Flash_ptrD = (char *) 0x1800; // Initialize Flash segment D ptr copy_C2D(); FCTL3 = FWKEY; // Clear Lock bit FCTL1 = FWKEY+ERASE; // Set Erase bit *Flash_ptrC = 0; // Dummy write to erase Flash seg FCTL1 = FWKEY+WRT; // Set WRT bit for write operation for(i=0;i<Addr_OFFSET;i++) { *Flash_ptrC++ = *Flash_ptrD++; } *Flash_ptrC=(*value)>>8; Flash_ptrC++; Flash_ptrD++; *Flash_ptrC=(*value)&0xFF; Flash_ptrC++; Flash_ptrD++; for(i=Addr_OFFSET;i<128;i++) *Flash_ptrC++ = *Flash_ptrD++; FCTL1 = FWKEY; // Clear WRT bit FCTL3 = FWKEY+LOCK; // Set LOCK bit }
void main(void) { WDTCTL = WDTPW+WDTHOLD; // Stop WDT value = 0; // initialize value write_SegC(value); // Write segment C, increment value copy_C2D(); // Copy segment C to D while(1); // Loop forever, SET BREAKPOINT HERE }
void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer FCTL2 = FWKEY + FSSEL0 + FN1; // MCLK/3 for Flash Timing Generator value = 0; // initialize value while(1) // Repeat forever { write_SegC(value++); // Write segment C, increment value copy_C2D(); // Copy segment C to D __no_operation(); // SET BREAKPOINT HERE } }
void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) { while(1); // If calibration constants erased // do not load, trap CPU!! } BCSCTL1 = CALBC1_1MHZ; // Set DCO to 1MHz DCOCTL = CALDCO_1MHZ; FCTL2 = FWKEY + FSSEL0 + FN1; // MCLK/3 for Flash Timing Generator value = 0; // initialize value while(1) // Repeat forever { write_SegC(value++); // Write segment C, increment value copy_C2D(); // Copy segment C to D _NOP(); // SET BREAKPOINT HERE } }
void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer BCSCTL1 = CALBC1_1MHZ; // Set DCO DCOCTL = CALDCO_1MHZ; P1DIR |= 0x01; // P1.0 output CCTL0 = CCIE; // CCR0 interrupt enabled CCR0 = 50000; TACTL = TASSEL_2 + MC_1; // SMCLK, upmode _EINT(); // enable interrupts FCTL2 = FWKEY + FSSEL0 + FN1; // MCLK/3 for Flash Timing Generator value = 0; // initialize value while(1) // Repeat forever { write_SegC(value++); // Write segment C, increment value copy_C2D(); // Copy segment C to D _NOP(); // SET BREAKPOINT HERE } }