//函数
void PPG_init (void)
{
PMMCTL0_H = PMMPW_H;//解锁 PMM 寄存器
PMMCTL2 = INTREFEN | REFVSEL_1;//启用内部2.0V 基准
while (!(PMMCTL2 & REFGENRDY));//轮询直到内部基准稳定
PMMCTL0_H = 0xFF;//锁定 PMM 寄存器
P1SEL0 |= BIT5 + BIT6;
P1SEL1 |= BIT5 + BIT6;
SAC1DAC = DACSREF_1 + DACLSEL_0; //选择内部 Vref 作为 DAC 基准,当 DACDAT 被写入时 DAC 锁存负载
SAC1DAC |= DACEN;//启用 SAC1 DAC
SAC1OA = NMUXEN + PMUXEN + PSEL_1 + NSEL_0;//选择正负输入:正 DAC、负 P1.6
SAC1OA |= SACEN;//启用 SAC1
SAC1DAT = 0;// mA@20 Ω,VRED = 1.674V@10mA
//将 SAC3引脚配置为用于 IR LED 驱动的 IDAC
// P3.5/OA3O、P3.6/OA3-O
P3SEL0 |= BIT5 + BIT6;
P3SEL1 |= BIT5 + BIT6;
SAC3DAC = DACSREF_1 + DACLSEL_0;//选择内部 Vref 作为 DAC 基准,当 DACDAT 被写入时 DAC 锁存负载
SAC3DAC |= DACEN;//启用 SAC3 DAC
SAC3OA = NMUXEN + PMUXEN + PSEL_1 + NSEL_0;//选择正负输入:正 DAC、负 P3.6
SAC3OA |= SACEN;//启用 SAC3
SAC3DAT = 0;// mA@20 Ω、VIR = 1.464V@10mA
/** SAC init **/
//将 SAC2配置为 TIA (I-V 转换)
P3SEL0 |= BIT1 + BIT2;
P3SEL1 |= BIT1 + BIT2;
SAC2DAC = DACSREF_0 + DACLSEL_0;//选择内部 Vref 作为 DAC 基准,当 DACDAT 被写入时 DAC 锁存负载
SAC2DAC |= DACEN;//启用 SAC2 DAC
SAC2OA = NMUXEN + PMUXEN + PSEL_1 + NSEL_0;//选择正负输入:正 DAC、负 P3.2
SAC2OA |= SACEN + OAEN;//启用 SAC2和 OA2
SAC2DAT = 600;//设置 SAC2 DAC 输出= 600/4095*2000mV = 293mV
//将 SAC0配置为 PGA 反相放大器模式
SAC0DAC = DACSREF_0 + DACLSEL_0;//选择内部 Vref 作为 DAC 基准,当 DACDAT 被写入时 DAC 锁存负载
SAC0DAC |= DACEN;//启用 SAC0 DAC
SAC0DAT = 1500;//设置 SAC0 DAC 输出= 0.75V
SAC0OA = NMUXEN + PMUXEN + PSEL_1 + NSEL_1;//选择正负输入:正 DAC、负配对 OA 输出
SAC0PGA = MSEL_3;//将负输入设置为配对的 OA 输出- SAC2
SAC0PGA |= GAIN0 + GAIN1 + GAIN2;//将 PGA 增益设置为32
参考 URL: