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.

[参考译文] CCS/TM4C129ENCPDT:ADC 中断间歇性工作

Guru**** 2440240 points
Other Parts Discussed in Thread: EK-TM4C1294XL

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/624137/ccs-tm4c129encpdt-adc-interrupt-working-intermittently

器件型号:TM4C129ENCPDT
主题中讨论的其他器件:TM4C123EK-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;
}

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    首先、感谢您使用粘贴代码、它有助于可读性。

    您的代码确实需要额外的空格和注释、因此我们不猜测您要做的是什么、流程很清晰。

    我要做的第一件事是去除过采样。 从不使用它开始、然后将它重新添加到中。

    Robert

    哦、还有一件事。 该构造

    while (!SysCtlPeripheralReady (SYSCTL_Periph_TIMER0)); 

    是一个错误、等待发生。 始终在条件语句块中使用语句块、并始终使用空格。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    海报 Robert 提出了他(通常)深思熟虑的要点。     并且-也许-(HIS)正在遵循使用(正确的代码导入方法)的提醒。

    现在我不使用您的 MCU -但请注意、您的 Timer1 是通过"TIMER_Cfg_A_periodical_up"进行配置的-这会强制它是一个"半宽"计时器。   (即、您得到的是两个-对于一个的价格。)   随后加载 Timer w/4848484848 - Timer1应为"正常" 32位宽度时、计时器将"过流"。   (由于计时器 A 仅为16位) -您必须再次检查 MCU 规格以确认此类"32位"使用是否正确。

    [引用 user="Luiz Felipe K Evaristo"]尝试使用 ADC0、其中  TIMER0负责触发转换

    然而-您的代码显示: "ADC_Trigger_Processor"作为"负责任的触发器"-而不是 Timer0!    这是有冲突的-不是吗?    (在 ADCSequenceConfigure()中找到的代码)。

    通过使用(仅一个)计时器来(暂时)简化代码是否没有什么意义?   首先让它稳定工作-只有在这一目标完成后、我才会增加第二个计时器的复杂性。

    种更系统的(限制范围、确认正确性、然后再继续)方法说明了始终至关重要的"亲吻"、并且"完全不在此处"(但对于外部海报)显然会导致"过于复杂-总是失败-初始用户解决方案!"

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="CB1_MOBILE"]

    然而-您的代码显示: "ADC_Trigger_Processor"作为"负责任的触发器"-而不是 Timer0!    这是有冲突的-不是吗?    (在 ADCSequenceConfigure()中找到的代码)。

    [/报价]

    抱歉、我已将其更改以进行测试、但忘记更改...

    [引用 USER="CB1_MOBILE"]

    通过使用(仅一个)计时器来(暂时)简化代码是否没有什么意义?  

    [/报价]

    我已经完成了这个测试程序、该程序也遵循了 Robert 的建议、但我仍然无法使我的 ADC 正常工作...  

    void ISR_ADC0 (){
    //清除中断
    ADCIntClear (ADC0_BASE、3);
    
    while (ADCBusy (ADC0_BASE)){
    
    
    
    
    
    
    
    
    
    
    //获取转换值 ADCSequenceDataGet (ADC0_BASE、3、bufferTemp);return;}int main (void){//获取转换值 ADCCPtl (SYSC_PERIP0
    
    
    
    
    
    
    
    );SYSC_RESET_SYSC_SYSCL (SYSC_RESET_PERIPH);从 SYSC_SYSC_SYSC_SYSC_SYSC_PERIPT0 (SYSC_RESET_SYSC_SYSC_SYSC_RESETH);
    
    
    SysCtlPeripheralReset (SYSCTL_Periph_ADC0);
    
    //启用 GPIO 端口 E
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
    
    while (!SysCtlPeripheralReady (SYSCC_Periph_GPIOE));{//
    
    
    
    将引脚5设置为 ADC in (AIN8);while (SYSC_PH_ADC0_PH_ADC0
    
    
    
    
    
    
    
    )
    
    ;SYSC_PHASE
    
    
    
    
    (SYSC_ADCP0_ADC0)= SYSC_PHY_ADCP_ADC0);SYSC_PHY_ADC0 (SYSC_PHY_ADC0)
    
    
    //基准=内部3V
    ADCReferenceSet (ADC0_BASE、ADC_REF_INT);
    
    //禁用序列发生器3
    ADCequenceDisable (ADC0_BASE、3);
    
    //配置序列发生器3、从定时器
    ADCSequenceConfigure (ADC0_BASE、3、ADCTRIGGER_TIMER、0)触发;
    
    //配置 ADC0
    
    
    
    寄存器0 (ADCSTAC_0)| ADCSTERR_0 (ADC0)| ADC0 (ADCTRIGGER_ADC0 (ADCTRIGGER_0)寄存器0)| ADC0 (ADC0 (ADCTR_0)
    
    //启用中断
    ADCIntEnable (ADC0_BASE、3);
    
    //启用外部中断
    ADCIntEnableEx (ADC0_BASE、ADC_INT_SS3);
    
    //启用序列发生
    器 ADCSequenceEnable (ADC0_BASE、3);
    
    
    
    //配置定时器0 *
    (SysCtl_INT_SSOP
    
    );//将 Timer_Timer0_TIMER
    
    
    
    
    
    
    
    
    
    设置为系统定时器0 (TIMER 0);Timer_TIMER 0 (TIMER 0) Timer_TIMER (TIMER 0);Timer_TIMER 0 (TIMER 0) Timer_TIMER 设置为系统时
    钟周期定时器(TIMER 0 (TIMER 0);Timer_TIMER 0 (TIMER 0) Timer_TIMER (TIMER 0);Timer_TIMER (TIMER (TIMER 0) Timer_TIMER (TIMER (TIMER 0)
    
    //将事件设置为触发 ADC 作为 TimerA 超时
    TimerADCEventSet (TIMER0_BASE、TIMER_ADC_TIMEOUT_A);
    
    //启用触发
    TimerControlTrigger (TIMER0_BASE、TIMER_A、TRUE);
    
    //加载计时器最大值
    TimerLoadSet (TIMER0_BASE、TIMER_A、10000);
    
    
    
    
    
    
    
    
    
    //启用 TIMER0 (TIMMasterA);//启用 TIMER1);//
    
    
    全部中断
    

    它仍然锁定在无限循环上、中断永远不会发生。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    添加的空格会有所帮助、注释也会如此。 我希望您自己也会发现这一点、尤其是在您继续使用它的情况下。

    这种情况

    //针对 ADC
    ADCIntRegister (ADC0_BASE、3、* ISR_ADC0)的寄存器 ISR;
    

    不正确。 编译器实际上应该抱怨将 void 传递给函数、这不是在语言中定义的内容。 即使函数返回了值、我也不确定它的语法是否正确。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Luiz Felipe K Evaristo"]它仍然锁定在无限循环上、中断永远不会发生。[/quot]

    您是否可以识别(从哪个) MCU 无法逃逸的"无限循环"?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我没有得到它、但编译器没有指出一个错误。 此外、当我为计时器注册一个 ISR 时、它会起作用... 它只是 ADC 的 ISR :(也许是我更改矢量表中的指针吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    主程序中的 while (1)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Luiz Felipe K Evaristo"主程序中的 while (1)

    该循环相当标准-程序"就在那里"-等待中断(转义)并执行函数。

    您确实验证"进入"到计时器 ISR -而不是 ADC ISR 是否正确?

    需要注意的是、您"注册中断"、而不是将它们放在"启动文件"中。   大多数用户在采用"启动文件"方法时表现更好-许多示例揭示了这种方法的"完成方式"。  (此页顶部的论坛搜索应该会产生许多"点击量"。)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Luiz Felipe K Evaristo"]我没有得到它、但编译器没有指出单个错误。 此外、当我为计时器注册一个 ISR 时、它会起作用... 它只是 ADC 的 ISR :(也许是我在矢量表中更改指针吗?

    ADCIntRegister 是一个接受三个参数的函数、第三个参数应该是指向一个不接受任何参数并且不返回任何值的函数的指针(虽然知道 TIVAWare、它们有可能使用 int 不稳定性1)。

    ISR_ADC0就是这样一个函数(到目前为止、很好)。 如果你只使用 ISR_ADC0、你将得到一个指向该函数的指针。 您现在应该开始看到问题了。

    * ISR_ADC0会降低指向函数的指针的推论。 我不确定这是没有的语法价值(),这是不寻常的,最好是有问题的。 但是、假设它有效、则调用 ISR_ADC0并返回、嗯、无任何结果。 不会将任何内容传递给 ADCIntRegister 函数并作为中断例程进行非引用。 编译器当然应该抱怨什么都不传递为任何函数参数。 如果它不是编译器中的错误。

    Robert

    1 -这实际上是 TIVAWare 中的一个错误、但这是一个单独的主题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="CB1_MOBILE"]

    您确实验证"进入"到计时器 ISR -而不是 ADC ISR 是否正确?

    [/报价]

    是的、Timer0和 Timer1的定时器中断都能完美工作、但 ADC 不能正常工作、ADC0或 ADC1也不能正常工作。

    [引用 USER="CB1_MOBILE"]

    需要注意的是、您"注册中断"、而不是将它们放在"启动文件"中。   大多数用户在采用"启动文件"方法时表现更好-许多示例揭示了这种方法的"完成方式"。  (此页顶部的论坛搜索应该会产生许多"点击量"。)

    [/报价]

    谢谢、我会尝试一下

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Robert Adsett72"]

    ISR_ADC0就是这样一个函数(到目前为止、很好)。 如果你只使用 ISR_ADC0、你将得到一个指向该函数的指针。 您现在应该开始看到问题了。

    * ISR_ADC0会降低指向函数的指针的推论。 我不确定这是没有的语法价值(),这是不寻常的,最好是有问题的。 但是、假设它有效、则调用 ISR_ADC0并返回、嗯、无任何结果。 不会将任何内容传递给 ADCIntRegister 函数并作为中断例程进行非引用。 编译器当然应该抱怨什么都不传递为任何函数参数。 如果它不是编译器中的错误。

    [/报价]

    我已经完成了一些测试。 如果我输入 argumet ISR_ADC0或* ISR_ADC0、编译器不会指向错误。 但是、如果我放置 ISR_ADC0 ()、它会指向"类型不匹配"(void x void *(void))

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我已经尝试使用了启动文件、但没有任何尝试。 我还更改了程序以测试其他形式的中断触发、例如 GPIO 外部、处理器和其他计时器。 程序不会进入 ADC ISR。 我还检查了是否设置了中断、它是否正确。 任何其他中断(定时器、GPIO)都可以正常工作、但 ADC 不能正常工作。

    我现在迷路了... 可能是 CCS 调试中的错误、还是类似的问题? 还是内存?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当您将"ADC ISR"与"启动文件"一起放入时、您选择的名称是否与"启动文件"(底部)的"寄存器中断"(长)列表中包含的名称相匹配?  (和针对 ADC0列出)

    如果是-请显示启用 ADC 中断的代码。 仅通过启动文件方法-删除"已注册的中断方法!"的所有跟踪

    现在不是"迷路"的时候了-而是自己应用-仔细检查-在这种情况下几乎没有发生错误的机会...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="CB1_MOBILE"]

    当您将"ADC ISR"与"启动文件"一起放入时、您选择的名称是否与"启动文件"(底部)的"寄存器中断"(长)列表中包含的名称相匹配?  (和针对 ADC0列出)

    如果是-请显示启用 ADC 中断的代码。 仅通过启动文件方法-删除"已注册的中断方法!"的所有跟踪

    [/报价]

    我认为这是:

    启动文件:

    静态空 FaultISR (空);
    静态空 IntDefaultHandler (空);
    外部空 ADC0SS3IntHandler (空); 

    然后:

    IntDefaultHandler、 // ADC Sequence 0
    IntDefaultHandler, // ADC 序列1
    IntDefaultHandler、 // ADC 序列2.
    ADC0SS3IntHandler、 // ADC 序列3
    IntDefaultHandler、 //看门狗计时器
    IntDefaultHandler、 //计时器0子计时器 A
    IntDefaultHandler、 //计时器0子计时器 B
    IntDefaultHandler、 //计时器1子计时器 A
    IntDefaultHandler、 //计时器1子计时器 B 

    主文件:

    void ADC0SS3IntHandler (){
    //清除中断
    ADCIntClear (ADC0_BASE、3);
    //获取转换值
    ADCSequenceDataGet (ADC0_BASE、3、bufferTemp);
    
    return;
    }
    
    int main (void){
    //将频率设置为16MHz (来自 PIOSC
    SysClockFreetl)(ADC0_Periptl
    
    
    
    
    );Power_On_SYSC_SYSC_RESTHREST_PERIPT0_RESET_PERIPTHREST_PERTOP0_PERTOL
    
    (0_SYSC_SYSC_RESET_ON_PERIP_PERIPSC_PERIPTHRESR);
    
    
    //启用 GPIO 端口 E
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
    
    while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOE){
    
    }
    
    //将引脚5设置为 ADC IN (AIN8)
    GPIOPINTypeADC (GPIO_BETY_PIN_5);
    
    //禁用 SYSC_RESET_0
    
    
    
    
    
    
    
    (SYSC_ADC0)
    
    
    
    
    ;//禁用 SYSC_RESTON_ADC0 (SYSC_ADC0)
    
    //相位延迟= 0.0
    ADCPhaseDelaySet (ADC0_BASE、ADC_PHASE_0);
    
    //参考=内部3V
    ADCReferenceSet (ADC0_BASE、ADC_REF_INT);
    
    //禁用序列发生器3
    ADCSequencer Disable (ADC0_BASE、3);
    
    //配置序列发生器3、ADCK_0 (ADCK_base
    
    
    、ADCK_0)
    | ADCK_0 (ADCTRIGGER 3、ADCK_0)| ADCK_0 (ADCK_BASE 3) ADCK_0 (ADCK_0)| ADCK_0 (ADCK_0 (ADCTRIGGER 3) ADCK_0)
    
    //启用序列发生
    器 ADCSequenceEnable (ADC0_BASE、3);
    
    // ADC 的寄存器 ISR
    // ADCIntRegister (ADC0_BASE、3、ADC0SS3IntHandler);
    // IntRegister (INT_ADC0SS3、ADC0SS3IntHandler);
    
    /*配置定时器0 */
    SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
    SysCtlPeripheralReset (SYSCTL_Periph_TIMER0);
    
    while (!SysCtl_Periph_TIMER0);while (!SysCtl_TIMER0);Timer_TimerA
    
    
    
    
    TimerClockSet
    
    
    
    
    
    
    
    (timer_main_Timerup)
    ;Timer0 (timer_timer_timer_timer_timer_timer_mainder0);Timer1 (timer_timer_timer_timer_timer_timer_timer_a timer_a timer_rual_up (timer_timer_timer_a clock_timer_a);Timer1 (timer_timer_timer_timer_a timer_timer_timer_timer_a clockrup);Timer1 (timer_timer_timer_timer_timer_timer_timer_a timer_a timer_timer_a timer_timer_
    
    //将事件设置为触发 ADC 作为 TimerA 超时
    TimerADCEventSet (TIMER0_BASE、TIMER_ADC_TIMEOUT_A);
    
    //启用触发
    TimerControlTrigger (TIMER0_BASE、TIMER_A、TRUE);
    
    //中断*//
    SS3
    
    
    
    
    
    
    的 MasterInterrupt (ADC0_BASE、3);//启用 TIMER_START (TIST/中断);//启用 TIMER_START)
    
    
    
    
    
    //尝试强制触发
    // IntTrigger (INT_ADC0SS3);
    while (1){
    
    }
    返回0;
    } 

     您可能会注意到、有一条注释指令 IntTrigger (INT_ADC0SS3)。 此命令会触发中断、程序会转至我手动设置的 ISR。。。

    我还注意到、在 NVIC 寄存器中、中断编号17 (ADC0 - SS3)都在 NVIC_EN0和 NVIC_DIS0中设置、这意味着中断同时启用和禁用? 更改发生在 IntEnable (INT_ADC0SS3)之后;

    除了强制中断之外、它是否也可能是中断从未发生的原因?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    许多人都应该喜欢您所付出的努力和这篇最后一篇文章的清晰度-做得好。

    您使用"强制触发器"非常聪明-并指出(可能)您的"解决方案路径"。 通过 MCU 手册的" ADC 寄存器列表"、您可以系统地检查"反映或管理" ADC 中断的(适当的) ADC 寄存器。 然后对"中断寄存器列表"执行相同的操作。 您正在寻找"强制触发器"和"正常代码"之间的(任何)"中断位"差异。

    请注意(两者)海报 Robert 和我都希望"您"能够"推动您的问题得到解决!"   您对源代码的(详细)检查是否包含在"intTrigger()"中、能否提供见解?  (特别有用-因为该功能(单独)-迄今为止-一直有效!)

    作为 kiss 的(有时)支持者、我更希望您从任何计时器"解开"ADC 中断-使用"处理器触发器"作为更简单、更直接的触发器。  (即、消除计时器"扣留 ADC 中断"的可能性、但这种可能性很小!   即利用(此处禁止) kiss!)的主要优势之一

    我记得、一些 ADC 寄存器对"读取"很敏感、如果在 IDE 中"打开"、则可能会导致 MCU 响应错误。 MCU 手册中的寄存器演示(通常)标识了此类"敏感"寄存器-请务必检查(该)是否描述了您的条件...

    您还可以更改"IntEnable()和 ADCIntEnable()的顺序"。 (纯"割道"-但风暴期间(任何)端口)请检查这两个功能的参数是否正确。 (xWare 有如此多的修订版-检查 Beats Hope)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复...

    我已经将 ADC 的触发源更改为处理器、并尝试使用 ADCProcessorTrigger 进行启动... 没有发生任何事情。 我还尝试使用 TRIGGER_AUSE 和... 没有发生任何事情。

    在寄存器映射中、除了预期的变化外、使用 IntTrigger 或不使用 IntTrigger 之间的所有值都是相同的。 但是、当我在 while (1)循环中停止执行时、ADCBusy 始终为1。 那么、这意味着它正在进行转换?

    我想到的一件事是:如果我使用计时器中断、并且在其 ISR 内部调用 ADC 的 IntTrigger、它是否起作用? 我的意思是、如果有适当的优先级和设置、它会影响时间、对吧?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    //配置序列发生器3
    ADCSequenceStepConfigure 的第0步(ADC0_BASE、3、0、(ADC_CTL_IE | ADC_CTL_END | ADC_CTL_SHOLD_8 | ADC_CTL_CH8));
    

    ADC_CTL_shold_8来自哪里? 我在我查看过的 TIVAWare 手册或头文件中找不到它(尽管我使用的是较旧版本)。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Robert Adsett72"]

    ADC_CTL_shold_8来自哪里? 我在我查看过的 TIVAWare 手册或头文件中找不到它(尽管我使用的是较旧版本)。 

    [/报价]

    ADC 将采样保持8个时钟周期。 在 TivaWare 2.1.4.178的 driverlib/adc.h 中定义

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Luiz Felipe K Evaristo"

    Robert Adsett72.
    ADC_CTL_shold_8来自哪里? 我在我查看过的 TIVAWare 手册或头文件中找不到它(尽管我使用的是较旧版本)。 

    ADC 将采样保持8个时钟周期。 在 TivaWare 2.1.4.178的 driverlib/adc.h 中定义

    [/报价]

    它的定义是什么?

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    //
    //
    //可以作为 ui32Config
    //参数传递给 ADCSequenceStepConfigure 的值。
    ////
    *****************
    #define ADC_CTL_TS 0x00000080 //温度传感器选择
    #define ADC_CTL_IE 0x00000040 //中断使能
    #define ADC_CTL_END 0x00000020 //序列结束选择
    #define ADC_CTL_D 0x00000010 //差分选择
    #define ADC_CTL_CH0 0x00000000 //输入通道0
    #define ADC_CTL_CH1 0x00000001 //输入通道1
    #define ADC_CTL_CH2 0x00000002 //输入通道2
    #define ADC_CTL_CH3 0x00000003 //输入通道3
    #define ADC_CTL_CH4 0x00000004 //输入通道4
    #define ADC_CTL_CH5 0x00000005 //输入通道5
    #define ADC_CTL_CH6 0x00000006 //输入通道6
    #define ADC_CTL_CH7 0x00000007 //输入通道7
    #define ADC_CTL_CH8 0x00000008 //输入通道8
    #define ADC_CTL_CH9 0x00000009 //输入通道9
    #define ADC_CTL_CH10 0x0000000A //输入通道10
    #define ADC_CTL_CH11 0x0000000B //输入通道11
    #define ADC_CTL_CH12 0x0000000C //输入通道12
    #define ADC_CTL_CH13 0x0000000D //输入通道13
    #define ADC_CTL_CH14 0x0000000E //输入通道14
    #define ADC_CTL_CH15 0x0000000F //输入通道15
    #define ADC_CTL_CH16 0x00000100 //输入通道16
    #define ADC_CTL_CH17 0x00000101 //输入通道17
    #define ADC_CTL_CH18 0x00000102 //输入通道18
    #define ADC_CTL_CH19 0x00000103 //输入通道19
    #define ADC_CTL_CH20 0x00000104 //输入通道20
    #define ADC_CTL_CH21 0x00000105 //输入通道21
    #define ADC_CTL_CH22 0x00000106 //输入通道22
    #define ADC_CTL_CH23 0x00000107 //输入通道23
    #define ADC_CTL_CMP0 0x00080000 //选择比较器0
    #define ADC_CTL_CMP1 0x00090000 //选择比较器1
    #define ADC_CTL_CMP2 0x000A0000 //选择比较器2
    #define ADC_CTL_CMP3 0x000B0000 //选择比较器3
    #define ADC_CTL_CMP4 0x000C0000 //选择比较器4
    #define ADC_CTL_CMP5 0x000D0000 //选择比较器5
    #define ADC_CTL_CMP6 0x000E0000 //选择比较器6
    #define ADC_CTL_CMP7 0x000F0000 //选择比较器7
    #define ADC_CTL_shold_4 0x00000000 //采样保持4个 ADC 时钟
    #define ADC_CTL_shold_8 0x00200000 //采样保持8个 ADC 时钟
    #define ADC_CTL_SHOLD_16 0x00400000 //采样保持16个 ADC 时钟
    #define ADC_CTL_shold_32 0x00600000 //采样保持32个 ADC 时钟
    #define ADC_CTL_shold_64 0x00800000 //采样保持64个 ADC 时钟
    #define ADC_CTL_shold_128 0x00A00000 //采样保持128个 ADC 时钟
    #define ADC_CTL_shold_256 0x00C00000 //采样保持256个 ADC 时钟 

    从文件中删除

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    两个想法、
    -您可能应该在启用中断之前清除中断
    -您需要确定(重新确定?) 您已连接正确的中断。 如果触发了不同的中断,您是否有默认的处理程序,如果有,您能否判断是否调用了它们?

    Robert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    朋友 Robert 经常提出"好/关键"的观点。   

    如果我可以-一种更残酷的(kiss 影响的方法-当然)会看到您(暂时)停止所有其他中断-甚至是大量"与 ADC 无关的代码"-以便"没有外部入侵能够"破坏您实现 ADC 中断的尝试"。    

    我还建议您(再次临时)加载供应商示例/外设代码"Single_ended.c"-仅将 ADC 代码列表更改为您的 ADC0_SS3。   

    我们需要让(某种)工作- Kiss 强调基本原理-基本原理-将这些东西踢到路缘会导致你/罗伯特/我(现在)承受"痛苦/痛苦"。  只需更改 SS3、即可尝试单端.C。  (请不要其他任何人-更多不是继续进行的方式!)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    从已知良好的例子开始达成一致意见,并缓慢地转变为期望的目标,将是一个有价值的进程。

    Robert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当然,这是一个"众所周知的"(有些人甚至说,"喜欢"的程序),完全是 Kiss 下的居民

    "拒绝亲吻"会造成无穷无尽的"痛苦/痛苦"!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="CB1_MOBILE"]

    我还建议您(再次临时)加载供应商示例/外设代码"Single_ended.c"-仅将 ADC 代码列表更改为您的 ADC0_SS3。   

    [/报价]

    因此、我使用了该代码、与提供的代码完全相同、然后更改为 ADC0_SS3:

    #include 
    #include 
    #include "inc/hw_memmap.h"
    #include "driverlib/adc.h"
    #include "driverlib/gpio.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/uartdio.h"
    #include "utils/uartstdio.h"{
    
    invoid
    控制台}
    
    //
    //启用用于 UART0引脚的 GPIO 端口 A。
    // TODO:将其更改为您正在使用的 GPIO 端口。
    //
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
    
    //
    //为端口 A0和 A1上的 UART0功能配置引脚复用。
    //如果您的器件不支持引脚复用、则无需执行此步骤。
    // TODO:更改此选项以选择您正在使用的端口/引脚。
    //
    GPIOPinConfigure (GPIO_PA0_U0RX);
    GPIOPinConfigure (GPIO_PA1_U0TX);
    
    //
    //启用 UART0以便我们可以配置时钟。
    //
    SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
    
    //
    //使用内部16MHz 振荡器作为 UART 时钟源。
    //
    UARTClockSourceSet (UART0_BASE、UART_CLOCK_PIOSC);
    
    //
    //为这些引脚选择替代(UART)功能。
    // TODO:更改此选项以选择您正在使用的端口/引脚。
    //
    GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
    
    //
    //初始化控制台 I/O 的 UART
    //
    UARTStdioConfig (0、115200、16000000);
    }
    
    //*********
    //
    //为单端输入和单个采样配置 ADC0。
    一旦//样本就绪、将设置一个中断标志。 使用轮询方法
    //数据将被读取,然后通过 UART0显示在控制台上。
    ////
    *****************
    int
    main (void)
    {
    #if defined (target_IS_TM4C129_RA0)|| \
    已定义(TARGET_IS_TM4C129_RA1)|| \
    已定义(TARGET_IS_TM4C129_RA2)
    uint32_t ui32SysClock;
    #endif
    
    //
    //该数组用于存储从 ADC FIFO 读取的数据。 它
    //必须与正在使用的序列发生器的 FIFO 一样大。 此示例
    //使用 FIFO 深度为1的序列3。 如果是另一个序列
    //与更深的 FIFO 一起使用,则必须更改数组大小。
    //
    uint32_t pui32ADC0Value[1];
    
    //
    //使用 PLL 将时钟设置为以20MHz (200MHz/10)运行。 时间
    //使用 ADC,您必须使用 PLL 或提供16 MHz 时钟
    //源。
    // TODO:必须更改 SYSCTL_XTAL_VALUE 以匹配的值
    板上的//晶体。
    //
    #if defined (target_IS_TM4C129_RA0)|| \
    已定义(TARGET_IS_TM4C129_RA1)|| \
    已定义(TARGET_IS_TM4C129_RA2)
    ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、20000000);
    #else
    SysCtlClockSet (SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
    SYSCTL_XTAL_16MHz);
    #endif
    
    //
    //设置用于显示消息的串行控制台。 这是
    //仅用于此示例程序,ADC 操作不需要。
    //
    InitConsole();
    
    //
    //在控制台上显示设置。
    //
    UARTprintf ("ADC ->\n");
    UARTprintf ("类型:单端\n");
    UARTprintf ("示例:一个\n");
    UARTprintf ("更新速率:250ms\n");
    UARTprintf ("输入引脚:AIN0/PE3\n\n");
    
    //
    //必须启用 ADC0外设才能使用。
    //
    SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
    
    //
    //对于此示例、ADC0与端口 E7上的 AIN0一起使用。
    //您使用的实际端口和引脚可能有所不同,请参阅
    //数据表以了解更多信息。 需要启用 GPIO 端口 E
    //因此可以使用这些引脚。
    // TODO:将其更改为您正在使用的 GPIO 端口。
    //
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
    
    //
    //为这些引脚选择模拟 ADC 功能。
    //请查阅数据表以查看每个引脚分配的函数。
    // TODO:更改此选项以选择您正在使用的端口/引脚。
    //
    GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3);
    
    //
    //使用处理器信号触发器启用采样序列3。 序列3
    //将在处理器发送信号启动时执行单次采样
    //转换。 每个 ADC 模块有4个可编程序列、序列0
    //至序列3。 此示例任意使用序列3。
    //
    ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_PROCESSOR、0);
    
    //
    //在序列3上配置步骤0。 对中的通道0 (ADC_CTL_CH0)进行采样
    //单端模式(默认)并配置中断标志
    //(ADC_CTL_IE)将在采样完成时置1。 告诉 ADC 逻辑
    //这是序列3上的最后一次转换(ADC_CTL_END)。 序列
    // 3只有一个可编程步骤。 序列1和2有4个步骤、和
    //序列0有8个可编程步骤。 因为我们只做一个
    //使用序列3进行转换,我们将仅配置步骤0。 了解详情
    //有关 ADC 序列和步骤的信息、请参考数据表。
    //
    ADCSequenceStepConfigure (ADC0_BASE、3、0、ADC_CTL_CH0 | ADC_CTL_IE |
    ADC_CTL_END);
    
    //
    //由于采样序列3现在已配置,因此必须将其启用。
    //
    ADCSequenceEnable (ADC0_BASE、3);
    
    //
    //清除中断状态标志。 这样做是为了确保
    //中断标志在我们进行采样之前被清除。
    //
    ADCIntClear (ADC0_BASE、3);
    
    //
    //永久采样 AIN0。 显示控制台上的值。
    //
    while (1)
    {
    //
    //触发 ADC 转换。
    //
    ADCProcessorTrigger (ADC0_BASE、3);
    
    //
    //等待转换完成。
    //
    while (!ADCIntStatus (ADC0_BASE、3、false))
    {
    }
    
    //
    //清除 ADC 中断标志。
    //
    ADCIntClear (ADC0_BASE、3);
    
    //
    //读取 ADC 值。
    //
    ADCSequenceDataGet (ADC0_BASE、3、pui32ADC0Value);
    
    //
    //在控制台上显示 AIN0 (PE3)数字值。
    //
    UARTprintf ("AIN0 =%4D\r\n、pui32ADC0Value[0]);
    
    //
    //此函数提供了生成恒定长度的方法
    //延迟。 函数延迟(以周期为单位)= 3 *参数。 延迟
    //任意地250ms。
    //
    #if defined (target_IS_TM4C129_RA0)|| \
    已定义(TARGET_IS_TM4C129_RA1)|| \
    已定义(TARGET_IS_TM4C129_RA2)
    SysCtlDelay (ui32SysClock / 12);
    #else
    SysCtlDelay (SysCtlClockGet ()/12);
    #endif
    }
    }
    

    在这两种情况下、我都没有得到任何结果。

    正如 Robert 说过的、我在设置中断之前尝试禁用中断。 什么都没有、正如您说过的、我只设置 ADC 中断。 什么也没有。

    但是、我已经完成了另一项测试:如果我调用 IntPendSet (INT_ADC0SS3)、程序确实会进入 ISR。 那么、正如它看起来的那样、问题可能是在等待 ADC0中断?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Luiz Felipe K Evaristo"]在这两种情况下、我都没有得到任何结果。

    您没有直接的未修改示例程序? "什么都没有"也意味着什么?

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    示例(示例)代码是否提供"ADC ISR"? 如果不是-您的报告"什么都没有"有多有效。

    您是否应该不能通过(特定) ADC 寄存器"位读数?"来"记录" ADC 中断的发生?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    查看您的代码-在"Single_end.c"中、似乎没有/零"需要"(多个)中断使能
    此外、如前所述、您必须添加 ADC ISR、以确认其进入。 (需要存在... 是否要输入?)

    此外、您向指定的 ADC 输入引脚提供一个中电平输入信号(~1.65V)、然后"监控转换结果"将提供(更多)有用的数据。  无需 ADC "中断"转换即可继续并成功。  请提供此类输入电压电平(1.65V)并报告转换结果。

    我认为您的"转换结束延迟"太小了。   将其增加1000倍、以便重复转换(有些)可读...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="CB1_MOBIT">查看您的代码-似乎在"Single_end.c"中未放置任何/零的"所需"(多)中断使能
    此外、如前所述、您必须添加 ADC ISR、以确认其进入。 (需要存在... 对于条目-不是吗?)

    让我们先让轮询版本正常工作、然后再担心中断。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    据我所知、Single_end.c 通过轮询 ADC 来工作、正如 Robert 所说、我在第一个时刻没有改变任何东西。 我尝试仅更改时钟源和 ADC 引脚、因为提供的代码已配置为与采样序列发生器3一起工作。 (在 ADC 输入中,我放置了一个电位器,可以在该电位器中将电压从0变为3.3V。)

    据说、该程序通过 UART 将转换结果发送到控制台进行读取。 在调试模式下、它卡在里面 while(!ADCIntStatus(ADC0_BASE, 3, false)) and the console stays blank as a result...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请记住海报的报告、"什么都没有"(非常喜欢"不起作用!") 可能是他的"检测失败"代码条目带有 ADC ISR -这需要(部分) ISR 存在-以进行此类检测... 这就是为什么我建议他为 ADC 提供一个已知的中量程输入-以便至少可以监控 ADC 的功能-也许可以确认...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Luiz Felipe K Evaristo"

    据我所知、Single_end.c 通过轮询 ADC 来工作、正如 Robert 所说、我在第一个时刻没有改变任何东西。 我尝试仅更改时钟源和 ADC 引脚、因为提供的代码已配置为与采样序列发生器3一起工作。 (在 ADC 输入中,我放置了一个电位器,可以在该电位器中将电压从0变为3.3V。)

    据说、该程序通过 UART 将转换结果发送到控制台进行读取。 在调试模式下、它卡在里面 while(!ADCIntStatus(ADC0_BASE, 3, false)) and the console stays blank as a result...

    [/报价]

    这不清楚、您是说它被未修改的代码滞留在这里吗?

    如果是、请尝试使用其他电路板。 如果不是、请返回到未修改的代码并查看行为是什么。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="CB1_MOBILE]Do Recall 海报的报告:"什么都没有"(非常喜欢"不起作用!") 可能针对他的"检测失败"代码条目使用 ADC ISR [/引用]

    我没有看到海报使用 ISR 的任何迹象、因此需要进行放大。 看起来就像海报确实打算仅轮询此测试一样、但我还不清楚未修改的代码是否失败。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    也许是这样,“什么都没有”…… "什么都不能传达?"
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果我不够清楚、真的很抱歉。

    我刚刚完成了这个操作:我从 TivaWare 中获取了单端.c、将其放入一个新项目中、包含所有 include 和等、并尝试在电路板上运行它。 因此、我得到一个空白控制台、其中应该是 ADC 读数、如果我暂停调试、它指示代码位于 while (!ADCIntStatus (ADC0_BASE、3、false)内部、并且不会从代码中退出。 我目前没有其他板。

    奇怪的是、通过分析代码、处理器会触发 ADC 转换、等待中断标志清零、因为没有设置中断。 至少可以说是令人困惑的。 这种轮询方法似乎配置不正确

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Luiz Felipe K Evaristo"

    如果我不够清楚、真的很抱歉。

    我刚刚完成了这个操作:我从 TivaWare 中获取了单端.c、将其放入一个新项目中、包含所有 include 和等、并尝试在电路板上运行它。 因此、我得到一个空白控制台、其中应该是 ADC 读数、如果我暂停调试、它指示代码位于 while (!ADCIntStatus (ADC0_BASE、3、false)内部、并且不会从代码中退出。 我目前没有其他板。

    [/报价]

    好的。 我们需要具有'129经验的人员来验证这是否适用于'129、但 AFAIK 是一个已知良好的工作代码。 您确实需要获取另一个电路板、因为 CB1可能会说"Ware the single board some"."。   BTW 这是您自己的电路板还是评估板、例如您正在使用的 Launchpad?

    使用另一个 Launchpad 进行测试应该是一个快速而轻松的过程。

    [引用 user="Luiz Felipe K Evaristo")奇怪的是、分析代码时、处理器会触发 ADC 转换、并等待中断标志中的清除、因为没有设置中断、所以该标志未设置。 至少可以说是令人困惑的。 此轮询方法似乎未配置为正确

    其他人在不进行修改的情况下运行此代码。 这应该是良好的规范、但 可能值得让具有直接'129经验的人验证这是正确的。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    C破解 的员工和这位谦逊的记者可以(也可以)确认"single_end.c"适用于(LX4F231和4C123)! (不允许使用129 -我们的建筑...)
    一天结束后、我们将尝试使用(添加的) ADC 中断(以及启用代码)-并查看是否触发了中断(最终)...

    Luiz -我们不会"放弃"您-我们都很欣赏您的努力-这对我们所有人来说都是一个很好的学习练习-请继续"尝试"、不要气馁...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢、我会要求一个同事的板。 它是 TM4C CryptoConnected Launchpad。

    我将报告是否有任何代码适用于另一个套件
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Luiz、

    您能否附加为 TivaWare 提供的单端示例创建的 CCS 工程? 我还将下载并在我自己的硬件上进行测试。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我找了两个朋友、他们报告了我遇到的相同问题、代码卡在我上面提到的那条指令上。

    这是项目:

    e2e.ti.com/.../adc_5F00_single_5F00_ended_5F00_test.rar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请允许我注意、我的公司(刚刚)运行"Single_end.C"、没有问题!    (如 StellarisWare、Ver 9453中所包含)  (vendorWare 的唯一版本由公司的关键客户"批准"-因为它的稳健性/稳定性以及独特的广泛 MCU 覆盖范围!)   

    在(两种) LX4F231 (我们已雇用数千名员工)和 TM4C123上进行了测试 - 均已证明成功 -遇到"无挂起"。    (我们对120MHz 129仍"印象不深"-没有-因此不能包括...)  

    如果有用-我将提供该(过去)示例代码文件供审核。   (这可能会解释我们(和我们的主要客户)"犹豫/不情愿"转向更新的 vendorWare 实现方式!)   请注意、StellarisWare 9453是唯一支持以下器件的供应商:LM3S、LX4F TM4C123 (123 via /非常轻微的 mod:{pinmap.h})  公司积极(仍然)支持这些(以前的 LMI 和该供应商的) MCU ...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的反馈。 我想知道、控制台是否显示了设置消息以及 ADC 转换值? 因为我甚至没有收到配置消息(忘记在前面提到)。

    我会切换到 TM4C123、因为它具有更多的支持和技术数据、但我没有太多时间...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Luiz、

    感谢您分享您的 CCS 项目。 我没有使用 Crypto LaunchPad、因此我改用了 EK-TM4C1294XL LaunchPad。 根据您提供的示例、时钟设置不正确、因为 LaunchPad (1294XL 和129EXL)具有25MHz 晶体、而不是16MHz 晶体。

    修复了时钟设置后、该示例为我运行、没有问题、包括获取完整的 UART 输出。

    我使用的时钟设置为:

    SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、120000000); 

    请尝试此操作、看看我们是否可以让您返回到单端示例正常运行的基准。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    另请注意、但请确保终端软件使用8n1 115200bps 的 UART 设置、连接到 ICDI 的 COM 端口("Stellaris 虚拟串行端口")
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Ralph Jacobi"]

    (笑声) 终端软件的 UART 设置为8n1 115200bps、连接到 ICDI 的 COM 端口("Stellaris 虚拟串行端口")

    [/报价]

    我已经做了一些关于设置 COM 端口的研究、因此我进行了配置。 但是、如果我使用波特115200设置 COM 端口、我会得到以下错误:

    如果我删除 COM 端口、程序将正常加载、但仍然无法正常工作。 我可能做了一些错误、但我不确定是什么...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Luiz、

    很抱歉、我可能会引起任何混淆、但我提到的 UART 设置是用于 PuTTY 或 Docklight 等终端程序在应用运行时接收 UART 数据。 而不是 CCS 配置文件。 我刚才提到了 IDCI 端口、因为 Tiva LaunchPad 上有2个 USB 端口插头、所以我想确保您为 UART 终端软件选择了正确的端口、因为您以前报告过它发出的消息为零。

    默认情况下使用 CCS .ccxml 设置。

    适用于 PuTTY/ Docklight/TeraTerm 等 -使用我列出的设置查看 TM4C SINGLE_END.c 示例中 UART 函数的输出。

    希望现在这一点更加清楚。 )
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Ralph!

    使用 Hercules 终端时、我终于能够按预期看到 ADC 转换值。 轮询方法确实起作用、但为什么现在中断方法不起作用?

    再次感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="Luiz Felipe K Evaristo"]轮询方法正常工作、但为什么现在中断方法不起作用?

    假设您按照建议使用"Single_end.C"-即(是)情况-是不是?   该示例程序不提供中断服务例程- iirc。

    很少会阻止您添加一个短 ISR (首选是在启动文件中放置)-然后观察它的条目。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Luiz Felipe K Evaristo"]使用 Hercules 终端时、我终于能够按预期看到 ADC 转换值。 因此轮询方法可以正常工作、但为什么现在中断方法不起作用?

    现在、您有两条前进路径。 您可以向该程序添加中断、也可以更改为其他序列发生器。 但是、不要同时执行这两项操作。

    基本的想法是逐个添加片段、直到您达到无法正常工作的程度、或者您具有所有功能。 在前一种情况下、您将有一组相对较小的更改、以视为有问题。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请注意、Robert 的"增量式"可能被(可能)更广为人知/更难忘的"kiss!"描述

    为了简单起见,有许多需要说的----尽量减少"未知或变量"的数量----并创造可实现的和"可衡量的结果!"   (亲吻的清晰"本质...")