interface for the temperature sensor chip adt7320, with sw SPI interface
adt7320.cpp@0:e252ae2774e8, 2014-10-02 (annotated)
- 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?
User | Revision | Line number | New 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 |