/* Set clock divider for SDC peripheral */ void Chip_SDC_SetClockDiv(LPC_SDC_T *pSDC, uint8_t div) { uint32_t temp; temp = (pSDC->CLOCK & (~SDC_CLOCK_CLKDIV_BITMASK)); pSDC->CLOCK = temp | (SDC_CLOCK_CLKDIV(div)); writeDelay(); }
/* Reset Command Info */ void IP_SDC_ResetCommand(IP_SDC_001_Type *pSDC) { pSDC->CLEAR = SDC_CLEAR_ALL; pSDC->ARGUMENT = 0xFFFFFFFF; pSDC->COMMAND = 0; writeDelay(); }
/* Set Command Info */ void IP_SDC_SetCommand(IP_SDC_001_Type *pSDC, IP_SDC_001_CMD_Type *pCmd) { pSDC->CLEAR = SDC_CLEAR_ALL;/* Clear status register */ pSDC->ARGUMENT = pCmd->Argument; /* Set the argument first, finally command */ pSDC->COMMAND = SDC_COMMAND_INDEX(pCmd->CmdIndex) | pCmd->RespType | pCmd->Flag | SDC_COMMAND_ENABLE; writeDelay(); }
/* Reset Command Info */ void Chip_SDC_ResetCommand(LPC_SDC_T *pSDC) { pSDC->CLEAR = SDC_CLEAR_ALL; pSDC->ARGUMENT = 0xFFFFFFFF; pSDC->COMMAND = 0; writeDelay(); }
/* Clock control for SDC peripheral*/ void IP_SDC_ClockControl(IP_SDC_001_Type *pSDC, IP_SDC_001_CLOCK_CTRL_T ctrlType, FunctionalState NewState) { if (NewState) { pSDC->CLOCK |= (1 << ctrlType) & SDC_CLOCK_BITMASK; } else { pSDC->CLOCK &= (~(1 << ctrlType)) & SDC_CLOCK_BITMASK; } writeDelay(); }
/* Clock control for SDC peripheral*/ void Chip_SDC_ClockControl(LPC_SDC_T *pSDC, SDC_CLOCK_CTRL_T ctrlType, FunctionalState NewState) { if (NewState) { pSDC->CLOCK |= (1 << ctrlType); } else { pSDC->CLOCK &= (~(1 << ctrlType)); } writeDelay(); }
/* Setup Data Transfer Information */ void IP_SDC_SetDataTransfer(IP_SDC_001_Type *pSDC, IP_SDC_001_DATA_TRANSFER_Type *pTransfer) { uint32_t DataCtrl = 0; pSDC->DATATIMER = pTransfer->Timeout; pSDC->DATALENGTH = pTransfer->BlockNum * SDC_DATACTRL_BLOCKSIZE_VAL(pTransfer->BlockSize); DataCtrl = SDC_DATACTRL_ENABLE; DataCtrl |= pTransfer->Dir | pTransfer->Mode | SDC_DATACTRL_BLOCKSIZE(pTransfer->BlockSize); if (pTransfer->DMAUsed) { DataCtrl |= SDC_DATACTRL_DMA_ENABLE; } pSDC->DATACTRL = DataCtrl; writeDelay(); }
/* Set Command Info */ void Chip_SDC_SetCommand(LPC_SDC_T *pSDC, uint32_t Cmd, uint32_t Arg) { /* Clear status register */ pSDC->CLEAR = SDC_CLEAR_ALL; /* Set the argument first, finally command */ pSDC->ARGUMENT = Arg; /* Write command value, enable the command */ pSDC->COMMAND = Cmd | SDC_COMMAND_ENABLE; writeDelay(); }
/* Setup Data Transfer Information */ void Chip_SDC_SetDataTransfer(LPC_SDC_T *pSDC, SDC_DATA_TRANSFER_T *pTransfer) { uint32_t DataCtrl = 0; pSDC->DATATIMER = pTransfer->Timeout; pSDC->DATALENGTH = pTransfer->BlockNum * SDC_DATACTRL_BLOCKSIZE_VAL(pTransfer->BlockSize); DataCtrl = SDC_DATACTRL_ENABLE; DataCtrl |= ((uint32_t) pTransfer->Dir) | ((uint32_t) pTransfer->Mode) | SDC_DATACTRL_BLOCKSIZE( pTransfer->BlockSize); if (pTransfer->DMAUsed) { DataCtrl |= SDC_DATACTRL_DMA_ENABLE; } pSDC->DATACTRL = DataCtrl; writeDelay(); }
/* Initialize SDC peripheral */ void IP_SDC_Init(IP_SDC_001_Type *pSDC) { /* Disable SD_CLK */ IP_SDC_ClockControl(pSDC, SDC_CLOCK_ENABLE, DISABLE); /* Power-off */ IP_SDC_PowerControl(pSDC, SDC_POWER_OFF, 0); writeDelay(); /* Disable all interrupts */ pSDC->MASK0 = 0; /*Setting for timeout problem */ pSDC->DATATIMER = 0x1FFFFFFF; pSDC->COMMAND = 0; writeDelay(); pSDC->DATACTRL = 0; writeDelay(); pSDC->CLEAR = SDC_CLEAR_ALL; /* clear all pending interrupts */ }
int PressSensor::set_delay(int64_t ns) { return writeDelay(ns); }
int AccelSensor::set_delay(int64_t ns) { return writeDelay(ns); }
/* Set clock divider for SDC peripheral */ void IP_SDC_SetClockDiv(IP_SDC_001_Type *pSDC, uint8_t div) { pSDC->CLOCK &= (~SDC_CLOCK_CLKDIV_BITMASK) & SDC_CLOCK_BITMASK; pSDC->CLOCK |= SDC_CLOCK_CLKDIV(div); writeDelay(); }
/* Set power status of SDC peripheral */ void IP_SDC_PowerControl(IP_SDC_001_Type *pSDC, IP_SDC_001_PWR_CTRL_T pwrMode, uint32_t flag) { pSDC->POWER = SDC_PWR_CTRL(pwrMode) | flag; writeDelay(); }
/* Set power state of SDC peripheral */ void Chip_SDC_PowerControl(LPC_SDC_T *pSDC, SDC_PWR_CTRL_T pwrMode, uint32_t flag) { pSDC->POWER = SDC_PWR_CTRL(pwrMode) | flag; writeDelay(); }