请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP432P401R 主题中讨论的其他器件:Energia
大家好、
我原以为我已经完成了、但今天、我无法通过 TimerA 获得实际中断的多通道转换。 我忘记或不理解什么?
提前感谢您的任何想法!
Rob
以下是头文件:
/* * adc14.h * *创建日期:2017年5月2日 * 作者:Frohro */ #ifndef ADC14_MULTI_H_ #define ADC14_MULTI_H_ //#include #include /*标准包括*/ #include #include #include #include #define SMCLK_FREQUENCY 48000000 #define SAMPLE_FREQUENCY 8000 #define SAMPLE_LENGTH 128 //void ADC14_IRQHandler (void); // Timer_A 连续模式配置参数*/ const Timer_A_UpModeConfig upModeConfig = { TIMER_A_CLOCKSOURCE_SMCLK、 // SMCLK 时钟源 TIMER_A_CLOCKSOURCE_DEVIDER_1、 // SMCLK/1 = 48MHz (SMCLK_FREQUENCY / SAMPLE_FREQUENCY)/4、//计数数量 //(/4是因为在 Energia 设置中 SMCLK 被4分频、这是串行类所需的) timer_a_TAIE_interrupt_disable、 //禁用计时器 ISR TIMER_A_CCIE_CCR0_INTERRUPT_DISABLE,//禁用 CCR0 TIMER_A_DO 清除 //清除计数 器}; // Timer_A 比较配置参数*/ const Timer_A_CompareModeConfig compareConfig = { timer_A_CAPTUREACMPARE 寄存器_1、 //使用 CCR1 TIMER_A_CAPTURECMOLE_INTERRUPT_DISABLE、//禁用 CCR 中断 TIMER_A_OUTPUTMODE_SET_RESET、 //切换输出位 (SMCLK_frequisition/sample_frequency) }; 静态 uint16_t resultsBuffer[8]; extern uint16_t refRe[sample_length]; extern uint16_t refIM[sample_length]; extern uint16_t measRe[sample_length]; extern uint16_t measim[sample_length]; int adc14_main (void); void startSampling (void); #endif // ADC14Vna_H_*
这是主程序:
/* -------------------------------- * MSP432 DriverLib - v4_00_00_11 *---------------------- * *-版权所有-、BSD、BSD *版权所有(c) 2017、德州仪器(TI)公司 *保留所有权利。 * * 只要 符合以下条件*、允许以源代码和二进制形式重新分发和使用: * *源代码的重新分发必须保留上述版权 声明*、此条件列表和以下免责声明。 * ***二进制形式的再发行必须在 *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。 * ***未经 事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。 * *本软件由版权所有者和贡献者"按原样"提供 *、 不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或 *贡献者都不对任何直接、间接、偶然、特殊、 *模范、 或相应的损害(包括但不限于 *采购替代产品或服务;丧失使用、数据或利润; *或业务中断)、但出于任何责任理论 、*无论是在合同中、严格责任还是由于 使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他) 、*即使已获悉可能会发生此类损坏。 *--/版权--*/ * MSP432 ADC14 -多通道无重复采样 * 说明:在此代码示例中、 用户 A 演示了能够扫描多个* ADC 通道的功能 DriverLib API。 转换 *内存寄存器 ADC_MEM0 - ADC_MEM3被配置为分别读取 A6、A12、A10、A8的转换*结果。 转换被启用、然后使用 一个软件切换来*切换采样。 重复模式未启用、仅采样 *发生一次(用户应暂停调试器以观察 *结果)。 在采集完最终样本后、 * ADC_MEM3的中断被触发、结果存储在 resultsBuffer 缓冲区中。 * * MSP432P401 * ---------- * /|\| | * || | * -|RST P4.7 |<-- A6 (模拟输入、测量值、实际值) * | P4.1 |<-- A12 (模拟输入、测量值、虚数) * | P4.3 |<-- A10 (模拟输入、基准实数) * | P4.5 |<-- A8 (模拟输入、基准虚数) * | | * | | * 4.1、4.3、4.5、4.7是最终所需的引脚。 * *作者:Timothy Logan *这是 Rob Frohne 修改的、以在8kHz 采样率下执行多个 ADC。 秘书长的报告 / #include "adc14_multi.h" uint16_t refRe[sample_length]; uint16_t refIm[sample_length]; uint16_t measedonRe[sample_length]; uint16_t measIm[sample_length]; extern bool adc; bool sendMeasurement = false; int numerF requencestoMeasure、frequencyIndex; float refSum、measSum; botonool adc = false; int main (void) { int i; //停止 WDT WDT_A_HOLDTimer(); interrupt_enableSlepOnIsrExit(); //Hwi_Params 参数; //寄存器中断(设置 IRQ 矢量) //Hwi_Params_init (¶ms); //Hwi_create (INT_ADC14、ADC14_IRQHandler、¶ms、0); //配置调试引脚作为调试输出... ///map_GPIO_setAsOutputPin (GPIO_PORT_P4、GPIO_PIN1); MAP_GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN0); //设置为 Vcore1 PCM_setCoreVoltageLevel (PCM_VCORE1); //设置为使用 DCDC PCM_setPowerState (PCM_AM_DCDC_VCORE1); //初始化时钟系统 /*由于我们需要 Energia 时钟设置、这些注释被注释掉。 。 *相应调整计时器的数据结构。 时间 *转换之间的时间可能是这些转换的四倍 *参数、但这似乎是实现一切的最简单方法 *立即一起玩。 // * CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY 48); CS_initClockSignal (CS_MCLK、CS_DCOCLK_SELECT、CS_Clock_divider); CS_initClockSignal (CS_HSMCLK、CS_DCOCLK_select、CS_Clock_divider); CS_initClockSignal (CS_SMCLK、CS_DCOCLK_SELECT、CS_Clock_divider _1); CS_initClockSignal (CS_ACLK、CS_REFOCLK_select、CS_clock_divider);*/ //零填充缓冲器 memset (resultsBuffer、0x00、8); //将基准电压设置为2.5并启用基准 Ref_A_setReferenceVoltage (REF_A_VREF2_5V); Ref_a_enableReferenceVoltage(); //初始化 ADC (MCLK/1/1) ADC14_enableModule(); ADC14_initModule (ADC_CLOCKSOURCE_MCLK、ADC_PREDIVIDER_1、ADC_DIVIDER_1、0); //Configuring GPIO for Analog In GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P4、 GPIO_PIN1 | GPIO_PIN3 | GPIO_PIN5 | GPIO_PIN7、GPIO_TICE_MODULE_FUNCTION); //配置 ADC 存储器(ADC_MEM0 - ADC_MEM3 (A6、A12、A10、A8)、不重复) //具有内部2.5V 基准 ADC14_configureMultiSequenceMode (ADC_MEM0、ADC_MEM3、false);//无重复模式。 ADC14_configureConversionMemory (ADC_MEM0、 ADC_VREFPOS_INTBUF_VREFNEG_VSS、 ADC_INPUT_A6、ADC_NONDIFFERENTIAL_INPUTES); ADC14_configureConversionMemory (ADC_MEM1、 ADC_VREFPOS_INTBUF_VREFNEG_VSS、 ADC_INPUT_A12、ADC_NONDIFFERENTIAL 输入); ADC14_configureConversionMemory (ADC_MEM2、 ADC_VREFPOS_INTBUF_VREFNEG_VSS、 ADC_INPUT_A10、ADC_NONDIFFERENTIAL 输入); ADC14_configureConversionMemory (ADC_MEM3、 ADC_VREFPOS_INTBUF_VREFNEG_VSS、 ADC_INPUT_A8、ADC_NONDIFFERENTIAL 输入); //在通道3 (序列结束)上进行转换时启用中断 //完成并启用转换(我假设这意味着存储器不是模拟通道。) ADC14_enableInterrupt (ADC_INT3); ADC14_setSampleHoldTime (ADC_PULSE_WIDTH_4、ADC_PULSE_WIDTH_4); //将 Timer_A 配置为连续模式,如上面的 upModeConfig 中的设置 Timer_A_configureUpMode (timer_A0_BASE、&upModeConfig); //配置 CCR1中的 Timer_A0以按上述 compareConfig 中设置的那样触发 Timer_A_initCompare (timer_A0_BASE、&compareConfig); //将样本触发器配置为来自 Timer_A0并进行设置 //在触发后自动迭代 ADC14_setSampleHoldTrigger (ADC_TRIGGER_SOURCE1、false); //将采样计时器设置为自动单步执行序列 //转换。 ADC14_enableSampleTimer (ADC_AUTOMODIFY_DIOTIVation); //map_ADC14_toggleConversionTrigger (); //启用中断 INTERRUPT_enableInterrupt (INT_ADC14); interrupt_enableMaster(); //启动计时器 Timer_A_startCounter (timer_A0_BASE、timer_A_up_mode); ADC14_enableConversion(); 对于(i=0;i