interface for the temperature sensor chip adt7320, with sw SPI interface
adt7320.cpp@1:1b9f706b8abc, 2014-10-05 (annotated)
- Committer:
- wbeaumont
- Date:
- Sun Oct 05 17:12:21 2014 +0000
- Revision:
- 1:1b9f706b8abc
- Parent:
- 0:e252ae2774e8
- Child:
- 2:2b886cea4fcb
dummy init functions added, version class added
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 | 1:1b9f706b8abc | 7 | #define ADT7320_SRC_VER "1.13" |
wbeaumont | 1:1b9f706b8abc | 8 | |
wbeaumont | 1:1b9f706b8abc | 9 | |
wbeaumont | 1:1b9f706b8abc | 10 | |
wbeaumont | 1:1b9f706b8abc | 11 | |
wbeaumont | 1:1b9f706b8abc | 12 | adt7320::adt7320(SWSPI *spiinterface ,DigitalOut* chipselect ) |
wbeaumont | 1:1b9f706b8abc | 13 | :getVersion( ADT7320_HDR_VER ,ADT7320_SRC_VER , __TIME__, __DATE__) |
wbeaumont | 1:1b9f706b8abc | 14 | { |
wbeaumont | 0:e252ae2774e8 | 15 | spi=spiinterface; |
wbeaumont | 0:e252ae2774e8 | 16 | cs=chipselect; |
wbeaumont | 0:e252ae2774e8 | 17 | } |
wbeaumont | 0:e252ae2774e8 | 18 | |
wbeaumont | 0:e252ae2774e8 | 19 | void adt7320::set_spi_mode(u8 nrbyte){ |
wbeaumont | 0:e252ae2774e8 | 20 | spi->format(nrbyte,1); |
wbeaumont | 0:e252ae2774e8 | 21 | spi->frequency(10000000); |
wbeaumont | 0:e252ae2774e8 | 22 | } |
wbeaumont | 0:e252ae2774e8 | 23 | |
wbeaumont | 0:e252ae2774e8 | 24 | |
wbeaumont | 0:e252ae2774e8 | 25 | u8 adt7320::format_cmd( u8 reg, bool rw){ |
wbeaumont | 0:e252ae2774e8 | 26 | u8 cmd=0; ; |
wbeaumont | 0:e252ae2774e8 | 27 | reg= reg & 0x7; |
wbeaumont | 0:e252ae2774e8 | 28 | cmd = reg << 3; |
wbeaumont | 0:e252ae2774e8 | 29 | if ( rw) cmd |= 0x40; // write bit 6 |
wbeaumont | 0:e252ae2774e8 | 30 | return cmd; |
wbeaumont | 0:e252ae2774e8 | 31 | } |
wbeaumont | 0:e252ae2774e8 | 32 | |
wbeaumont | 0:e252ae2774e8 | 33 | |
wbeaumont | 0:e252ae2774e8 | 34 | |
wbeaumont | 0:e252ae2774e8 | 35 | u8 adt7320::getR08( u8 reg){ |
wbeaumont | 0:e252ae2774e8 | 36 | set_spi_mode(16); |
wbeaumont | 0:e252ae2774e8 | 37 | u16 data=0x00FF; |
wbeaumont | 0:e252ae2774e8 | 38 | u16 cmd = (u16) format_cmd(reg,true); |
wbeaumont | 0:e252ae2774e8 | 39 | cmd = cmd <<8; |
wbeaumont | 0:e252ae2774e8 | 40 | data= data | cmd; |
wbeaumont | 0:e252ae2774e8 | 41 | cs->write(CS_ACTIVE); |
wbeaumont | 0:e252ae2774e8 | 42 | data= spi->write(data); |
wbeaumont | 0:e252ae2774e8 | 43 | cs->write(CS_DEACTIVE); |
wbeaumont | 0:e252ae2774e8 | 44 | return (u8)(0x00FF &data); |
wbeaumont | 0:e252ae2774e8 | 45 | |
wbeaumont | 0:e252ae2774e8 | 46 | } |
wbeaumont | 0:e252ae2774e8 | 47 | |
wbeaumont | 1:1b9f706b8abc | 48 | |
wbeaumont | 1:1b9f706b8abc | 49 | void adt7320::setR08( u8 reg, u8 datain){ |
wbeaumont | 1:1b9f706b8abc | 50 | set_spi_mode(16); |
wbeaumont | 1:1b9f706b8abc | 51 | u16 data=0x0000; |
wbeaumont | 1:1b9f706b8abc | 52 | u16 cmd = (u16) format_cmd(reg,false); |
wbeaumont | 1:1b9f706b8abc | 53 | cmd = cmd <<8; |
wbeaumont | 1:1b9f706b8abc | 54 | data= datain | cmd; |
wbeaumont | 1:1b9f706b8abc | 55 | cs->write(CS_ACTIVE); |
wbeaumont | 1:1b9f706b8abc | 56 | data= spi->write(data); |
wbeaumont | 1:1b9f706b8abc | 57 | cs->write(CS_DEACTIVE); |
wbeaumont | 1:1b9f706b8abc | 58 | } |
wbeaumont | 1:1b9f706b8abc | 59 | |
wbeaumont | 0:e252ae2774e8 | 60 | u16 adt7320::getR16( u8 reg){ |
wbeaumont | 0:e252ae2774e8 | 61 | set_spi_mode(24); |
wbeaumont | 0:e252ae2774e8 | 62 | u32 data=0x0000FFFF; |
wbeaumont | 0:e252ae2774e8 | 63 | u32 cmd =(u32) format_cmd(reg,true); |
wbeaumont | 0:e252ae2774e8 | 64 | cmd = cmd <<16; |
wbeaumont | 0:e252ae2774e8 | 65 | data= data | cmd; |
wbeaumont | 0:e252ae2774e8 | 66 | cs->write(CS_ACTIVE); |
wbeaumont | 0:e252ae2774e8 | 67 | data= spi->write(data); |
wbeaumont | 0:e252ae2774e8 | 68 | cs->write(CS_DEACTIVE); |
wbeaumont | 0:e252ae2774e8 | 69 | return (u16)(0x0000FFFF &data); |
wbeaumont | 0:e252ae2774e8 | 70 | } |
wbeaumont | 0:e252ae2774e8 | 71 | |
wbeaumont | 1:1b9f706b8abc | 72 | void adt7320::setR16( u8 reg,u16 datain){ |
wbeaumont | 1:1b9f706b8abc | 73 | set_spi_mode(24); |
wbeaumont | 1:1b9f706b8abc | 74 | u32 data=0x00000000; |
wbeaumont | 1:1b9f706b8abc | 75 | u32 cmd =(u32) format_cmd(reg,false); |
wbeaumont | 1:1b9f706b8abc | 76 | cmd = cmd <<16; |
wbeaumont | 1:1b9f706b8abc | 77 | data= datain | cmd; |
wbeaumont | 1:1b9f706b8abc | 78 | cs->write(CS_ACTIVE); |
wbeaumont | 1:1b9f706b8abc | 79 | data= spi->write(data); |
wbeaumont | 1:1b9f706b8abc | 80 | cs->write(CS_DEACTIVE); |
wbeaumont | 1:1b9f706b8abc | 81 | } |
wbeaumont | 1:1b9f706b8abc | 82 | |
wbeaumont | 1:1b9f706b8abc | 83 | |
wbeaumont | 0:e252ae2774e8 | 84 | |
wbeaumont | 0:e252ae2774e8 | 85 | u8 adt7320::getId(){ |
wbeaumont | 0:e252ae2774e8 | 86 | return getR08(0x03); |
wbeaumont | 0:e252ae2774e8 | 87 | } |
wbeaumont | 0:e252ae2774e8 | 88 | |
wbeaumont | 0:e252ae2774e8 | 89 | u16 adt7320::get_TcritSP(){ |
wbeaumont | 0:e252ae2774e8 | 90 | return getR16(0x04); |
wbeaumont | 0:e252ae2774e8 | 91 | } |
wbeaumont | 0:e252ae2774e8 | 92 | |
wbeaumont | 1:1b9f706b8abc | 93 | void adt7320::set_TcritSP(u16 tcrit){ |
wbeaumont | 1:1b9f706b8abc | 94 | |
wbeaumont | 1:1b9f706b8abc | 95 | setR16(0x04,tcrit ); |
wbeaumont | 1:1b9f706b8abc | 96 | } |
wbeaumont | 1:1b9f706b8abc | 97 | |
wbeaumont | 1:1b9f706b8abc | 98 | |
wbeaumont | 1:1b9f706b8abc | 99 | |
wbeaumont | 0:e252ae2774e8 | 100 | u16 adt7320::get_T(){ |
wbeaumont | 0:e252ae2774e8 | 101 | return getR16(0x02); |
wbeaumont | 0:e252ae2774e8 | 102 | } |
wbeaumont | 0:e252ae2774e8 | 103 | |
wbeaumont | 1:1b9f706b8abc | 104 | |
wbeaumont | 1:1b9f706b8abc | 105 | void adt7320::init1(){} |
wbeaumont | 1:1b9f706b8abc | 106 | void adt7320::init2(){} |
wbeaumont | 1:1b9f706b8abc | 107 | |
wbeaumont | 1:1b9f706b8abc | 108 | |
wbeaumont | 1:1b9f706b8abc | 109 |