主题中讨论的其他器件:TM4C123、 EK-TM4C1294XL
工具/软件:Code Composer Studio
我将 CryptoConnected Launchpad 与 TM4C129E、CCS Studio v6.2、TivaWare 中的 driverlib 搭配使用。
我正在尝试使用 ADC0、TIMER0 负责触发转换。
在以下代码中、Timer1每隔3秒中断一次、通常情况下、切换电路板上的 LED。 TIMER0被配置为在超时时触发 ADC0。
但是、它无法正常工作。 有时、中断会发生、它会达到我在 ISR 内部设置的断点、转换读数正常、并且它会一直工作、直到我关闭 CCS 或重新启动我的 PC。 但是、在大多数情况下、程序不起作用、它会停留在无限循环中等待中断、并且永远不会发生。 我已经查看了寄存器映射、在 NVIC 和计时器寄存器上一切似乎都正常。
我不知道问题在哪里。
/* ISR */ void ISR_Timer1A (){ TimerIntClear (Timer1_base、timer_TINA_TIMEOUT); if (led3s = 0){ GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、GPIO_PIN_0);GPIOPIN_PIN_0 (GPIOPORTN_BASE 、GPIOP_PIN) GPIO_PIN_2); led3s = 1; }否则{ led3s = 0; GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、0); GPIOPinWrite (GPIO_PORTN_BASE、 GPIO_PIN_2、0); } return; } void ISR_ADC0 (){ ADCIntClear (ADC0_BASE、3); while (ADCBusy (ADC0_BASE)); ADCSequenceDataGet (ADC0_BASE、3、 bufferTemp); IF (ledConv =0){ GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、GPIO_PIN_1); GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_3、 GPIO_PIN_3); ledConv = 1; }否则{ ledConv = 0; GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、0); GPIOPinWrite (GPIO_PORTN_BASE、 GPIO_PIN_3、0); } 返回; } // *主循环 * / int main (void){ led3s = 0; ledConv = 0; SysCtlClockFreqSet ((SYSCTL_USE_OSC | SYSCTL_OSC_INT | SYSC_MAIN_OSC_DIS | SysCtlSysClockFreqSet)(SYSC_Periptl );SysCtl_PowerOn_SysTHRESHO_0_SysT1_SysT1_SysTHREST_OPTL (SysT1_SysT1_SysT1_SysTHREST_OPTL) SysCtlPeripheralPowerOn (SYSCTL_Periph_Timer1); SysCtlPeripheralPowerOn (SYSCTL_Periph_ADC0); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE); SysCtlPeripheralEnable (SYSCTL_Periph_GPCtl); while (!SysCtlPeriph_GPIOE) GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3); GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_5); SysPeripheralEnable (SYSCTL_Periph_ADC0); while (!SYSCCTL_PERIPCtl_AD0_PeripheralEnable);while (SysCtl_SysCtl_Periptl) ADCClockConfigSet (ADC0_BASE、(ADC_CClock_SRC_PIOSC | ADC_CClock_RATE_Half)、1); ADCPhaseDelaySet (ADC0_BASE、ADC_PHASE_0); ADCReferenceSet (ADC0_BASE、ADC_REF_INT); ADCHardwareOversampleConfigure (ADC0_BASE、64); ADCSequenceDisable (ADC0_BASE、 3); ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_PROCESSOR、0); ADCSequenceStepConfigure (ADC0_BASE、3、0、(ADC_CTL_IE | ADC_CTL_END | ADC_CTL_SHOLD_8 | ADC_CTL_CH8)); PeripheralEnable (SYSCTL_PERIPH_TIMER0); while (!SysCtlPeripheralReady (SYSCL_CTL_CH_CH_0);PeripheralEnable (SYSCBLE_TIMER 0);Timer_TIMER 0 (SYSCTRL_TIMER 0) TimerUpdateMode (TIMER0_BASE、TIMER_A、TIMER_UP_LOAD_IMMETRI); TimerClockSourceSet (TIMER0_BASE、TIMER_CLOCK 系统); TimerLoadSet (TIMER0_BASE、TIMER_A、1100); TimerADCEventSet (TIMER0_BASE、TIMER_ADC_TIMEOUT_A); TimerControlTrigger (TIMER0_BASE、TIMER_A、TRUE); SysCtlPeripheralEnable (SYSCTL_Periph_Timer1); while (!SysCtlPeripheralReady (SYSCTL_Periph_Timer1)); TimerConfigure (Timer1_base、timer_CFG_A_PERIODICY_UP); TimerUpdateMode (Timer1_base、timer_A、timer_up_load_immediate); TimerClockSourceSet (Timer1_base、timer_clock_system); TimerLoadSet (Timer1_base、timer_A、48484848); ADCIntRegister (ADC0_BASE、3、* ISR_ADC0); ADCIntClear (ADC0_BASE、3); ADCIntEnableEx (ADC0_BASE、ADC_INT_SS3); IntEnable (INT_ADC0SS3); ADCIntEnable (ADC0_BASE、3); ADCSequenceEnable (ADC0_BASE、3); TimerIntRegister (Timer1_base、timer_A、* ISR_Timer1A); TimerIntEnable (Timer1_base、timer_TINA_TIMEOUT); IntMasterEnable (); TimerEnable (TIMER0_BASE、timer_A); TimerEnable (Timer1_base、timer_A); while (1){ } 返回0; }
谢谢
				
