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
DAC_MCP4921.cpp@1:e997f4e94491, 2015-03-16 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Mon Mar 16 23:59:49 2015 +0000
- Revision:
- 1:e997f4e94491
- Parent:
- 0:46d099dfd9d6
2
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| MikamiUitOpen | 1:e997f4e94491 | 1 | //-------------------------------------------------------------- |
| MikamiUitOpen | 1:e997f4e94491 | 2 | // Class for DAC MCP4921 |
| MikamiUitOpen | 0:46d099dfd9d6 | 3 | // |
| MikamiUitOpen | 1:e997f4e94491 | 4 | // 2015/02/18, Copyright (c) 2015 MIKAMI, Naoki |
| MikamiUitOpen | 1:e997f4e94491 | 5 | //-------------------------------------------------------------- |
| MikamiUitOpen | 0:46d099dfd9d6 | 6 | |
| MikamiUitOpen | 1:e997f4e94491 | 7 | #include "InterruptManager.h" |
| MikamiUitOpen | 0:46d099dfd9d6 | 8 | #include "DAC_MCP4921.hpp" |
| MikamiUitOpen | 0:46d099dfd9d6 | 9 | |
| MikamiUitOpen | 0:46d099dfd9d6 | 10 | namespace Mikami |
| MikamiUitOpen | 0:46d099dfd9d6 | 11 | { |
| MikamiUitOpen | 0:46d099dfd9d6 | 12 | DAC_MCP4921::DAC_MCP4921(PinName mosi, PinName sclk, |
| MikamiUitOpen | 0:46d099dfd9d6 | 13 | PinName cs, PinName ldac) |
| MikamiUitOpen | 1:e997f4e94491 | 14 | : spi_(mosi, NC, sclk), ld_(ldac, 0) |
| MikamiUitOpen | 0:46d099dfd9d6 | 15 | { |
| MikamiUitOpen | 0:46d099dfd9d6 | 16 | if ( (mosi == PA_7) || (mosi == PB_5) ) mySpi_ = SPI1; |
| MikamiUitOpen | 0:46d099dfd9d6 | 17 | if ( (mosi == PB_15) || (mosi == PC_3) ) mySpi_ = SPI2; |
| MikamiUitOpen | 0:46d099dfd9d6 | 18 | if ( mosi == PC_12 ) mySpi_ = SPI3; |
| MikamiUitOpen | 0:46d099dfd9d6 | 19 | |
| MikamiUitOpen | 0:46d099dfd9d6 | 20 | // Set SPI format |
| MikamiUitOpen | 0:46d099dfd9d6 | 21 | spi_.format(16, 0); |
| MikamiUitOpen | 0:46d099dfd9d6 | 22 | // Clock source of F401 for SPI1 : 84 MHz, |
| MikamiUitOpen | 0:46d099dfd9d6 | 23 | // SPI2, SPI3 : 42 MHz |
| MikamiUitOpen | 0:46d099dfd9d6 | 24 | mySpi_->CR1 = (mySpi_->CR1 & ~SPI_CR1_BR); |
| MikamiUitOpen | 0:46d099dfd9d6 | 25 | if (mySpi_ == SPI1) mySpi_->CR1 += SPI_CR1_BR_0; |
| MikamiUitOpen | 0:46d099dfd9d6 | 26 | #ifdef __STM32F411xE_H |
| MikamiUitOpen | 0:46d099dfd9d6 | 27 | mySpi_->CR1 += SPI_CR1_BR_0; |
| MikamiUitOpen | 0:46d099dfd9d6 | 28 | #endif // __STM32F411xE_H |
| MikamiUitOpen | 0:46d099dfd9d6 | 29 | |
| MikamiUitOpen | 1:e997f4e94491 | 30 | cs_ = new DigitalOut(cs, 1); |
| MikamiUitOpen | 1:e997f4e94491 | 31 | |
| MikamiUitOpen | 1:e997f4e94491 | 32 | mySpi_->CR2 |= SPI_CR2_RXNEIE; // Enable SPI RX buffer not empty interrupt |
| MikamiUitOpen | 1:e997f4e94491 | 33 | |
| MikamiUitOpen | 1:e997f4e94491 | 34 | IRQn_Type irq = SPI1_IRQn; |
| MikamiUitOpen | 1:e997f4e94491 | 35 | if (mySpi_ == SPI2) irq = SPI2_IRQn; |
| MikamiUitOpen | 1:e997f4e94491 | 36 | if (mySpi_ == SPI3) irq = SPI3_IRQn; |
| MikamiUitOpen | 1:e997f4e94491 | 37 | |
| MikamiUitOpen | 1:e997f4e94491 | 38 | NVIC_SetVector(irq, (uint32_t)Isr); // See "cmsis_nvic.h" |
| MikamiUitOpen | 1:e997f4e94491 | 39 | NVIC_EnableIRQ(irq); // See "core_cm4.h" |
| MikamiUitOpen | 0:46d099dfd9d6 | 40 | } |
| MikamiUitOpen | 0:46d099dfd9d6 | 41 | |
| MikamiUitOpen | 0:46d099dfd9d6 | 42 | void DAC_MCP4921::ScfClockTim3(uint32_t clock, PinName pin) |
| MikamiUitOpen | 0:46d099dfd9d6 | 43 | { |
| MikamiUitOpen | 0:46d099dfd9d6 | 44 | if ( (pin != PA_6) && (pin != PB_4) && (pin != PB_5) && |
| MikamiUitOpen | 0:46d099dfd9d6 | 45 | (pin != PC_6) && (pin != PC_7) && (pin != PC_8) && (pin != PC_9) ) |
| MikamiUitOpen | 0:46d099dfd9d6 | 46 | { |
| MikamiUitOpen | 1:e997f4e94491 | 47 | fprintf(stderr, "\r\nIllegal pin name in DAC_MCP4922::ScfClockTim3()\r\n"); |
| MikamiUitOpen | 0:46d099dfd9d6 | 48 | while (true) {} |
| MikamiUitOpen | 0:46d099dfd9d6 | 49 | } |
| MikamiUitOpen | 0:46d099dfd9d6 | 50 | |
| MikamiUitOpen | 0:46d099dfd9d6 | 51 | PwmOut clockSCF(pin); |
| MikamiUitOpen | 0:46d099dfd9d6 | 52 | |
| MikamiUitOpen | 0:46d099dfd9d6 | 53 | TIM3->ARR = SystemCoreClock/clock - 1; |
| MikamiUitOpen | 0:46d099dfd9d6 | 54 | TIM3->PSC = 0; |
| MikamiUitOpen | 0:46d099dfd9d6 | 55 | // Set capture/compare register 2 |
| MikamiUitOpen | 0:46d099dfd9d6 | 56 | if ( (pin == PA_6) || (pin == PB_4) || (pin == PC_6) ) |
| MikamiUitOpen | 0:46d099dfd9d6 | 57 | TIM3->CCR1 = (TIM3->ARR + 1)/2; |
| MikamiUitOpen | 0:46d099dfd9d6 | 58 | if ( (pin == PB_5) || (pin == PC_7) ) |
| MikamiUitOpen | 0:46d099dfd9d6 | 59 | TIM3->CCR2 = (TIM3->ARR + 1)/2; |
| MikamiUitOpen | 0:46d099dfd9d6 | 60 | if (pin == PC_8) |
| MikamiUitOpen | 0:46d099dfd9d6 | 61 | TIM3->CCR3 = (TIM3->ARR + 1)/2; |
| MikamiUitOpen | 0:46d099dfd9d6 | 62 | if (pin == PC_9) |
| MikamiUitOpen | 0:46d099dfd9d6 | 63 | TIM3->CCR4 = (TIM3->ARR + 1)/2; |
| MikamiUitOpen | 0:46d099dfd9d6 | 64 | } |
| MikamiUitOpen | 1:e997f4e94491 | 65 | |
| MikamiUitOpen | 1:e997f4e94491 | 66 | DigitalOut* DAC_MCP4921::cs_; |
| MikamiUitOpen | 1:e997f4e94491 | 67 | SPI_TypeDef* DAC_MCP4921::mySpi_; |
| MikamiUitOpen | 0:46d099dfd9d6 | 68 | } |
| MikamiUitOpen | 1:e997f4e94491 | 69 |