您好!
我正在研究 EVM430I2040S、它上面有 msp430i2040。 我使用的是 ADC 的三个通道。 一个用于电压采样、一个用于电流采样、另一个用于温度采样。 电压和电流样本通过 UART 端子发送到 PC。 所需的采样率为2KHz。 使用的波特率为115200。 我在输入通道上施加了正弦输入、但我没有获得正弦输出。 我认为存在欠采样的情况、但我无法在代码中发现问题。 我应该怎么做才能实现2KHz 的采样率并使用 UART 进行传输。 请查找随附的代码。
#include unsigned int i; unsigned int value1、value2; unsigned char val_low、val_high; unsigned int value; // * main.c */ void main (void){ WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器 P2DIR |= BIT3;//将 P1.0设置为输出方向 SD24CTL=SD24REFS; //内部基准 SD24CCTL0|=SD24GRP;//通道1的组 SD24CCTL1|=SD24GRP|SD24IE;//通道2的组和同级中断 SD24INCTL1=0x20; //增益= 16对于通道1 SD24CCTL2=0x00; SD24INCTL2=0x06; //通道2的内部温度传感器 P1SEL0|= BIT2|BIT3; //P1.2、3 eUSCI_A 函数 P1SEL1&=~(BIT2|BIT3); UCA0CTLW0|=UCSWRST; //在复位 UCA0CTLW0|= UCSSEL_2中保持 eUSCI; //SMCLK UCA0BR0=0x8E; // 115200波特 UCA0BR1=0x00; UCA0MCTLW=0x0022; UCA0CTLW0&=~(UCSWRST); //从复位中释放 (i=0;i<20;i++) { __DELAY_CYLES (16000);//1ms 延迟 } SD24CCTL2|=SD24SC; //将位设置为开始转换 __bis_SR_register (LPM0_bits |GIE); } #pragma vector= SD24_vector __interrupt void SD24_ISR (void) { value1=SD24MEM0; //电压 值 e2=SD24MEM1; //当前 值= SD24MEM2; //温度 SD24PRE0= 0xFF; //通道0 SD24PRE1= 0xFF 下一次转换时的延迟; //通道1 val_high=(value1>>8)&(0xFF)的下次转换延迟; while (!(UCA0IFG&UCTXIFG));// USCI_A0 TX 缓冲器准备就绪? UCA0TXBUF = val_high; // TX -> RXed 字符 val_low=value1&(0xFF); while (!(UCA0IFG&UCTXIFG));// USCI_A0 TX 缓冲区准备好了? UCA0TXBUF = val_low; // TX -> RXed 字符 val_high=(value2>>8)&(0xFF); while (!(UCA0IFG&UCTXIFG));// USCI_A0 TX 缓冲区准备就绪? UCA0TXBUF = val_high; // TX -> RXed 字符 val_low=value2&(0xFF); while (!(UCA0IFG&UCTXIFG));// USCI_A0 TX 缓冲区准备就绪? UCA0TXBUF = val_low; // TX -> RXed 字符 P2OUT ^= BIT3;//使用异或 }切换 P1.0