好的、所以我认为这很容易、但显然我做了一些错误的事情、这并不是问题的根本原因。 我从 out_for_box 示例开始。 我可以轻松地只读取一个通道。 然后、我尝试将其设置为读取一系列通道 P1.1、然后读取 P1.0。 我的理解是、您选择的最高信道、序列发生器会对信道进行倒计数、因此我应该获得两个读数。 我还没有解析读数的逻辑、这对现在来说还不错。 我可以处理它。 这似乎不起作用、因为我希望获得交替的 ADC 读数值、但情况并非如此。 我在这里必须缺少一些细节。 注意: ADC 中断例程中的额外内容只是从开箱即用示例中的剩余部分、在该示例中、它们将 ADC 结果写入 FRAM。
/* main.c */ int main (void){ //停止 WDT WDT_A_HOLD (WDT_A_base); initClockTo16MHz(); inituart(); /*初始化外设*/ initGPIO(); initPWM(); initi2C(); //在启动期间切换 LED1 GPIO_setOutputHighOnPin (GPIO_PORT_P1、GPIO_PIN0); _delay_cycles (10000); GPIO_setOutputLowOnPin (GPIO_PORT_P1、GPIO_PIN0); EUSCI_A_UART_ENABLE (EUSCI_A0_BASE); initSlepTimer (timer_rate);// 128Hz while (1){ //lightSample(); n0Sample(); uintoa( buf、adc_Conversion_result ); transmitString( buf ); _bis_SR_register (LPM3_bits + GIE); } void initSlepTimer (uint16_t period){ //启动计时器 Timer_B_clearTimerInterrupt (timer_B0_BASE); Timer_B_initUpModeParam ={0}; param.clockSource = timer_B_CLOCKSOURCE_ACLK; param.clockSourceDivider = timer_B_CLOCKSOURCE_divider; param.timerPeriod =周期; param.timerInterruptEnable_TBIE = Timer_B_TBIE_INTERRUPT_DISABLE; param.captureCompareInterruptEnable_CCR0_CCIE = TIMER_B_CAPTURECMPARE INTERRUPT_ENABLE; param.timerClear = timer_B_do_clear; param.startTimer = true; Timer_B_initUpMode (timer_B0_BASE、¶m); } void enable_ADC10 (uint8_t ADC_CHANNEL){ //初始化 ADC 模块 // * ADC 模块的基地址 *使用内部 ADC 位作为采样/保持信号来启动转换 *使用 MODOSC 5MHZ 数字振荡器作为时钟源 *使用 ADC_SOURCE_ADCC_INIT 1、ADC_SOURCE_ADCC_RAPIDER *默认值*使用 ADC_OCE_ADCC_INIT 1、ADCC_CL1、ADC_SOURCE_SOURCE_ADC_SC_SOURCE_ADCC_CL1 ADC_setDataReadBackFormat (ADC_base、 ADC_UNsigned_binary);//AP ADC_ENABLE (ADC_base); // * ADC 模块的基地址 * 16个时钟周期的采样/保持 *不启用多个采样 */ ADC_setupSamplingTimer (ADC_base、ADC_CYCLEHOLD_16_cycles、ADC_MULTIPLESAMPLESENABLE)、ADC_CELPM_16个时钟周期 ;ADC_CYCL_CL_CL_CLUST_HOLLE_CYCLE、ADC_CYCLUST_CYCLUST_CYCLUSH ADC_MULTIPLESAMPLESDISABLE); ADC_CONFIGureMemory (ADC_base、ADC_CHANNEL、ADC_VREFPS_AVCC、ADC_VREFNEG_AVSS); // driverlib 中 A1的通道错误映射? ADC_clearInterrupt (ADC_base、ADC_completed_interrupt); //启用存储器缓冲器中断 ADC_enableInterrupt (ADC_base、ADC_completed_interrupt); } void disable_ADC10 (void){ ADC_disableConversions (ADC_base、0); ADC_disable (ADC_base); } void n0Sample (void) {void ENABLE_ADC10 (ADC_INPUT_VEREF_N); _DELAY_CYCLES (15); //启用并开始转换 //在单通道、单次转换模式中 //ADC_startConversion (ADC_base、ADC_SINGLECHANNEL); ADC_startConversion (ADC_base、ADC_SEQOFCHANNELS);//将此更改为单个序列不适用于 ADC_SEQOFCHANNELS //LPM3、ADC 转换完成将强制退出 _bis_SR_register (LPM3_bits + GIE); disable_ADC10 (); } void initGPIO (void){ //将 Px.x 设定为输出方向 //P1DIR |= 0xFF;//输出 //P1OUT = 0x00; P1DIR |= 0x00;//输入 //P2DIR |= 0xFF; P2DIR |= 0b00000011; P2OUT = 0x00; //选择 P2.0作为 PWM 计时器输出功能 GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P2、GPIO_PIN0、GPIO_PRIMARY_MODULE_Function); // AP 配置 GPIO P1SEL1 &=~(BIT6 | BIT4); // USCI_A0 UART 操作 P1SEL0 |= BIT6 | BIT7; GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN0); // I2C 引脚 P1SEL0 |= BIT2 | BIT3; P1SEL1 &=~(BIT2 | BIT3); //ADC 引脚 P1SEL0 |= BIT0 | BIT1; P1SEL1 |= BIT0 | BIT1; /* *禁用 GPIO 上电默认高阻抗模式以激活 *先前配置的端口设置 * PMM_unlockLPM5 (); } // ADC 中断服务例程 #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__) #pragma vector=ADC_vector __interrupt void ADC_ISR (void) #Elif defined (__GIC_) void ___attribute_isr ( nc )(void)(nc) interrupt! #endif { //获取先前的写保护设置 uint8_t state = HWREG8 (SYS_base + OFS_SYSCFG0_L); #ifdef DFWP uint8_t WP = DFWP | PFWP; #else uint8_t WP = PFWP; #endif #ifdef FRWPPW HWREG16 (SYS_BASE + OFS_SYSCFG0)= FWPW |(~和 Δ V WP); #else HWREG8 (SYS_BASE + OFS_SYSCFG0_L)&&~WP; #endif ADC_Conversion_Result = ADCMEM0; //恢复以前的写保护设置 #ifdef FRWPPW HWREG16 (SYS_BASE + OFS_SYSCFG0)= FWPW | STANY; #else HWREG8 (SYS_BASE + OFS_SYSCFG0_L)=状态; #endif __BIC_SR_REGISTER_ON_EXIT (LPM3_BITS); //睡眠定时器退出 LPM3 }