Treehouse Mbed Team / Mbed 2 deprecated APS_DCM1SL

Dependencies:   mbed

src/boards.cpp

Committer:
mfwic
Date:
2018-12-03
Revision:
6:39442d493098
Parent:
5:09be5bbb5020
Child:
8:d3d7dca419b3

File content as of revision 6:39442d493098:

//-------------------------------------------------------------------------------
// 
//  Treehouse Designs Inc.
//  Colorado Springs, Colorado
// 
//  Copyright (c) 2016 by Treehouse Designs Inc. 
//  Copyright (c) 2018 by Agility Power Systems Inc. 
// 
//  This code is the property of Treehouse Designs, Inc. (Treehouse) and
//  Agility Power Systems Inc. (Agility) and may not be redistributed
//  in any form without prior written permission from 
//  both copyright holders, Treehouse and Agility.
//
//  The above copyright notice and this permission notice shall be included in
//  all copies or substantial portions of the Software.
// 
//   
//-------------------------------------------------------------------------------
// 
//  REVISION HISTORY:
//  
//   $Author: $
//   $Rev: $
//   $Date: $
//   $URL: $
// 
//-------------------------------------------------------------------------------

#include "mbed.h"
#include "globals.h"
#include "boards.h"
#include "all_io.h"
#include "serial.h"
#include "stdio.h"
#include "parameters.h"
#include "lut.h"

unsigned int boardEnableBits;

/*******************************************************************************
delay
*******************************************************************************/
void delay(long ticks)
{
   long i;
   for(i=0;i<ticks;i++);    
}  

/*******************************************************************************
setBoardEnables
*******************************************************************************/
//void setBoardEnables(unsigned int enableBits[])
unsigned int setBoardEnables(unsigned int tCode)
{
   unsigned int i = 0;
   unsigned int boardTcode = 0;
   // Default is all boards OFF
   //unsigned int boardTcode = ALLOFF;
   
   dec2therm_fix(tCode, (unsigned int)BOARDS_THERMCODE_WIDTH);
   
   for (i = 0; i < MAX_BOARDS; i++){
      // 0 == enabled
      boardTcode = (thermCode[i] & (1 << i));
   }
    
   //wr_out = boardTcode;
   wr_out = tCode;
   //return boardTcode;
   return tCode;
}

/*******************************************************************************
setBoardWeights
*******************************************************************************/
//void setBoardWeights(unsigned int enableWeights[])
unsigned int setBoardWeights(unsigned int bCode)
{
   unsigned int i = 0;
   unsigned int boardBcode = 0;
   
   dec2bin_fix(bCode, WEIGHT_BIN_WIDTH);

   for (i = 0; i <= WEIGHT_BIN_WIDTH; i++){
      // 0 == enabled
      boardBcode = (binCode[i] & (1 << i));
   }
   //en_out = boardBcode;
   en_out = bCode;
   toggleLatchSignal();
   //return boardBcode;
   return bCode;
}

/*******************************************************************************
toggleLatchSignal
*******************************************************************************/
void toggleLatchSignal(void){
    extchlat = OFF;
    extchlat = ON;
    extchlat = OFF;
}

/*******************************************************************************
initDACs
*******************************************************************************/
void initDACs(void)
{
   //setupDacInit();
   //sendDACs(dinitbits);
}    

/************************************************************
* Routine: checkRange
* Input:   setval
*          limlo -- low limit
*          limhi -- high limit
* Returns:  1 if entry validates and is written
*           0 if entry fails
*           -1 if it slips past
* Description:
* Checks if setvalue is between the given limits.
*
**************************************************************/
int checkRange(int setvalue, int limlo, int limhi)
{
   if ((setvalue >= limlo) && (setvalue <= limhi)){
      return 1;
   }else{
      showRangeError(0, 0, setvalue);
      return 0;
   }
}

/*******************************************************************************
startConverter
*******************************************************************************/
// RK: ch[i][reg].enabled has not been used correctly yet. Need to modify that code.
void startConverter(unsigned int reg)
{
   //unsigned int i;
   //float period;
   running = TRUE;

   //unsigned int boardsEnabled = 0;
   //char stemp[50];
   
   //for (i = 0; i < MAX_BOARDS; i++){
   //   //if (ch[i][reg].enabled == 1)
   //   //{
   //       // Set the corresponding bit
   //       boardsEnabled |= (1 << i);
   //
   //       sprintf(stemp, "\n\rBoard %d RUNNING", i + 1);
   //       sendSerial(stemp);
   //   //}
   //}
   // Invert the bits because 0 == enabled on the SPI write
   //boardsEnabled = ~boardsEnabled;
   
   // Fire in the hole!
   wr_out_code = setBoardEnables(reg);
   
   sprintf(strbuf, "\r\nConverter started");
   sendSerial(strbuf);

   //setupRunVoltages();
   //currentRegister = reg;
   //pulser.attach_us(&pulserInt, period);    
}   

/*******************************************************************************
stopConverter - stop the converter and set outputs to 0
*******************************************************************************/
void stopConverter(void)
{
   //pulser.detach();
   wr_out_code = setBoardEnables(ALLOFF);
   //setBoardEnables((unsigned int *)alloff);
   running = FALSE;
   sprintf(strbuf, "\r\nConverter stopped");
   sendSerial(strbuf);
}

/*******************************************************************************
updateControls
*******************************************************************************/
void updateControls(unsigned short ref){
    //getLUTcode(i12);
    //getLUTcode(my12);
    unsigned int cBuf = getLUT_thermCode(ref);
    wr_out_code = setBoardEnables(cBuf);
    
    cBuf = getLUT_binCode(ref);
    en_out_code = setBoardWeights(cBuf);
}