Просмотр исходного кода

增加角度传感器TMAG5273测试,400K速率读取正常。屏蔽霍尔检测,HB和HC作为I2C与角度传感器通信。

dd 1 неделя назад
Родитель
Сommit
b5e3b0acf6

+ 18 - 3
1.FrameLayer/Source/main.c

@@ -34,6 +34,7 @@
 #include "canAppl.h"
 #include "flash_master.h"
 #include "string.h"
+#include "tmag5273.h"
 //#include "at32f421_wk_config.h"
 //#include "SEGGER_RTT.h"
 #include "UserGpio_Config.h"
@@ -140,6 +141,11 @@ SYSCONFIG_WEAK void SYSCFG_DL_PWM_0_COPY_init(void) {
 
 }
 
+SWORD Tempe;
+UWORD Angle;
+SLONG MagX,MagY,MagZ;
+
+
 int  main(void)
 {
     SCB->VTOR =APP_START_Address;//
@@ -151,6 +157,9 @@ int  main(void)
     SYSCFG_DL_init();
     SYSCFG_DL_PWM_0_COPY_init();
     Reset_POWER_LOCK_PORT();
+
+    NVIC_EnableIRQ(I2C_0_INST_INT_IRQN);
+
     //TIMA0  MOTOR_PWM
     DL_Timer_setCaptCompUpdateMethod(MOTOR_PWM_INST,DL_TIMER_CC_UPDATE_METHOD_ZERO_EVT,DL_TIMERA_CAPTURE_COMPARE_0_INDEX);
     DL_Timer_setCaptCompUpdateMethod(MOTOR_PWM_INST,DL_TIMER_CC_UPDATE_METHOD_ZERO_EVT,DL_TIMERA_CAPTURE_COMPARE_1_INDEX);
@@ -165,7 +174,7 @@ int  main(void)
 
     DL_Timer_clearInterruptStatus(MOTOR_PWM_INST,DL_TIMER_INTERRUPT_FAULT_EVENT|DL_TIMER_INTERRUPT_ZERO_EVENT);
     DL_Timer_clearEventsStatus(MOTOR_PWM_INST,1,DL_TIMER_EVENT_FAULT_EVENT);
-   DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST,2, DL_TIMER_CC_4_INDEX);
+    DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST,2, DL_TIMER_CC_4_INDEX);
     //HALL IO
     NVIC_EnableIRQ(GPIOA_INT_IRQn);  //HALL GPIO
     NVIC_EnableIRQ(GPIOB_INT_IRQn);  //HALL GPIO
@@ -217,7 +226,6 @@ int  main(void)
 
 //    hw_voHardwareSetup1();
     /* Api Init*/
-   // iRt_Init();
     /* Api App Init*/
     AppInit();
     /* Peripheral configuration */
@@ -257,7 +265,7 @@ int  main(void)
 //    delay_cycles(DELAY);
 //    delay_cycles(DELAY);
 
-
+    tmag5273_Init();
     /* Enter infinite loop */
 #if(JSCOPE_EN!=0)
      Jscope_Init();
@@ -277,6 +285,13 @@ int  main(void)
           AppLoop();
 //          PROFILER_BG();
           ACnt++;
+          Tempe = tmag5273_GetTemp();
+          DL_GPIO_setPins(GPIO_B_LED_PORT, GPIO_B_LED_PIN_LED_B_EN_PIN);
+          Angle = tmag5273_GetAngle();
+          DL_GPIO_clearPins(GPIO_B_LED_PORT, GPIO_B_LED_PIN_LED_B_EN_PIN);
+          MagX = tmag5273_GetXData();
+          MagY = tmag5273_GetYData();
+          MagZ = tmag5273_GetZData();
 
 //           delay_cycles(DELAY);
 //           DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, 1875, DL_TIMER_CC_0_INDEX);

+ 22 - 0
3.BasicFunction/Include/tmag5273.h

