MAP_ADC14_enableInterrupt
时间: 2023-10-08 13:12:57 浏览: 46
MAP_ADC14_enableInterrupt函数是用来使能ADC14模块的中断功能的。在MSP432P401R LaunchPad中,ADC14模块是原生的14位SAR模数转换器,通过软件过采样支持高达16位的精度。该模块实现了一个14位SAR内核、样本选择控制和多达32个独立的转换和控制缓冲器。转换和控制缓冲器允许转换和存储多达32个独立的ADC样本,而无需任何CPU干预。通过调用MAP_ADC14_enableInterrupt函数,可以使能ADC14模块的中断功能,从而在ADC转换完成时触发中断。这样可以及时处理转换结果并进行后续操作。
#### 引用[.reference_title]
- *1* *2* *3* [MSP432P401R学习:ADC](https://blog.csdn.net/qq_44360908/article/details/120110306)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
相关问题
void light_init(void) { MAP_WDT_A_holdTimer();//关闭看门狗 curADCResult = 0;//参数初始化 //配置Flash MAP_FlashCtl_setWaitState(FLASH_BANK0, 2); MAP_FlashCtl_setWaitState(FLASH_BANK1, 2); //设置DCO 为48MHz MAP_PCM_setPowerState(PCM_AM_LDO_VCORE1); //MAP_CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_48); //使能FPU,进行小数点运算 MAP_FPU_enableModule(); MAP_FPU_enableLazyStacking(); //从这里开始配置ADC MAP_ADC14_enableModule(); //时钟配置 MAP_ADC14_initModule(ADC_CLOCKSOURCE_MCLK, ADC_PREDIVIDER_1, ADC_DIVIDER_4, 0); //MAP_ADC14_initModule(ADC_CLOCKSOURCE_ACLK,0,0,0); //GPIO配置,将P5.5配置为ADC输入 MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5 , GPIO_PIN5, GPIO_TERTIARY_MODULE_FUNCTION); //配置ADC存储器、通道、采样方式 MAP_ADC14_configureSingleSampleMode(ADC_MEM0, true); MAP_ADC14_configureConversionMemory(ADC_MEM0, ADC_VREFPOS_AVCC_VREFNEG_VSS, ADC_INPUT_A0, false); //配置采样定时器 MAP_ADC14_enableSampleTimer(ADC_MANUAL_ITERATION); //使能转换 MAP_ADC14_enableConversion(); MAP_ADC14_toggleConversionTrigger(); //中断配置 MAP_ADC14_enableInterrupt(ADC_INT0); MAP_Interrupt_enableInterrupt(INT_ADC14); MAP_Interrupt_enableMaster(); } void ADC14_IRQHandler(void) { uint64_t status = MAP_ADC14_getEnabledInterruptStatus(); MAP_ADC14_clearInterruptFlag(status);//清除中断标志 if (ADC_INT0 & status) { curADCResult = MAP_ADC14_getResult(ADC_MEM0);//得到ADC转结果 normalizedADCRes = (curADCResult * 3.3) / 16384;//结果转换为电压 //printf("%d\n", normalizedADCRes); //printf("%f\n", normalizedADCRes); //printf("%f\n", 3.3); //printf("%d.%d\n", ???); MAP_ADC14_toggleConversionTrigger();//手动开启ADC转换 } } 请将它改为DCO为6MHz的msp432的代码
void light_init(void)
{
MAP_WDT_A_holdTimer(); //关闭看门狗
curADCResult = 0; //参数初始化
//配置Flash
MAP_FlashCtl_setWaitState(FLASH_BANK0, 2);
MAP_FlashCtl_setWaitState(FLASH_BANK1, 2);
//设置DCO为6MHz
MAP_CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_6);
//使能FPU,进行小数点运算
MAP_FPU_enableModule();
MAP_FPU_enableLazyStacking();
//从这里开始配置ADC
MAP_ADC14_enableModule();
//时钟配置
MAP_ADC14_initModule(ADC_CLOCKSOURCE_MCLK, ADC_PREDIVIDER_1, ADC_DIVIDER_4, 0);
//GPIO配置,将P5.5配置为ADC输入
MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5, GPIO_PIN5, GPIO_TERTIARY_MODULE_FUNCTION);
//配置ADC存储器、通道、采样方式
MAP_ADC14_configureSingleSampleMode(ADC_MEM0, true);
MAP_ADC14_configureConversionMemory(ADC_MEM0, ADC_VREFPOS_AVCC_VREFNEG_VSS, ADC_INPUT_A0, false);
//配置采样定时器
MAP_ADC14_enableSampleTimer(ADC_MANUAL_ITERATION);
//使能转换
MAP_ADC14_enableConversion();
MAP_ADC14_toggleConversionTrigger();
//中断配置
MAP_ADC14_enableInterrupt(ADC_INT0);
MAP_Interrupt_enableInterrupt(INT_ADC14);
MAP_Interrupt_enableMaster();
}
void ADC14_IRQHandler(void)
{
uint64_t status = MAP_ADC14_getEnabledInterruptStatus();
MAP_ADC14_clearInterruptFlag(status); //清除中断标志
if (ADC_INT0 & status)
{
curADCResult = MAP_ADC14_getResult(ADC_MEM0); //得到ADC转结果
normalizedADCRes = (curADCResult * 3.3) / 16384; //结果转换为电压
//printf("%d\n", normalizedADCRes);
//printf("%f\n", normalizedADCRes);
//printf("%f\n", 3.3);
//printf("%d.%d\n", ???);
MAP_ADC14_toggleConversionTrigger(); //手动开启ADC转换
}
}
MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5, GPIO_PIN5 | GPIO_PIN4, GPIO_TERTIARY_MODULE_FUNCTION); MAP_ADC14_configureMultiSequenceMode(ADC_MEM0, ADC_MEM1, true); //多通道配置 多次转化true MAP_ADC14_configureConversionMemory(ADC_MEM0, ADC_VREFPOS_INTBUF_VREFNEG_VSS, ADC_INPUT_A0, false); MAP_ADC14_configureConversionMemory(ADC_MEM1, ADC_VREFPOS_INTBUF_VREFNEG_VSS, ADC_INPUT_A1, false); MAP_ADC14_enableInterrupt(ADC_INT1);
这段代码是在使用 MSP432 微控制器的驱动库进行配置和初始化 ADC14 模块。让我逐行解释给您听:
1. `MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P5, GPIO_PIN5 | GPIO_PIN4, GPIO_TERTIARY_MODULE_FUNCTION);`
这行代码将 P5.5 和 P5.4 引脚配置为 ADC14 输入模式,并将其设置为第三功能模块。
2. `MAP_ADC14_configureMultiSequenceMode(ADC_MEM0, ADC_MEM1, true);`
这行代码配置 ADC14 为多通道模式,可以进行多次转换。`ADC_MEM0` 和 `ADC_MEM1` 表示两个转换存储器,`true` 表示启用多通道模式。
3. `MAP_ADC14_configureConversionMemory(ADC_MEM0, ADC_VREFPOS_INTBUF_VREFNEG_VSS, ADC_INPUT_A0, false);`
这行代码配置 ADC14 的转换存储器 `ADC_MEM0`。`ADC_VREFPOS_INTBUF_VREFNEG_VSS` 表示使用内部缓冲器作为参考电压和地,`ADC_INPUT_A0` 表示选择 A0 引脚作为输入通道,`false` 表示禁用差分模式。
4. `MAP_ADC14_configureConversionMemory(ADC_MEM1, ADC_VREFPOS_INTBUF_VREFNEG_VSS, ADC_INPUT_A1, false);`
这行代码配置 ADC14 的转换存储器 `ADC_MEM1`。与上一行类似,这里选择的是 A1 引脚作为输入通道。
5. `MAP_ADC14_enableInterrupt(ADC_INT1);`
这行代码启用 ADC14 的中断功能,当转换完成时会触发 ADC_INT1 中断。
希望这能帮助您理解这段代码的作用。如果您有任何进一步的问题,请随时提问。