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:实例化 CAN0时出现问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1127317/tm4c1233h6pm-trouble-instantiating-can0

器件型号:TM4C1233H6PM
主题中讨论的其他器件:TM4C123GH6PM

我一直在研究我们设计的 CCA 的新版本、该版本具有该板载微控制器、由于器件可用性、取代了 TM4C123GH6PM。  我们应用中的主要区别之一是、新的微控制器只有一条 CAN 总线 CAN0、而传统器件上有2条 CAN 总线。  我目前正在使用 TivaWare v2.2.0.295 -此版本支持新的 API 调用来解锁应用中所需的特殊引脚。

无论我如何尝试实例化和启用 CAN0、我都不会从示波器上的 Tx 引脚中获得任何值。  我每250ms 传输一次 CAN 消息。  中断处理也不起作用、因此我移除了收发器、以便可以直接从微控制器探测引脚。  起初、我怀疑在为端口 F 上的 CAN0所需的一个端口解锁特殊引脚时发生了某种错误。 但是、在检查 GPIO PORTF 的 SYSCTL 寄存器后、 我的结论是所有设置都确实正确-我只需在 Tx 引脚上获得3.3V 恒定输出。   

也可以在端口 B 和端口 E 上设置 CAN0、因此我进行了设置。  这些端口上的两组引脚都不是特殊引脚、因此任务明显更简单、但毫无用处。  我从相应端口上的 Tx 引脚获得相同的响应、恒定3.3V 输出。   

我尝试使用 API 调用和 DRM 调用来配置 CAN0、但结果相同。  我查找了微控制器的勘误表并读取了器件和芯片版本的 DID0寄存器、但没有看到任何迹象表明我的微处理器在 CAN0或 GPIO 配置方面存在任何问题(处理器是修订版 A1)。  我切换了示波器以确认结果、并检查了晶体振荡器配置。  由于在 Cortex CPU 上站立一条 CAN 总线从未如此具有挑战性、因此我有一点损失。  下面是一些备用端口(端口 F 和 B)上的 CAN0初始化代码:

针对我的 CCA 的常见初始化:

Fullscreen
1
2
3
4
5
6
7
8
9
ROM_SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_20MHZ);
ROM_SysCtlPWMClockSet(SYSCTL_PWMDIV_1);
gSysTickPeriod = ROM_SysCtlClockGet(); // no idea what speed this will result in yet...
// setup SysTick timer for 200 Hz interrupts
ROM_SysTickPeriodSet(gSysTickPeriod / MAIN_LOOP_FREQ);
// disable sleep mode on all peripherals being used
ROM_SysCtlPeripheralClockGating(true);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

端口 F 的实现

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Must unlock and configure PF0 since it defaults to GPIO and is a special config pin (NMI)
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN0);
// use nominal API for non-special CAN pin
ROM_GPIOPinConfigure(GPIO_PF3_CAN0TX);
ROM_GPIOPinTypeCAN(GPIO_PORTF_BASE, GPIO_PIN_3);
// direct register programming required for special pin
HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY; // unlock pin
HWREG(GPIO_PORTF_BASE + GPIO_O_CR) = GPIO_PIN_0;
HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY; // unlock pin
HWREG(GPIO_PORTF_BASE + GPIO_O_AFSEL) |= GPIO_PIN_0;
#if 0
// using the ROM functions doesn't seem to be working for this
ROM_GPIOPinConfigure(GPIO_PF0_CAN0RX);
ROM_GPIOPinConfigure(GPIO_PF3_CAN0TX);
ROM_GPIOPinTypeCAN(GPIO_PORTF_BASE, GPIO_PIN_0 | GPIO_PIN_3);
#else
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

请注意、我在使用 API 调用为 CAN 配置端口 F 时遇到了一些问题、因此改用 DRM。

端口 B 配置

Fullscreen
1
2
3
4
5
6
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
ROM_GPIOPinConfigure(GPIO_PB4_CAN0RX);
ROM_GPIOPinConfigure(GPIO_PB5_CAN0TX);
ROM_GPIOPinTypeCAN(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_5);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN0);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

