Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: UITDSP_ADDA_Example2
Diff: DAC_MCP4921.cpp
- Revision:
- 1:e997f4e94491
- Parent:
- 0:46d099dfd9d6
diff -r 46d099dfd9d6 -r e997f4e94491 DAC_MCP4921.cpp
--- a/DAC_MCP4921.cpp Sat Mar 14 06:49:49 2015 +0000
+++ b/DAC_MCP4921.cpp Mon Mar 16 23:59:49 2015 +0000
@@ -1,17 +1,17 @@
-//------------------------------------------------------
-// Class for single DAC in MCP4921
+//--------------------------------------------------------------
+// Class for DAC MCP4921
//
-// 2015/02/02, Copyright (c) 2015 MIKAMI, Naoki
-//------------------------------------------------------
+// 2015/02/18, Copyright (c) 2015 MIKAMI, Naoki
+//--------------------------------------------------------------
+#include "InterruptManager.h"
#include "DAC_MCP4921.hpp"
namespace Mikami
{
DAC_MCP4921::DAC_MCP4921(PinName mosi, PinName sclk,
PinName cs, PinName ldac)
- : spi_(mosi, NC, sclk),
- ld_(ldac, 0), mySpi_((SPI_TypeDef*)NULL)
+ : spi_(mosi, NC, sclk), ld_(ldac, 0)
{
if ( (mosi == PA_7) || (mosi == PB_5) ) mySpi_ = SPI1;
if ( (mosi == PB_15) || (mosi == PC_3) ) mySpi_ = SPI2;
@@ -27,10 +27,16 @@
mySpi_->CR1 += SPI_CR1_BR_0;
#endif // __STM32F411xE_H
- // timer prescaler is set same value of boud rate for SPI
- uint16_t psc = (2 << ((mySpi_->CR1 >> 3) & 0x07)) - 1;
- if (mySpi_ != SPI1) psc = (psc + 1)*2 - 1;
- ss_ = new Tim4_ss(psc, 19, cs);
+ cs_ = new DigitalOut(cs, 1);
+
+ mySpi_->CR2 |= SPI_CR2_RXNEIE; // Enable SPI RX buffer not empty interrupt
+
+ IRQn_Type irq = SPI1_IRQn;
+ if (mySpi_ == SPI2) irq = SPI2_IRQn;
+ if (mySpi_ == SPI3) irq = SPI3_IRQn;
+
+ NVIC_SetVector(irq, (uint32_t)Isr); // See "cmsis_nvic.h"
+ NVIC_EnableIRQ(irq); // See "core_cm4.h"
}
void DAC_MCP4921::ScfClockTim3(uint32_t clock, PinName pin)
@@ -38,7 +44,7 @@
if ( (pin != PA_6) && (pin != PB_4) && (pin != PB_5) &&
(pin != PC_6) && (pin != PC_7) && (pin != PC_8) && (pin != PC_9) )
{
- fprintf(stderr, "\r\nIllegal pin name in DAC_MCP4921::ScfClockTim3()\r\n");
+ fprintf(stderr, "\r\nIllegal pin name in DAC_MCP4922::ScfClockTim3()\r\n");
while (true) {}
}
@@ -56,4 +62,8 @@
if (pin == PC_9)
TIM3->CCR4 = (TIM3->ARR + 1)/2;
}
+
+ DigitalOut* DAC_MCP4921::cs_;
+ SPI_TypeDef* DAC_MCP4921::mySpi_;
}
+