ADT7320 temperature sensor.

Dependents:   sscm

Fork of T_adt7320 by wimbeaumont Project

adt7320.cpp

Committer:
NickRyder
Date:
2014-10-07
Revision:
2:186e3c0afcad
Parent:
1:1b9f706b8abc

File content as of revision 2:186e3c0afcad:

#include "adt7320.h"


#define  CS_ACTIVE 1
#define  CS_DEACTIVE 0

#define ADT7320_SRC_VER "1.13" 




adt7320::adt7320(SWSPI * spiinterface, DigitalOut * chipselect):
    getVersion(ADT7320_HDR_VER, ADT7320_SRC_VER, __TIME__, __DATE__)
{
    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);
}

void adt7320::setR08(u8 reg, u8 datain) {
    set_spi_mode(16);
    u16 data = 0x0000;
    u16 cmd = (u16) format_cmd(reg, false);
    cmd = cmd << 8;
    data = datain | cmd;
    cs->write(CS_ACTIVE);
    data = spi->write(data);
    cs->write(CS_DEACTIVE);    
}

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);             
}

void  adt7320::setR16(u8 reg, u16 datain) {
    set_spi_mode(24);
    u32 data = 0x00000000;
    u32 cmd = (u32) format_cmd(reg, false);
    cmd = cmd << 16;
    data = datain | cmd;
    cs->write(CS_ACTIVE);
    data = spi->write(data);
    cs->write(CS_DEACTIVE);
}

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

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

void adt7320::set_TcritSP(u16 tcrit){
    setR16(0x04, tcrit);   
}    

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


void adt7320::init1() {
}

void adt7320::init2() {
}