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.

[参考译文] TM4C123GH6PM:无法进入 timer0A ISR

Guru**** 2529560 points
Other Parts Discussed in Thread: EK-TM4C1294XL, TM4C123GH6PM, EK-TM4C123GXL, TM4C123GH6PZ

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1563799/tm4c123gh6pm-can-not-enter-timer0a-isr

器件型号:TM4C123GH6PM
Thread 中讨论的其他器件: EK-TM4C123GXL、EK-TM4C1294XL、 TM4C123GH6PZ

工具/软件:

大家好!

我们公司已使用 MSP432P401R 芯片作为我们的多个产品的 32 位嵌入式控制器。

在 MSP432P401 停止支持后、我们现在尝试使用 TM4C 系列芯片作为主 32 位 MCU。

我们购买了 TM4C123G LaunchPad。

我正在尝试 将代码传输到 TM4C 芯片、用于下一个产品。

当我检查计时器的功能时、无法进入 ISR。

系统卡在 tm4c123gh6pm_startup_ccs.c 的静态 void IntDefaultHandler (void) 中

以下是代码。

代码中是否有任何问题? 或者如何解决问题?

顺便说一下、我之前使用寄存器级对 MSP430 和 MSP432 进行编码、因此这是第一次使用该方法对 TI 芯片进行编码。

#include <stdbool.h>
#include <stdint.h>
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/timer.h"
#include "driverlib/gpio.h"

void Delay(unsigned long time);
void Initialize(void);
void Set_Timer(void);

unsigned short breathe;

void main(void)
{
	// Set the clocking to run directly from the crystal.
	SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);

	Initialize();
	while(1)
	{
	}
}

void Initialize(void)
{
	//***********************
	//* variables and flags *
	//***********************
	breathe=0;
	//*******
	//* I/O *
	//*******
	SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);// Enable the GPIO port that is used for the on-board LED.
	GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1);// Enable the GPIO pins for the LED (PF1 & PF2 & PF3).

	//*************
	//* Operation *
	//*************
	Set_Timer();
}

void Set_Timer(void)
{
	SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);// Enable the peripherals used by this example.
	IntMasterEnable();// Enable processor interrupts.

	// Configure the two 32-bit periodic timers.
	TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);
	TimerLoadSet(TIMER0_BASE, TIMER_A, SysCtlClockGet());

	// Setup the interrupts for the timer timeouts.
	IntEnable(INT_TIMER0A);
	TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);

	TimerEnable(TIMER0_BASE, TIMER_A);// Enable the timers.
}