@@ -0,0 +1,22 @@
+/*
+ * tmag5273.h
+ *
+ *  Created on: 2025��1��10��
+ *      Author: zhouxiong9
+ */
+
+#ifndef MY_DRIVERS_TMAG5273_H_
+#define MY_DRIVERS_TMAG5273_H_
+
+#include "typedefine.h"
+
+extern UBYTE tmag5273_GetDevID(void);
+extern UWORD tmag5273_GetMANUFACTURER_ID(void);
+extern SBYTE tmag5273_Init(void);
+extern SLONG tmag5273_GetXData(void);
+extern SLONG tmag5273_GetYData(void);
+extern SLONG tmag5273_GetZData(void);
+extern SWORD tmag5273_GetTemp(void);
+extern UWORD tmag5273_GetAngle(void);
+
+#endif /* MY_DRIVERS_TMAG5273_H_ */

+ 301 - 0
3.BasicFunction/Source/tmag5273.c

@@ -0,0 +1,301 @@
+/*
+ * tmag5273.c
+ *
+ *  Created on: 2025��1��10��
+ *      Author: zhouxiong9
+ */
+
+#include "tmag5273.h"
+#include <ti/driverlib/dl_i2c.h>
+#include "ti_msp_dl_config.h"
+
+#define TMAG5273A1_ADDRESS             0x35
+
+#define DEVICE_CONFIG_1                0x00
+#define DEVICE_CONFIG_2                0x01
+#define SENSOR_CONFIG_1                0x02
+#define SENSOR_CONFIG_2                0x03
+#define X_THR_CONFIG                   0x04
+#define Y_THR_CONFIG                   0x05
+#define Z_THR_CONFIG                   0x06
+#define T_CONFIG                       0x07
+#define INT_CONFIG_1                   0x08
+#define MAG_GAIN_CONFIG                0x09
+#define MAG_OFFSET_CONFIG_1            0x0A
+#define MAG_OFFSET_CONFIG_2            0x0B
+#define I2C_ADDRESS                    0x0C
+#define DEVICE_ID                      0x0D
+#define MANUFACTURER_ID_LSB            0x0E
+#define MANUFACTURER_ID_MSB            0x0F
+#define T_MSB_RESULT                   0x10
+#define T_LSB_RESULT                   0x11
+#define X_MSB_RESULT                   0x12
+#define X_LSB_RESULT                   0x13
+#define Y_MSB_RESULT                   0x14
+#define Y_LSB_RESULT                   0x15
+#define Z_MSB_RESULT                   0x16
+#define Z_LSB_RESULT                   0x17
+#define CONV_STATUS                    0x18
+#define ANGLE_RESULT_MSB               0x19
+#define ANGLE_RESULT_LSB               0x1A
+#define MAGNITUDE_RESULT               0x1B
+#define DEVICE_STATUS                  0x1C
+
+enum I2cControllerStatus {
+    I2C_STATUS_IDLE = 0,
+    I2C_STATUS_TX_STARTED,
+    I2C_STATUS_TX_INPROGRESS,
+    I2C_STATUS_TX_COMPLETE,
+    I2C_STATUS_RX_STARTED,
+    I2C_STATUS_RX_INPROGRESS,
+    I2C_STATUS_RX_COMPLETE,
+    I2C_STATUS_ERROR,
+} gI2cControllerStatus;
+
+ULONG gTxLen, gTxCount, gRxCount, gRxLen;
+UBYTE gTxPacket[128];
+UBYTE gRxPacket[128];
+
+char TMAG5273_WriteReg(UBYTE addr, UBYTE regaddr, UBYTE num, UBYTE *regdata)
+{
+    UWORD i;
+
+    gI2cControllerStatus = I2C_STATUS_IDLE;
+    gTxLen = num+1;
+
+    gTxPacket[0] = regaddr;
+    for(i=1; i<=num; i++)
+    {
+        gTxPacket[i] = (UBYTE)regdata[i-1];
+    }
+
+    gTxCount = DL_I2C_fillControllerTXFIFO(I2C_0_INST, &gTxPacket[0], gTxLen);
+
+    if (gTxCount < gTxLen)
+    {
+        DL_I2C_enableInterrupt(I2C_0_INST, DL_I2C_INTERRUPT_CONTROLLER_TXFIFO_TRIGGER);
+    }
+    else
+    {
+        DL_I2C_disableInterrupt(I2C_0_INST, DL_I2C_INTERRUPT_CONTROLLER_TXFIFO_TRIGGER);
+    }
+
+    gI2cControllerStatus = I2C_STATUS_TX_STARTED;
+    while (!(DL_I2C_getControllerStatus(I2C_0_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));
+    DL_I2C_startControllerTransfer(I2C_0_INST, addr, DL_I2C_CONTROLLER_DIRECTION_TX, gTxLen);
+
+    while ((gI2cControllerStatus != I2C_STATUS_TX_COMPLETE) && (gI2cControllerStatus != I2C_STATUS_ERROR))
+    {
+        __WFE();
+    }
+
+    while (DL_I2C_getControllerStatus(I2C_0_INST) & DL_I2C_CONTROLLER_STATUS_BUSY_BUS);
+
+    while (!(DL_I2C_getControllerStatus(I2C_0_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));
+    delay_cycles(1000);
+
+    return 0;
+}
+
+char TMAG5273_ReadData(UBYTE addr, UBYTE regaddr, UBYTE num, UBYTE* Read)
+{
+    UBYTE data[2], i;
+    data[0] = regaddr;
+
+    gI2cControllerStatus = I2C_STATUS_IDLE;
+    DL_I2C_fillControllerTXFIFO(I2C_0_INST, &data[0], 1);
+    DL_I2C_disableInterrupt(I2C_0_INST, DL_I2C_INTERRUPT_CONTROLLER_TXFIFO_TRIGGER);
+    gI2cControllerStatus = I2C_STATUS_TX_STARTED;
+    while (!(DL_I2C_getControllerStatus(I2C_0_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));
+    DL_I2C_startControllerTransfer(I2C_0_INST, addr, DL_I2C_CONTROLLER_DIRECTION_TX, 1);
+    while ((gI2cControllerStatus != I2C_STATUS_TX_COMPLETE) && (gI2cControllerStatus != I2C_STATUS_ERROR))
+    {
+        __WFE();
+    }
+    while (DL_I2C_getControllerStatus(I2C_0_INST) & DL_I2C_CONTROLLER_STATUS_BUSY_BUS);
+
+    while (!(DL_I2C_getControllerStatus(I2C_0_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));
+    // delay_cycles(1000);
+
+    gRxLen = num;
+    gRxCount = 0;
+    gI2cControllerStatus = I2C_STATUS_RX_STARTED;
+    DL_I2C_startControllerTransfer(I2C_0_INST, addr, DL_I2C_CONTROLLER_DIRECTION_RX, gRxLen);
+    while (gI2cControllerStatus != I2C_STATUS_RX_COMPLETE)
+    {
+        __WFE();
+    }
+    while (DL_I2C_getControllerStatus(I2C_0_INST) & DL_I2C_CONTROLLER_STATUS_BUSY_BUS);
+
+    for(i=0; i<num; i++)
+    {
+        Read[i] = gRxPacket[i];
+    }
+
+    return 0;
+}
+
+void I2C_0_INST_IRQHandler(void)
+{
+    switch (DL_I2C_getPendingInterrupt(I2C_0_INST)) {
+        case DL_I2C_IIDX_CONTROLLER_RX_DONE:
+            gI2cControllerStatus = I2C_STATUS_RX_COMPLETE;
+            break;
+        case DL_I2C_IIDX_CONTROLLER_TX_DONE:
+            DL_I2C_disableInterrupt(
+                    I2C_0_INST, DL_I2C_INTERRUPT_CONTROLLER_TXFIFO_TRIGGER);
+            gI2cControllerStatus = I2C_STATUS_TX_COMPLETE;
+            break;
+        case DL_I2C_IIDX_CONTROLLER_RXFIFO_TRIGGER:
+            gI2cControllerStatus = I2C_STATUS_RX_INPROGRESS;
+            /* Receive all bytes from target */
+            while (DL_I2C_isControllerRXFIFOEmpty(I2C_0_INST) != true) {
+                if (gRxCount < gRxLen) {
+                    gRxPacket[gRxCount++] =
+                        DL_I2C_receiveControllerData(I2C_0_INST);
+                } else {
+                    /* Ignore and remove from FIFO if the buffer is full */
+                    DL_I2C_receiveControllerData(I2C_0_INST);
+                }
+            }
+            break;
+        case DL_I2C_IIDX_CONTROLLER_TXFIFO_TRIGGER:
+            gI2cControllerStatus = I2C_STATUS_TX_INPROGRESS;
+            /* Fill TX FIFO with next bytes to send */
+            if (gTxCount < gTxLen) {
+                gTxCount += DL_I2C_fillControllerTXFIFO(
+                        I2C_0_INST, &gTxPacket[gTxCount], gTxLen - gTxCount);
+            }
+            break;
+            /* Not used for this example */
+        case DL_I2C_IIDX_CONTROLLER_ARBITRATION_LOST:
+        case DL_I2C_IIDX_CONTROLLER_NACK:
+            if ((gI2cControllerStatus == I2C_STATUS_RX_STARTED) ||
+                (gI2cControllerStatus == I2C_STATUS_TX_STARTED)) {
+                /* NACK interrupt if I2C Target is disconnected */
+                gI2cControllerStatus = I2C_STATUS_ERROR;
+            }
+        case DL_I2C_IIDX_CONTROLLER_RXFIFO_FULL:
+        case DL_I2C_IIDX_CONTROLLER_TXFIFO_EMPTY:
+        case DL_I2C_IIDX_CONTROLLER_START:
+        case DL_I2C_IIDX_CONTROLLER_STOP:
+        case DL_I2C_IIDX_CONTROLLER_EVENT1_DMA_DONE:
+        case DL_I2C_IIDX_CONTROLLER_EVENT2_DMA_DONE:
+        default:
+            break;
+    }
+}
+
+UBYTE tmag5273_GetDevID(void)
+{
+    UBYTE Result;
+
+    TMAG5273_ReadData(TMAG5273A1_ADDRESS, DEVICE_ID, 1, &Result);
+    return Result;
+}
+
+UWORD tmag5273_GetMANUFACTURER_ID(void)
+{
+    UWORD Result;
+    UBYTE Rs1, Rs2;
+
+    TMAG5273_ReadData(TMAG5273A1_ADDRESS, MANUFACTURER_ID_LSB, 1, &Rs1);
+    TMAG5273_ReadData(TMAG5273A1_ADDRESS, MANUFACTURER_ID_MSB, 1, &Rs2);
+    Result = (Rs2 << 8) + Rs1;
+    return Result;
+}
+
+SBYTE tmag5273_Init(void)
+{
+    UBYTE tmp[2];
+
+    tmp[0] = 0x00;
+    TMAG5273_WriteReg(TMAG5273A1_ADDRESS, DEVICE_CONFIG_1, 1, tmp);
+    tmp[0] = 0x02;
+    TMAG5273_WriteReg(TMAG5273A1_ADDRESS, DEVICE_CONFIG_2, 1, tmp);
+    tmp[0] = 0x7C;
+    TMAG5273_WriteReg(TMAG5273A1_ADDRESS, SENSOR_CONFIG_1, 1, tmp);
+    tmp[0] = 0x04;
+    TMAG5273_WriteReg(TMAG5273A1_ADDRESS, SENSOR_CONFIG_2, 1, tmp);
+    tmp[0] = 0x01;
+    TMAG5273_WriteReg(TMAG5273A1_ADDRESS, T_CONFIG, 1, tmp);
+
+    return 0;
+}
+
+SLONG tmag5273_GetXData(void) //uT
+{
+    UBYTE xMLSB[2];
+    UWORD xData = 0;
+    SLONG Out = 0;
+
+    TMAG5273_ReadData(TMAG5273A1_ADDRESS, X_MSB_RESULT, 2, xMLSB);
+
+    xData = xMLSB[1] + (xMLSB[0] << 8);
+    if(xData & 0x8000)
+        Out = ((-32768 + (xData & 0x7FFF)) * 40000) >> 15;
+    else
+        Out = ((xData & 0x7FFF) * 40000) >> 15;
+
+    return Out;
+}
+
+SLONG tmag5273_GetYData(void) //uT
+{
+    UBYTE yMLSB[2];
+    SWORD yData = 0;
+    SLONG Out = 0;
+
+    TMAG5273_ReadData(TMAG5273A1_ADDRESS, Y_MSB_RESULT, 2, yMLSB);
+
+    yData = yMLSB[1] + (yMLSB[0] << 8);
+    if(yData & 0x8000)
+        Out = ((-32768 + (yData & 0x7FFF)) * 40000) >> 15;
+    else
+        Out = ((yData & 0x7FFF) * 40000) >> 15;
+
+    return Out;
+}
+
+SLONG tmag5273_GetZData(void) //uT
+{
+    UBYTE zMLSB[2];
+    SWORD zData = 0;
+    SLONG Out = 0;
+
+    TMAG5273_ReadData(TMAG5273A1_ADDRESS, Z_MSB_RESULT, 2, zMLSB);
+
+    zData = zMLSB[1] + (zMLSB[0] << 8);
+    if(zData & 0x8000)
+        Out = ((-32768 + (zData & 0x7FFF)) * 40000) >> 15;
+    else
+        Out = ((zData & 0x7FFF) * 40000) >> 15;
+
+    return Out;
+}
+
+SWORD tmag5273_GetTemp(void) //0.01℃
+{
+    UBYTE tMLSB[2];
+    UWORD tData = 0;
+    SWORD Result;
+
+    TMAG5273_ReadData(TMAG5273A1_ADDRESS, T_MSB_RESULT, 2, tMLSB);
+
+    tData = tMLSB[1] + (tMLSB[0] << 8);
+    Result = 2500 + (((tData - 17508) * 213) >> 7); //100 * 60.1 * 128
+
+    return Result;
+}
+
+
+UWORD tmag5273_GetAngle(void) //x16
+{
+    UBYTE agMLSB[2] = {0, 0};
+    UWORD Result;
+
+    TMAG5273_ReadData(TMAG5273A1_ADDRESS, ANGLE_RESULT_MSB, 2, agMLSB);
+    Result = agMLSB[1] + (agMLSB[0] << 8);
+
+    return Result;
+}

+ 5 - 4
m0g3507_int.c

@@ -1030,8 +1030,7 @@ void MOTOR_PWM_INST_IRQHandler(void) //void TMR1_BRK_OVF_TRG_HALL_IRQHandler(voi
   */
 void GROUP1_IRQHandler(void) //void TMR3_GLOBAL_IRQHandler(void)
 {
-    uint32_t gpioA = DL_GPIO_getEnabledInterruptStatus(GPIOA, DL_GPIO_PIN_8 | DL_GPIO_PIN_26);
-    uint32_t gpioB = DL_GPIO_getEnabledInterruptStatus(GPIOB, DL_GPIO_PIN_3 | DL_GPIO_PIN_2);
+    uint32_t gpioA = DL_GPIO_getEnabledInterruptStatus(GPIOA, DL_GPIO_PIN_26);
 
     //BAT灯
 #if 0
@@ -1062,6 +1061,7 @@ void GROUP1_IRQHandler(void) //void TMR3_GLOBAL_IRQHandler(void)
 #endif
 
    /* add user code begin TMR3_GLOBAL_IRQ 0 */
+#if 0
    if( ((gpioA & DL_GPIO_PIN_8) ==  DL_GPIO_PIN_8) || ((gpioB & DL_GPIO_PIN_3) ==  DL_GPIO_PIN_3) ||((gpioB & DL_GPIO_PIN_2) ==  DL_GPIO_PIN_2))
    {
        HGcnt++;
@@ -1070,6 +1070,7 @@ void GROUP1_IRQHandler(void) //void TMR3_GLOBAL_IRQHandler(void)
        DL_GPIO_clearInterruptStatus(GPIOB, DL_GPIO_PIN_3);
        DL_GPIO_clearInterruptStatus(GPIOB, DL_GPIO_PIN_2);
    }
+#endif
 
     /* add user code end TMR3_GLOBAL_IRQ 0 */
     /* add user code begin TMR3_GLOBAL_IRQ 1 */
@@ -1415,9 +1416,9 @@ void TIMA1_IRQHandler(void) //void TMR1_BRK_OVF_TRG_HALL_IRQHandler(void)
             {
                 case 1:
                 {
-                    DL_GPIO_setPins(GPIO_B_LED_PORT, GPIO_B_LED_PIN_LED_B_EN_PIN);
+//                    DL_GPIO_setPins(GPIO_B_LED_PORT, GPIO_B_LED_PIN_LED_B_EN_PIN);
                     tbc_voUpIsr();
-                    DL_GPIO_clearPins(GPIO_B_LED_PORT, GPIO_B_LED_PIN_LED_B_EN_PIN);
+//                    DL_GPIO_clearPins(GPIO_B_LED_PORT, GPIO_B_LED_PIN_LED_B_EN_PIN);
                     break;
                 }
                 case 3:

+ 51 - 11
ti_msp_dl_config.c

@@ -58,6 +58,7 @@ SYSCONFIG_WEAK void SYSCFG_DL_init(void)
     SYSCFG_DL_DEBUG_init();
 #endif
     SYSCFG_DL_SYSCTL_init();
+    SYSCFG_DL_I2C_0_init();
     SYSCFG_DL_MOTOR_PWM_init();
     SYSCFG_DL_PWM_F_init();
     SYSCFG_DL_HALLTIMER_init();
@@ -110,6 +111,7 @@ SYSCONFIG_WEAK void SYSCFG_DL_initPower(void)
 {
     DL_GPIO_reset(GPIOA);
     DL_GPIO_reset(GPIOB);
+    DL_I2C_reset(I2C_0_INST);
     DL_TimerA_reset(MOTOR_PWM_INST);
     DL_TimerG_reset(PWM_F_INST);
     DL_TimerG_reset(HALLTIMER_INST);
@@ -127,6 +129,7 @@ SYSCONFIG_WEAK void SYSCFG_DL_initPower(void)
 
     DL_GPIO_enablePower(GPIOA);
     DL_GPIO_enablePower(GPIOB);
+    DL_I2C_enablePower(I2C_0_INST);
     DL_TimerA_enablePower(MOTOR_PWM_INST);
     DL_TimerG_enablePower(PWM_F_INST);
     DL_TimerG_enablePower(HALLTIMER_INST);
@@ -150,6 +153,17 @@ SYSCONFIG_WEAK void SYSCFG_DL_GPIO_init(void)
     DL_GPIO_initPeripheralAnalogFunction(GPIO_HFXIN_IOMUX);
     DL_GPIO_initPeripheralAnalogFunction(GPIO_HFXOUT_IOMUX);
 
+    DL_GPIO_initPeripheralInputFunctionFeatures(
+             GPIO_I2C_0_IOMUX_SDA, GPIO_I2C_0_IOMUX_SDA_FUNC,
+             DL_GPIO_INVERSION_DISABLE, DL_GPIO_RESISTOR_PULL_UP,
+             DL_GPIO_HYSTERESIS_DISABLE, DL_GPIO_WAKEUP_DISABLE);
+    DL_GPIO_initPeripheralInputFunctionFeatures(
+         GPIO_I2C_0_IOMUX_SCL, GPIO_I2C_0_IOMUX_SCL_FUNC,
+         DL_GPIO_INVERSION_DISABLE, DL_GPIO_RESISTOR_PULL_UP,
+         DL_GPIO_HYSTERESIS_DISABLE, DL_GPIO_WAKEUP_DISABLE);
+    DL_GPIO_enableHiZ(GPIO_I2C_0_IOMUX_SDA);
+    DL_GPIO_enableHiZ(GPIO_I2C_0_IOMUX_SCL);
+
     DL_GPIO_initPeripheralOutputFunction(GPIO_MOTOR_PWM_C0_IOMUX,GPIO_MOTOR_PWM_C0_IOMUX_FUNC);
     DL_GPIO_enableOutput(GPIO_MOTOR_PWM_C0_PORT, GPIO_MOTOR_PWM_C0_PIN);
     DL_GPIO_initPeripheralOutputFunction(GPIO_MOTOR_PWM_C0_CMPL_IOMUX,GPIO_MOTOR_PWM_C0_CMPL_IOMUX_FUNC);
@@ -190,11 +204,13 @@ SYSCONFIG_WEAK void SYSCFG_DL_GPIO_init(void)
 		 DL_GPIO_INVERSION_DISABLE, DL_GPIO_RESISTOR_PULL_UP,
 		 DL_GPIO_HYSTERESIS_DISABLE, DL_GPIO_WAKEUP_DISABLE);
 
+#if 0
     DL_GPIO_initDigitalInput(HALL_HALLA_IOMUX);
 
     DL_GPIO_initDigitalInput(HALL_HALLB_IOMUX);
 
     DL_GPIO_initDigitalInput(HALL_HALLC_IOMUX);
+#endif
 
     DL_GPIO_initDigitalOutput(GPIO_B_LED_PIN_LED_B_EN_IOMUX);
 
@@ -210,25 +226,16 @@ SYSCONFIG_WEAK void SYSCFG_DL_GPIO_init(void)
     DL_GPIO_enableOutput(GPIOA, GPIO_F_LED_PIN_LED_F_EN_PIN |
 		GPIO_F_LED_PIN_LED_F_SEL_PIN);
 #endif
-    DL_GPIO_setLowerPinsPolarity(GPIOA, DL_GPIO_PIN_8_EDGE_RISE_FALL);
     DL_GPIO_setUpperPinsPolarity(GPIOA, DL_GPIO_PIN_23_EDGE_RISE |
 		DL_GPIO_PIN_28_EDGE_RISE);
-    DL_GPIO_clearInterruptStatus(GPIOA, LIGHT_DETECT_LIGHT_PWM_F_PIN |
-		HALL_HALLA_PIN);
-    DL_GPIO_enableInterrupt(GPIOA, LIGHT_DETECT_LIGHT_PWM_F_PIN |
-		HALL_HALLA_PIN);
+    DL_GPIO_clearInterruptStatus(GPIOA, LIGHT_DETECT_LIGHT_PWM_F_PIN);
+    DL_GPIO_enableInterrupt(GPIOA, LIGHT_DETECT_LIGHT_PWM_F_PIN);
     DL_GPIO_clearPins(GPIOB, OUTPUT_POWER_EN_PIN |
 		GPIO_B_LED_PIN_LED_B_EN_PIN |
 		GPIO_B_LED_PIN_LED_B_SEL_PIN);
     DL_GPIO_enableOutput(GPIOB, OUTPUT_POWER_EN_PIN |
 		GPIO_B_LED_PIN_LED_B_EN_PIN |
 		GPIO_B_LED_PIN_LED_B_SEL_PIN);
-    DL_GPIO_setLowerPinsPolarity(GPIOB, DL_GPIO_PIN_3_EDGE_RISE_FALL |
-		DL_GPIO_PIN_2_EDGE_RISE_FALL);
-    DL_GPIO_clearInterruptStatus(GPIOB, HALL_HALLB_PIN |
-		HALL_HALLC_PIN);
-    DL_GPIO_enableInterrupt(GPIOB, HALL_HALLB_PIN |
-		HALL_HALLC_PIN);
 
     DL_GPIO_initPeripheralOutputFunction(
         GPIO_MCAN0_IOMUX_CAN_TX, GPIO_MCAN0_IOMUX_CAN_TX_FUNC);
@@ -280,6 +287,39 @@ SYSCONFIG_WEAK void SYSCFG_DL_SYSCTL_init(void)
 
 }
 
+static const DL_I2C_ClockConfig gI2C_0ClockConfig = {
+    .clockSel = DL_I2C_CLOCK_BUSCLK,
+    .divideRatio = DL_I2C_CLOCK_DIVIDE_1,
+};
+
+SYSCONFIG_WEAK void SYSCFG_DL_I2C_0_init(void) {
+
+    DL_I2C_setClockConfig(I2C_0_INST,
+        (DL_I2C_ClockConfig *) &gI2C_0ClockConfig);
+    DL_I2C_setAnalogGlitchFilterPulseWidth(I2C_0_INST,
+        DL_I2C_ANALOG_GLITCH_FILTER_WIDTH_50NS);
+    DL_I2C_enableAnalogGlitchFilter(I2C_0_INST);
+
+    /* Configure Controller Mode */
+    DL_I2C_resetControllerTransfer(I2C_0_INST);
+    /* Set frequency to 400000 Hz*/
+    DL_I2C_setTimerPeriod(I2C_0_INST, 7);
+    DL_I2C_setControllerTXFIFOThreshold(I2C_0_INST, DL_I2C_TX_FIFO_LEVEL_EMPTY);
+    DL_I2C_setControllerRXFIFOThreshold(I2C_0_INST, DL_I2C_RX_FIFO_LEVEL_BYTES_1);
+    DL_I2C_enableControllerClockStretching(I2C_0_INST);
+
+    /* Configure Interrupts */
+    DL_I2C_enableInterrupt(I2C_0_INST,
+                           DL_I2C_INTERRUPT_CONTROLLER_ARBITRATION_LOST |
+                           DL_I2C_INTERRUPT_CONTROLLER_NACK |
+                           DL_I2C_INTERRUPT_CONTROLLER_RXFIFO_TRIGGER |
+                           DL_I2C_INTERRUPT_CONTROLLER_RX_DONE |
+                           DL_I2C_INTERRUPT_CONTROLLER_TX_DONE);
+    NVIC_SetPriority(I2C_0_INST_INT_IRQN, 0);
+    /* Enable module */
+    DL_I2C_enableController(I2C_0_INST);
+
+}
 
 /*
  * Timer clock configuration to be sourced by  / 1 (72000000 Hz)

+ 18 - 1
ti_msp_dl_config.h

@@ -79,7 +79,19 @@ extern "C" {
 #define GPIO_HFXOUT_IOMUX                                        (IOMUX_PINCM11)
 #define CPUCLK_FREQ                                                     72000000
 
-
+/* Defines for I2C_0 */
+#define I2C_0_INST                                                          I2C1
+#define I2C_0_INST_IRQHandler                                    I2C1_IRQHandler
+#define I2C_0_INST_INT_IRQN                                        I2C1_INT_IRQn
+#define I2C_0_BUS_SPEED_HZ                                                400000
+#define GPIO_I2C_0_SDA_PORT                                                GPIOB
+#define GPIO_I2C_0_SDA_PIN                                         DL_GPIO_PIN_3
+#define GPIO_I2C_0_IOMUX_SDA                                      (IOMUX_PINCM16)
+#define GPIO_I2C_0_IOMUX_SDA_FUNC                       IOMUX_PINCM16_PF_I2C1_SDA
+#define GPIO_I2C_0_SCL_PORT                                                GPIOB
+#define GPIO_I2C_0_SCL_PIN                                         DL_GPIO_PIN_2
+#define GPIO_I2C_0_IOMUX_SCL                                      (IOMUX_PINCM15)
+#define GPIO_I2C_0_IOMUX_SCL_FUNC                       IOMUX_PINCM15_PF_I2C1_SCL
 
 /* Defines for MOTOR_PWM */
 #define MOTOR_PWM_INST                                                     TIMA0
@@ -322,6 +334,8 @@ extern "C" {
 #define INPUT_Speed_In_PORT                                              (GPIOA)
 #define INPUT_Speed_In_PIN                                      (DL_GPIO_PIN_31)
 #define INPUT_Speed_In_IOMUX                                      (IOMUX_PINCM6)
+
+#if 0
 /* Defines for HALLA: GPIOA.8 with pinCMx 19 on package pin 16 */
 #define HALL_HALLA_PORT                                                  (GPIOA)
 #define HALL_HALLA_IIDX                                      (DL_GPIO_IIDX_DIO8)
@@ -340,6 +354,8 @@ extern "C" {
 #define HALL_HALLC_IIDX                                      (DL_GPIO_IIDX_DIO2)
 #define HALL_HALLC_PIN                                           (DL_GPIO_PIN_2)
 #define HALL_HALLC_IOMUX                                         (IOMUX_PINCM15)
+#endif
+
 /* Port definition for Pin Group GPIO_B_LED */
 #define GPIO_B_LED_PORT                                                  (GPIOB)
 
@@ -413,6 +429,7 @@ void SYSCFG_DL_initPower(void);
 void SYSCFG_DL_GPIO_init(void);
 void SYSCFG_DL_DEBUG_init(void);
 void SYSCFG_DL_SYSCTL_init(void);
+void SYSCFG_DL_I2C_0_init(void);
 void SYSCFG_DL_MOTOR_PWM_init(void);
 void SYSCFG_DL_PWM_F_init(void);
 void SYSCFG_DL_HALLTIMER_init(void);