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.
工具与软件:
您好、
我是学习 DSP 的初学者。 在针对 eCAN 的 A 到 B 输出使用示例程序时、我遇到了一个问题、在这个问题上、无论怎样、波形都不会改变。 即使我修改数据或 ID、此问题仍然存在。
有人可以帮我吗?
此波形是通过示波器上的触发器获得的。
//########################################################################### // // FILE: Example_2833xEcanA_to_B_Xmit.c // // TITLE: eCAN-A to eCAN-B Transmit Loop Example // //! \addtogroup f2833x_example_list //! <h1>eCAN-A to eCAN-B Transmit Loop (ecan_a_to_b_xmit)</h1> //! //! This example TRANSMITS data to another CAN module using MAILBOX5 //! This program could either loop forever or transmit "n" # of times, //! where "n" is the TXCOUNT value. \n //! //! This example can be used to check CAN-A and CAN-B. Since CAN-B is //! initialized in DSP2833x_ECan.c, it will acknowledge all frames //! transmitted by the node on which this code runs. Both CAN ports of //! the 2833x DSP need to be connected to each other (via CAN transceivers) //! //! \b External \b Connections \n //! - eCANA is on GPIO31 (CANTXA) and GPIO30 (CANRXA) //! - eCANB is on GPIO8 (CANTXB) and GPIO10 (CANRXB) //! - Connect eCANA to eCANB via CAN transceivers // //########################################################################### // $TI Release: $ // $Release Date: $ // $Copyright: // Copyright (C) 2009-2024 Texas Instruments Incorporated - http://www.ti.com/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions // are met: // // Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // // Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the // distribution. // // Neither the name of Texas Instruments Incorporated nor the names of // its contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // $ //########################################################################### // // Included Files // #include "DSP28x_Project.h" // Device Headerfile and Examples Include File // // Defines // #define TXCOUNT 100 // Transmission will take place (TXCOUNT) times // // Globals // long i; long loopcount = 0; // // Main // void main(void) { // // Create a shadow register structure for the CAN control registers. // This is needed, since only 32-bit access is allowed to these registers. // 16-bit access to these registers could potentially corrupt the register // contents or return false data. // struct ECAN_REGS ECanaShadow; // // Step 1. Initialize System Control: // PLL, WatchDog, enable Peripheral Clocks // This example function is found in the DSP2833x_SysCtrl.c file. // InitSysCtrl(); // // Step 2. Initialize GPIO: // This example function is found in the DSP2833x_Gpio.c file and // illustrates how to set the GPIO to it's default state. // // InitGpio(); // Skipped for this example // // Just initialize eCAN pins for this example // This function is in DSP2833x_ECan.c // InitECanGpio(); // // Step 3. Clear all interrupts and initialize PIE vector table: // Disable CPU interrupts // DINT; // // Initialize the PIE control registers to their default state. // The default state is all PIE interrupts disabled and flags // are cleared. // This function is found in the DSP2833x_PieCtrl.c file. // InitPieCtrl(); // // Disable CPU interrupts and clear all CPU interrupt flags // IER = 0x0000; IFR = 0x0000; // // Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines (ISR). // This will populate the entire table, even if the interrupt // is not used in this example. This is useful for debug purposes. // The shell ISR routines are found in DSP2833x_DefaultIsr.c. // This function is found in DSP2833x_PieVect.c. // InitPieVectTable(); // // Interrupts that are used in this example are re-mapped to // ISR functions found within this file. // // // No interrupts used in this example. // // // Step 4. Initialize all the Device Peripherals: // This function is found in DSP2833x_InitPeripherals.c // // InitPeripherals(); // Not required for this example // // In this case just initialize eCAN-A and eCAN-B // This function is in DSP2833x_ECan.c // InitECan(); // // Step 5. User specific code // // // Write to the MSGID field // ECanaMboxes.MBOX25.MSGID.all = 0x95555555; // Extended Identifier // // Configure Mailbox under test as a Transmit mailbox // ECanaShadow.CANMD.all = ECanaRegs.CANMD.all; ECanaShadow.CANMD.bit.MD25 = 0; ECanaRegs.CANMD.all = ECanaShadow.CANMD.all; // // Enable Mailbox under test // ECanaShadow.CANME.all = ECanaRegs.CANME.all; ECanaShadow.CANME.bit.ME25 = 1; ECanaRegs.CANME.all = ECanaShadow.CANME.all; // // Write to DLC field in Master Control reg // ECanaMboxes.MBOX25.MSGCTRL.bit.DLC = 8; // // Write to the mailbox RAM field // ECanaMboxes.MBOX25.MDL.all = 0x55555555; ECanaMboxes.MBOX25.MDH.all = 0x55555555; // // Begin transmitting // for(i=0; i < TXCOUNT; i++) { ECanaShadow.CANTRS.all = 0; ECanaShadow.CANTRS.bit.TRS25 = 1; // Set TRS for mailbox under test ECanaRegs.CANTRS.all = ECanaShadow.CANTRS.all; do { ECanaShadow.CANTA.all = ECanaRegs.CANTA.all; } while(ECanaShadow.CANTA.bit.TA25 == 0 );// Wait for TA5 bit to be set ECanaShadow.CANTA.all = 0; ECanaShadow.CANTA.bit.TA25 = 1; // Clear TA5 ECanaRegs.CANTA.all = ECanaShadow.CANTA.all; loopcount ++; } __asm(" ESTOP0"); // Stop here } // // End of File //
您好!
波形看起来不像 CAN 信号。 Launchpad 或实验套件是否具有用于 eCAN-A 和 eCAN-B 的收发器? CAN 总线上是否有120欧姆终端电阻器?
这是 DSP 上 Tx 和 Rx 的输出、未连接到任何收发器。
您好!
CAN 总线信号如下所示:
您的消息 ID 为0x15555555。 位28为1、位27为0、等等 我在您的波形中看不到消息 ID。
是的、我了解了这部分。 我也清楚地知道这个波形是错误的。 我曾尝试更改 ID 和数据内容、但波形仍未改变。
您好!
示波器的"黑色探头"是否已连接到 GND? 从图中可以看出、您的黑色探头已连接到 GPIO18。
首先、黑色探针 连接到 GPIO 32。 之后、将其更改为连接到 GND、但波形仍然没有变化。
很抱歉、由于这个角度、布线位置不是很清楚、但是 图中的红色探针连接到了 GPIO 31、黑色探针连接到了 GPIO 30。
请将"黑色探头"连接到 GND
我已经尝试将黑色探针连接 到 GND、但波形仍然没有变化。
CAN-A 是否连接到 CAN-B? 扩展坞卡上的线缆有什么用? 如果没有 CAN 收发器、则无法将 CAN-A 直接连接到 CAN-B。
在此阶段、我只 检查 DSP 的 Tx 输出状态、未连接任何器件。
您好!
我没有 F28335控制卡、但我会探测另一个 F28x LaunchPad 上的 CAN_TX 引脚。 在 TX 引脚上获取信号波形没有问题。
我正在使用示例程序进行测试、但没有设置任何配置;关于输出设置、是否有任何特定的配置?
请确保在测试中将 GPIO31和 GPIO30用于 eCAN-A。 eCAN-A 也可以使用 GPIO18和 GPIO19。
"对不起,我不明白你的意思。"
您可以配置 eCAN-A 以使用 GPIO18和 GPIO19。
GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 3;//为 CANRXA 配置 GPIO18
GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 3;// Configure GPIO19 for CANTXA
我已经尝试过,但它仍然是错误的。
我怀疑 CAN 信号是否正确路由至坞站卡。 您是否可以将 GPIO18/GPIO19或 GPIO30/GPIO31配置为 GPIO 信号、使用 GPIO API 切换这些 GPIO 信号以及检查 GPIO 引脚是否可以切换?
您可以使用以下示例:
示例_2833xGpioToggle