Index: firmware/App/Services/FpgaTD.c =================================================================== diff -u -r87d705fcf977af12b7b034735fa5867f2daea2b9 -r56100135135bb715d316b5fd002a4a4951b9334a --- firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision 87d705fcf977af12b7b034735fa5867f2daea2b9) +++ firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision 56100135135bb715d316b5fd002a4a4951b9334a) @@ -46,7 +46,7 @@ #define MIN_POWER_ON_TIME_FOR_COMM_FAILS ( 1 * MS_PER_SECOND ) ///< Allow FPGA comm errors for first second after power-up #define FPGA_BP_ENABLE_BIT_MASK 0x01 ///< Bit mask for enabling the blood pump. -#define FPGA_BP_DIRECTION_FWD_BIT_MASK 0x02 ///< Bit mask for setting the blood pump direction. +#define FPGA_BP_DIRECTION_REV_BIT_MASK 0x02 ///< Bit mask for setting the blood pump direction. #define FPGA_BP_HOME_BIT_MASK 0x04 ///< Bit mask for requesting a blood pump home operation. #define FPGA_VBT_OPEN_BIT_MASK 0x01 ///< Bit mask for setting VBT valve position to open. @@ -87,86 +87,78 @@ U08 errorCountProcessor; ///< Reg 258. Error count for processor communications. U08 errorCountPC; ///< Reg 259. Error count for TBD. U08 sPumpDACRdStatus; ///< Reg 260. Syringe pump DAC read status. - U08 reserved1; ///< Reg 261. Reserved and available for future use. + U08 BPHallStatus; ///< Reg 261. BP hall sensor status. U16 sPumpDACSet; ///< Reg 262. Syringe pump DAC setting. U16 sPumpDACEEProm; ///< Reg 264. Syringe pump DAC EEProm data. U16 PBoPressure; ///< Reg 266. PBo raw pressure data. S16 PBoTemperature; ///< Reg 268. PBo raw temperature data. U08 PBoReadCount; ///< Reg 270. PBo read count. U08 PBoErrorCount; ///< Reg 271. PBo error count. - U32 reserved3; ///< Reg 272. Reserved and available for future use. - U16 PBAPressure; ///< Reg 276. PBA raw pressure data. - S16 PBATemperature; ///< Reg 278. PBA raw temperature data. - U08 PBAReadCount; ///< Reg 280. PBA read count. - U08 PBAErrorCount; ///< Reg 281. PBA error count. - S16 VBACmdPosition; ///< Reg 282. VBA commanded position (200 steps/rev). - S16 VBAEncPosition; ///< Reg 284. VBA encoder position (1024 counts/rev). - U08 VBAStatus; ///< Reg 286. VBA status. - U08 reserved4; ///< Reg 287. Reserved and available for future use. - U08 BEMStatus; ///< Reg 288. BEM status. - U08 BEMEncStatus; ///< Reg 289. BEM encoder status. - S32 BEMEncPosition; ///< Reg 290. BEM encoder position. - S16 BPSpeed; ///< Reg 294. BP measured speed (RPM). - S16 BPTorque; ///< Reg 296. BP measured torque. - S16 BPSpeedFromHall; ///< Reg 298. BP measured speed from hall sensor(s). - S16 VBVCmdPosition; ///< Reg 300. VBV commanded position (200 steps/rev). - S16 VBVEncPosition; ///< Reg 302. VBV encoder position (1024 counts/rev). - U08 VBVStatus; ///< Reg 304. VBV status. - U08 BPStatus; ///< Reg 305. BP status. - U16 GPIOReg; ///< Reg 306. GPIO register. - U08 HEPStatus; ///< Reg 308. HEP status register. - U08 HEPAdcReadCount; ///< Reg 309. HEP ADC read counter. - U08 HEPAdcDacStatus; ///< Reg 310. HEP ADC/DAC status register. - U08 HEPEncStatus; ///< Reg 311. HEP encoder status register. - S32 HEPEncPosition; ///< Reg 312. HEP encoder position. - U16 HEPAdcCh0; ///< Reg 316. HEP ADC channel 0 reading. - U16 HEPAdcCh1; ///< Reg 318. HEP ADC channel 1 reading. - U16 HEPAdcCh2; ///< Reg 320. HEP ADC channel 2 reading. - U16 HEPAdcCh3; ///< Reg 322. HEP ADC channel 3 reading. - U16 fpgaAdcTemperature; ///< Reg 324. FPGA ADC temperature. - U16 fpga1msTimerCounter; ///< Reg 326. FPGA 1 millisecond timer counter. - U16 alarmBuzzerCurrentAdc; ///< Reg 328. Alarm buzzer current ADC reading. - U16 fpgaVccInternalAdc; ///< Reg 330. FPGA Vcc internal voltage ADC reading. - U16 fpgaCompatibilityRev; ///< Reg 332. Compatibility revision. - U08 VBTStatus; ///< Reg 334. VBT status register. - U08 VBTStatusPWM; ///< Reg 335. VBT PWM status register. - S16 ACPower1Current; ///< Reg 336. AC power current - 1. - S16 ACPower1Voltage; ///< Reg 338. AC power voltage - 1. - S16 ACPower2Current; ///< Reg 340. AC power current - 2. - S16 ACPower2Voltage; ///< Reg 342. AC power voltage - 2. - S16 ACPower3Current; ///< Reg 344. AC power current - 3. - S16 ACPower3Voltage; ///< Reg 346. AC power voltage - 3. + U16 PBAPressure; ///< Reg 272. PBA raw pressure data. + S16 PBATemperature; ///< Reg 274. PBA raw temperature data. + U08 PBAReadCount; ///< Reg 276. PBA read count. + U08 PBAErrorCount; ///< Reg 277. PBA error count. + S16 VBACmdPosition; ///< Reg 278. VBA commanded position (200 steps/rev). + S16 VBAEncPosition; ///< Reg 280. VBA encoder position (1024 counts/rev). + U08 VBAStatus; ///< Reg 282. VBA status. + U08 reserved4; ///< Reg 283. Reserved and available for future use. + U08 BEMStatus; ///< Reg 284. BEM status. + U08 BEMEncStatus; ///< Reg 285. BEM encoder status. + S32 BEMEncPosition; ///< Reg 286. BEM encoder position. + S16 BPPeriod; ///< Reg 290. BP measured period (10 uSec). + S16 BPTorque; ///< Reg 292. BP measured torque. + S16 BPSpeedFromHall; ///< Reg 294. BP measured speed from hall sensor(s). + S16 VBVCmdPosition; ///< Reg 296. VBV commanded position (200 steps/rev). + S16 VBVEncPosition; ///< Reg 298. VBV encoder position (1024 counts/rev). + U08 VBVStatus; ///< Reg 300. VBV status. + U08 BPStatus; ///< Reg 301. BP status. + U16 GPIOReg; ///< Reg 302. GPIO register. + U08 HEPStatus; ///< Reg 304. HEP status register. + U08 HEPAdcReadCount; ///< Reg 305. HEP ADC read counter. + U08 HEPAdcDacStatus; ///< Reg 306. HEP ADC/DAC status register. + U08 HEPEncStatus; ///< Reg 307. HEP encoder status register. + S32 HEPEncPosition; ///< Reg 308. HEP encoder position. + U16 HEPAdcCh0; ///< Reg 312. HEP ADC channel 0 reading. + U16 HEPAdcCh1; ///< Reg 314. HEP ADC channel 1 reading. + U16 HEPAdcCh2; ///< Reg 316. HEP ADC channel 2 reading. + U16 HEPAdcCh3; ///< Reg 318. HEP ADC channel 3 reading. + U16 fpgaAdcTemperature; ///< Reg 320. FPGA ADC temperature. + U16 fpga1msTimerCounter; ///< Reg 322. FPGA 1 millisecond timer counter. + U16 alarmBuzzerCurrentAdc; ///< Reg 324. Alarm buzzer current ADC reading. + U16 fpgaVccInternalAdc; ///< Reg 326. FPGA Vcc internal voltage ADC reading. + U16 fpgaCompatibilityRev; ///< Reg 328. Compatibility revision. + U08 VBTStatus; ///< Reg 330. VBT status register. + U08 VBTStatusPWM; ///< Reg 331. VBT PWM status register. + S16 ACPower1Current; ///< Reg 332. AC power current - 1. + S16 ACPower1Voltage; ///< Reg 334. AC power voltage - 1. + S16 ACPower2Current; ///< Reg 336. AC power current - 2. + S16 ACPower2Voltage; ///< Reg 338. AC power voltage - 2. + S16 ACPower3Current; ///< Reg 340. AC power current - 3. + S16 ACPower3Voltage; ///< Reg 342. AC power voltage - 3. + S32 ACHeaterTemp; ///< Reg 344. AC heater temperature. + U16 BPRotorHallSpeed; ///< Reg 348. BP rotor speed from hall sensor. } FPGA_SENSORS_T; /// Record structure for FPGA continuous priority writes. typedef struct { U16 fpgaGenWrRd; ///< Reg 04. FPGA general write/read-back register (mirrored to a general read register in read page at addr 256). U08 VBTControl; ///< Reg 06. VBT valve control register. - U08 reserved1; ///< Reg 07. Reserved. - U08 VBTPWMEnable; ///< Reg 08. VBT valve PWM enable register. - U08 reserved2; ///< Reg 09. Reserved. - U16 VBTPWMLowPeriod; ///< Reg 10. VBT PWM low signal period register. - U16 VBTPWMPeriod; ///< Reg 12. VBT PWM period register. - U16 VBTPWMPUllInTime; ///< Reg 14. VBT PWM pull in time register. - U16 ACHeaterPWM; ///< Reg 16. AC heater PWM duty cycle set register. - U08 ATAPControl; ///< Reg 18. Air pump control register. - U08 BEMControl; ///< Reg 19. Blood ejector stepper motor control register. - U16 BEMSetSpeed; ///< Reg 20. Blood ejector stepper motor step register. - U16 BPSetSpeed; ///< Reg 22. Blood pump speed set register (RPM). - U08 BPControl; ///< Reg 24. Blood pump control register. - U08 VBVControl; ///< Reg 25. VBV control register. - U16 VBVPosition; ///< Reg 26. VBV position set register (200 steps/rev). - U16 VBAPosition; ///< Reg 28. VBA position set register (200 steps/rev). - U16 VBAControl; ///< Reg 30. VBA control register. - U08 reserved3; ///< Reg 31. Reserved. - U16 reserved4; ///< Reg 32. Reserved. - U08 alarmControl; ///< Reg 34. Alarm audio control register. - U08 reserved5; ///< Reg 35. Reserved. - U32 reserved6; ///< Reg 36. Reserved. - U16 reserved7; ///< Reg 40. Reserved. - U16 reserved8; ///< Reg 42. Reserved. - U08 sensorTest; ///< Reg 44. Sensor self-test control register. + U08 VBTPWMEnable; ///< Reg 07. VBT valve PWM enable register. + U16 VBTPWMLowPeriod; ///< Reg 08. VBT PWM low signal period register. + U16 VBTPWMPeriod; ///< Reg 10. VBT PWM period register. + U16 VBTPWMPUllInTime; ///< Reg 12. VBT PWM pull in time register. + U08 ATAPControl; ///< Reg 14. Air pump control register. + U08 BEMControl; ///< Reg 15. Blood ejector stepper motor control register. + U16 BEMSetSpeed; ///< Reg 16. Blood ejector stepper motor step register. + U16 BPSetSpeed; ///< Reg 18. Blood pump speed set register (RPM). + U08 BPControl; ///< Reg 20. Blood pump control register. + U08 VBVControl; ///< Reg 21. VBV control register. + U16 VBVPosition; ///< Reg 22. VBV position set register (200 steps/rev). + U16 VBAPosition; ///< Reg 24. VBA position set register (200 steps/rev). + U08 VBAControl; ///< Reg 26. VBA control register. + U08 valveEncoderControl; ///< Reg 27. VBA/VBV encoder control register. + U08 alarmControl; ///< Reg 28. Alarm audio control register. } FPGA_ACTUATORS_T; #pragma pack(pop) @@ -447,11 +439,11 @@ { if ( MOTOR_DIR_REVERSE == dir ) { - fpgaActuatorSetPoints.BPControl &= ~((U08)FPGA_BP_DIRECTION_FWD_BIT_MASK); + fpgaActuatorSetPoints.BPControl |= FPGA_BP_DIRECTION_REV_BIT_MASK; } else { - fpgaActuatorSetPoints.BPControl |= FPGA_BP_DIRECTION_FWD_BIT_MASK; + fpgaActuatorSetPoints.BPControl &= ~((U08)FPGA_BP_DIRECTION_REV_BIT_MASK); } } @@ -499,19 +491,34 @@ /*********************************************************************//** * @brief - * The getBPSpeed function gets the latest blood pump speed (in RPM) + * The getBPPeriod function gets the latest blood pump period (in 10uSec) * from the FPGA. * @details \b Inputs: fpgaSensorReadings * @details \b Outputs: none - * @return Latest blood pump speed. + * @return Latest blood pump period. *************************************************************************/ -U16 getBPSpeed( void ) +U16 getBPPeriod( void ) { - return fpgaSensorReadings.BPSpeed; + return fpgaSensorReadings.BPPeriod; } /*********************************************************************//** * @brief + * The getBPStatus function gets the latest blood pump hall sensor status. + * Bit 0: 0=Forward pump direction detected, 1=Reverse pump direction detected + * Bit 1: 0=Correct pump direction detected, 1=Incorrect pump direction detected + * Bit 2..7: Running incorrect pump direction counter (wraps). + * @details \b Inputs: fpgaSensorReadings.BPHallStatus + * @details \b Outputs: none + * @return Latest blood pump hall sensor status bits. + *************************************************************************/ +U08 getBPStatus( void ) +{ + return fpgaSensorReadings.BPHallStatus; +} + +/*********************************************************************//** + * @brief * The getBloodPumpHallSensorCount function gets the latest blood pump * hall sensor count. Count is a 16 bit free running counter. If counter is * counting up, indicates motor is running in forward direction. If counter is @@ -732,7 +739,7 @@ *************************************************************************/ void setFPGAVenousBubbleSelfTest( void ) { - fpgaActuatorSetPoints.sensorTest |= FPGA_ADV_BUBBLE_SELF_TEST_CMD; +// fpgaActuatorSetPoints.sensorTest |= FPGA_ADV_BUBBLE_SELF_TEST_CMD; } /*********************************************************************//** @@ -745,12 +752,12 @@ *************************************************************************/ void clearFPGAVenousBubbleSelfTest( void ) { - fpgaActuatorSetPoints.sensorTest &= ~FPGA_ADV_BUBBLE_SELF_TEST_CMD; +// fpgaActuatorSetPoints.sensorTest &= ~FPGA_ADV_BUBBLE_SELF_TEST_CMD; } /*********************************************************************//** * @brief - * The setVBAControl function sets the control bits for the venous pinch valve. + * The setVBVControl function sets the control bits for the venous pinch valve. * Microstep setting: bits 0..2: * 0=full step (100% torque) * 1=1/2 step (100% torque) @@ -778,7 +785,7 @@ *************************************************************************/ void setVBVControl( U08 controlBits ) { - + fpgaActuatorSetPoints.VBVControl = controlBits; } /*********************************************************************//**