interface for the temperature sensor chip adt7320, with sw SPI interface

Dependents:   SPItest sscm

adt7320.cpp

Committer:
wbeaumont
Date:
2014-10-02
Revision:
0:e252ae2774e8
Child:
1:1b9f706b8abc

File content as of revision 0:e252ae2774e8:

#include "adt7320.h"


#define  CS_ACTIVE 1
#define  CS_DEACTIVE 0

adt7320::adt7320(SWSPI *spiinterface ,DigitalOut* chipselect ){
    spi=spiinterface;
    cs=chipselect;
    }

void adt7320::set_spi_mode(u8 nrbyte){
    spi->format(nrbyte,1);
    spi->frequency(10000000);             
}


u8   adt7320::format_cmd( u8 reg, bool rw){
    u8  cmd=0; ;
    reg= reg & 0x7;
    cmd = reg << 3;
    if ( rw)  cmd |= 0x40;  // write bit 6 
    return cmd; 
}    
    


u8   adt7320::getR08( u8 reg){
    set_spi_mode(16);
    u16 data=0x00FF;
    u16 cmd = (u16) format_cmd(reg,true);
    cmd = cmd <<8;
    data= data | cmd;
     cs->write(CS_ACTIVE);
     data= spi->write(data);
     cs->write(CS_DEACTIVE);
     return (u8)(0x00FF &data);         
    
}

u16   adt7320::getR16( u8 reg){
    set_spi_mode(24);
    u32 data=0x0000FFFF;
    u32 cmd =(u32) format_cmd(reg,true);
    cmd = cmd <<16;
    data= data | cmd;
     cs->write(CS_ACTIVE);
     data= spi->write(data);
     cs->write(CS_DEACTIVE);
     return (u16)(0x0000FFFF &data);             
}


u8  adt7320::getId(){
    return getR08(0x03);
}

u16 adt7320::get_TcritSP(){
    return getR16(0x04);   
}    

u16 adt7320::get_T(){
    return getR16(0x02);   
}