后续 CAN 总线初始化

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
gCANbase = CAN0_BASE; // 0x40040000
// Reset the state of the message objects and the CAN module.
CANInit(gCANbase);
// Configure the controller for 1 Mbit operation.
#if 1
uint32_t temp = CANBitRateSet(gCANbase, gSysTickPeriod, 1000000);
#else
tCANBitClkParms CANBitClk;
CANBitClk.ui32SyncPropPhase1Seg = 5;
CANBitClk.ui32Phase2Seg = 2;
CANBitClk.ui32QuantumPrescaler = 5;
CANBitClk.ui32SJW = 2;
CANBitTimingSet(gCANbase, &CANBitClk);
#endif
// Enable interrupts for the CAN in the NVIC.
IntEnable(gCANbase == CAN0_BASE ? INT_CAN0 : INT_CAN1);
// Enable interrups from CAN controller.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

请注意、所有这些代码在 CAN1上的传统 TM4C123GH6PM 器件上都可以正常工作。   

感谢您的观看。

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

    您好!

     首先、我无法读取您的图像。 如果您想让我看看、您可以通过在菜单中选择"Insert"->"Code"来插入代码。  

     您是否尝试过 TivaWare CAN 示例?  C:\ti\TivaWare_C_Series-2.2.0.295\examples\peripheral\CAN 文件夹中有多个示例。 为什么不首先尝试 simple_tx、它应该可以开箱即用。  

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

    使用代码插页进行了更新-以前没有看到过、抱歉。

    是的、我看到了 CAN 示例-问题是、CAN0似乎不能在新芯片上工作、但在旧芯片上工作正常。  找不到任何错误、表明这可能是新器件上的问题。

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

    您好!

     我看不到 CAN0的中断 ISR 处理程序、也看不到您如何在矢量表中指定中断矢量。 是否仍然可以有 CAN1的中断向量、而不是 CAN0的中断向量? 请参阅以下代码、其中 CANIntHandler 映射到 CAN0。 否则、我不会发现您的代码有问题。 能否在新版本上运行 simple_tx? 尽管该示例不使用 TX 上的中断、但至少应该显示 PB5上的一些引脚活动、而您说过它不适用于任何引脚选项。 我还建议您在新的修订板上重新运行 CAN1代码。 它是否仍能正常工作? 这是为了排除新电路板上的任何电路板级问题。  

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    IntDefaultHandler, // Timer 3 subtimer A
    IntDefaultHandler, // Timer 3 subtimer B
    IntDefaultHandler, // I2C1 Master and Slave
    IntDefaultHandler, // Quadrature Encoder 1
    CANIntHandler, // CAN0
    IntDefaultHandler, // CAN1
    0, // Reserved
    0, // Reserved
    IntDefaultHandler, // Hibernate
    IntDefaultHandler, // USB0
    IntDefaultHandler, // PWM Generator 3
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    您好、Charles、感谢您的回答。

    是的、具有 CAN1检测功能的相同代码在具有 TM4C123GH6PM 代码的旧电路板上工作。  我将尝试按照您的建议运行其中一个示例项目、如 simple_tx。

    NVIC 配置如下:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    //*****************************************************************************
    //
    // startup_ewarm.c - Startup code for use with IAR's Embedded Workbench,
    // version 5.
    //
    // Copyright (c) 2012-2017 Texas Instruments Incorporated. All rights reserved.
    // Software License Agreement
    //
    // Texas Instruments (TI) is supplying this software for use solely and
    // exclusively on TI's microcontroller products. The software is owned by
    // TI and/or its suppliers, and is protected under applicable copyright
    // laws. You may not combine this software with "viral" open-source
    // software in order to form a larger program.
    //
    // THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
    // NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
    // NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    // A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
    // CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
    // DAMAGES, FOR ANY REASON WHATSOEVER.
    //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    您好!

     我没有听到你的反馈。 我希望您自己解决了这个问题。 我现在将关闭该线程。 如果您有一些更新、您只需写回此帖子、该主题将自动重新打开。