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

Dependents:   SPItest sscm

Committer:
wbeaumont
Date:
Thu Oct 02 19:25:55 2014 +0000
Revision:
0:e252ae2774e8
Child:
1:1b9f706b8abc
initial (only) readout of the temperature sensor chip adt7320

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wbeaumont 0:e252ae2774e8 1 #include "adt7320.h"
wbeaumont 0:e252ae2774e8 2
wbeaumont 0:e252ae2774e8 3
wbeaumont 0:e252ae2774e8 4 #define CS_ACTIVE 1
wbeaumont 0:e252ae2774e8 5 #define CS_DEACTIVE 0
wbeaumont 0:e252ae2774e8 6
wbeaumont 0:e252ae2774e8 7 adt7320::adt7320(SWSPI *spiinterface ,DigitalOut* chipselect ){
wbeaumont 0:e252ae2774e8 8 spi=spiinterface;
wbeaumont 0:e252ae2774e8 9 cs=chipselect;
wbeaumont 0:e252ae2774e8 10 }
wbeaumont 0:e252ae2774e8 11
wbeaumont 0:e252ae2774e8 12 void adt7320::set_spi_mode(u8 nrbyte){
wbeaumont 0:e252ae2774e8 13 spi->format(nrbyte,1);
wbeaumont 0:e252ae2774e8 14 spi->frequency(10000000);
wbeaumont 0:e252ae2774e8 15 }
wbeaumont 0:e252ae2774e8 16
wbeaumont 0:e252ae2774e8 17
wbeaumont 0:e252ae2774e8 18 u8 adt7320::format_cmd( u8 reg, bool rw){
wbeaumont 0:e252ae2774e8 19 u8 cmd=0; ;
wbeaumont 0:e252ae2774e8 20 reg= reg & 0x7;
wbeaumont 0:e252ae2774e8 21 cmd = reg << 3;
wbeaumont 0:e252ae2774e8 22 if ( rw) cmd |= 0x40; // write bit 6
wbeaumont 0:e252ae2774e8 23 return cmd;
wbeaumont 0:e252ae2774e8 24 }
wbeaumont 0:e252ae2774e8 25
wbeaumont 0:e252ae2774e8 26
wbeaumont 0:e252ae2774e8 27
wbeaumont 0:e252ae2774e8 28 u8 adt7320::getR08( u8 reg){
wbeaumont 0:e252ae2774e8 29 set_spi_mode(16);
wbeaumont 0:e252ae2774e8 30 u16 data=0x00FF;
wbeaumont 0:e252ae2774e8 31 u16 cmd = (u16) format_cmd(reg,true);
wbeaumont 0:e252ae2774e8 32 cmd = cmd <<8;
wbeaumont 0:e252ae2774e8 33 data= data | cmd;
wbeaumont 0:e252ae2774e8 34 cs->write(CS_ACTIVE);
wbeaumont 0:e252ae2774e8 35 data= spi->write(data);
wbeaumont 0:e252ae2774e8 36 cs->write(CS_DEACTIVE);
wbeaumont 0:e252ae2774e8 37 return (u8)(0x00FF &data);
wbeaumont 0:e252ae2774e8 38
wbeaumont 0:e252ae2774e8 39 }
wbeaumont 0:e252ae2774e8 40
wbeaumont 0:e252ae2774e8 41 u16 adt7320::getR16( u8 reg){
wbeaumont 0:e252ae2774e8 42 set_spi_mode(24);
wbeaumont 0:e252ae2774e8 43 u32 data=0x0000FFFF;
wbeaumont 0:e252ae2774e8 44 u32 cmd =(u32) format_cmd(reg,true);
wbeaumont 0:e252ae2774e8 45 cmd = cmd <<16;
wbeaumont 0:e252ae2774e8 46 data= data | cmd;
wbeaumont 0:e252ae2774e8 47 cs->write(CS_ACTIVE);
wbeaumont 0:e252ae2774e8 48 data= spi->write(data);
wbeaumont 0:e252ae2774e8 49 cs->write(CS_DEACTIVE);
wbeaumont 0:e252ae2774e8 50 return (u16)(0x0000FFFF &data);
wbeaumont 0:e252ae2774e8 51 }
wbeaumont 0:e252ae2774e8 52
wbeaumont 0:e252ae2774e8 53
wbeaumont 0:e252ae2774e8 54 u8 adt7320::getId(){
wbeaumont 0:e252ae2774e8 55 return getR08(0x03);
wbeaumont 0:e252ae2774e8 56 }
wbeaumont 0:e252ae2774e8 57
wbeaumont 0:e252ae2774e8 58 u16 adt7320::get_TcritSP(){
wbeaumont 0:e252ae2774e8 59 return getR16(0x04);
wbeaumont 0:e252ae2774e8 60 }
wbeaumont 0:e252ae2774e8 61
wbeaumont 0:e252ae2774e8 62 u16 adt7320::get_T(){
wbeaumont 0:e252ae2774e8 63 return getR16(0x02);
wbeaumont 0:e252ae2774e8 64 }
wbeaumont 0:e252ae2774e8 65