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.

[参考译文] TM4C1233H6PM:EEPROMInit 不返回

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1075855/tm4c1233h6pm-eeprominit-does-not-return

部件号:TM4C1233H6PM

TI 团队您好,

我在定制主板上使用 CCS 版本:9.3.0.00012与 TI-RTOS 2.16.1.14 + driverlib TiaWare 2.1.71b 和 n ü µC TM4C1233H6PM。

向 EEPROM 写入和读取数据数次后,下次引导时的 EEPROMInit()不会返回,并无限地阻塞_EEPROMWaitForDone ()。

EEPROMInit()在 SystlPeripheralEnable(sysctl_Periph_EEPROM0),SystlPeripheralReset (sysctl_Periph_EEPROM0)和 While (!SystlPeripheralReady(sysctl_Periph_EEPROM0 ))之后调用;

在启用外围设备后,寄存器 EEEPROM_EEDONE 中的 EEEPROM_EEDONE 看起来像设置了,并且将无限期地保留为1。 导致此问题的原因是什么?

发生此错误时,我正在使用“LM Flash Programmer - Build 1613”执行“解锁”。 成功解锁 µC 后,EEPROM 在有限的时间内再次工作。

提前感谢!

此致,

阿科斯

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

    static void initGeneral(void)
    {
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    
        SysCtlPeripheralReset(SYSCTL_PERIPH_GPIOA);
        SysCtlPeripheralReset(SYSCTL_PERIPH_GPIOB);
        SysCtlPeripheralReset(SYSCTL_PERIPH_GPIOC);
        SysCtlPeripheralReset(SYSCTL_PERIPH_GPIOD);
        SysCtlPeripheralReset(SYSCTL_PERIPH_GPIOE);
        SysCtlPeripheralReset(SYSCTL_PERIPH_GPIOF);
    
        SysCtlPeripheralEnable(SYSCTL_PERIPH_EEPROM0);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_WDOG0);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER2);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER3);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_WTIMER5);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
    
    //    SysCtlPeripheralReset(SYSCTL_PERIPH_EEPROM0);
        SysCtlPeripheralReset(SYSCTL_PERIPH_WDOG0);
        SysCtlPeripheralReset(SYSCTL_PERIPH_TIMER0);
        SysCtlPeripheralReset(SYSCTL_PERIPH_TIMER1);
        SysCtlPeripheralReset(SYSCTL_PERIPH_TIMER2);
        SysCtlPeripheralReset(SYSCTL_PERIPH_TIMER3);
        SysCtlPeripheralReset(SYSCTL_PERIPH_WTIMER5);
        SysCtlPeripheralReset(SYSCTL_PERIPH_ADC0);
    
    //    while(!SysCtlPeripheralReady(SYSCTL_PERIPH_EEPROM0));
        while(!SysCtlPeripheralReady(SYSCTL_PERIPH_WDOG0));
        while(!SysCtlPeripheralReady(SYSCTL_PERIPH_TIMER0));
        while(!SysCtlPeripheralReady(SYSCTL_PERIPH_TIMER1));
        while(!SysCtlPeripheralReady(SYSCTL_PERIPH_TIMER2));
        while(!SysCtlPeripheralReady(SYSCTL_PERIPH_TIMER3));
        while(!SysCtlPeripheralReady(SYSCTL_PERIPH_WTIMER5));
        while(!SysCtlPeripheralReady(SYSCTL_PERIPH_ADC0));
    
        HWREG(GPIO_PORTA_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
        HWREG(GPIO_PORTA_BASE + GPIO_O_CR) |= GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5;
    }

    我找到了问题。 由于某些原因,我不能呼叫 SystlPeripheralReset (sysctl_Periph_EEPROM0),然后再呼叫 EEPROMInit()。

    我看了 EEPROMInit()的代码,看到已经有一个外设重置呼叫,所以我删除了我的。 现在工作正常。

    但我不明白为什么。