主题中讨论的其他器件:TM4C123GH6PM
您好!
我正在努力制定一个具有以下功能的简单方案:
让周期性计时器>触发并完成采样后执行 ADC 序列>完成采样后调用 ADC0序列 ISR。
我们的想法是在稍后将其用于控制应用并进入中断、在中断中控制律将被定期执行并且采样已经完成。 我知道、仅仅使用周期性中断并从此处为 ADC 使用处理器触发器会更简单、但我认为最好在采样完成后进入中断。
在调试屏幕中、我可以看到 ADC0的 FIFO 0正在更新、并且寄存器 ADC_RIS 也设置为1。 这向我表明正在进行采样并且寄存器中的 ISR 标志正在被置位、但是我的代码永远不会进入中断处理程序。
请告诉我您是否检测到我的代码中存在错误或缺失可能导致这种情况发生的东西。 此外、我对 C 语言和嵌入式编程比较陌生、只会体验到 ARDUINOS、因此我的编码风格的任何评论也会非常受人的喜欢。
我不会放置 startup.c 代码、不会再执行 POST、但中断被声明为 extern 函数、并且也被声明在 ADC sequence0行中。
#include #include #include "inc/tm4c123gh6m.h" #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "driverlib/debug.h" #include "driverlib/sysctl.h" #include "driverlib/adc.h" #include "driverlib/interrupt.ide" #volatile rtiveatile r.id.idt.h ;"voltidtatile r.idtatile/id.id.idt.idt.idt.ide"#include "voltatile r.idtatile r.idt.idt.idt.idt.idt.idt.id.atilot uint32_t ui32TimerLoad; SysCtlClockSet (SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHz); SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0); SysCtlPeripheralEnable (SYSCTL_Periph_ADC0); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE); TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE); TimerADCEventSet (TIMER0_BASE、TIMER_ADC_TIMEOUT_A); TimerControlTrigger (TIMER0_BASE、TIMER_A、TRUE); ui32TimerLoad =(SysCtlClockGet ()/15000); TimerLoadSet (TIMER0_BASE、TIMER_A、ui32TimerLoad -1); GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3); ADCHardwareOversampleConfigure (ADC0_BASE、8); ADCSequenceConfigure (ADC0_BASE、0、ADC_TRIGGER_TIMER、0); ADCSequenceStepConfigure (ADC0_BASE、0、0、ADC_CTL_CH0|ADC_CTL_IE|ADC_CTL_END); ADCSequenceEnable (ADC0_BASE、0); GPIOPinTypeGPIOOutput (GPIO_Porte _BASE、GPIO_PIN_1); ADCIntEnable (ADC0_BASE、0); IntMasterEnable(); TimerEnable (TIMER0_BASE、TIMER_A); GPIOPinWrite (GPIO_Porte _BASE、GPIO_PIN_1、0); while (1){ SysCtlDelay (2000000); GPIOPinWrite (GPIO_Porte _BASE、GPIO_PIN_1、2); SysCtlDelay (2000000); GPIOPinWrite (GPIO_Porte _BASE、GPIO_PIN_1、0); } } void ADC0Sequence0IntHandler (void){ ADCIntClear (ADC0_BASE、0); ADCSequenceDataGet (ADC0_BASE、1、ui32VoltageRead); 电压=(ui32VoltageRad[1]/4095.0)*3.3; }
我添加到 tm4c123gh6m_startup_ccs.c 中的代码、粗体显示:
extern void ADC0Sequence0IntHandler (void);
和
IntDefaultHandler、 //正交编码器0
ADC0Sequence0IntHandler、 // ADC Sequence 0
IntDefaultHandler、 // ADC 序列1.