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-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