ISF  2.2 rev 5
Intelligent Sensing Framework for Kinetis with Processor Expert
FXLC95000_2.c
Go to the documentation of this file.
1 /* ###################################################################
2 ** This component module is generated by Processor Expert. Do not modify it.
3 ** Filename : FXLC95000_2.c
4 ** CDE edition : Standard
5 ** Project : ISF2P2_K64F_MQX_PROJ
6 ** Processor : MK64FN1M0VLL12
7 ** Component : ISF_KSDK_Sensor_FXLC95000_Accelerometer
8 ** Version : Component 02.500, Driver 01.00, CPU db: 3.00.000
9 ** Repository : My Components
10 ** Compiler : GNU C Compiler
11 ** Date/Time : 2016-10-06, 13:38, # CodeGen: 0
12 ** Abstract :
13 **
14 ** Settings :
15 ** Component Name : FXLC95000_2
16 ** Device Address : 0x4C
17 ** Comm Channel : SPI1
18 ** Is SPI Selected : yes
19 ** Chip Select : fsl_gpio
20 ** SPI Select : fsl_gpio
21 ** Reset Sensor : fsl_gpio
22 ** Allowed Sample Rates : 800Hz
23 ** Allowed Full-scale Range : ±2 g
24 ** Contents :
25 ** No public methods
26 **
27 ** (c) Copyright Freescale Semiconductor Inc, 2015
28 http://www.freescale.com
29 ** ###################################################################*/
30 /*!
31 ** @file FXLC95000_2.c
32 ** @version 01.00
33 ** @brief
34 **
35 */
36 /*!
37 ** @addtogroup FXLC95000_2_module FXLC95000_2 module documentation
38 ** @{
39 */
40 
41 /* MODULE FXLC95000_2. */
42 
43 #include "FXLC95000_2.h"
44 #include "isf_util.h"
45 #include "isf_spi_master_types.h"
46 #include "SPIChipSelect.h"
47 #include "SPISelect.h"
48 #include "ResetSensor.h"
49 
51 
52 const uint8 const BootToFlash[] = { 0x29, 0x00, 0xFF, 0xFF, 0xFF, 0xFF };
53 const uint8 const ConfigureMBoxCmd1[] = { 0x01, 0x02, 0x18, 0x14, 0x02, 0x03, 0x02, 0x02, 0x02, 0x01, 0x02, 0x00, 0x02, 0x05, 0x02, 0x04, 0x02, 0x07, 0x02, 0x06, 0x02, 0x09, 0x02, 0x08 };
55 const uint8 const QuickReadInterruptEnable[] = { 0x01, 0x02, 0x39, 0x01, 0x03 };
56 const uint8 const QuickReadInterruptDisable[] = { 0x01, 0x02, 0x39, 0x01, 0x02 };
57 const uint8 const StartDataCmd[] = { 0x02, 0x02, 0x00, 0x01, 0x52 };
58 const uint8 const EndDataCmd[] = { 0x02, 0x02, 0x00, 0x01, 0x51 };
59 const uint8 const ShutdownCmd[] = { 0x02, 0x02, 0x00, 0x01, 0x50 };
61 const uint8 const UnprotectFlash[] = { 0x40, 0x00 };
62 const uint8 const EraseMainFlashArray[] = { 0x12, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF };
63 const uint8 const ProtectFlash[] = { 0x38, 0x00 };
64 
66 {
67  {
68  .offset = 0,
69  .nByteWrite = sizeof(BootToFlash),
70  .pWriteBuffer = (uint8* const)&BootToFlash
71  }
72 };
73 
75 {
76  {
77  .offset = 0,
78  .nByteWrite = sizeof(ReadConfigRegistersCmd),
79  .pWriteBuffer = (uint8* const)&ReadConfigRegistersCmd
80  }
81 };
82 
84 {
85  {
86  .offset = 0,
87  .nByteWrite = sizeof(ConfigureMBoxCmd1),
88  .pWriteBuffer = (uint8* const)&ConfigureMBoxCmd1
89  },
90  {
91  .offset = 0,
92  .nByteWrite = sizeof(QuickReadInterruptEnable),
93  .pWriteBuffer = (uint8* const)&QuickReadInterruptEnable
94  }
95 };
96 
98 {
99  {
100  .offset = 0,
101  .nByteWrite = sizeof(StartDataCmd),
102  .pWriteBuffer = (uint8* const)&StartDataCmd
103  }
104 };
105 
107 {
108  {
109  .offset = 0,
110  .nByteWrite = sizeof(EndDataCmd),
111  .pWriteBuffer = (uint8* const)&EndDataCmd
112  }
113 };
114 
115 
117 {
118  {
119  .offset = 0,
120  .nByteWrite = sizeof(ShutdownCmd),
121  .pWriteBuffer = (uint8* const)&ShutdownCmd
122  }
123 };
124 
126 {
127  {
128  .offset = 0,
129  .nByteWrite = sizeof(ConfigWritePreamble),
130  .pWriteBuffer = (uint8* const)&ConfigWritePreamble
131  }
132 };
133 
135 {
136  {
137  .offset = 0,
138  .nByteWrite = sizeof(UnprotectFlash),
139  .pWriteBuffer = (uint8* const)&UnprotectFlash
140  },
141  {
142  .offset = 0,
143  .nByteWrite = sizeof(EraseMainFlashArray),
144  .pWriteBuffer = (uint8* const)&EraseMainFlashArray
145  }
146 };
147 
149 {
150  {
151  .offset = 0,
152  .nByteWrite = sizeof(ProtectFlash),
153  .pWriteBuffer = (uint8* const)&ProtectFlash
154  }
155 };
156 
158 {
160  .sampleDataSize = FXLC95000_2_SAMPLE_SIZE,
161  .configRegisterReadOffset = FXLC95000_2_CONFIG_REGISTER_READ_OFFSET,
162  .configRegisterReadSize = FXLC95000_2_CONFIG_REGISTER_SIZE,
163  .engFloatConversionFactor = FXLC95000_2_ACC_FLOAT_CONVERSION_FACTOR,
164  .engFixedTotalWidth = 32,
165  .engFixedIntegerWidth = 16,
166  .engFixedSignBit = 1,
170  .writeConfigRegisterPreamble = { .numCommands=sizeof(WriteConfigPreambleSequence)/sizeof(fxlc95000_Command_t),.commands=WriteConfigPreambleSequence},
171  .readConfigCommands = { .numCommands=sizeof(ReadConfigRegistersSequence)/sizeof(fxlc95000_Command_t),.commands=ReadConfigRegistersSequence},
172  .initializeCommands = { .numCommands=sizeof(InitializeSequence)/sizeof(fxlc95000_Command_t),.commands=InitializeSequence},
173  .validateSettingsCommands = { .numCommands=0, .commands=NULL},
174  .configureCommands = { .numCommands=sizeof(ConfigureSequence)/sizeof(fxlc95000_Command_t), .commands=ConfigureSequence},
175  .startDataCommands = { .numCommands=sizeof(StartDataSequence)/sizeof(fxlc95000_Command_t), .commands=StartDataSequence},
176  .endDataCommands = { .numCommands=sizeof(EndDataSequence)/sizeof(fxlc95000_Command_t), .commands=EndDataSequence},
177  .calibrateCommands = { .numCommands=0, .commands=NULL},
178  .shutdownCommands = { .numCommands=sizeof(ShutdownSequence)/sizeof(fxlc95000_Command_t), .commands=ShutdownSequence},
179  .getDataCommands = { .numCommands=0, .commands=NULL},
180  .flashPreprocessCommands = { .numCommands=sizeof(FlashPreprocessSequence)/sizeof(fxlc95000_Command_t), .commands=FlashPreprocessSequence},
181  .flashPostprocessCommands = { .numCommands=sizeof(FlashPostprocessSequence)/sizeof(fxlc95000_Command_t), .commands=FlashPostprocessSequence}
182 };
183 
184 /*!
185  * @brief This creates the sensor adapter instance for the target sensor.
186  *
187  */
189 {
191  .devInfo.pSupportedSensorDataTypes = fxlc95000_SupportedDataTypes,
192  .devInfo.nNativeDataSetSize = sizeof(fxlc95000_DataBuffer_t),
193  .control.Initialize = &fsl_fxlc95000_Initialize,
194  .control.ValidateSettings = &fsl_fxlc95000_ValidateSettings,
195  .control.Configure = &fsl_fxlc95000_Configure,
196  .control.StartData = &fsl_fxlc95000_StartData,
197  .control.EndData = &fsl_fxlc95000_EndData,
198  .control.Calibrate = &fsl_fxlc95000_Calibrate,
199  .control.Shutdown = &fsl_fxlc95000_Shutdown,
200  .control.Flash = &fsl_fxlc95000_Flash,
201  .control.Convert = &fsl_fxlc95000_Convert
202 };
203 
204 
205 #define FSL_SENSOR_SPI_CMD_LENG 0x1
212 };
213 
215 {
216  .busConfig =
217  {
218  .timeout = 1000U,
219  .device =
220  {
221  .bitsPerSec = 500000U,
222  .dataBusConfig.bitsPerFrame = 8U,
223  .dataBusConfig.clkPolarity = kDspiClockPolarity_ActiveHigh,
224  .dataBusConfig.clkPhase = kDspiClockPhase_FirstEdge,
225  .dataBusConfig.direction = kDspiMsbFirst,
226  },
227  .userConfig =
228  {
229  .whichCtar = kDspiCtar0,
230  .isSckContinuous = false,
231  .isChipSelectContinuous = false,
232  .whichPcs = kDspiPcs0,
233  .pcsPolarity = kDspiPcs_ActiveHigh,
234  },
235  },
236  .pSlaveInfo = &fsl_spi_sensor_type_FXLC95000_2
237 };
238 
239 static uint8 spiRead_CmdBuffer[64];
240 static uint8 spiRead_DataBuffer[64];
241 static uint8 spiWrite_CmdDataBuffer[64];
242 
243 
245 {
246  // Call the GPIO_LDD function to initialize the chip-select.
247  GPIO_DRV_OutputPinInit(ChipSelect_OutConfig0);
248  GPIO_DRV_OutputPinInit(SPISelect_OutConfig0);
249  GPIO_DRV_OutputPinInit(ResetSensor_OutConfig0);
250 
251  // SPI Mode switch sequence.
252  GPIO_DRV_ClearPinOutput(J1_10);
253  GPIO_DRV_SetPinOutput(J1_11);
254  OSA_TimeDelay(30);
255  GPIO_DRV_ClearPinOutput(J1_11);
256  OSA_TimeDelay(50);
257  GPIO_DRV_SetPinOutput(J1_10);
258 
259  return ISF_SUCCESS;
260 }
261 
262 isf_status_t fsl_95000_spi_slave_write_preprocess(void *pCmdOut, uint32 offset, uint32 size, void *pWritebuffer)
263 {
264  spi_mater_slaveCmd_t* pSlaveCmd = (spi_mater_slaveCmd_t*)pCmdOut;
265 
266  uint8 *pWBuff = spiWrite_CmdDataBuffer;
267  uint8 *pRBuff = spiWrite_CmdDataBuffer + size + FSL_SENSOR_SPI_CMD_LENG;
268 
269  // formatting the command for the FSL_SENSORS
270  *pWBuff = (offset | 0x40) << 1 ; // offset is the internal register address of the sensor at which write is performed.
271 
272  // Copy the command
273  ISF_MEM_CPY((uint8*)pWritebuffer, (pWBuff + FSL_SENSOR_SPI_CMD_LENG), size);
274 
275  // Create the slave command.
276  pSlaveCmd->size = size + FSL_SENSOR_SPI_CMD_LENG;
277  pSlaveCmd->pWriteBuffer = (uint8*)pWBuff;
278  pSlaveCmd->pReadBuffer = (uint8*)pRBuff;
279 
280  // Call the GPIO_LDD function to clear chip-select.
281  GPIO_DRV_ClearPinOutput(J1_13);
282 
283  return ISF_SUCCESS;
284 }
285 
287 {
288  // Call the GPIO_LDD function to set chip-select.
289  GPIO_DRV_SetPinOutput(J1_13);
290 
291  return ISF_SUCCESS;
292 }
293 
295 {
296  spi_mater_slaveCmd_t* pSlaveCmd = (spi_mater_slaveCmd_t*)pCmdOut;
297 
298  uint8 *pWBuff = spiRead_CmdBuffer;
299  uint8 *pRBuff = spiRead_DataBuffer;
300 
301  // formatting the command for the FSL_SENSORS
302  *pWBuff = (offset & 0x7F) << 1 ; // offset is the internal register address of the sensor at which write is performed.
303 
304  // Create the slave command.
305  pSlaveCmd->size = size + FSL_SENSOR_SPI_CMD_LENG;
306  pSlaveCmd->pWriteBuffer = (uint8*)pWBuff;
307  pSlaveCmd->pReadBuffer = (uint8*)pRBuff;
308 
309  // Call the GPIO_LDD function to clear chip-select.
310  GPIO_DRV_ClearPinOutput(J1_13);
311 
312  return ISF_SUCCESS;
313 }
314 
316 {
317  spi_mater_slaveCmd_t* pSlaveCmd = (spi_mater_slaveCmd_t*)pCmdOut;
318 
319  ISF_MEM_CPY((uint8*)(pSlaveCmd->pReadBuffer + FSL_SENSOR_SPI_CMD_LENG), pDataOut , (pSlaveCmd->size - FSL_SENSOR_SPI_CMD_LENG) );
320 
321  // Call the GPIO_LDD function to set chip-select.
322  GPIO_DRV_SetPinOutput(J1_13);
323 
324  return ISF_SUCCESS;
325 }
326 /* END FXLC95000_2. */
327 
328 /*!
329 ** @}
330 */
331 /*
332 ** ###################################################################
333 **
334 ** This file was created by Processor Expert 10.5 [05.21]
335 ** for the Freescale Kinetis series of microcontrollers.
336 **
337 ** ###################################################################
338 */
unsigned char uint8
Definition: isf_types.h:76
const fxlc95000_Command_t const StartDataSequence[]
Definition: FXLC95000_2.c:97
isf_dsa_status_t fsl_fxlc95000_Calibrate(isf_SensorHandle_t *pSensorHandle, void *pCalData)
const uint8 const ProtectFlash[]
Definition: FXLC95000_2.c:63
const fxlc95000_Command_t const ReadConfigRegistersSequence[]
Definition: FXLC95000_2.c:74
const gpio_output_pin_user_config_t ChipSelect_OutConfig0[]
Configuration structure 0 for output pins.
Definition: ChipSelect.c:56
const fxlc95000_Command_t const EndDataSequence[]
Definition: FXLC95000_2.c:106
#define ISF_MEM_CPY(src, dest, number_of_bytes)
Macro for the memory copy.
Definition: isf_util.h:68
const uint8 const ReadConfigRegistersCmd[]
Definition: FXLC95000_2.c:54
const fxlc95000_Command_t const FlashPostprocessSequence[]
Definition: FXLC95000_2.c:148
isf_dsa_status_t fsl_fxlc95000_Flash(isf_SensorHandle_t *pSensorHandle, void *pFlashData, uint8 numBytes)
isf_SensorDataTypes_t fxlc95000_SupportedDataTypes[]
const fxlc95000_Command_t const ShutdownSequence[]
Definition: FXLC95000_2.c:116
const spi_master_CommSpecificInfo_t FXLC95000_2_DeviceInfo
This allows access to the sensor communications specific configuration.
Definition: FXLC95000_2.c:214
This structure defines the slave specific spi information.
#define FXLC95000_2_CONFIG_REGISTER_SIZE
Definition: FXLC95000_2.h:62
#define FXLC95000_2_CONFIG_REGISTER_READ_OFFSET
Definition: FXLC95000_2.h:61
This structure defines the dummy DSA data buffer format.
isf_dsa_status_t fsl_fxlc95000_Convert(volatile isf_SensorHandle_t *pSensorHandle, isf_SensorDataTypes_t convertToType, isf_dsa_result_types_t resultType, void *pNativeSample, void *pConvertedSample, int32 *numBytes)
This function converts the raw sample data to the desired output type.
isf_dsa_status_t fsl_fxlc95000_Configure(isf_SensorHandle_t *pSensorHandle, isf_dsa_SensorSettings_t *pSensorSettings)
isf_status_t fsl_95000_spi_slave_read_preprocess(void *pCmdOut, uint32 offset, uint32 size)
Definition: FXLC95000_2.c:294
const uint8 const ConfigWritePreamble[]
Definition: FXLC95000_2.c:60
isf_dsa_status_t fsl_fxlc95000_EndData(isf_SensorHandle_t *pSensorHandle)
spi_master_busConfig_t busConfig
const uint8 const EndDataCmd[]
Definition: FXLC95000_2.c:58
const fxlc95000_Command_t const WriteConfigPreambleSequence[]
Definition: FXLC95000_2.c:125
const fxlc95000_Command_t const ConfigureSequence[]
Definition: FXLC95000_2.c:83
const gpio_output_pin_user_config_t ResetSensor_OutConfig0[]
Configuration structure 0 for output pins.
Definition: ResetSensor.c:56
#define FXLC95000_2_CONFIG_REGISTER_CMD_OFFSET
Definition: FXLC95000_2.h:60
const fxlc95000_Command_t const InitializeSequence[]
Definition: FXLC95000_2.c:65
const gpio_output_pin_user_config_t SPISelect_OutConfig0[]
Configuration structure 0 for output pins.
Definition: SPISelect.c:56
isf_dsa_DeviceInfoBlock_t devInfo
const fxlc95000_Command_t const FlashPreprocessSequence[]
Definition: FXLC95000_2.c:134
#define FXLC95000_2_ACC_ACCEL_RANGE_2G
Definition: FXLC95000_2.h:65
const uint8 const UnprotectFlash[]
Definition: FXLC95000_2.c:61
isf_SensorTypes_t fxlc95000_SupportedSensorTypes[]
Supported sensor and data types.
uint8 FXLC95000_2_ConfigRegisterBuffer[FXLC95000_2_CONFIG_REGISTER_SIZE]
Definition: FXLC95000_2.c:50
The isf_util.h file contains the utility method declarations and macros.
#define FXLC95000_2_SAMPLE_OFFSET
Definition: FXLC95000_2.h:58
const uint8 const ShutdownCmd[]
Definition: FXLC95000_2.c:59
const uint8 const ConfigureMBoxCmd1[]
Definition: FXLC95000_2.c:53
This defines the DSA adapter structure required for static initialization of the concrete instance of...
isf_SensorTypes_t * pSupportedSensorTypes
isf_status_t(* fnwritepreProcessing_t)(void *cmdOut, uint32 offset, uint32 size, void *writebuffer)
fxlc95000_Sensor_Specific_Settings_t FXLC95000_2_Sensor_Specific_Config
This allows access to the sensor specific configuration for the target sensor.
Definition: FXLC95000_2.c:157
This structure defines the spi slave command format.
const uint8 const StartDataCmd[]
Definition: FXLC95000_2.c:57
const uint8 const EraseMainFlashArray[]
Definition: FXLC95000_2.c:62
isf_status_t(* fnwritepostProcossing_t)(void *cmd)
isf_dsa_status_t fsl_fxlc95000_ValidateSettings(isf_SensorHandle_t *pSensorHandle, isf_dsa_SensorSettings_t *pSubSettings)
const uint8 const BootToFlash[]
Definition: FXLC95000_2.c:52
#define FSL_SENSOR_SPI_CMD_LENG
Definition: FXLC95000_2.c:205
isf_dsa_status_t fsl_fxlc95000_StartData(isf_SensorHandle_t *pSensorHandle)
isf_status_t fsl_95000_spi_slave_read_postprocess(void *pCmdOut, void *pDataOut)
Definition: FXLC95000_2.c:315
isf_dsa_status_t fsl_fxlc95000_Initialize(isf_SensorHandle_t *pSensorHandle)
isf_dsa_status_t fsl_fxlc95000_Shutdown(isf_SensorHandle_t *pSensorHandle)
isf_status_t(* fnreadpreProcessing_t)(void *cmdout, uint32 offset, uint32 size)
const uint8 const QuickReadInterruptEnable[]
Definition: FXLC95000_2.c:55
int32 isf_status_t
ISF return status type.
Definition: isf.h:76
isf_status_t fsl_95000_spi_slave_init(void)
Definition: FXLC95000_2.c:244
#define FXLC95000_2_ACC_MODE_ACCEL_ONLY
Definition: FXLC95000_2.h:68
const uint8 const QuickReadInterruptDisable[]
Definition: FXLC95000_2.c:56
isf_spi_master_types.h defines the spi protocol adapter structure and types.
isf_status_t(* fnreadpostProcossing_t)(void *cmd, void *dataOut)
spi_master_slaveInfo_t fsl_spi_sensor_type_FXLC95000_2
Definition: FXLC95000_2.c:206
#define FXLC95000_2_ACC_FLOAT_CONVERSION_FACTOR
Definition: FXLC95000_2.h:64
#define FXLC95000_2_ACC_ACCEL_RESOLUTION_16_BIT
Definition: FXLC95000_2.h:69
unsigned long int uint32
Definition: isf_types.h:78
const isf_dsa_Adapter_t FXLC95000_2_Adapter
This creates the sensor adapter instance for the target sensor.
Definition: FXLC95000_2.c:188
#define FXLC95000_2_SAMPLE_SIZE
Definition: FXLC95000_2.h:59
isf_status_t fsl_95000_spi_slave_write_preprocess(void *pCmdOut, uint32 offset, uint32 size, void *pWritebuffer)
Definition: FXLC95000_2.c:262
isf_status_t(* fnslaveinit_t)(void)
isf_status_t fsl_95000_spi_slave_write_postprocess(void *pCmdOut)
Definition: FXLC95000_2.c:286