#ifdef DEBUG
void
__error__(char *pcFilename, uint32_t ui32Line)
{
}
#endif
void Timer0IntHandler(void)
{
	TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);// Clear the timer interrupt.
	if(breathe)
	{
		GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0x04);
		breathe=0;
	}
	else
	{
		GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, ~0x04);
		breathe=1;
	}
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid=“315608" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1563799/tm4c123gh6pm-can-not-enter-timer0a-isr

    系统卡在 tm4c123gh6pm_startup_ccs.c 的静态 void IntDefaultHandler (void) 中

    [/报价]

    尊敬的 Norton:

     您能否显示 startup_ccs.c 代码? 您需要确保在矢量表中为 Timer_A 声明一个矢量。 默认情况下、启动文件中填充了所有向量的 IntDefaultHandler。 请参阅以下示例。 此外、请确保您使用 STARTUP_CCC.c 文件进行 TM4C123、并且不会从 MSP432P 复制任何启动文件、因为它们不兼容。

     

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

    尊敬的 Charles:

    感谢您的答复。

    在哪里可以找到 STARTUP_CCC.c 文件 TM4C123?

    所创建的工程中只有 tm4c123gh6pm_startup_ccs.c 文件。

    我已经展示了我的  tm4c123gh6pm_startup_ccs.c、文件中没有任何 IntHandler、但有大量的 InfDefaultHandler。

    我是否需要自己编辑处理程序?

    似乎我不能 将“InfDefaultHandler"更“更改为 ISR 的函数。

    确保不从 MSP432P 复制任何文件。

    我为 TM4C123 创建了一个新项目并链接了 TivaWare_C_Series-2.2.0.295。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid=“315608" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1563799/tm4c123gh6pm-can-not-enter-timer0a-isr/6021898

    我已经展示了我的  tm4c123gh6pm_startup_ccs.c、文件中没有任何 IntHandler、但有大量的 InfDefaultHandler。

    我是否需要自己编辑处理程序?

    似乎我不能 将“InfDefaultHandler"更“更改为 ISR 的函数。

    确保不从 MSP432P 复制任何文件。

    我为 TM4C123 创建了一个新项目并链接了 TivaWare_C_Series-2.2.0.295。

    [/报价]

    您是如何创建项目的? 我认为您没有通过从 TivaWare SDK 导入现有工程来创建工程。 已经有一个计时器项目可以准确地演示您想要实现的目标。 请执行以下操作。  

    1.从 C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\ek-tm4c123gxl\timers 导入计时器工程。 请注意它是要导入的、而不是复制工程。 TivaWare 示例是预编译的、可立即使用。 只需将其导入到 CCS 工作区中。 若要在 CCS 中导入工程、请转到“File"->"Import"并“并将“将路径“路径投影到  C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\ek-tm4c123gxl\timers。  

    2.运行定时器示例项目。 计时器到期后、您应该会看到 LaunchPad 上的 LED 闪烁。 配置了两个计时器、在本例中为 TIMER0_A 和 TIMER1_A。  

    3.查看 startup_ccs.c 文件。 所有 TivaWare 示例都具有 startup_ccs.c 文件、而不是  tm4c123gh6pm_startup_ccs.c 您可能已经从 Resource Explorer 导入了一些示例。 是这样的。

    4.在任何情况下、始终从 SDK 的有效示例开始、因为 SDK 中的所有示例都具有正确的 CCS 编译设置和必要的文件(启动文件,cmd 文件等)来编译工程。  

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

    尊敬的 Charles:

    感谢您的答复。

    我已经再次尝试从 TivaWare SDK 导入现有导入。

    该工程现在可以正常工作。

    步骤与之前相同、但我不知道为什么它在之前的项目中无法正常工作。

    确保我不使用副本创建新工程。

    这些仍然是我要检查的一些问题。

    1.我们在使用 MSP430 和 MSP432 系列的同时,还创建了一个全新的项目。

    现在、我对新工程使用导入操作。

    对新工程使用导入操作后、导入的工程会复制到工作区路径。

    我可以对*。c 文件进行编码和更改、但不会对示例工程产生任何影响。

    是这样吗?

    2.我们需要管理每个产品的项目。

    如何更改导入工程的名称?

    3.我已检查 startup_cd.c 文件。

    使用的处理程序是 Timer0IntHandler 和 Timer1IntHandler 。

    如果需要使用其他中断函数、我应该怎么做?

    它通常需要多个中断功能、如 UART、计时器、I2C、ADC 等

    对于示例计时器工程、需要 Timer0IntHandler 和 Timer1IntHandler 。

    如果 timer.c 文件中只有 void Timer0IntHandler (void)、则无法正常工作。

    我尝试将代码更改为我的代码,这显示在原始帖子中。

    该问题显示了错误、未解析的符号 Timer1IntHandler、首次在./startup_ccs.obj 中引用。

    我还尝试添加一个函数 void Timer1IntHandler(void ),带有空{},它可以工作。

    这实际上对我或编码没有意义、但可能对编译器没有意义。

    如何解决问题?

    5.我可以对其他 Tiva 系列芯片使用相同的示例工程吗?

    确保应更改引脚定义。

    如果问题得到解决、我将使用其他 TM4C123 芯片制作新的 PCB 布局。

    这适用于我们公司的新产品。

    实际上、它将是现有产品的升级版本、因为 MSP432P401R 已停止供电。

    它在该 PCB 上使用大量 I/O、因此 LaunchPad 上的芯片不足以用于同一产品。

    6.我使用寄存器级在 MSP430 和 MSP432 系列芯片中进行编码。

    TIVA 是否有任何寄存器级示例代码、或者我只能使用 API 方法进行 TIVA 编码?

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

    尊敬的 Norton:

    [报价 userid=“315608" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1563799/tm4c123gh6pm-can-not-enter-timer0a-isr/6024130

    1.我们在使用 MSP430 和 MSP432 系列的同时,还创建了一个全新的项目。

    现在、我对新工程使用导入操作。

    对新工程使用导入操作后、导入的工程会复制到工作区路径。

    我可以对*。c 文件进行编码和更改、但不会对示例工程产生任何影响。

    是这样吗?

    [/报价]

    没错。 在导入期间、如果选择“Copy projects into workspace“、则它不会影响 C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\ek-tm4c1294xl 下安装的示例工程。  

    [报价 userid=“315608" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1563799/tm4c123gh6pm-can-not-enter-timer0a-isr/6024130

    2.我们需要管理每个产品的项目。

    如何更改导入工程的名称?

    [/报价]

    只需右键点击工程并将其重命名为所需的任何名称。  

    [报价 userid=“315608" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1563799/tm4c123gh6pm-can-not-enter-timer0a-isr/6024130

    3.我已检查 startup_cd.c 文件。

    使用的处理程序是 Timer0IntHandler 和 Timer1IntHandler 。

    如果需要使用其他中断函数、我应该怎么做?

    它通常需要多个中断功能、如 UART、计时器、I2C、ADC 等

    [/报价]

    只需为所需的外设插入 ISR 矢量。 我们以 UART0RX 为例。 您要添加 指向 UART 的 ISR 的向量。 请参阅以下示例。 每当 UART0 接收数据时、它都将生成一个中断、处理器将跳转到 UARTIntHandler 以处理中断。  

    [报价 userid=“315608" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1563799/tm4c123gh6pm-can-not-enter-timer0a-isr/6024130

    对于示例计时器工程、需要 Timer0IntHandler 和 Timer1IntHandler 。

    如果 timer.c 文件中只有 void Timer0IntHandler (void)、则无法正常工作。

    我尝试将代码更改为我的代码,这显示在原始帖子中。

    该问题显示了错误、未解析的符号 Timer1IntHandler、首次在./startup_ccs.obj 中引用。

    我还尝试添加一个函数 void Timer1IntHandler(void ),带有空{},它可以工作。

    这实际上对我或编码没有意义、但可能对编译器没有意义。

    如何解决问题?

    [/报价]

    如果您不需要 Timer1_A、那么您需要首先禁用此计时器、这样它就不会首先产生中断。 在 startup_ccs.c 文件中、您只需将  Timer1IntHandler 替换为 IntDefaultHandler。  

    [报价 userid=“315608" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1563799/tm4c123gh6pm-can-not-enter-timer0a-isr/6024130

    5.我可以对其他 Tiva 系列芯片使用相同的示例工程吗?

    确保应更改引脚定义。

    如果问题得到解决、我将使用其他 TM4C123 芯片制作新的 PCB 布局。

    这适用于我们公司的新产品。

    实际上、它将是现有产品的升级版本、因为 MSP432P401R 已停止供电。

    它在该 PCB 上使用大量 I/O、因此 LaunchPad 上的芯片不足以用于同一产品。

    [/报价]

    您在谈论哪款 Tiva 芯片? 您可以重复使用 TM4C123 芯片的示例项目、无需太多更改。 唯一可能需要更改的原因是需要修改引脚多路复用代码的不同封装。 无需更改计时器模块的任何内容。 这只是要从一个软件包更改为另一个软件包的 pinuming 代码。 例如、如果您的 TM4C123GH6PM(64 引脚)、则引脚多路复用会与 TMP4C123GH6PZ(100 引脚)不同。  

    [报价 userid=“315608" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1563799/tm4c123gh6pm-can-not-enter-timer0a-isr/6024130

    6.我使用寄存器级在 MSP430 和 MSP432 系列芯片中进行编码。

    TIVA 是否有任何寄存器级示例代码、或者我只能使用 API 方法进行 TIVA 编码?

    [/报价]

    不建议为 TIVA 使用寄存器级编码。  TivaWare SDK 具有外设驱动器、可为您节省开发时间。 SDK 已经过验证。 写入寄存器级非常容易出错。 请参阅 HIS 常见问题解答 4。  

     https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/695568/faq-faqs-for-tm4c-arm-cortex-m4f-microcontrollers 

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

    尊敬的 Charles:

    感谢您的答复。

    除 5 之外、所有问题均已解决。

    这 是太酷了,你回答了我们决定的芯片.

    该产品之前的 32 位 MCU 是 MSP432P401R、即 100 引脚 MCU。

    几乎所有引脚都在 PCB 上定义、因此将选择芯片 TM4C123GH6PZ。

    如何更改引脚复用代码?

    我能否右键点击工程、选择“Properties"->"CCS General"“ General"并“并在“在列表中选择“Variant"芯“芯片?

    如果没有、请告诉我如何更改另一个 MCU 的引脚多路复用代码。

    另一方面、如果设置芯片的操作正确、则会将插针复用代码替换为与属性相同的芯片、对吧?

    BTW、

    我已经与老板讨论过这些问题。

    他同意使用这款 Tiva 芯片 TM4C123GH6PZ 设计新的 PCB 来升级到该产品。

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

    尊敬的 Norton:

     请参阅以下内容。 请从 TivaWare SDK 附带的 PART_TM4C123GH6PM 更改为 PART_TM4C123GH6PZ。 TivaWare SDK 具有  PART_TM4C123GH6PM、因为 TM4C123GH6PM (64 引脚)是在 EK-TM4C123GXL Launchpad 评估板上使用的封装。  

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

    尊敬的 Charles:

    感谢您的答复。

    列表中没有“PART_TM4C123GH6PZ"选项“选项。

    我使用了“Add..."</s>“ 用于添加“PART_TM4C123GH6PZ"并“并选择的按钮。

    我不知道这是否正确。

        

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

    您好、

     您可以删除  PART_TM4C123GH6PM 、但保留 PART_TM4C123GH6PZ。