请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TM4C129ENCPDT 工具/软件:Code Composer Studio
你(们)好
我不知道为什么在使用此代码时程序滞留在启动文件的 IntDefaultHandler (void)中、我知道这是因为调用了意外中断、我想知道的是此代码的错误:
void ADCconfigure (uint32_t sysclock) { SysCtlPeripheralEnable (SYSCTL_Periph_ADC0); SysCtlPeripheralSlepEnable (SYSCTL_Periph_ADC0); ADCClockConfigSet (ADC0_BASE、ADC_CClock_SRC_PIOSC | ADC_CClock_RATE_FULL、1); //时钟源(精确内部时钟) ADCSequenceConfigure (ADC0_BASE、1、ADC_TRIGGER_TIMER、0);// SS0-SS3优先级必须始终不同 ADCSequenceStepConfigure (ADC0_BASE、1、0、ADC_CTL_CH0); ADCSequenceStepConfigure (ADC0_BASE、1、1、ADC_CTL_CH1); ADCSequenceStepConfigure (ADC0_BASE、1、2、ADC_CTL_CH2); ADCSequenceStepConfigure (ADC0_BASE、1、3、ADC_CTL_CH3 | ADC_CTL_END | ADC_CTL_IE); ADCSequenceDMAEnable (ADC0_BASE、1); uDMAChannelAttributeDisable (UDMA_CHANGE_ADC1、 UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST | UDMA_ATTR_HIGH_PRIOR| UDMA_ATTR_REQMASK); uDMAChannelControlSet (UDMA_CHANGE_ADC1 | UDMA_PRI_SELECT、 UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_1); uDMAChannelControlSet (UDMA_CHANGE_ADC1 | UDMA_ALT_SELECT、 UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_1); /**/ uDMAChannelTransferSet (UDMA_CHANGE_ADC1 | UDMA_PRI_SELECT、 UDMA_MODE_PINGONG、 (void *)(ADC0_BASE + ADC_O_SSFIFO1)、 G_ui8RxBufA[0]、MEM_buffer_size); uDMAChannelTransferSet (UDMA_CHANGE_ADC1 | UDMA_ALT_SELECT、 UDMA_MODE_PINGONG、 (void *)(ADC0_BASE + ADC_O_SSFIFO1)、 G_ui8RxBufB[0]、MEM_buffer_size); uDMAChannelEnable (UDMA_CHANGE_ADC1); ADCIntEnableEx (ADC0_BASE、ADC_INT_DMA_SS1); IntEnable (INT_ADC0SS1); SysCtlPeripheralEnable (SYSCTL_Periph_ADC1); SysCtlPeripheralSlepEnable (SYSCTL_Periph_ADC1); ADCClockConfigSet (ADC1_base、ADC_CClock_SRC_PIOSC | ADC_CClock_RATE_FULL、1); ADCSequenceConfigure (ADC1_base、1、ADC_TRIGGER_TIMER、1); ADCSequenceStepConfigure (ADC1_base、1、0、ADC_CTL_CH16); ADCSequenceStepConfigure (ADC1_base、1、1、ADC_CTL_CH17); ADCSequenceStepConfigure (ADC1_base、1、2、ADC_CTL_CH18); ADCSequenceStepConfigure (ADC1_base、1、3、ADC_CTL_CH19 | ADC_CTL_END | ADC_CTL_IE);// ADC_CTL_IE 每8个样本触发一次 ADCPhaseDelaySet (ADC1_base、ADC_PHASE_0); ADCSequenceDMAEnable (ADC1_BASE、1); uDMAChannelAttributeDisable (UDMA_CH25_ADC1_1、 UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST | UDMA_ATTR_HIGH_PRIOR| UDMA_ATTR_REQMASK); uDMAChannelControlSet (UDMA_CH25_ADC1_1 | UDMA_PRI_SELECT、 UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_8); uDMAChannelControlSet (UDMA_CH25_ADC1_1 | UDMA_ALT_SELECT、 UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_8); uDMAChannelTransferSet (UDMA_CH25_ADC1_1 | UDMA_PRI_SELECT、 UDMA_MODE_PINGONG、 (void *)(ADC1_base + ADC_O_SSFIFO1)、 G_ui8RxBufA[1]、MEM_buffer_size); uDMAChannelTransferSet (UDMA_CH25_ADC1_1 | UDMA_ALT_SELECT、 UDMA_MODE_PINGONG、 (void *)(ADC1_base + ADC_O_SSFIFO1)、 G_ui8RxBufB[1]、MEM_buffer_size); uDMAChannelAssign (UDMA_CH25_ADC1_1); uDMAChannelEnable (UDMA_CH25_ADC1_1); ADCIntEnableEx (ADC1_base、ADC_INT_DMA_SS1); IntEnable (INT_ADC1SS1); //--------------- SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0); TimerConfigure (TIMER0_BASE、TIMER_CFG_A_PERIODICASE); TimerLoadSet (TIMER0_BASE、TIMER_A、sysclock/(125000)/*(48000*8*2)*/); TimerControlTrigger (TIMER0_BASE、TIMER_A、TRUE); TimerEnable (TIMER0_BASE、TIMER_A); ADCSequenceEnable (ADC0_BASE、1); ADCSequenceEnable (ADC1_base、1); }
使用 IntEnable (INT_ADC0SS1)后、问题出现、在此代码之前、我使用的是 Seq 0、一切正常:
void ADCconfigure (uint32_t sysclock) { SysCtlPeripheralEnable (SYSCTL_Periph_ADC0); SysCtlPeripheralSlepEnable (SYSCTL_Periph_ADC0); ADCClockConfigSet (ADC0_BASE、ADC_CClock_SRC_PIOSC | ADC_CClock_RATE_FULL、1); //时钟源(精确内部时钟) ADCSequenceConfigure (ADC0_BASE、0、ADC_TRIGGER_TIMER、0);// SS0-SS3优先级必须始终不同 ADCSequenceStepConfigure (ADC0_BASE、0、0、ADC_CTL_CH0); // PE3 ADCSequenceStepConfigure (ADC0_BASE、0、1、ADC_CTL_CH1); // PE2 ADCSequenceStepConfigure (ADC0_BASE、0、2、ADC_CTL_CH2); // PE1 ADCSequenceStepConfigure (ADC0_BASE、0、3、ADC_CTL_CH3); // PE0 ADCSequenceStepConfigure (ADC0_BASE、0、4、ADC_CTL_CH0); ADCSequenceStepConfigure (ADC0_BASE、0、5、ADC_CTL_CH1); ADCSequenceStepConfigure (ADC0_BASE、0、6、ADC_CTL_CH2); ADCSequenceStepConfigure (ADC0_BASE、0、7、ADC_CTL_CH3 | ADC_CTL_END | ADC_CTL_IE); ADCSequenceDMAEnable (ADC0_BASE、0); uDMAChannelAttributeDisable (UDMA_CHANGE_ADC0、 UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST | UDMA_ATTR_HIGH_PRIOR| UDMA_ATTR_REQMASK); uDMAChannelControlSet (UDMA_CHANGE_ADC0 | UDMA_PRI_SELECT、 UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_1); uDMAChannelControlSet (UDMA_CHANGE_ADC0 | UDMA_ALT_SELECT、 UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_1); /**/ uDMAChannelTransferSet (UDMA_CHANGE_ADC0 | UDMA_PRI_SELECT、 UDMA_MODE_PINGONG、 (void *)(ADC0_BASE + ADC_O_SSFIFO0)、 G_ui8RxBufA[0]、MEM_buffer_size); uDMAChannelTransferSet (UDMA_CHANGE_ADC0 | UDMA_ALT_SELECT、 UDMA_MODE_PINGONG、 (void *)(ADC0_BASE + ADC_O_SSFIFO0)、 G_ui8RxBufB[0]、MEM_buffer_size); uDMAChannelEnable (UDMA_CHANGE_ADC0); ADCIntEnableEx (ADC0_BASE、ADC_INT_DMA_SS0); IntEnable (INT_ADC0SS0); SysCtlPeripheralEnable (SYSCTL_Periph_ADC1); SysCtlPeripheralSlepEnable (SYSCTL_Periph_ADC1); ADCClockConfigSet (ADC1_base、ADC_CClock_SRC_PIOSC | ADC_CClock_RATE_FULL、1); ADCSequenceConfigure (ADC1_base、0、ADC_TRIGGER_TIMER、1); ADCSequenceStepConfigure (ADC1_base、0、0、ADC_CTL_CH16); //PK1 ADCSequenceStepConfigure (ADC1_base、0、1、ADC_CTL_CH17); //PK2 ADCSequenceStepConfigure (ADC1_base、0、2、ADC_CTL_CH18); //PK3 ADCSequenceStepConfigure (ADC1_base、0、3、ADC_CTL_CH19); //PK0 ADCSequenceStepConfigure (ADC1_base、0、4、ADC_CTL_CH16); ADCSequenceStepConfigure (ADC1_base、0、5、ADC_CTL_CH17); ADCSequenceStepConfigure (ADC1_base、0、6、ADC_CTL_CH18); ADCSequenceStepConfigure (ADC1_base、0、7、ADC_CTL_CH19 | ADC_CTL_END | ADC_CTL_IE);// ADC_CTL_IE 每8个样本触发一次 ADCPhaseDelaySet (ADC1_base、ADC_PHASE_0); ADCSequenceDMAEnable (ADC1_BASE、0); uDMAChannelAttributeDisable (UDMA_CH24_ADC1_0、 UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST | UDMA_ATTR_HIGH_PRIOR| UDMA_ATTR_REQMASK); uDMAChannelControlSet (UDMA_CH24_ADC1_0 | UDMA_PRI_SELECT、 UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_8); uDMAChannelControlSet (UDMA_CH24_ADC1_0 | UDMA_ALT_SELECT、 UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_8); uDMAChannelTransferSet (UDMA_CH24_ADC1_0 | UDMA_PRI_SELECT、 UDMA_MODE_PINGONG、 (void *)(ADC1_base + ADC_O_SSFIFO0)、 G_ui8RxBufA[1]、MEM_buffer_size); uDMAChannelTransferSet (UDMA_CH24_ADC1_0 | UDMA_ALT_SELECT、 UDMA_MODE_PINGONG、 (void *)(ADC1_base + ADC_O_SSFIFO0)、 G_ui8RxBufB[1]、MEM_buffer_size); uDMAChannelAssign (UDMA_CH24_ADC1_0); uDMAChannelEnable (UDMA_CH24_ADC1_0); ADCIntEnableEx (ADC1_base、ADC_INT_DMA_SS0); IntEnable (INT_ADC1SS0); //--------------- SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0); TimerConfigure (TIMER0_BASE、TIMER_CFG_A_PERIODICASE); TimerLoadSet (TIMER0_BASE、TIMER_A、sysclock/(125000)/*(48000*8*2)*/); TimerControlTrigger (TIMER0_BASE、TIMER_A、TRUE); TimerEnable (TIMER0_BASE、TIMER_A); ADCSequenceEnable (ADC0_BASE、0); ADCSequenceEnable (ADC1_base、0); }
我的 ADC Seq1 DMA 配置可能有什么问题????