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.

MSP432E401Y: I2C8 MDR register not changing

Part Number: MSP432E401Y

Tool/software:

Hello,

I have been trying to use the 8th I2C port (I2C8) using the Port D (GPIOD) on the MSP432E401Y, and I am not able to make any changes on the MDR (I2CMDR @0x400B8008) register. 

I have stepped through all of the expressions, and used multiple examples from technical manuals with no change. 

I've checked the silicone erratas and it does not mention anything about this specific issue. 

Thank you

  • Hi,

    I have been trying to use the 8th I2C port (I2C8) using the Port D (GPIOD) on the MSP432E401Y, and I am not able to make any changes on the MDR (I2CMDR @0x400B8008) register. 

    Are you saying that after you wrote to MDR, there is no transaction happening on bus or if you read from MDR register there is no data?

    Is this happening only on I2C8 or other I2C as well?

    Note that MDR is a register used for both writing and reading. You cannot read back what you wrote. When you read, the MDR reflects the data that is received on the shift register. I will strongly suggest you use a logic analyzer or a scope to view what is received on the bus. 

    Also note that depending if BURST bit is enabled in MCS, the MDR register is ignored and you need to read data from I2CFIFODATA register instead. 

    Finally, not sure why you are bypassing the SDK. You are coding in DRM (Direct Register Manipulation) style without using the provided drivers. The MSP432E SDK provides the driverlib with functions to perform I2C read/write transactions. The drivers are proven. Using it will greatly save you tremendous amount of time. There are also examples provided that will greatly give you a head start. For whatever reason that you must create your own I2C drivers, I strongly suggest you reference the SDK for I2C driver source code which you can find in C:\ti\simplelink_msp432e4_sdk_4_20_00_12\source\ti\devices\msp432e4\driverlib\i2c.c file. 

  • I found the issue was an interrupt mask bit that was not set. According to what I have found, the process cannot begin without a specific time out condition (I2C_MIMR_CLKIM) being set. It seems to work, for now Blush.

    I agree with the comment on the not using driver libs for this project. However, I have just only inherited this project and do not intend to do this on any of my own designs. Bare metal programming is absolutely an exercise in futility. This is just to help the design to finish line. I normally use code composer with all the helpful drivers and design blocks.
    Thank you for your help!