Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Orange_Ferrari_board_functional
power.cpp
- Committer:
- liangzhen
- Date:
- 2013-10-07
- Revision:
- 0:84a8bcfbdec9
- Child:
- 1:6a820a0ca03b
File content as of revision 0:84a8bcfbdec9:
#include "dac.h"
#include "power.h"
using namespace std;
#define INA_GAIN 200
/*
float current_meas(bool core)
{     
    float ampv = meas_amp * 3.3;
    float vdrop = ampv / INA_GAIN;
    float res = 1;
    if(core){
        res = 0.25;
    }
    return  vdrop / res;
}
*/
void power_core(float core_volt)
{
    float periph_volt = core_volt;
    
    
    if(core_volt > 1.1){
        periph_volt = 1.1;
    }
    if(core_volt < 0.9){
        periph_volt = 0.9;
    }
    
    float mem_volt = core_volt;
    
    power_chan(PADVDD, periph_volt);
    wait(POWER_UP_TIME);
    // Core and Memory
    power_chan(COREVDD, core_volt);
    wait(POWER_UP_TIME);
    power_chan(MEM1VDD, mem_volt);
    wait(POWER_UP_TIME);
    power_chan(MEM2VDD, mem_volt);
    wait(POWER_UP_TIME);
    // Clock
    power_chan(CLOCKVDD, periph_volt);
    wait(POWER_UP_TIME);
    power_chan(PLLAVDD, periph_volt);
    wait(POWER_UP_TIME);
}
void power_up(float core_volt)
{
    // The 1.8V supplies MUST be up whenever the 3.3V ones are
    power_chan(ADVDD2, 1.8);
    wait(POWER_UP_TIME);
    power_chan(DVDD2, 1.8);
    wait(POWER_UP_TIME);
    
    float new_power = core_volt;//////////////////////////////////////////////////////////
    
    // Other padring
    power_chan(ADVDD, 3.3);
    wait(POWER_UP_TIME);
    power_chan(DVDD, 3.3);
    wait(POWER_UP_TIME);
    power_chan(PADVDD, 1.0);//power_chan(PADVDD, 1.0);
    wait(POWER_UP_TIME);
    // Core and Memory
    power_chan(COREVDD, 1.0);
    wait(POWER_UP_TIME);
    power_chan(MEM1VDD, new_power);//power_chan(MEM1VDD, 1.0);
    wait(POWER_UP_TIME);
    power_chan(MEM2VDD, new_power);//power_chan(MEM2VDD, 1.0);
    wait(POWER_UP_TIME);
    // Clock
    power_chan(CLOCKVDD, 1.0);//power_chan(CLOCKVDD, 1.0);
    wait(POWER_UP_TIME);
    power_chan(PLLAVDD, 1.0);//power_chan(PLLAVDD, 1.0);
    wait(POWER_UP_TIME);
    power_chan(RING_OSC_NBIAS, 0.75);
    wait(POWER_UP_TIME);
    // Sensor Supplies
    power_chan(SENSORVDD, 1.0);//power_chan(SENSORVDD, 1.0);
    wait(POWER_UP_TIME);
    power_chan(SENSORLOWVDD, 0.35);
    wait(POWER_UP_TIME);
    power_chan(SENSORSTRESSVDD, 1.0);//power_chan(SENSORSTRESSVDD, 1.0);
    wait(POWER_UP_TIME);
    power_indicator = 1;
}
void power_down()
{
    // Zero/float all inputs, so they are not above DVDD when you lower it
    PORESETn = 0;
    CORERESETn = 0;
    GPIO.input();
    TCK = 0;
    TMS = 0;
    TDI = 0;
    scan_data_in = 0;
    scan_phi = 0;
    scan_phi_bar = 0;
    scan_load_chain = 0;
    scan_load_chip = 0;
    // Core and Memory
    power_chan(COREVDD, 0);
    wait(POWER_UP_TIME);
    power_chan(MEM1VDD, 0);
    wait(POWER_UP_TIME);
    power_chan(MEM2VDD, 0);
    wait(POWER_UP_TIME);
    // Clock
    power_chan(CLOCKVDD, 0);
    wait(POWER_UP_TIME);
    power_chan(PLLAVDD, 0);
    wait(POWER_UP_TIME);
    power_chan(RING_OSC_NBIAS, 0);
    wait(POWER_UP_TIME);
    // Sensor Supplies
    power_chan(SENSORVDD, 0);
    wait(POWER_UP_TIME);
    power_chan(SENSORLOWVDD, 0);
    wait(POWER_UP_TIME);
    power_chan(SENSORSTRESSVDD, 0);
    wait(POWER_UP_TIME);
    // Other padring
    power_chan(ADVDD, 0);
    wait(POWER_UP_TIME);
    power_chan(DVDD, 0);
    wait(POWER_UP_TIME);
    power_chan(PADVDD, 0);
    wait(POWER_UP_TIME);
    // The 1.8V supplies MUST be up whenever the 3.3V ones are
    power_chan(ADVDD2, 0);
    wait(POWER_UP_TIME);
    power_chan(DVDD2, 0);
    wait(POWER_UP_TIME);
    power_indicator = 0;
}