📄 monitor_demo_app.c
字号:
//******************************************************************************
// MSP-FET430 Flash monitor demonstration. Based on fet140_uart15_9600
//
// Description: Echo a received character, RX ISR used. Normal mode is LPM3,
// USART1 RX interrupt triggers TX Echo.
// When a ^C character is received, control is returned to the monitor program.
// The LED on P1.0 is toggled periodically to indicate that the program
// is running.
//
// ACLK = TACLK = BRCLK = 32kHz, MCLK = SMCLK = default DCO ~750kHz
// //* An external watch crystal on XIN XOUT is required for ACLK *//
//
// MSP430F169
// -----------------
// /|\| XIN|-
// | | | 32kHz
// --|RST XOUT|-
// | |
// | P3.6|----------->
// | | 9600 - 8N1
// | P3.7|<-----------
// | |
// | P1.0|--> LED
//
//
// Jim Patterson
// Texas Instruments Inc.
// Oct 2006
// Built with IAR Embedded Workbench Version: 3.41A
//******************************************************************************
#include "msp430x16x.h"
void uart1_puts(char out_string[]);
// This places a 16-bit password in flash just above the application
// See the application note for more information on this password feature
__root const int Password @ 0xFBDE = 0xdeaf;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P3SEL |= 0xC0; // P3.6,7 = USART1 TXD/RXD
ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD
UCTL1 |= CHAR; // 8-bit character
UTCTL1 |= SSEL0; // UCLK = ACLK
UBR01 = 0x03; // 32k/9600 - 3.41
UBR11 = 0x00; //
UMCTL1 = 0x4A; // Modulation
UCTL1 &= ~SWRST; // Initialize USART state machine
P1DIR |= BIT0; // P1.0 output
TACTL = TASSEL_1 + MC_2 + TAIE; // ACLK, contmode, interrupt
IE2 |= URXIE1; // Enable USART1 RX interrupt
// Send out a welcome message
uart1_puts("\rMSP430 Flash Monitor Demonstration Application\r\n");
uart1_puts("Echoes UART input to output.\r\nType ^C to return to monitor.\r\n");
_BIS_SR(LPM3_bits + GIE); // Enter LPM0 w/ interrupt
}
void uart1_puts(char out_string[])
{
int i;
i=0;
while( out_string[i] != 0)
{
while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready?
TXBUF1 = out_string[i++];
}
}
#pragma vector=UART1RX_VECTOR
__interrupt void usart1_rx (void)
{
if( RXBUF1 == 0x03 )
asm(" mov &0xFC40, PC;"); // ^C starts monitor
else
{
while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready?
TXBUF1 = RXBUF1; // RXBUF1 to TXBUF1
}
}
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
switch (__even_in_range(TAIV, 10)) // Efficient switch-implementation
{
case 2: break; // CCR1 not used
case 4: break; // CCR2 not used
case 10: P1OUT ^= 0x01; // Overflow - toggle LED on P1.0
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -