不韋 呂 / UITDSP_ADDA2

Dependents:   UITDSP_ADDA_Example2

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_;
 }
+