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:UART1 IntHandler IN 与 UDMA 配合使用

Guru**** 2442090 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/627510/ccs-tm4c123gh6pm-uart1inthandler-in-using-with-udma

器件型号:TM4C123GH6PM

工具/软件:Code Composer Studio

尊敬的所有人:

我不熟悉 Tiva 编程。 我将使用 UDMA 通过 Ping Pong 模式从 UART1rx 传输到存储器、

当我将 IntDefaultHandler 从 starup_css.c 更改为 UART1 IntHandler 时、会启用在 DMA 传输完成时触发中断的向量、

但我有一个错误:  

说明资源路径位置类型
未解析的符号 UART1IntHandler、首先在./tm4c123gh6m_startup_ccs.obj C/C++ problem 中引用

我在项目中使用 C++、是否有问题。 如果是这样、我可以将其更改为成功构建。

提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您是否在 startup_ccs.c 文件中这样声明?
    extern void UART1IntHandler (void);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!
    是的、我确实在矢量表前面的 tm4c123gh6m_startup_css.c 文件中声明。
    extern void UART1IntHandler (void);

    我执行了与 UDMA_DEMO 相同的操作、我可以构建演示、但我的项目无法构建演示。

    //
    //
    //与 TI 的 Code Composer Studio 配合使用的启动代码。
    //
    //版权所有(c) 2011-2014 Texas Instruments Incorporated。 保留所有权利。
    //软件许可协议
    //
    软件许可协议
    //
    ////德州仪器(TI)提供此软件,仅用于
    TI 的微控制器产品和//仅用于此软件。 软件归
    // TI 和/或其供应商所有,并受适用的版权
    //法律保护。 您不能将此软件与"病毒"开源
    //软件组合在一起以形成更大的程序。
    //
    //此软件按“原样”提供,且存在所有故障。
    //对于
    
    本软件,不作任何明示、暗示或法定的保证,包括但不限于对适销性和适用性的暗示保证//特定用途。 在任何
    //情况下、TI 不对任何
    原因造成的特殊、意外或必然//损害负责。
    ////
    *****************
    
    #include 
    
    //
    //
    //转发默认故障处理程序的声明。
    ////
    *****************
    void ResetISR (void);
    static void NmiSR (void);
    static void FaultISR (void);
    static void IntDefaultHandler (void);
    
    
    //*********
    //
    //
    启动//处理器时要调用的复位处理程序的外部声明
    //
    *********
    extern void _c_int00 (void);
    
    //*********
    //
    //标记栈顶的链接器变量。
    ////
    *****************
    extern uint32_t __stack_top;
    
    //*********
    //
    //应用程序使用的中断处理程序的外部声明。
    ////
    *****************
    
    extern void UART1IntHandler (void);
    
    
    //*********
    //
    //矢量表。 请注意、必须在这个上放置适当的结构、
    以//确保它在物理地址0x0000.0000处结束、或者
    在//程序的开头(如果位于0以外的起始地址)结束。
    ////
    *****************
    #pragma DATA_SECTION (g_pfnVectors、".intvecs")
    void (* const g_pfnVectors [])(void)=
    {
    (void (*)(void)((uint32_t)&_stack_top)、
    //初始堆栈指针
    ResetISR、 //重置处理程序
    NmiSR、 // NMI 处理程序
    FaultISR、 //硬故障处理程序
    IntDefaultHandler、 // MPU 故障处理程序
    IntDefaultHandler、 //总线故障处理程序
    IntDefaultHandler、 //用法故障处理程序
    0、 //保留
    0、 //保留
    0、 //保留
    0、 //保留
    IntDefaultHandler、 // SVCall 处理程序
    IntDefaultHandler、 //调试监视器处理程序
    0、 //保留
    IntDefaultHandler、 // PendSV 处理程序
    IntDefaultHandler、 // SysTick 处理程序
    IntDefaultHandler、 // GPIO 端口 A
    IntDefaultHandler、 // GPIO 端口 B
    IntDefaultHandler、 // GPIO 端口 C
    IntDefaultHandler、 // GPIO 端口 D
    IntDefaultHandler、 // GPIO 端口 E
    IntDefaultHandler、 // UART0 Rx 和 Tx
    UART1 IntHandler、 // UART1 Rx 和 Tx
    IntDefaultHandler、 // SSI0 Rx 和 Tx
    IntDefaultHandler、 // I2C0主机和从机
    IntDefaultHandler、 // PWM 故障
    IntDefaultHandler、 // PWM 发生器0
    IntDefaultHandler、 // PWM 发生器1
    IntDefaultHandler、 // PWM 发生器2.
    IntDefaultHandler、 //正交编码器0
    IntDefaultHandler、 // ADC 序列0
    IntDefaultHandler、 // ADC 序列1
    IntDefaultHandler、 // ADC 序列2.
    IntDefaultHandler、 // ADC 序列3.
    IntDefaultHandler、 //看门狗计时器
    IntDefaultHandler、 // Timer 0子计时器 A
    IntDefaultHandler、 // Timer 0子计时器 B
    IntDefaultHandler、 //计时器1子计时器 A
    IntDefaultHandler、 //计时器1子计时器 B
    IntDefaultHandler、 //计时器2子计时器 A
    IntDefaultHandler、 //计时器2子计时器 B
    IntDefaultHandler、 //模拟比较器0
    IntDefaultHandler、 //模拟比较器1
    IntDefaultHandler、 //模拟比较器2.
    IntDefaultHandler、 //系统控制(PLL、OSC、BO)
    IntDefaultHandler、 //闪存控制
    IntDefaultHandler、 // GPIO 端口 F
    IntDefaultHandler、 // GPIO 端口 G
    IntDefaultHandler、 // GPIO 端口 H
    IntDefaultHandler、 // UART2 Rx 和 Tx
    IntDefaultHandler、 // SSI1 Rx 和 Tx
    IntDefaultHandler、 //计时器3子计时器 A
    IntDefaultHandler、 //计时器3子计时器 B
    IntDefaultHandler、 // I2C1主设备和从设备
    IntDefaultHandler、 //正交编码器1
    IntDefaultHandler、 // CAN0
    IntDefaultHandler、 // CAN1
    0、 //保留
    0、 //保留
    IntDefaultHandler、 //休眠
    IntDefaultHandler、 // USB0
    IntDefaultHandler、 // PWM 发生器3.
    IntDefaultHandler、 // uDMA 软件传输
    IntDefaultHandler、 // uDMA 错误
    IntDefaultHandler、 // ADC1序列0
    IntDefaultHandler、 // ADC1序列1
    IntDefaultHandler、 // ADC1序列2.
    IntDefaultHandler、 // ADC1序列3.
    0、 //保留
    0、 //保留
    IntDefaultHandler、 // GPIO 端口 J
    IntDefaultHandler、 // GPIO 端口 K
    IntDefaultHandler、 // GPIO 端口 L
    IntDefaultHandler、 // SSI2 Rx 和 Tx
    IntDefaultHandler、 // SSI3 Rx 和 Tx
    IntDefaultHandler、 // UART3 Rx 和 Tx
    IntDefaultHandler、 // UART4 Rx 和 Tx
    IntDefaultHandler、 // UART5 Rx 和 Tx
    IntDefaultHandler、 // UART6 Rx 和 Tx
    IntDefaultHandler、 // UART7 Rx 和 Tx
    0、 //保留
    0、 //保留
    0、 //保留
    0、 //保留
    IntDefaultHandler、 // I2C2主设备和从设备
    IntDefaultHandler、 // I2C3主设备和从设备
    IntDefaultHandler、 //计时器4子计时器 A
    IntDefaultHandler、 //计时器4子计时器 B
    0、 //保留
    0、 //保留
    0、 //保留
    0、 //保留
    0、 //保留
    0、 //保留
    0、 //保留
    0、 //保留
    0、 //保留
    0、 //保留
    0、 //保留
    0、 //保留
    0、 //保留
    0、 //保留
    0、 //保留
    0、 //保留
    0、 //保留
    0、 //保留
    0、 //保留
    0、 //保留
    IntDefaultHandler、 //计时器5子计时器 A
    IntDefaultHandler、 //计时器5子计时器 B
    IntDefaultHandler、 //宽定时器0子定时器 A
    IntDefaultHandler、 //宽定时器0子定时器 B
    IntDefaultHandler、 //宽定时器1子定时器 A
    IntDefaultHandler、 //宽定时器1子定时器 B
    IntDefaultHandler、 //宽定时器2子定时器 A
    IntDefaultHandler、 //宽定时器2子定时器 B
    IntDefaultHandler、 //宽定时器3子定时器 A
    IntDefaultHandler、 //宽定时器3子定时器 B
    IntDefaultHandler、 //宽定时器4子定时器 A
    IntDefaultHandler、 //宽定时器4子定时器 B
    IntDefaultHandler、 //宽定时器5子定时器 A
    IntDefaultHandler、 //宽定时器5子定时器 B
    IntDefaultHandler、 // FPU
    0、 //保留
    0、 //保留
    IntDefaultHandler、 // I2C4主设备和从设备
    IntDefaultHandler、 // I2C5主设备和从设备
    IntDefaultHandler、 // GPIO 端口 M
    IntDefaultHandler、 // GPIO 端口 N
    IntDefaultHandler、 //正交编码器2
    0、 //保留
    0、 //保留
    IntDefaultHandler、 // GPIO 端口 P (摘要或 P0)
    IntDefaultHandler、 // GPIO 端口 P1
    IntDefaultHandler、 // GPIO 端口 P2
    IntDefaultHandler、 // GPIO 端口 P3
    IntDefaultHandler、 // GPIO 端口 P4
    IntDefaultHandler、 // GPIO 端口 P5
    IntDefaultHandler、 // GPIO 端口 P6
    IntDefaultHandler、 // GPIO 端口 P7
    IntDefaultHandler、 // GPIO 端口 Q (摘要或 Q0)
    IntDefaultHandler、 // GPIO 端口 Q1
    IntDefaultHandler、 // GPIO 端口 Q2
    IntDefaultHandler、 // GPIO 端口 Q3
    IntDefaultHandler、 // GPIO 端口 Q4
    IntDefaultHandler、 // GPIO 端口 Q5
    IntDefaultHandler、 // GPIO 端口 Q6
    IntDefaultHandler、 // GPIO 端口 Q7
    IntDefaultHandler、 // GPIO 端口 R
    IntDefaultHandler、 // GPIO 端口 S
    IntDefaultHandler、 // PWM 1发生器0
    IntDefaultHandler、 // PWM 1发生器1
    IntDefaultHandler、 // PWM 1发生器2
    IntDefaultHandler、 // PWM 1发生器3
    IntDefaultHandler // PWM 1故障
    };
    
    //*********
    //
    //这是在处理器首次开始执行
    时调用的代码//在复位事件之后。 只执行绝对必要的设置,
    //之后调用应用程序提供的 entry()例程。 任何花式
    //操作(例如根据复位原因寄存
    
    器做出决策、和//复位该寄存器中的位)都只能由//应用程序控制。
    ////
    *****************
    void
    ResetISR (void)
    {
    //
    //跳转到 CCS C 初始化例程。 这将启用
    //浮点单元,因此不需要在此处执行此操作。
    //
    _asm (".global _c_int00\n"
    " _c_int00");
    }
    
    //*********
    //
    //这是当处理器接收到 NMI 时被调用的代码。 这个
    //只需进入一个无限循环,保留系统状态供
    调试器检查//。
    ////
    *****************
    静态空
    NmiSR (void)
    {
    //
    //输入无限循环。
    //
    while (1)
    {
    }
    }
    
    //*********
    //
    //这是处理器收到故障
    //中断时调用的代码。 这只是进入一个无限循环、保持系统状态
    //供调试器检查。
    ////
    *****************
    静态空
    FaultISR (空)
    {
    //
    //输入无限循环。
    //
    while (1)
    {
    }
    }
    
    //*********
    //
    //这是当处理器收到意外
    的//中断时调用的代码。 这只是进入一个无限循环、保持系统状态
    //供调试器检查。
    ////
    *****************
    静态空
    IntDefaultHandler (void)
    {
    //
    //进入无限循环。
    //
    while (1)
    {
    }
    }
    


    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有人可以帮我吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    只需按照 Charles 的上述步骤操作、这些步骤可能会对您有所帮助。
    这不是一个大问题,感谢查尔斯的帮助建议!
    此致、
    Tai
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您的问题是否已解决? 我不明白、如果在 UDMA_DEMO 中编译同一个文件、那么为什么不在您的 CCS 工程中编译同一个文件?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哦、是的、我在这里看到了问题。
    我没有在 DMA.cpp 的头文件中链接该函数
    谢谢
    此致