📄 exercise-4.c
字号:
/* Exercise 4
A simple oscilloscope demo for the FG439, using the ADC12 to sample a signal, and the
UART to send the the results to a PC for display. Constructed from elements of examples:
fet430_adc12_09.c
fet430_tb_10.c
fet430_uart01_0115k.c
*/
#include <msp430xG43x.h>
void main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop WDT
FLL_CTL0 |= XCAP18PF; // Configure load caps
/* Based on fet430_uart01_0115k.c */
P2SEL |= BIT4; // P2.4 = USART0 TXD
ME1 |= UTXE0; // Enable USART0 TXD
UCTL0 |= CHAR; // 8-bit character
UTCTL0 |= SSEL1; // UCLK = SMCLK
UBR00 = 0x09; // 1MHz 115200
UBR10 = 0x00; //
UMCTL0 = 0x08; // Modulation
UCTL0 &= ~SWRST; // Initialize USART state machine
/* Based on fet430_tb_10.c */
TBCCR0 = 200 - 1; // PWM Period
TBCCTL1 = OUTMOD_7; // TBCCR1 reset/set
TBCCR1 = 100; // TBCCR1 PWM duty cycle = 50%
TBCTL = TBSSEL_2 | MC_1; // SMCLK, up mode
P2SEL |= BIT2;
P2DIR |= BIT2;
/* Based on fet430_adc12_09.c */
P6SEL = BIT2 | BIT1 | BIT0; // Enable A/D channel inputs
ADC12CTL0 = ADC12ON | MSC | SHT0_2; // Turn on ADC12, set sampling time
ADC12CTL1 = SHS_3 | SHP | CONSEQ_1 | ADC12SSEL_0; // Use sampling timer, single sequence, triggered by TB1
ADC12MCTL0 = INCH_0; // ref+=AVcc, channel = A0
ADC12MCTL1 = INCH_1; // ref+=AVcc, channel = A1
ADC12MCTL2 = INCH_2 | EOS; // ref+=AVcc, channel = A2, end of sequence
ADC12IE = BIT2; // Enable ADC12IFG.2
ADC12CTL0 |= ENC; // Enable conversions
_EINT(); // Enable interrupts
for (;;)
_BIS_SR(LPM0_bits); // Enter LPM0
}
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
ADC12IFG = 0;
ADC12CTL0 &= ~ENC; // Disable conversion
TXBUF0 = ADC12MEM2 >> 4; // Move results, IFG is cleared
ADC12CTL0 |= ENC; // Re-enable conversion
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -