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.

TMS320F28388D: CM的外设I2C怎么查看寄存器,没有找到

Part Number: TMS320F28388D
Other Parts Discussed in Thread: C2000WARE

想以写寄存器的方式进行配置,没有找到

  • 想以写寄存器的方式进行配置

    目前给出的都是driverlib下的例程

    写寄存器的话,您可以根据用户指南的寄存器结合driverlib下的例程的I2C配置注释说明来写

    https://www.ti.com.cn/cn/lit/ug/spruii0c/spruii0c.pdf 

  • 主要是我没找到I2C寄存器定义的文件

  • 您可以参考一下

    C:\ti\c2000\C2000Ware_3_04_00_00\driverlib\f2838x\driverlib_cm\inc

    下的 hw_i2c.h 以及 C:\ti\c2000\C2000Ware_3_04_00_00\driverlib\f2838x\driverlib_cm 下的i2c文件

  • 还有有没有例程,C2000里面的连管脚都没定义

  • 这个我看了,这都是封装好的写地址的方式,封装后写的不清不楚的,而且例程太简单了,管脚都没定义,我自己写我想写寄存器的方式,这样方便写,起码CPU以前都是写寄存器的知道怎么写,那个例程看了跟没看似的,没有用

  • C2000里面的连管脚都没定义

    管脚的话,您可以看一下 

    C:\ti\c2000\C2000Ware_3_04_00_00\device_support\f2838x\examples\cpu1 

    下例程内的定义

    我自己写我想写寄存器的方式,这样方便写,起码CPU以前都是写寄存器的知道怎么写,那个例程看了跟没看似的,没有用

    目前主要是driverlib的例程,CM寄存器例程的话,需要您自己编写

  • 我就是说下例程写的时候能不能有点心,还有I2C有两个,为什么例程配置体现不出来呢

    例程只是一个参考,在开发过程中使用时,可以给您提供一个框架

    具体开发代码的话,是需要开发工程师来对照数据手册以及用户指南来实现的

    起码CPU以前都是写寄存器的

    之后较新的芯片基本都会是driverlib下的例程

  • //
    // Included Files
    //
    #include <stdint.h>
    #include <stdbool.h>
    
    #include "cm.h"
    
    //
    // Defines
    //
    #define SLAVE_ADDRESS   0x3C
    #define NUM_I2C_DATA    3
    #define PASS 0
    #define FAIL 1
    
    int Ucount;
    // Globals
    //
    uint32_t result = FAIL;
    uint32_t ui32DataTx;
    static uint32_t ui32DataRx;
     
    //
    // Function Prototypes
    //
    void initI2C(void);
    __interrupt void I2C0SlaveIntHandler(void);
    
    //
    // Main
    //
    void main(void)
    {
        uint16_t i;
    
        //
        // disable WD, enable peripheral clocks.
        //
        CM_init();
    
        //
        // Enable the I2C0 interrupt on the processor (NVIC).
        //
        I2C_registerInt(INT_I2C0,I2C0SlaveIntHandler);
    
        //
        // Set I2C use, initializing master and slave
        //
        initI2C();
    
        //
        // Initialize the data to send.
        //
        ui32DataTx = 'I';
    
        //
        // Place the data to be sent in the data register.
        //
        I2C_putMasterData(I2C0_BASE, ui32DataTx);
    
        //
        // Initiate send of single piece of data from the master.  Since the
        // loopback mode is enabled, the Master and Slave units are connected
        // allowing us to receive the same data that we sent out.
        //
        I2C_setMasterConfig(I2C0_BASE, I2C_MASTER_CMD_SINGLE_SEND);
    
        while(1)
        {
            //
            // Delay
            //
            for(i=1000; i>0; i--);
            Ucount++;if(Ucount>256) Ucount=0;
            I2C_putMasterData(I2C0_BASE, Ucount);
            I2C_setMasterConfig(I2C0_BASE, I2C_MASTER_CMD_SINGLE_SEND);
        } 
    }
    
    //
    // Function to configure I2C0.
    //
    void initI2C()
    {
        //
        // Enable the Master module.
        //
        I2C_enableMaster(I2C0_BASE);
    
        //
        // I2C configuration. Set up to transfer data at 100 Kbps.
        //
        I2C_initMaster(I2C0_BASE,I2C_CLK_FREQ,false);
    
        //
        // Enable the Slave module.
        //
        I2C_enableSlave(I2C0_BASE);
        
        //
        // Configure for internal loopback mode
        //
        I2C_setSlaveAddress(I2C0_BASE,SLAVE_ADDRESS,I2C_MASTER_WRITE);
        I2C_setOwnSlaveAddress(I2C0_BASE,I2C_SLAVE_ADDR_PRIMARY,SLAVE_ADDRESS);
    //    I2C_enableLoopback(I2C0_BASE);
    
        //
        // Configure and turn on the I2C0 slave interrupt.  The I2C_enableSlaveInt()
        // gives you the ability to only enable specific interrupts.  For this case
        // we are only interrupting when the slave device receives data.
        //
        I2C_enableSlaveInt(I2C0_BASE);
    
    }
    
    //
    // I2C0 Receive ISR. 
    //
     __interrupt void I2C0SlaveIntHandler(void)
    {
        uint32_t slvStatus;
    
        //
        // Get the slave interrupt status
        //
        slvStatus = I2C_getSlaveIntStatus(I2C0_BASE,I2C_MASTER_RAW_INT);
        
        //
        // Clear the I2C0 interrupt flag.
        //
        I2C_clearSlaveInt(I2C0_BASE);
        
        //
        // Read the data from the slave.
        //
        ui32DataRx =  I2C_getSlaveData(I2C0_BASE);
    
        if(ui32DataRx != ui32DataTx)
            result = FAIL;
        else
            result = PASS;
        
        //
        // Clear the slave interrupt status
        //
        I2C_clearSlaveIntSource(I2C0_BASE,slvStatus);
    }
    
    //
    // End of File
    //
    
    
    //#############################################################################
    //
    // FILE:   cm_common_config_c28x.c
    //
    // TITLE:  C28x Common Configurations to be used for the CM Side.
    //
    //! \addtogroup driver_example_list
    //! <h1>C28x Common Configurations</h1>
    //!
    //! This example configures the GPIOs and Allocates the shared peripherals
    //! according to the defines selected by the users.
    //!
    //
    //#############################################################################
    // $TI Release: F2838x Support Library v3.04.00.00 $
    // $Release Date: Fri Feb 12 19:08:49 IST 2021 $
    // $Copyright:
    // Copyright (C) 2021 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 "driverlib.h"
    #include "device.h"
    
    void main(void)
    {
    
        //
        // Initialize device clock and peripherals
        //
        Device_init();
    
        //
        // Boot CM core
        //
    #ifdef _FLASH
        Device_bootCM(BOOTMODE_BOOT_TO_FLASH_SECTOR0);
    #else
        Device_bootCM(BOOTMODE_BOOT_TO_S0RAM);
    #endif
    
        //
        // Disable pin locks and enable internal pull-ups.
        //
        Device_initGPIO();
    
        GPIO_setPinConfig(GPIO_31_CM_I2CA_SDA);
        GPIO_setPinConfig(GPIO_32_CM_I2CA_SCL);
    
        GPIO_setPadConfig(45, GPIO_PIN_TYPE_STD);
        GPIO_setPinConfig(GPIO_45_GPIO45);
        GPIO_setDirectionMode(45, GPIO_DIR_MODE_OUT);
        GPIO_setMasterCore(45, GPIO_CORE_CM);
    
    #ifdef ETHERNET
        //
        // Set up EnetCLK to use SYSPLL as the clock source and set the
        // clock divider to 2.
        //
        // This way we ensure that the PTP clock is 100 MHz. Note that this value
        // is not automatically/dynamically known to the CM core and hence it needs
        // to be made available to the CM side code beforehand.
        SysCtl_setEnetClk(SYSCTL_ENETCLKOUT_DIV_2, SYSCTL_SOURCE_SYSPLL);
    
        //
        // Configure the GPIOs for ETHERNET.
        //
    
        //
        // MDIO Signals
        //
        GPIO_setPinConfig(GPIO_105_ENET_MDIO_CLK);
        GPIO_setPinConfig(GPIO_106_ENET_MDIO_DATA);
    
        //
        // Use this only for RMII Mode
        //GPIO_setPinConfig(GPIO_73_ENET_RMII_CLK);
        //
    
        //
        //MII Signals
        //
        GPIO_setPinConfig(GPIO_109_ENET_MII_CRS);
        GPIO_setPinConfig(GPIO_110_ENET_MII_COL);
    
        GPIO_setPinConfig(GPIO_75_ENET_MII_TX_DATA0);
        GPIO_setPinConfig(GPIO_122_ENET_MII_TX_DATA1);
        GPIO_setPinConfig(GPIO_123_ENET_MII_TX_DATA2);
        GPIO_setPinConfig(GPIO_124_ENET_MII_TX_DATA3);
    
        //
        //Use this only if the TX Error pin has to be connected
        //GPIO_setPinConfig(GPIO_46_ENET_MII_TX_ERR);
        //
    
        GPIO_setPinConfig(GPIO_118_ENET_MII_TX_EN);
    
        GPIO_setPinConfig(GPIO_114_ENET_MII_RX_DATA0);
        GPIO_setPinConfig(GPIO_115_ENET_MII_RX_DATA1);
        GPIO_setPinConfig(GPIO_116_ENET_MII_RX_DATA2);
        GPIO_setPinConfig(GPIO_117_ENET_MII_RX_DATA3);
        GPIO_setPinConfig(GPIO_113_ENET_MII_RX_ERR);
        GPIO_setPinConfig(GPIO_112_ENET_MII_RX_DV);
    
        GPIO_setPinConfig(GPIO_44_ENET_MII_TX_CLK);
        GPIO_setPinConfig(GPIO_111_ENET_MII_RX_CLK);
    
        //
        //Power down pin to bring the external PHY out of Power down
        //
        GPIO_setDirectionMode(108, GPIO_DIR_MODE_OUT);
        GPIO_setPadConfig(108, GPIO_PIN_TYPE_PULLUP);
        GPIO_writePin(108,1);
    
        //
        //PHY Reset Pin to be driven High to bring external PHY out of Reset
        //
    
        GPIO_setDirectionMode(119, GPIO_DIR_MODE_OUT);
        GPIO_setPadConfig(119, GPIO_PIN_TYPE_PULLUP);
        GPIO_writePin(119,1);
    #endif
    
    #ifdef MCAN
        //
        // Setting the MCAN Clock.
        //
        SysCtl_setMCANClk(SYSCTL_MCANCLK_DIV_4);
    
        //
        // Configuring the GPIOs for MCAN.
        //
        GPIO_setPinConfig(DEVICE_GPIO_CFG_MCANRXA);
        GPIO_setPinConfig(DEVICE_GPIO_CFG_MCANTXA);
    #endif
    
    #ifdef CANA
        //
        // Configuring the GPIOs for CAN A.
        //
        GPIO_setPinConfig(DEVICE_GPIO_CFG_CANRXA);
        GPIO_setPinConfig(DEVICE_GPIO_CFG_CANTXA);
    
        //
        // Allocate Shared Peripheral CAN A to the CM Side.
        //
        SysCtl_allocateSharedPeripheral(SYSCTL_PALLOCATE_CAN_A,0x1U);
    #endif
    
    #ifdef CANB
        //
        // Configuring the GPIOs for CAN B.
        //
        GPIO_setPinConfig(DEVICE_GPIO_CFG_CANRXB);
        GPIO_setPinConfig(DEVICE_GPIO_CFG_CANTXB);
    
        //
        // Allocate Shared Peripheral CAN B to the CM Side.
        //
        SysCtl_allocateSharedPeripheral(SYSCTL_PALLOCATE_CAN_B,0x1U);
    #endif
    
    #ifdef UART
        //
        // Configure GPIO85 as the UART Rx pin.
        //
        GPIO_setPinConfig(GPIO_85_UARTA_RX);
        GPIO_setDirectionMode(85, GPIO_DIR_MODE_IN);
        GPIO_setPadConfig(85, GPIO_PIN_TYPE_STD);
        GPIO_setQualificationMode(85, GPIO_QUAL_ASYNC);
    
        //
        // Configure GPIO84 as the UART Tx pin.
        //
        GPIO_setPinConfig(GPIO_84_UARTA_TX);
        GPIO_setDirectionMode(84, GPIO_DIR_MODE_OUT);
        GPIO_setPadConfig(84, GPIO_PIN_TYPE_STD);
        GPIO_setQualificationMode(84, GPIO_QUAL_ASYNC);
    #endif
    
    #ifdef USB
    #ifdef USE_20MHZ_XTAL
        //
        // Set up the auxiliary PLL so a 60 MHz output clock is provided to the USB module.
        // This fixed frequency is required for all USB operations.
        //
        SysCtl_setAuxClock(SYSCTL_AUXPLL_OSCSRC_XTAL |
                           SYSCTL_AUXPLL_IMULT(48) |
                           SYSCTL_REFDIV(2U) | SYSCTL_ODIV(4U) |
                           SYSCTL_AUXPLL_DIV_2 |
                           SYSCTL_AUXPLL_ENABLE |
                           SYSCTL_DCC_BASE_0);
    #else
        //
        // Set up the auxiliary PLL so a 60 MHz output clock is provided to the USB module.
        // This fixed frequency is required for all USB operations.
        //
        SysCtl_setAuxClock(SYSCTL_AUXPLL_OSCSRC_XTAL |
                           SYSCTL_AUXPLL_IMULT(48) |
                           SYSCTL_REFDIV(2U) | SYSCTL_ODIV(5U) |
                           SYSCTL_AUXPLL_DIV_2 |
                           SYSCTL_AUXPLL_ENABLE |
                           SYSCTL_DCC_BASE_0);
    #endif
    
        //
        // Allocate Shared Peripheral USB to the CM Side.
        //
        SysCtl_allocateSharedPeripheral(SYSCTL_PALLOCATE_USBA, 1);
    
        GPIO_setPinConfig(GPIO_0_GPIO0);
        GPIO_setPadConfig(0, GPIO_PIN_TYPE_STD);
        GPIO_setDirectionMode(0, GPIO_DIR_MODE_OUT);
        GPIO_setMasterCore(0, GPIO_CORE_CM);
    
        //
        // Set the master core of GPIOs to CM.
        //
        GPIO_setMasterCore(42, GPIO_CORE_CM);
        GPIO_setMasterCore(43, GPIO_CORE_CM);
        GPIO_setMasterCore(46, GPIO_CORE_CM);
        GPIO_setMasterCore(47, GPIO_CORE_CM);
        GPIO_setMasterCore(120, GPIO_CORE_CM);
        GPIO_setMasterCore(121, GPIO_CORE_CM);
    
        //
        // Set the USB DM and DP GPIOs.
        //
        GPIO_setAnalogMode(42, GPIO_ANALOG_ENABLED);
        GPIO_setAnalogMode(43, GPIO_ANALOG_ENABLED);
    
        //
        // Set the direction for VBUS and ID.
        //
        GPIO_setDirectionMode(46, GPIO_DIR_MODE_IN);
        GPIO_setDirectionMode(47, GPIO_DIR_MODE_IN);
    
        //
        // Configure the Power Fault.
        //
        GPIO_setMasterCore(120, GPIO_CORE_CM);
        GPIO_setDirectionMode(120, GPIO_DIR_MODE_IN);
    
        //
        // Configure the External Power Signal Enable.
        //
        GPIO_setMasterCore(121, GPIO_CORE_CM);
    	GPIO_setDirectionMode(121, GPIO_DIR_MODE_OUT);
    	GPIO_writePin(121, 1);
    
        //
        // Set the CM Clock to run at 120MHz.
        // The CM Clock is a fractional multiple of the AUXPLL Clock (120 Mhz) from
        // which the USB Clock (60 MHz) is derived.
        //
        SysCtl_setCMClk(SYSCTL_CMCLKOUT_DIV_1, SYSCTL_SOURCE_AUXPLL);
    #endif
    }
    

    就是这个例程简单的改了一下连续发送,

    问题1:禁止I2C_enableLoopback(I2C0_BASE);为什么还能进接收中断

    问题2:为什么测试32管教没有波形

    问题3:想确定这里的解释有没有写反,为什么I2C_MASTER_WRITE是读  那个是写

  • 请诉我CM的I2C读EEPROM怎么写