void EMU_init(void)
{
EMUSR = 0x00; //清控制寄存器
LDOCON = 0xA0;//开启计量模拟前端电源
WriteEMU_REG(EMUCFG3, 0x0000E8);//开启Vref
Delayms(1);
WriteEMU_REG(EMUCFG2, 0x9FF333);
//配置计量其它参数,如 W1GAIN,P1CAL,W1ATTOS 等
Delayms(60);
WriteEMU_REG(EMUCFG0, 0x000037);
Delayms(1);
WriteEMU_REG(EMUCFG0, 0x000007);
EMUSR = 0x80;
Delayms(1000);
WDR;
WriteEMU_REG(EMUCFG1,0x2000c5);
EMUIE = 0x00; //禁止脉冲输出
}
uint32_t ReadEMU_REG(uint8_t sadr)
{
uint32_t val;
EA=0;
val=0x00;
EADR=sadr&0x7F;
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
val = EDTAH;
Delayus(32);
val = val<<8;
val |= EDTAM;
Delayus(32);
val = val<<8;
val |= EDTAL;
EA=1;
return(val);
}
void WriteEMU_REG(uint8_t sadr,uint32_t val)
{
EA=0;
EADR=0x00;
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
EDTAH=(uint8_t)(val>>16)&0xFF;
Delayus(32);
EDTAM=(uint8_t)(val>>8)&0xFF;
Delayus(32);
EDTAL=(uint8_t)(val&0xFF);
Delayus(32);
EADR=sadr|0x80;
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
_nop_(); //一个 NOP
EA=1;
}
系统初始化是这样的,不知道问题出在哪里,读电压电流有效值都是0. |