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/TM4C123GH6PM:故障中断

Guru**** 2446730 points
Other Parts Discussed in Thread: SW-TM4C

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/620810/ccs-tm4c123gh6pm-fault-interrupt

器件型号:TM4C123GH6PM
主题中讨论的其他器件:SW-TM4C

工具/软件:Code Composer Studio

你好

我的问题是、当我恢复程序时、它会在下面照片中显示的这个无限循环中残留  

这是程序  

#define led (*(volatile unsigned long *) 0x40025008)// BF1红色 LED
#define sw1sw2 (*(volatile unsigned long *) 0x40025044)// PF4 SW1 & PFO SW2
#define GPIO_PORTF_DIR_R (*(volatile unsigned long *) 0x40025400)
#define GPIO_PORTF_AFSEL_R (*(volatile unsigned long *) 0x40025420)
#define GPIO_PORTF_PUR_R (*(volatile unsigned long *) 0x40025510)
#define GPIO_PORTF_DEN_R (*(volatile unsigned long *) 0x4002551C)
#define GPIO_PORTF_LOCK_R (*(volatile unsigned long *) 0x40025520)
#define GPIO_PORTF_CR_R (*(volatile unsigned long *) 0x40025524)
#define GPIO_PORTF_AMSEL_R (*(volatile unsigned long *) 0x40025528)
#define GPIO_PORTF_PCTL_R (*(volatile unsigned long *) 0x4002552C)
#define SYSCTL_RCGC2_R (*(volatile unsigned long *) 0x400FE108)
// SysTick 计时器
#define NVIC_ST_CTRL_R (*(volatile unsigned long *) 0XE000E010)
#define NVIC_ST_RELOAD_R (*(volatile unsigned long *) 0XE000E014)
#define NVIC_ST_CURRENT_R (*(volatile unsigned long *) 0XE000E018)

void init (void){
volatile unsigned long delay;
SYSCTL_RCGC2_R |= 0x00000020;// 1)激活端口 F 的时钟
延迟= SYSCTL_RCGC2_R;//允许时钟启动的时间
GPIO_PORTF_LOCK_R = 0x4C4F434B;// 2)解锁 GPIO 端口 F
GPIO_PORTF_CR_R |= 0x13;//允许更改 PF1、PF4和 PF0
GPIO_PORTF_AMSEL_R &=~0x13;// 3)禁用 PF1、PF4和 PF0上的模拟
GPIO_PORTF_PCTL_R &=~0x000F00FF;// 4) PF1和 PF4AND PF0上的 PCTL GPIO
GPIO_PORTF_DIR_R |= 0x02;// 5) PF4、PF0输入(开关)、PF3 -1输出-> 0x 0000 1110 (LED)
GPIO_PORTF_DIR_R &=~0x11;
GPIO_PORTF_PUR_|= 0x11;
GPIO_PORTF_AFSEL_R &=~0x13;// 6)禁用 PF7-0上的 alt funt
GPIO_PORTF_DEN_R |= 0x13;// 7)在 PF1上启用数字 I/O

void SysTick (void){
NVIC_ST_CTRL_R &=~0x01;//禁用 SysTick 计时器
NVIC_ST_RELOAD_R= 0x00FFFFFF;//初始化 RELOAD 寄存器值
NVIC_ST_CURRENT_R= 0xAA;//将任何值放入当前寄存器以将其复位
NVIC_ST_CTRL_R = 0x05;//选择系统时钟(16MHz)//禁用中断//启用计数器,使其开始计时

void delay (void){
无符号长整型计数;
计数= 79999;//以10Hz 的频率振荡

while (count){
计数--;


void main (void){
init();
SysTick ();
LED=0x02;
unsigned long start、end;
unsigned long i=0;
浮点时间[50];
无符号长整型状态[50];
无符号长整型开关[50];
无符号超长整型精确度=799105;
unsigned int error=0;

while (1){
if (sw1sw2!=0x11)

LED = LED ^ 0x02;
START =NVIC_ST_CURRENT_R;
delay();
END=NVIC_ST_CURRENT_R;


如果(i<50)

TIME[i]=(开始-结束)*0.0000000625;
STATE [I]=LED&0x02;
switches[i]= sw1sw2 & 0x11;
如果((开始-结束)<879015||(开始-结束)>719194)
{error ++;}
i++;


其他
LED=0;


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

    [引用 user="Chaymae Harfoush)]我的问题是,当我恢复程序时,它会在下面的照片中显示的这个无限循环中出现残桩,这意味着程序已产生硬故障。 有关  如何确定硬件故障的原因、请参阅诊断 Stellaris 中的软件故障。

    此外、使用程序中针对外设寄存器的#define 而不是使用 TivaWare 进行编码的原因是什么?

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

    由于您使用的是寄存器级调用、而不是 TivaWare、因此说起来并不容易。 对于 TivaWare、一个常见问题是在 startup_ccs.c 文件中没有正确定向 ISR、但我不确定您是否正在使用它。

    请获取最新的 TivaWare 并将其用于您的应用:www.ti.com/tool/sw-tm4c
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好
    我刚刚开始学习 EDX 课程"嵌入式系统-塑造世界"、他们使用#define 用于外设寄存器、而不是 TivaWare。 如果您有其他资源可供初学者学习、我会很感激。

    感谢你的帮助、
    Chaymae

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

    Chaymae、您好!

    我看到、很遗憾他们正以这种方式完成这一课程。 我听说过它、但不知道他们没有使用 TivaWare。 我们实际上没有太多用于寄存器级调用的文档。 Chester 发布的内容可能是从错误发现角度来看最有效的方法。 使用该器件的所有初学者都被称为 TivaWare、即使是专家也很少会使用此类寄存器级别更改、即使是这样做、也只会出于 TivaWare 所不涵盖的非常特定的应用目的。

    不过、本课程可能内置了某种支持系统、因此您可能需要调查是否有任何方法来提交问题。

    无论如何、通常在以下情况下会发生故障 ISR:

    1) 1)您的 ISR 未正确链接到中断矢量表

    2) 2)中断已启用、该中断不应启用(因为它没有 ISR)、并且正在进行故障 ISR。

    这是我可以提供的有关此事的所有指导、因此请仔细查看。

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

    尽管课程讲授直接注册表编程、但不要对该部分给予太多关注。 您仍然可以学习本课程、同时从 TI 的站点下载 Tivaware、并阅读/docs 文件夹中的 DRL-UG (driverlib 用户指南)。

    您将注意到、在本课程中、您可能需要为每个低级驱动程序配置提供一个函数。 简单的"忽略所有这组二进制配置"、并用 Tivaware 调用替换它们。 当然、本课程的重要部分是"编程结构"、循环背后的逻辑、时序控制等。

    此外、您还可以找到 Tivaware 随附的简单示例、这些示例将指导您让 LED 闪烁。 查看这些代码并熟悉它们非常有用。 当你得到指示灯以你想要的方式闪烁后、再向火星发射火箭就几步远了...

    布鲁诺