Part Number:TMS320F28388DOther Parts Discussed in Thread:C2000WARE
想以写寄存器的方式进行配置,没有找到
Susan Yang:
DSP应用 说:想以写寄存器的方式进行配置
目前给出的都是driverlib下的例程
写寄存器的话,您可以根据用户指南的寄存器结合driverlib下的例程的I2C配置注释说明来写
https://www.ti.com.cn/cn/lit/ug/spruii0c/spruii0c.pdf
,
DSP应用:
主要是我没找到I2C寄存器定义的文件
,
Susan Yang:
您可以参考一下
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文件
,
DSP应用:
还有有没有例程,C2000里面的连管脚都没定义
,
DSP应用:
这个我看了,这都是封装好的写地址的方式,封装后写的不清不楚的,而且例程太简单了,管脚都没定义,我自己写我想写寄存器的方式,这样方便写,起码CPU以前都是写寄存器的知道怎么写,那个例程看了跟没看似的,没有用
,
Susan Yang:
DSP应用 说:C2000里面的连管脚都没定义
管脚的话,您可以看一下
C:\ti\c2000\C2000Ware_3_04_00_00\device_support\f2838x\examples\cpu1
下例程内的定义
DSP应用 说:我自己写我想写寄存器的方式,这样方便写,起码CPU以前都是写寄存器的知道怎么写,那个例程看了跟没看似的,没有用
目前主要是driverlib的例程,CM寄存器例程的话,需要您自己编写
,
Susan Yang:
DSP应用 说:我就是说下例程写的时候能不能有点心,还有I2C有两个,为什么例程配置体现不出来呢
例程只是一个参考,在开发过程中使用时,可以给您提供一个框架
具体开发代码的话,是需要开发工程师来对照数据手册以及用户指南来实现的
DSP应用 说:起码CPU以前都是写寄存器的
之后较新的芯片基本都会是driverlib下的例程
,
DSP应用:
// // Included Files // #include <stdint.h> #include <stdbool.h>#include "cm.h"// // Defines // #define SLAVE_ADDRESS0x3C #define NUM_I2C_DATA3 #define PASS 0 #define FAIL 1int 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;elseresult = 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 _FLASHDevice_bootCM(BOOTMODE_BOOT_TO_FLASH_SECTOR0); #elseDevice_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是读 那个是写
,
DSP应用:
请诉我CM的I2C读EEPROM怎么写
,
Susan Yang:
后续会有FAE回复您的最新贴
https://e2echina.ti.com/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/207809/tms320f28388d-cm-i2c-eeprom
TI中文支持网



