您好!
我们将使用 MSP430F5132和 PMP7647源代码。
在 PMP7647中源自... ADC 配置、如下所示:
P1.0 --模拟输入 A0 -- 10位模数转换器(3) --面板电压
P1.1 --模拟输入 A1 -- 10位 ADC (3) -- 电池电压
P1.2 --模拟输入 A2 -- 10位 ADC (3) --电池电流
P1.3 --模拟输入 A3 -- 10位 ADC (3)-- 负载电压
P1.4 --模拟输入 A4 -- 10位 ADC (3) --负载电流
//ADC 初始化//
void init_adc (void)
{
ADC10CTL0 = ADC10SHT_2 + ADC10MSC + ADC10ON;// 8clk 周期、单次触发、转换被禁用
ADC10CTL1 = ADC10SHP + ADC10CONSEQ_1; //采样定时器、通道序列
ADC10CTL2 |= ADC10RES; // 10位转换结果
ADC10MCTL0 = ADC10INCH_4 + ADC10SREF_1;// A4、A3、A2、A1、A0 (EOS)、Vref+= Vref、Vref-= GND
REFCTL0 |= REFVSEL_2+REFON; //选择内部 ref = 2.5V
//配置 DMA
DMACTL0 = DMA0TSEL_24; // ADC10IFG 触发
_data16_write_addr ((unsigned short)&DMA0SA、(unsigned long)&ADC10MEM0);
//源单个地址
_data16_write_addr ((unsigned short)&DMA0DA、(unsigned long)&ADC_Readings[0]);
//目标阵列地址
DMA0SZ = 0x05; //传输5个字(转换结果)
DMA0CTL = DMADT_4 + DMADSTINCR_3 + DMAEN + DMAIE;//源不变、目标增量、启用、中断启用
}
WDT 中断中的 ADC 采样和转换
//WDT 以重新启动 ADC
空 INIT_WDT (空)
{
WDTCTL = WDT_MDLY_32; // WDT 32ms 从1MHz,SMCLK,间隔计时器
SFRIE1 |= WDTIE; //启用 WDT 中断
}
//看门狗计时器中断服务例程
#pragma vector=WDT_vector
__interrupt void WDT_ISR (void)
{
_data16_write_addr ((unsigned short)&DMA0DA、(unsigned long)&ADC_Readings[0]);
ADC10CTL0 |= ADC10ENC + ADC10SC; //采样和转换开始
}
在当前设计中,我们已对 ADC 通道分配
P1.0 --模拟输入 A0 -- 10位模数转换器(3) --面板电压
P1.1 --模拟输入 A1 -- 10位 ADC (3) -- 电池电压
P1.2 --模拟输入 A2 -- 10位 ADC (3) --电池电流
P1.3 --模拟输入 A3 -- 10位 ADC (3)-- 负载电压
P1.4 --用于 I2C 的 SDA
P3.6 --模拟输入 A7 -- 10位 ADC (3) --负载电流
无法配置 多通道转换。 您能建议使用 ADC 配置吗?