uint32_t system_status;
system_status = ool_read32(PMU_REG_SYSTEM_STATUS);
void system_power_off(bool aldo_bypass)
系统关机函数,调用该函数将系统至于关机状态,关机状态下用户可以配置按键唤醒或者各种 PMU 中断唤醒。从关
机状态下醒来,系统状态寄存器(PMU 寄存器 0x9F)值为 0xc6
0x000080c8,0xc8表示什么意思呢? 系统状态寄存器有相关的描述信息吗?
uint32_t system_status;
system_status = ool_read32(PMU_REG_SYSTEM_STATUS);
void system_power_off(bool aldo_bypass)
系统关机函数,调用该函数将系统至于关机状态,关机状态下用户可以配置按键唤醒或者各种 PMU 中断唤醒。从关
机状态下醒来,系统状态寄存器(PMU 寄存器 0x9F)值为 0xc6
0x000080c8,0xc8表示什么意思呢? 系统状态寄存器有相关的描述信息吗?
后面我调用 pwm_start_once 这个函数,不能再次单次运行。试了调用之前先关闭 pwm_stop_once 也不行。
@刘流鎏 谢谢。但是我加入 co_delay_100us(100); 还是有些问题,我用一个通道进行测量是准确的,用两个通道测量结果就是不准确的。
我搭建了一个分压电路,产生1.97v和0.59v,供给两个通道。使用两个通道进行测量结果是:
ref_vol: 2904, result: 551mV, vol_PD4: 1562.601563mV
ref_vol: 2904, result: 247mV, vol_PD5: 700.476563mV
(我将LDO调回2.9v,并配置使用PD4,PD5)
@刘流鎏 在 FR801X adc两个测量通道怎么使用?下面这种方式对吗?调整LDO为3.3v了。 中说:
谢谢。但是我加入 co_delay_100us(100); 还是有些问题,我用一个通道进行测量是准确的,用两个通道测量结果就是不准确的。
我搭建了一个分压电路,产生1.97v和0.59v,供给两个通道。使用两个通道进行测量结果是:
ref_vol: 2904, result: 551mV, vol_PD4: 1562.601563mV
ref_vol: 2904, result: 247mV, vol_PD5: 700.476563mV
(我将LDO调回2.9v,并配置使用PD4,PD5)
struct adc_cfg_t cfg;
// uint16_t result_PD4;
uint16_t result_PD5=0;
// uint16_t result_PD6;
uint16_t result_PD7=0;
// uint16_t ref_vol_get = 0;
// uint16_t ref_vol_2900 = 2900;
uint16_t ref_vol_3300 = 3300;
// float vbat_vol_PD4;
float vbat_vol_PD5=0;
// float vbat_vol_PD6;
float vbat_vol_PD7=0;
memset((void *)&cfg, 0, sizeof(cfg));
cfg.src = ADC_TRANS_SOURCE_PAD;
cfg.ref_sel = ADC_REFERENCE_AVDD; // (2904mV 2.9V)
cfg.channels = 0x0A; // 可以四个通道同时使能0x0f
cfg.route.pad_to_sample = 1;
cfg.clk_sel = ADC_SAMPLE_CLK_24M_DIV13;
cfg.clk_div = 0x3f;
adc_init(&cfg);
adc_enable(NULL, NULL, 0); // 以中断方式返回结果 还有一种回调方式,需要设置回调函数
// adc_get_result(ADC_TRANS_SOURCE_PAD, 0x01, &result_PD4); // PD4
adc_get_result(ADC_TRANS_SOURCE_PAD, 0x02, &result_PD5); // PD5
// adc_get_result(ADC_TRANS_SOURCE_PAD, 0x04, &result_PD6); // PD6
adc_get_result(ADC_TRANS_SOURCE_PAD, 0x08, &result_PD7); // PD7
adc_disable();
// ref_vol_get = adc_get_ref_voltage(ADC_REFERENCE_AVDD); // 注意:该参考电压是对ALDO 2.9v做的校准,如果软件配置ALDO电压改变了,该校准值ref_vol就没有太大参考价值了
// vbat_vol = (result * ref_vol_get) / 1024.0; // mV.
// printf("result: %d, ref_vol_get: %dmV, vbat_vol: %fmv, ", result, ref_vol_get, vbat_vol); // 2904?进行了校准 从29000->2904 ADC_REFERENCE_AVDD
// vbat_vol = (result * ref_vol_2900) / 1024.0; // mV.
// printf("ref_vol_2900 - > adc_value: %fmV, ", vbat_vol);
vbat_vol_PD5 = (result_PD5 * ref_vol_3300) / 1024.0; // mV.
vbat_vol_PD7 = (result_PD7 * ref_vol_3300) / 1024.0; // mV.
printf("ref_3300, vbat_vol_PD5: %fmV, vbat_vol_PD7: %fmV\n", vbat_vol_PD5, vbat_vol_PD7);