Simplified access to a Microchip Digital Potentiometer (MCP41xxx/MCP42xxx) devices
Dependents: MCP41xxxApp MCP320xApp MCP41xxxApp
Diff: MCP4xxxx_SPI.cpp
- Revision:
- 2:7c27fb9785be
- Parent:
- 1:cf3cee91eb87
- Child:
- 4:bbfc8e352ff5
diff -r cf3cee91eb87 -r 7c27fb9785be MCP4xxxx_SPI.cpp
--- a/MCP4xxxx_SPI.cpp Sun Jan 27 17:04:05 2013 +0000
+++ b/MCP4xxxx_SPI.cpp Tue Jan 29 15:02:08 2013 +0000
@@ -23,7 +23,7 @@
unsigned char CMCP4xxxx_SPI::SPIModuleRefCounter = 0;
- CMCP4xxxx_SPI::CMCP4xxxx_SPI(const PinName p_mosi, const PinName p_miso, const PinName p_sclk, const PinName p_reset, const PinName p_shdn, const unsigned int p_frequency) : _internalId("") {
+ CMCP4xxxx_SPI::CMCP4xxxx_SPI(const PinName p_mosi, const PinName p_miso, const PinName p_sclk, const PinName p_cs, const PinName p_reset, const PinName p_shdn, const unsigned int p_frequency) : _internalId("") {
DEBUG_ENTER("CMCP4xxxx_SPI")
if (CMCP4xxxx_SPI::SPIModuleRefCounter != 0) {
@@ -36,6 +36,15 @@
CMCP4xxxx_SPI::SPIModuleRefCounter += 1;
DEBUG_ENTER("CMCP4xxxx_SPI: refCounter=%d", CMCP4xxxx_SPI::SPIModuleRefCounter)
+ if (p_cs != NC) {
+ DEBUG("CMCP4xxxx_SPI: /CS managed");
+ _cs = new DigitalOut(p_cs);
+ _cs->write(1); // Disable chip
+ } else {
+ DEBUG("CMCP4xxxx_SPI: /CS not managed");
+ _cs = NULL; // Not used
+ }
+
if (p_reset != NC) {
DEBUG("CMCP4xxxx_SPI: /RESET managed");
_reset = new DigitalOut(p_reset);
@@ -68,11 +77,16 @@
_spiInstance = NULL;
}
// Release _reset if required
+ if (_cs != NULL) {
+ _cs->write(0);
+ delete _cs;
+ }
+ // Release _reset if required
if (_reset != NULL) {
_reset->write(0);
delete _reset;
}
- // Release _shdn if required
+ // Release _shdn if required
if (_shdn != NULL) {
_shdn->write(0);
delete _shdn;
@@ -103,7 +117,13 @@
} // End of 'switch' statement
DEBUG("CMCP4xxxx_SPI: Send command: 0x%04x", command)
+ if (_cs != NULL) {
+ _cs->write(0);
+ }
unsigned short result = _spiInstance->write(command);
+ if (_cs != NULL) {
+ _cs->write(1);
+ }
DEBUG_LEAVE("CMCP4xxxx_SPI::Write: %d", result)
return result;
@@ -131,7 +151,13 @@
} // End of 'switch' statement
DEBUG("CMCP4xxxx_SPI: Send command: 0x%04x", command)
+ if (_cs != NULL) {
+ _cs->write(0);
+ }
unsigned short result = _spiInstance->write(command);
+ if (_cs != NULL) {
+ _cs->write(1);
+ }
DEBUG_LEAVE("CMCP4xxxx_SPI::Write: %d", result)
return result;
@@ -148,7 +174,7 @@
_reset->write(0); // Set level low to activate reset
wait_us(1); // Wait for 1us
- _reset->write(1); // Set level low to de-activate reset
+ _reset->write(1); // Set level low to de-activate reset
return true;
}
Yann Garcia