// Built with IAR Embedded Workbench Version: 3.42A
//******************************************************************************
#include
WDTCTL = WDTPW + WDTHOLD; // Stop WDT BoardConfig(0xb8);
P3DIR |= BIT4; // P3.4 output
CCTL0 = CCIE; // CCR0 interrupt enabled CCR0 = 20000;
TACTL = TASSEL_2 + MC_1; // SMCLK, upmode
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt }
// Timer A0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) {
P3OUT ^= BIT4; // Toggle P3.4 } //****************************************************************************** // MSP-FET430P140 Demo - Timer_A, Toggle P3.4, Overflow ISR, DCO SMCLK //
// Description: Toggle P3.4 using software and Timer_A overflow ISR. // In this example an ISR triggers when TA overflows. Inside the TA // overflow ISR P3.4 is toggled. Toggle rate is approximatlely 12Hz. // Proper use of the TAIV interrupt vector generator is demonstrated. // ACLK = n/a, MCLK = SMCLK = TACLK = default DCO ~800kHz //
// MSP430F149 // --------------- // /|\\| XIN|- // | | | // --|RST XOUT|- // | |
// | P3.4|-->LED //
// Dasheng
// LiTian Electronic Inc. // Feb 2008
// Built with IAR Embedded Workbench Version: 3.42A
//******************************************************************************
16
#include
WDTCTL = WDTPW + WDTHOLD; // Stop WDT BoardConfig(0xb8);
P3DIR |= BIT4; // P3.4 output
TACTL = TASSEL_2 + MC_2 + TAIE; // SMCLK, contmode, interrupt
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt }
// Timer_A3 Interrupt Vector (TAIV) handler #pragma vector=TIMERA1_VECTOR __interrupt void Timer_A(void) {
switch( TAIV ) {
case 2: break; // CCR1 not used case 4: break; // CCR2 not used case 10: P3OUT ^= BIT4; // overflow break; } } //****************************************************************************** // MSP-FET430P140 Demo - Timer_A, Toggle P3.4, Overflow ISR, 32kHz ACLK //
// Description: Toggle P3.4 using software and the Timer_A overflow ISR. // In this example an ISR triggers when TA overflows. Inside the ISR P3.4 // 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 ~800kHz // //* An external watch crystal on XIN XOUT is required for ACLK *// //
// MSP430F149 // ---------------
// /|\\| XIN|-
// | | | 32kHz // --|RST XOUT|- // | | // | P3.4|-->LED //
// Dasheng
// LiTian Electronic Inc.
17
// Feb 2008
// Built with IAR Embedded Workbench Version: 3.42A
//******************************************************************************
#include
void main(void) {
WDTCTL = WDTPW + WDTHOLD; // Stop WDT BoardConfig(0xb8);
P3DIR |= BIT4; // P3.4 output
TACTL = TASSEL_1 + MC_2 + TAIE; // ACLK, contmode, interrupt
_BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/ interrupt }
// Timer_A3 Interrupt Vector (TAIV) handler #pragma vector=TIMERA1_VECTOR __interrupt void Timer_A(void) {
switch( TAIV ) {
case 2: break; // CCR1 not used case 4: break; // CCR2 not used case 10: P3OUT ^= BIT4; // overflow break; } }
#include
{
WDTCTL = WDTHOLD + WDTPW; // 关看门狗
BoardConfig(0xb0); //开流水灯,关数码管和电平转换 CACTL1 = CARSEL + CAREF0 + CAON ; // Vcc/4 = - cmp CACTL2 = P2CA0; // 使用 CA0 P2DIR = 0xff; P2OUT = 0xff;
while(1) {
18
if((CACTL2 | 0xfe) ==0xff)
{ // 比较电压是否超过0.25Vcc P2OUT &= ~BIT4;
CACTL1 &= 0xfe; // CAIFG = 0 } else {
P2OUT |= BIT4; } } } //**************************************************************************** // MSP-FET430P140 Demo - Flash In-System Programming, Copy SegA to SegB //
// Description: This program first erases flash seg A, then it increments all // values in seg A, then it erases seg B, then copies seg A to seg B. // Assumed MCLK 550kHz - 900kHz.
// //* Set Breakpoint on NOP in the Mainloop to avoid Stressing Flash *// //
// MSP430F149 // ----------------- // /|\\| XIN|- // | | | // --|RST XOUT|- // | | //
// M. Mitchell
// Texas Instruments Inc. // Feb 2005
// Built with IAR Embedded Workbench Version: 3.21A
//******************************************************************************
#include
uchar value; // 8-bit value to write to segment A uchar DataBuffer[128];
// Function prototypes
void write_SegA (uchar value); void copy_A2B (void);
void main(void)
19
{
while(1) // Repeat forever
{
write_SegA(value++); // Write segment A, increment value BoardConfig(0xb8);
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
FCTL2 = FWKEY + FSSEL0 + FN0; // MCLK/2 for Flash Timing Generator value = 0; // Initialize value
copy_A2B(); _NOP(); } }
void write_SegA (uchar value) {
uchar *Flash_ptr; uint i;
Flash_ptr = (uchar *) 0x1080; FCTL1 = FWKEY + ERASE; FCTL3 = FWKEY; *Flash_ptr = 0;
FCTL1 = FWKEY + WRT;
for (i=0; i<128; i++)
{
*Flash_ptr++ = value; }
FCTL1 = FWKEY; FCTL3 = FWKEY + LOCK; }
void copy_A2B (void)
{
uchar *Flash_ptrA; uchar *Flash_ptrB; uint i;
Flash_ptrA = (uchar *) 0x1080; Flash_ptrB = (uchar *) 0x1000; FCTL1 = FWKEY + ERASE;
// Copy segment A to B // SET BREAKPOINT HERE // Flash pointer // Initialize Flash pointer // Set Erase bit
// Clear Lock bit
// Dummy write to erase Flash segment // Set WRT bit for write operation // Write value to flash // Clear WRT bit // Set LOCK bit // Segment A pointer // Segment B pointer // Initialize Flash segment A pointer // Initialize Flash segment B pointer // Set Erase bit
20