谢谢你的及时回复。
我的代码跟你说的操作差不多,但不知道为什么切换就不成功呢。请问这跟用实时操作系统有没有关系呢?谢谢!
下面贴出我这边的代码,烦请你帮忙看一下,谢谢!
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ADCDeinit(void) {
outp32(REG_ADC_CON, inp32(REG_ADC_CON) & ~ADC_CON_ADC_EN);
outp32(REG_APBCLK, inp32(REG_APBCLK) & (~ADC_CKE));
outp32(REG_CLKDIV3, inp32(REG_CLKDIV3) & (~((0x03<<19) | (0x03<<16) | (0x5F<<24))));//UPLL 192/4/2 = 24MHz // ch_20220305
outp32(REG_APBIPRST, inp32(REG_APBIPRST) | ADCRST);
outp32(REG_APBIPRST, inp32(REG_APBIPRST) & ~ADCRST);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ADCInit4Cal(void) {
outp32(REG_ADC_CON, inp32(REG_ADC_CON) & (~ADC_CON_ADC_EN)); // ch_20220305
outp32(REG_APBCLK, inp32(REG_APBCLK) & (~ADC_CKE)); // ch_20220305
outp32(REG_APBCLK, inp32(REG_APBCLK) | ADC_CKE);
outp32(REG_CLKDIV3, inp32(REG_CLKDIV3) & (~((0x03<<19) | (0x03<<16) | (0x01<<24))));//UPLL 192/4/2 = 24MHz // ch_20220305
outp32(REG_CLKDIV3, inp32(REG_CLKDIV3) | (0x03<<19) | (0x03<<16) | (0x5F<<24));//UPLL 192/4/2 = 24MHz // ch_20220228 : changed to 47 from 1.
outp32(REG_APBIPRST, inp32(REG_APBIPRST) | ADCRST);
outp32(REG_APBIPRST, inp32(REG_APBIPRST) & ~ADCRST);
outp32(REG_ADC_CON, inp32(REG_ADC_CON) & (~( 0x03 << 14)));//normal mode
//outp32(REG_ADC_DLY, 0x150);
outp32(REG_ADC_CON, inp32(REG_ADC_CON) | ADC_CON_ADC_EN);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ADCInit4Print(void) {
outp32(REG_ADC_CON, inp32(REG_ADC_CON) & (~ADC_CON_ADC_EN)); // ch_20220305
outp32(REG_APBCLK, inp32(REG_APBCLK) & (~ADC_CKE)); // ch_20220305
outp32(REG_APBCLK, inp32(REG_APBCLK) | ADC_CKE);
outp32(REG_CLKDIV3, inp32(REG_CLKDIV3) & (~((0x03<<19) | (0x03<<16) | (0x5F<<24))));//UPLL 192/4/2 = 24MHz // ch_20220305
outp32(REG_CLKDIV3, inp32(REG_CLKDIV3) | (0x03<<19) | (0x03<<16) | (0x02<<24));//UPLL 192/4/2 = 24MHz
outp32(REG_APBIPRST, inp32(REG_APBIPRST) | ADCRST);
outp32(REG_APBIPRST, inp32(REG_APBIPRST) & ~ADCRST);
outp32(REG_ADC_CON, inp32(REG_ADC_CON) & (~( 0x03 << 14)));//normal mode
//outp32(REG_ADC_DLY, 0x150);
outp32(REG_ADC_CON, inp32(REG_ADC_CON) | ADC_CON_ADC_EN);
}
切换前,我都会调用ADCDeinit()去关掉ADC模块。
|