DRV8301_FaultType_e DRV8301_getFaultType(DRV8301_Handle handle) { DRV8301_Word_t readWord; DRV8301_FaultType_e faultType = DRV8301_FaultType_NoFault; // read the data readWord = DRV8301_readSpi(handle,DRV8301_RegName_Status_1); if(readWord & DRV8301_STATUS1_FAULT_BITS) { faultType = (DRV8301_FaultType_e)(readWord & DRV8301_FAULT_TYPE_MASK); if(faultType == DRV8301_FaultType_NoFault) { // read the data readWord = DRV8301_readSpi(handle,DRV8301_RegName_Status_2); if(readWord & DRV8301_STATUS2_GVDD_OV_BITS) { faultType = DRV8301_FaultType_GVDD_OV; } } } return(faultType); } // end of DRV8301_getFaultType() function
void DRV8301_setupSpi() { unsigned int drvDataNew; unsigned int n; // Update Control Register 1 drvDataNew = (drv8301.peakCurrent | \ drv8301.resetStatus | \ drv8301.pwmMode | \ drv8301.OverCurrentMode | \ drv8301.OverCurrentAdjust); DRV8301_writeSpi(drv8301.bits.ControlRegister1,drvDataNew); // Update Control Register 2 drvDataNew = (drv8301.tempWarning | drv8301.gain); DRV8301_writeSpi(drv8301.bits.ControlRegister2,drvDataNew); drv8301.SndCmd = false; drv8301.RcvCmd = false; // Wait for the DRV8301 registers to update for(n=0;n<100;n++) asm(" NOP"); // Update Status Register 1 drvDataNew = DRV8301_readSpi(drv8301.bits.StatusRegister1); drv8301.fault = (drvDataNew & drv8301.bits.fault); drv8301.OverTempShutdown = (drvDataNew & (1 << 7)); drv8301.OverTempWarning = (drvDataNew & (1 << 6)); // Update Status Register 2 drvDataNew = DRV8301_readSpi(drv8301.bits.StatusRegister2); drv8301.deviceID = (drvDataNew & (15 << 0)); // Update Control Register 1 drvDataNew = DRV8301_readSpi(drv8301.bits.ControlRegister2); drv8301.peakCurrent = (drvDataNew & (3 << 0)); drv8301.resetStatus = (drvDataNew & 1 << 2); drv8301.pwmMode = (drvDataNew & drv8301.bits.PwmMode); drv8301.OverCurrentMode = (drvDataNew & drv8301.bits.OverCurrentMode); drv8301.OverCurrentAdjust = (drvDataNew & drv8301.bits.OverCurrentAdjust); // Update Control Register 2 drvDataNew = DRV8301_readSpi(drv8301.bits.ControlRegister2); drv8301.tempWarning = (drvDataNew & drv8301.bits.tempWarning); drv8301.gain = (drvDataNew & (3 << 2)); return; }
void DRV8301_readData(DRV8301_Handle handle, DRV_SPI_8301_Vars_t *Spi_8301_Vars) { DRV8301_RegName_e drvRegName; uint16_t drvDataNew; if(Spi_8301_Vars->RcvCmd) { // Update Status Register 1 drvRegName = DRV8301_RegName_Status_1; drvDataNew = DRV8301_readSpi(handle,drvRegName); Spi_8301_Vars->Stat_Reg_1.FAULT = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FAULT_BITS); Spi_8301_Vars->Stat_Reg_1.GVDD_UV = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_GVDD_UV_BITS); Spi_8301_Vars->Stat_Reg_1.PVDD_UV = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_PVDD_UV_BITS); Spi_8301_Vars->Stat_Reg_1.OTSD = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_OTSD_BITS); Spi_8301_Vars->Stat_Reg_1.OTW = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_OTW_BITS); Spi_8301_Vars->Stat_Reg_1.FETHA_OC = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FETHA_OC_BITS); Spi_8301_Vars->Stat_Reg_1.FETLA_OC = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FETLA_OC_BITS); Spi_8301_Vars->Stat_Reg_1.FETHB_OC = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FETHB_OC_BITS); Spi_8301_Vars->Stat_Reg_1.FETLB_OC = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FETLB_OC_BITS); Spi_8301_Vars->Stat_Reg_1.FETHC_OC = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FETHC_OC_BITS); Spi_8301_Vars->Stat_Reg_1.FETLC_OC = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FETLC_OC_BITS); // Update Status Register 2 drvRegName = DRV8301_RegName_Status_2; drvDataNew = DRV8301_readSpi(handle,drvRegName); Spi_8301_Vars->Stat_Reg_2.GVDD_OV = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS2_GVDD_OV_BITS); Spi_8301_Vars->Stat_Reg_2.DeviceID = (uint16_t)(drvDataNew & (uint16_t)DRV8301_STATUS2_ID_BITS); // Update Control Register 1 drvRegName = DRV8301_RegName_Control_1; drvDataNew = DRV8301_readSpi(handle,drvRegName); Spi_8301_Vars->Ctrl_Reg_1.DRV8301_CURRENT = (DRV8301_PeakCurrent_e)(drvDataNew & (uint16_t)DRV8301_CTRL1_GATE_CURRENT_BITS); Spi_8301_Vars->Ctrl_Reg_1.DRV8301_RESET = (DRV8301_Reset_e)(drvDataNew & (uint16_t)DRV8301_CTRL1_GATE_RESET_BITS); Spi_8301_Vars->Ctrl_Reg_1.PWM_MODE = (DRV8301_PwmMode_e)(drvDataNew & (uint16_t)DRV8301_CTRL1_PWM_MODE_BITS); Spi_8301_Vars->Ctrl_Reg_1.OC_MODE = (DRV8301_OcMode_e)(drvDataNew & (uint16_t)DRV8301_CTRL1_OC_MODE_BITS); Spi_8301_Vars->Ctrl_Reg_1.OC_ADJ_SET = (DRV8301_VdsLevel_e)(drvDataNew & (uint16_t)DRV8301_CTRL1_OC_ADJ_SET_BITS); // Update Control Register 2 drvRegName = DRV8301_RegName_Control_2; drvDataNew = DRV8301_readSpi(handle,drvRegName); Spi_8301_Vars->Ctrl_Reg_2.OCTW_SET = (DRV8301_OcTwMode_e)(drvDataNew & (uint16_t)DRV8301_CTRL2_OCTW_SET_BITS); Spi_8301_Vars->Ctrl_Reg_2.GAIN = (DRV8301_ShuntAmpGain_e)(drvDataNew & (uint16_t)DRV8301_CTRL2_GAIN_BITS); Spi_8301_Vars->Ctrl_Reg_2.DC_CAL_CH1p2 = (DRV8301_DcCalMode_e)(drvDataNew & (uint16_t)(DRV8301_CTRL2_DC_CAL_1_BITS | DRV8301_CTRL2_DC_CAL_2_BITS)); Spi_8301_Vars->Ctrl_Reg_2.OC_TOFF = (DRV8301_OcOffTimeMode_e)(drvDataNew & (uint16_t)DRV8301_CTRL2_OC_TOFF_BITS); Spi_8301_Vars->RcvCmd = false; } return; } // end of DRV8301_readData() function
void DRV8301_setDcCalMode(DRV8301_Handle handle,const DRV8301_ShuntAmpNumber_e ampNumber,const DRV8301_DcCalMode_e mode) { uint16_t data; // read data data = DRV8301_readSpi(handle,DRV8301_RegName_Control_2); // clear the bits if(ampNumber == DRV8301_ShuntAmpNumber_1) { data &= (~DRV8301_CTRL2_DC_CAL_1_BITS); } else if(ampNumber == DRV8301_ShuntAmpNumber_2) { data &= (~DRV8301_CTRL2_DC_CAL_2_BITS); } // set the bits data |= mode; // write the data DRV8301_writeSpi(handle,DRV8301_RegName_Control_2,data); return; } // end of DRV8301_setDcCalMode() function
void DRV8301_enable() { static volatile unsigned int enableWaitTimeOut; unsigned int n = 0; // Enable the drv8301 GpioDataRegs.GPBSET.bit.GPIO50 = 1; enableWaitTimeOut = 0; // Make sure the Fault bit is not set during startup while(((DRV8301_readSpi(drv8301.bits.StatusRegister1) & (1 << 10)) != 0) && (enableWaitTimeOut < 1000)) { if(++enableWaitTimeOut > 999) { drv8301.timeOut = true; } } // Wait for the DRV8301 registers to update for(n=0;n<0xffff;n++) asm(" NOP"); return; }
void DRV8301_enable(DRV8301_Handle handle) { DRV8301_Obj *obj = (DRV8301_Obj *)handle; static volatile uint16_t enableWaitTimeOut; uint16_t n = 0; // Enable the drv8301 GPIO_setHigh(obj->gpioHandle,obj->gpioNumber); enableWaitTimeOut = 0; // Make sure the Fault bit is not set during startup while(((DRV8301_readSpi(handle,DRV8301_RegName_Status_1) & DRV8301_STATUS1_FAULT_BITS) != 0) && (enableWaitTimeOut < 1000)) { if(++enableWaitTimeOut > 999) { obj->enableTimeOut = true; } } // Wait for the DRV8301 registers to update for(n=0;n<0xffff;n++) asm(" NOP"); return; }
DRV8301_VdsLevel_e DRV8301_getOcLevel(DRV8301_Handle handle) { uint16_t data; // read data data = DRV8301_readSpi(handle,DRV8301_RegName_Control_1); // clear the bits data &= (~DRV8301_CTRL1_OC_ADJ_SET_BITS); return((DRV8301_VdsLevel_e)data); } // end of DRV8301_getOcLevel() function
uint16_t DRV8301_getId(DRV8301_Handle handle) { uint16_t data; // read data data = DRV8301_readSpi(handle,DRV8301_RegName_Status_2); // mask bits data &= DRV8301_STATUS2_ID_BITS; return(data); } // end of DRV8301_getId() function
DRV8301_ShuntAmpGain_e DRV8301_getShuntAmpGain(DRV8301_Handle handle) { uint16_t data; // read data data = DRV8301_readSpi(handle,DRV8301_RegName_Control_2); // clear the bits data &= (~DRV8301_CTRL2_GAIN_BITS); return((DRV8301_ShuntAmpGain_e)data); } // end of DRV8301_getShuntAmpGain() function
DRV8301_OcTwMode_e DRV8301_getOcTwMode(DRV8301_Handle handle) { uint16_t data; // read data data = DRV8301_readSpi(handle,DRV8301_RegName_Control_2); // clear the bits data &= (~DRV8301_CTRL2_OCTW_SET_BITS); return((DRV8301_OcTwMode_e)data); } // end of DRV8301_getOcTwMode() function
DRV8301_PwmMode_e DRV8301_getPwmMode(DRV8301_Handle handle) { uint16_t data; // read data data = DRV8301_readSpi(handle,DRV8301_RegName_Control_1); // clear the bits data &= (~DRV8301_CTRL1_PWM_MODE_BITS); return((DRV8301_PwmMode_e)data); } // end of DRV8301_getPwmMode() function
DRV8301_PeakCurrent_e DRV8301_getPeakCurrent(DRV8301_Handle handle) { uint16_t data; // read data data = DRV8301_readSpi(handle,DRV8301_RegName_Control_1); // clear the bits data &= (~DRV8301_CTRL1_GATE_CURRENT_BITS); return((DRV8301_PeakCurrent_e)data); } // end of DRV8301_getPeakCurrent() function
void DRV8301_readData() { unsigned int drvDataNew; //if(1) //{ // Update Status Register 1 drvDataNew = DRV8301_readSpi(drv8301.bits.StatusRegister1); drv8301.fault = (drvDataNew & drv8301.bits.fault); drv8301.OverTempShutdown = (drvDataNew & (1 << 7)); drv8301.OverTempWarning = (drvDataNew & (1 << 6)); // Update Status Register 2 drvDataNew = DRV8301_readSpi(drv8301.bits.StatusRegister2); drv8301.deviceID = (drvDataNew & (15 << 0)); // Update Control Register 1 drvDataNew = DRV8301_readSpi(drv8301.bits.ControlRegister1); drv8301.peakCurrent = (DRV8301_PeakCurrent_e)(drvDataNew & (3 << 0)); drv8301.resetStatus = (drvDataNew & (1 << 2)); drv8301.pwmMode = (drvDataNew & drv8301.bits.PwmMode); drv8301.OverCurrentMode = (drvDataNew & drv8301.bits.OverCurrentMode); drv8301.OverCurrentAdjust = (drvDataNew & drv8301.bits.OverCurrentAdjust); // Update Control Register 2 drvDataNew = DRV8301_readSpi(drv8301.bits.ControlRegister2); drv8301.tempWarning = (drvDataNew & drv8301.bits.tempWarning); drv8301.gain = (drvDataNew & (3 << 2)); //drv8301.Ctrl_Reg_2.DC_CAL_CH1p2 = (drvDataNew & ((1 << 4) | (1 << 5))); //drv8301.Ctrl_Reg_2.OC_TOFF = (drvDataNew & (1 << 6)); //drv8301.RcvCmd = false; //} return; } // end of DRV8301_readData() function
void DRV8301_reset() { unsigned int data; // read data data = DRV8301_readSpi(drv8301.bits.ControlRegister1); // set the bits data |= (1 << 2); // write the data DRV8301_writeSpi(drv8301.bits.ControlRegister1,data); return; } // end of DRV8301_reset() function
int DRV8301_isFault() { int readWord; int status=false; // read the data readWord = DRV8301_readSpi(drv8301.bits.StatusRegister1); if(readWord & (1 << 10)) { status = true; } return(status); } // end of DRV8301_isFault() function
void DRV8301_reset(DRV8301_Handle handle) { uint16_t data; // read data data = DRV8301_readSpi(handle,DRV8301_RegName_Control_1); // set the bits data |= DRV8301_CTRL1_GATE_RESET_BITS; // write the data DRV8301_writeSpi(handle,DRV8301_RegName_Control_1,data); return; } // end of DRV8301_reset() function
bool DRV8301_isReset(DRV8301_Handle handle) { DRV8301_Word_t readWord; bool status=false; // read the data readWord = DRV8301_readSpi(handle,DRV8301_RegName_Control_1); if(readWord & DRV8301_CTRL1_GATE_RESET_BITS) { status = true; } return(status); } // end of DRV8301_isReset() function
bool DRV8301_isFault(DRV8301_Handle handle) { DRV8301_Word_t readWord; bool status=false; // read the data readWord = DRV8301_readSpi(handle,DRV8301_RegName_Status_1); if(readWord & DRV8301_STATUS1_FAULT_BITS) { status = true; } return(status); } // end of DRV8301_isFault() function
void DRV8301_enable(DRV8301_Handle handle) { //Enable driver HAL_GPIO_WritePin(handle->EngpioHandle, handle->EngpioNumber, GPIO_PIN_SET); //Wait for driver to come online osDelay(10); // Make sure the Fault bit is not set during startup while((DRV8301_readSpi(handle,DRV8301_RegName_Status_1) & DRV8301_STATUS1_FAULT_BITS) != 0); // Wait for the DRV8301 registers to update osDelay(1); return; }
void DRV8301_setShuntAmpGain(DRV8301_Handle handle,const DRV8301_ShuntAmpGain_e gain) { uint16_t data; // read data data = DRV8301_readSpi(handle,DRV8301_RegName_Control_2); // clear the bits data &= (~DRV8301_CTRL2_GAIN_BITS); // set the bits data |= gain; // write the data DRV8301_writeSpi(handle,DRV8301_RegName_Control_2,data); return; } // end of DRV8301_setShuntAmpGain() function
void DRV8301_setPwmMode(DRV8301_Handle handle,const DRV8301_PwmMode_e mode) { uint16_t data; // read data data = DRV8301_readSpi(handle,DRV8301_RegName_Control_1); // clear the bits data &= (~DRV8301_CTRL1_PWM_MODE_BITS); // set the bits data |= mode; // write the data DRV8301_writeSpi(handle,DRV8301_RegName_Control_1,data); return; } // end of DRV8301_setPwmMode() function
void DRV8301_setPeakCurrent(DRV8301_Handle handle,const DRV8301_PeakCurrent_e peakCurrent) { uint16_t data; // read data data = DRV8301_readSpi(handle,DRV8301_RegName_Control_1); // clear the bits data &= (~DRV8301_CTRL1_GATE_CURRENT_BITS); // set the bits data |= peakCurrent; // write the data DRV8301_writeSpi(handle,DRV8301_RegName_Control_1,data); return; } // end of DRV8301_setPeakCurrent() function
void DRV8301_setOcTwMode(DRV8301_Handle handle,const DRV8301_OcTwMode_e mode) { uint16_t data; // read data data = DRV8301_readSpi(handle,DRV8301_RegName_Control_2); // clear the bits data &= (~DRV8301_CTRL2_OCTW_SET_BITS); // set the bits data |= mode; // write the data DRV8301_writeSpi(handle,DRV8301_RegName_Control_2,data); return; } // end of DRV8301_setOcTwMode() function
void DRV8301_setOcLevel(DRV8301_Handle handle,const DRV8301_VdsLevel_e VdsLevel) { uint16_t data; // read data data = DRV8301_readSpi(handle,DRV8301_RegName_Control_1); // clear the bits data &= (~DRV8301_CTRL1_OC_ADJ_SET_BITS); // set the bits data |= VdsLevel; // write the data DRV8301_writeSpi(handle,DRV8301_RegName_Control_1,data); return; } // end of DRV8301_setOcLevel() function
DRV8301_DcCalMode_e DRV8301_getDcCalMode(DRV8301_Handle handle,const DRV8301_ShuntAmpNumber_e ampNumber) { uint16_t data; // read data data = DRV8301_readSpi(handle,DRV8301_RegName_Control_2); // clear the bits if(ampNumber == DRV8301_ShuntAmpNumber_1) { data &= (~DRV8301_CTRL2_DC_CAL_1_BITS); } else if(ampNumber == DRV8301_ShuntAmpNumber_2) { data &= (~DRV8301_CTRL2_DC_CAL_2_BITS); } return((DRV8301_DcCalMode_e)data); } // end of DRV8301_getDcCalMode() function
void DRV8301_setupSpi(DRV8301_Handle handle, DRV_SPI_8301_Vars_t *Spi_8301_Vars) { DRV8301_RegName_e drvRegName; uint16_t drvDataNew; // Why impose hardcoded values? // Defaults should be device defaults or application level specified. // Setting other hardcoded here is just confusing! #if 0 // Update Control Register 1 drvRegName = DRV8301_RegName_Control_1; drvDataNew = (DRV8301_PeakCurrent_0p25_A | \ DRV8301_Reset_Normal | \ DRV8301_PwmMode_Six_Inputs | \ DRV8301_OcMode_CurrentLimit | \ DRV8301_VdsLevel_0p730_V); DRV8301_writeSpi(handle,drvRegName,drvDataNew); // Update Control Register 2 drvRegName = DRV8301_RegName_Control_2; drvDataNew = (DRV8301_OcTwMode_Both | \ DRV8301_ShuntAmpGain_10VpV | \ DRV8301_DcCalMode_Ch1_Load | \ DRV8301_DcCalMode_Ch2_Load | \ DRV8301_OcOffTimeMode_Normal); DRV8301_writeSpi(handle,drvRegName,drvDataNew); #endif Spi_8301_Vars->SndCmd = false; Spi_8301_Vars->RcvCmd = false; // Wait for the DRV8301 registers to update osDelay(1); // Update Status Register 1 drvRegName = DRV8301_RegName_Status_1; drvDataNew = DRV8301_readSpi(handle,drvRegName); Spi_8301_Vars->Stat_Reg_1.FAULT = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FAULT_BITS); Spi_8301_Vars->Stat_Reg_1.GVDD_UV = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_GVDD_UV_BITS); Spi_8301_Vars->Stat_Reg_1.PVDD_UV = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_PVDD_UV_BITS); Spi_8301_Vars->Stat_Reg_1.OTSD = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_OTSD_BITS); Spi_8301_Vars->Stat_Reg_1.OTW = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_OTW_BITS); Spi_8301_Vars->Stat_Reg_1.FETHA_OC = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FETHA_OC_BITS); Spi_8301_Vars->Stat_Reg_1.FETLA_OC = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FETLA_OC_BITS); Spi_8301_Vars->Stat_Reg_1.FETHB_OC = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FETHB_OC_BITS); Spi_8301_Vars->Stat_Reg_1.FETLB_OC = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FETLB_OC_BITS); Spi_8301_Vars->Stat_Reg_1.FETHC_OC = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FETHC_OC_BITS); Spi_8301_Vars->Stat_Reg_1.FETLC_OC = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FETLC_OC_BITS); // Update Status Register 2 drvRegName = DRV8301_RegName_Status_2; drvDataNew = DRV8301_readSpi(handle,drvRegName); Spi_8301_Vars->Stat_Reg_2.GVDD_OV = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS2_GVDD_OV_BITS); Spi_8301_Vars->Stat_Reg_2.DeviceID = (uint16_t)(drvDataNew & (uint16_t)DRV8301_STATUS2_ID_BITS); // Update Control Register 1 drvRegName = DRV8301_RegName_Control_1; drvDataNew = DRV8301_readSpi(handle,drvRegName); Spi_8301_Vars->Ctrl_Reg_1.DRV8301_CURRENT = (DRV8301_PeakCurrent_e)(drvDataNew & (uint16_t)DRV8301_CTRL1_GATE_CURRENT_BITS); Spi_8301_Vars->Ctrl_Reg_1.DRV8301_RESET = (DRV8301_Reset_e)(drvDataNew & (uint16_t)DRV8301_CTRL1_GATE_RESET_BITS); Spi_8301_Vars->Ctrl_Reg_1.PWM_MODE = (DRV8301_PwmMode_e)(drvDataNew & (uint16_t)DRV8301_CTRL1_PWM_MODE_BITS); Spi_8301_Vars->Ctrl_Reg_1.OC_MODE = (DRV8301_OcMode_e)(drvDataNew & (uint16_t)DRV8301_CTRL1_OC_MODE_BITS); Spi_8301_Vars->Ctrl_Reg_1.OC_ADJ_SET = (DRV8301_VdsLevel_e)(drvDataNew & (uint16_t)DRV8301_CTRL1_OC_ADJ_SET_BITS); // Update Control Register 2 drvRegName = DRV8301_RegName_Control_2; drvDataNew = DRV8301_readSpi(handle,drvRegName); Spi_8301_Vars->Ctrl_Reg_2.OCTW_SET = (DRV8301_OcTwMode_e)(drvDataNew & (uint16_t)DRV8301_CTRL2_OCTW_SET_BITS); Spi_8301_Vars->Ctrl_Reg_2.GAIN = (DRV8301_ShuntAmpGain_e)(drvDataNew & (uint16_t)DRV8301_CTRL2_GAIN_BITS); Spi_8301_Vars->Ctrl_Reg_2.DC_CAL_CH1p2 = (DRV8301_DcCalMode_e)(drvDataNew & (uint16_t)(DRV8301_CTRL2_DC_CAL_1_BITS | DRV8301_CTRL2_DC_CAL_2_BITS)); Spi_8301_Vars->Ctrl_Reg_2.OC_TOFF = (DRV8301_OcOffTimeMode_e)(drvDataNew & (uint16_t)DRV8301_CTRL2_OC_TOFF_BITS); return; }
void DRV8301_setupSpi(DRV8301_Handle handle, DRV_SPI_8301_Vars_t *Spi_8301_Vars) { DRV8301_RegName_e drvRegName; uint16_t drvDataNew; uint16_t n; // Update Control Register 1 drvRegName = DRV8301_RegName_Control_1; drvDataNew = (DRV8301_PeakCurrent_0p25_A | \ DRV8301_Reset_Normal | \ DRV8301_PwmMode_Six_Inputs | \ DRV8301_OcMode_CurrentLimit | \ DRV8301_VdsLevel_0p730_V); DRV8301_writeSpi(handle,drvRegName,drvDataNew); // Update Control Register 2 drvRegName = DRV8301_RegName_Control_2; drvDataNew = (DRV8301_OcTwMode_Both | \ DRV8301_ShuntAmpGain_10VpV | \ DRV8301_DcCalMode_Ch1_Load | \ DRV8301_DcCalMode_Ch2_Load | \ DRV8301_OcOffTimeMode_Normal); DRV8301_writeSpi(handle,drvRegName,drvDataNew); Spi_8301_Vars->SndCmd = false; Spi_8301_Vars->RcvCmd = false; // Wait for the DRV8301 registers to update for(n=0;n<100;n++) asm(" NOP"); // Update Status Register 1 drvRegName = DRV8301_RegName_Status_1; drvDataNew = DRV8301_readSpi(handle,drvRegName); Spi_8301_Vars->Stat_Reg_1.FAULT = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FAULT_BITS); Spi_8301_Vars->Stat_Reg_1.GVDD_UV = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_GVDD_UV_BITS); Spi_8301_Vars->Stat_Reg_1.PVDD_UV = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_PVDD_UV_BITS); Spi_8301_Vars->Stat_Reg_1.OTSD = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_OTSD_BITS); Spi_8301_Vars->Stat_Reg_1.OTW = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_OTW_BITS); Spi_8301_Vars->Stat_Reg_1.FETHA_OC = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FETHA_OC_BITS); Spi_8301_Vars->Stat_Reg_1.FETLA_OC = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FETLA_OC_BITS); Spi_8301_Vars->Stat_Reg_1.FETHB_OC = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FETHB_OC_BITS); Spi_8301_Vars->Stat_Reg_1.FETLB_OC = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FETLB_OC_BITS); Spi_8301_Vars->Stat_Reg_1.FETHC_OC = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FETHC_OC_BITS); Spi_8301_Vars->Stat_Reg_1.FETLC_OC = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS1_FETLC_OC_BITS); // Update Status Register 2 drvRegName = DRV8301_RegName_Status_2; drvDataNew = DRV8301_readSpi(handle,drvRegName); Spi_8301_Vars->Stat_Reg_2.GVDD_OV = (bool)(drvDataNew & (uint16_t)DRV8301_STATUS2_GVDD_OV_BITS); Spi_8301_Vars->Stat_Reg_2.DeviceID = (uint16_t)(drvDataNew & (uint16_t)DRV8301_STATUS2_ID_BITS); // Update Control Register 1 drvRegName = DRV8301_RegName_Control_1; drvDataNew = DRV8301_readSpi(handle,drvRegName); Spi_8301_Vars->Ctrl_Reg_1.DRV8301_CURRENT = (DRV8301_PeakCurrent_e)(drvDataNew & (uint16_t)DRV8301_CTRL1_GATE_CURRENT_BITS); Spi_8301_Vars->Ctrl_Reg_1.DRV8301_RESET = (DRV8301_Reset_e)(drvDataNew & (uint16_t)DRV8301_CTRL1_GATE_RESET_BITS); Spi_8301_Vars->Ctrl_Reg_1.PWM_MODE = (DRV8301_PwmMode_e)(drvDataNew & (uint16_t)DRV8301_CTRL1_PWM_MODE_BITS); Spi_8301_Vars->Ctrl_Reg_1.OC_MODE = (DRV8301_OcMode_e)(drvDataNew & (uint16_t)DRV8301_CTRL1_OC_MODE_BITS); Spi_8301_Vars->Ctrl_Reg_1.OC_ADJ_SET = (DRV8301_VdsLevel_e)(drvDataNew & (uint16_t)DRV8301_CTRL1_OC_ADJ_SET_BITS); // Update Control Register 2 drvRegName = DRV8301_RegName_Control_2; drvDataNew = DRV8301_readSpi(handle,drvRegName); Spi_8301_Vars->Ctrl_Reg_2.OCTW_SET = (DRV8301_OcTwMode_e)(drvDataNew & (uint16_t)DRV8301_CTRL2_OCTW_SET_BITS); Spi_8301_Vars->Ctrl_Reg_2.GAIN = (DRV8301_ShuntAmpGain_e)(drvDataNew & (uint16_t)DRV8301_CTRL2_GAIN_BITS); Spi_8301_Vars->Ctrl_Reg_2.DC_CAL_CH1p2 = (DRV8301_DcCalMode_e)(drvDataNew & (uint16_t)(DRV8301_CTRL2_DC_CAL_1_BITS | DRV8301_CTRL2_DC_CAL_2_BITS)); Spi_8301_Vars->Ctrl_Reg_2.OC_TOFF = (DRV8301_OcOffTimeMode_e)(drvDataNew & (uint16_t)DRV8301_CTRL2_OC_TOFF_BITS); return; }