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.

[参考译文] TM4C1294NCPDT:hello world 程序失败

Guru**** 2482105 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/710294/tm4c1294ncpdt-hello-world-program-failed

器件型号:TM4C1294NCPDT
Thread 中讨论的其他器件:EK-TM4C1294XL

尊敬的 TI 社区:

昨天我收到了 EK-TM4C1294XL。 我下载了 Code Composer Studio v8。

我编写了一个简单的程序、应该点亮连接到 Porta RA4的 LED、但失败了。

我使用了调试器、每次调用后我得出结论

程序将跳转到由预处理器定义的存储器位置、并跳转到静态空 FaultISR (void)。

#define GPIO_Porta_lock_R (*(volatile unsigned long *) 0x40058520)
#define GPIO_PORta_COM_R (*(volatile unsigned long *) 0x40058524)

#define GPIO_PORta_DIR_R (*(volatile unsigned long *) 0x40058400)
#define GPIO_PORta_data_R (*(volatile unsigned long *) 0x40058000)

int main (void)
{
GPIO_PORta_lock_R |= 0x4C4F434B; /*为提交寄存器设置写入访问*/
GPIO_Porta_COM_R |= 255; /* GPIOAFSEL、GPIOPUR、GPIOPDR 和 GPIODEN
位可被写入*/

while (1){}

返回0;
}

如上图所示、当运行调试器时、将执行的第一行是 Code Composer Studio V8中的第9行

当我点击 Step Into"(F5)按钮时、程序跳转到 FaultISR、如下图所示。

我从数据表中获得了我的存储器地址、因此我认为它们是正确的。

如果我向与 GPIO 相关的存储器位置写入数据、为什么会获取 FaultISR?

此致、

Youri。

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

    尊敬的 TI 社区:

    我在 本文档中已经阅读 过、应该检查 NVIC_FAULT_STAT 寄存器的值。

    下图显示了各种 NVIC_寄存器及其在我们处于 FaultISR()时的值。

    NVIC_FAULT_ADDR 包含我刚刚尝试写入的地址。 这意味着什么、我们如何解决这个问题?

    此致、

    Youri。

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

    出现"3个编程元素"、可能会解释:

    • 您尚未打开 Port_A 的时钟
    • 您采用了加密、低效且容易出错的"TRM"*编程风格。   (供应商更喜欢使用他们的"久经考验/测试的 API"。)  "TRM"未经验证-未经测试-可预测地会导致您的"故障 ISR"到达
    • PORT_A -据我所知-无需(任何)锁定或解锁序列。   (只有明确定义的引脚-通常为'NMI'和'JTAG'-需要这样的'解锁'。)

    您对 TivaWare 的搜索、查找和使用-其中包含供应商的大量 API (以及许多编程示例)是"强烈推荐"!   继续使用'HRM'... 不是很好。

    *  DRM  "重复寄存器操作"  (不再受供应商的青睐或支持。  他们的 API (相反) 证明 了"加快、简化和增强"用户的编程工作...

    满足我的"工作发布"订单-供应商的"Project.c"中的以下代码摘录-说明了 API 的优势:

    //启用 GPIO 模块。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); //  fnt。 调用-打开(启用) Port_A 的时钟。   (被海报的 DRM 代码错过了!)
    ROM_SysCtlDelay (10);

    //将 PA1配置为输出。
    //
    ROM_GPIOPinTypeGPIOOutput (GPIO_Porta_base、GPIO_PIN_1);

    //永久循环。  (或直至周末...)
    //
    while (1)

    //将 GPIO 设置为高电平。
    //
    ROM_GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_1、GPIO_PIN_1);

    //延迟一段时间。   
    //
    ROM_SysCtlDelay (1000000);

    //将 GPIO 设置为低电平。
    //
    ROM_GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_1、0);

    //延迟一段时间。  (直至周末?)
    //
    ROM_SysCtlDelay (1000000);

    海报应清楚地注意 API 的"自举"功能。   “逃离”(无尽的)“罚款”……  (最常由 API 正确管理/自动化!)