This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
你好。 我有下一个任务。 我接收来自压实器的2个信号、看起来像50% PWM 100Hz、并彼此相移90度。 每次切换信号时、我需要使 ADC 采样(每周期4次或400Hz)。 我为该任务编写了下一个代码。
static void adcInterruptHandler(){ unsigned int state = ADCIntStatus (ADC0_BASE、0、true); ADCIntClear (ADC0_BASE、0); int32_t tmp[2]; ADCSequenceDataGet (ADC0_BASE、0、(uint32_t *) tmp); ADCSequenceDataGet (ADC0_BASE、0、(uint32_t *) tmp+1); } 静态空 initAdc (){ SysCtlPeripheralEnable (SYSCTL_Periph_ADC0); while (!SysCtlPeripheralReady (SYSCTL_Periph_ADC0)); ADCSequenceConfigure (ADC0_BASE、0、ADC_TRIGGER_EXTERNAL、0); //设置序列 ADCSequenceStepConfigure (ADC0_BASE、0、0、ADC_CTL_CH1); ADCSequenceStepConfigure (ADC0_BASE、0、1、ADC_CTL_CH0 | ADC_CTL_IE | ADC_CTL_END); //中断设置 ADCIntRegister (ADC0_BASE、0、adcInterruptHandler); ADCIntEnable (ADC0_BASE、0); ADCSequenceEnable (ADC0_BASE、0); ADCIntClear (ADC0_BASE、0); } 静态空 initGpioInterrupt (){ SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF); GPIOPinTypeGPIOInput (GPIO_PORTF_BASE、GPIO_PIN_0); GPIOPinTypeGPIOInput (GPIO_PORTF_BASE、GPIO_PIN_4); GPIOPadConfigSet (GPIO_PORTF_BASE、GPIO_PIN_0、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD_WPU); GPIOPadConfigSet (GPIO_PORTF_BASE、GPIO_PIN_4、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD_WPU); GPIOIntTypeSet (GPIO_PORTF_BASE、GPIO_PIN_0、GPIO_BLE_ARES); GPIOIntTypeSet (GPIO_PORTF_BASE、GPIO_PIN_4、GPIO_BLE_ARES); GPIOADCTriggerEnable (GPIO_PORTF_BASE、GPIO_PIN_0); GPIOADCTriggerEnable (GPIO_PORTF_BASE、GPIO_PIN_4); }
当我使用按钮模拟事件时、此代码运行良好、但在实际环境中、它会转到 FaultISR。 看起来、信号在一个瞬间内会发生几次抖动和触发事件。 我需要通过跳过冗余事件来解决此故障、但如何解决?
您的输入看起来是什么样的? 您如何知道它是毛刺脉冲?
尝试使用 GPIO_FALLING_EDGE 而不是 GPIO_Bot_Edges 的实验。 您是否仍在运行 FaultISR?
如果您确定输入存在干扰、则需要对输入进行去抖。
您好、Charles、
应该指出的是-此外:
在故障条件下、示波器电容器会极大地"加快、简化、增强"诊断功能。
减去 PF0的解锁-海报的(几乎)工作报告-似乎"已准备好辩论"。
您好 CB1、
再次感谢。 你是对的。 必须先解锁 PF0并将其提交、然后才能将其用作 GPIO。
GPIOCR 是确认寄存器。 GPIOCR 寄存器的值决定了哪个
GPIOAFSEL、GPIOPUR、GPIOPDR 和 GPIODEN 寄存器中的位在 A 时被确认
执行到这些寄存器的写入。 如果 GPIOCR 寄存器中的某位被清零、那么数据将被写入
GPIOAFSEL、GPIOPUR、GPIOPDR 或 GPIODEN 寄存器中相应的位不能
并保留其先前的值。 如果 GPIOCR 寄存器中的某位被置位、则数据为
写入 GPIOAFSEL、GPIOPUR、GPIOPDR 或 GPIODEN 寄存器的相应位
被提交到寄存器并反映新值。