From 2cb9abbde50cc2cd722a05ada0cc9d7e6ec06d30 Mon Sep 17 00:00:00 2001 From: tauon Date: Tue, 22 May 2012 17:28:12 +0200 Subject: [PATCH] Add MCP4901 DAC support Add MCP4901 DAC support --- Makefile | 478 +++++++++++++++++----------------- drivers/dac/mcp4901/mcp4901.c | 127 +++++++++ drivers/dac/mcp4901/mcp4901.h | 48 ++++ 3 files changed, 414 insertions(+), 239 deletions(-) create mode 100644 drivers/dac/mcp4901/mcp4901.c create mode 100644 drivers/dac/mcp4901/mcp4901.h diff --git a/Makefile b/Makefile index 482caea..2151859 100644 --- a/Makefile +++ b/Makefile @@ -1,239 +1,239 @@ -########################################################################## -# User configuration and firmware specific object files -########################################################################## - -# The target, flash and ram of the LPC1xxx microprocessor. -# Use for the target the value: LPC11xx, LPC13xx or LPC17xx -TARGET = LPC13xx -FLASH = 32K -SRAM = 8K - -# For USB HID support the LPC134x reserves 384 bytes from the sram, -# if you don't want to use the USB features, just use 0 here. -SRAM_USB = 384 - -VPATH = -OBJS = main.o - -########################################################################## -# Debug settings -########################################################################## - -# Set DEBUGBUILD to 'TRUE' for full debugging (larger, slower binaries), -# or to 'FALSE' for release builds (smallest, fastest binaries) -DEBUGBUILD = FALSE - -########################################################################## -# IDE Flags (Keeps various IDEs happy) -########################################################################## - -OPTDEFINES = -D __NEWLIB__ - -########################################################################## -# Project-specific files -########################################################################## - -VPATH += project -OBJS += commands.o - -VPATH += project/commands -OBJS += cmd_chibi_addr.o cmd_chibi_tx.o -OBJS += cmd_i2ceeprom_read.o cmd_i2ceeprom_write.o cmd_lm75b_gettemp.o -OBJS += cmd_reset.o cmd_sd_dir.o cmd_sysinfo.o cmd_uart.o -OBJS += cmd_roundedcorner.o cmd_pwm.o - -VPATH += project/commands/drawing -OBJS += cmd_backlight.o cmd_bmp.o cmd_button.o cmd_calibrate.o -OBJS += cmd_circle.o cmd_clear.o cmd_line.o cmd_orientation.o -OBJS += cmd_pixel.o cmd_progress.o cmd_rectangle.o cmd_text.o -OBJS += cmd_textw.o cmd_tsthreshhold.o cmd_tswait.o cmd_triangle.o - -########################################################################## -# Optional driver files -########################################################################## - -# Chibi Light-Weight Wireless Stack (AT86RF212) -VPATH += drivers/rf/chibi -OBJS += chb.o chb_buf.o chb_drvr.o chb_eeprom.o chb_spi.o - -# 4K EEPROM -VPATH += drivers/storage/eeprom drivers/storage/eeprom/mcp24aa -OBJS += eeprom.o mcp24aa.o - -# LM75B temperature sensor -VPATH += drivers/sensors/lm75b -OBJS += lm75b.o - -# ISL12022M RTC -VPATH += drivers/rtc/isl12022m -OBJS += isl12022m.o - -# TFT LCD support -VPATH += drivers/displays/tft drivers/displays/tft/hw -OBJS += drawing.o touchscreen.o colors.o theme.o bmp.o - -# GUI Controls -VPATH += drivers/displays/tft/controls -OBJS += button.o hsbchart.o huechart.o label.o -OBJS += labelcentered.o progressbar.o - -# Bitmap (non-AA) fonts -VPATH += drivers/displays/tft/fonts -OBJS += fonts.o -OBJS += dejavusans9.o dejavusansbold9.o dejavusanscondensed9.o -OBJS += dejavusansmono8.o dejavusansmonobold8.o -OBJS += verdana9.o verdana14.o verdanabold14.o - -# Anti-aliased fonts -VPATH += drivers/displays/tft/aafonts/aa2 drivers/displays/tft/aafonts/aa4 -OBJS += aafonts.o -OBJS += DejaVuSansCondensed14_AA2.o DejaVuSansCondensedBold14_AA2.o -OBJS += DejaVuSansMono10_AA2.o DejaVuSansMono13_AA2.o DejaVuSansMono14_AA2.o - -# LCD Driver (Only one can be included at a time!) -# OBJS += hx8340b.o -OBJS += ILI9328.o -# OBJS += ILI9325.o -# OBJS += ssd1331.o -# OBJS += ssd1351.o -# OBJS += st7735.o -# OBJS += st7783.o - -# Bitmap/Monochrome LCD support (ST7565, SSD1306, etc.) -VPATH += drivers/displays -VPATH += drivers/displays/bitmap/sharpmem -VPATH += drivers/displays/bitmap/st7565 -VPATH += drivers/displays/bitmap/ssd1306 -OBJS += smallfonts.o sharpmem.o st7565.o ssd1306.o - -#Character Displays (VFD text displays, etc.) -VPATH += drivers/displays/character/samsung_20T202DA2JA -OBJS += samsung_20T202DA2JA.o - -# ChaN FatFS and SD card support -VPATH += drivers/fatfs -OBJS += ff.o mmc.o - -# Motors -VPATH += drivers/motor/stepper -OBJS += stepper.o - -# RSA Encryption/Descryption -VPATH += drivers/rsa -OBJS += rsa.o - -# DAC -VPATH += drivers/dac/mcp4725 -OBJS += mcp4725.o - -# RFID/NFC -VPATH += drivers/rf/pn532 drivers/rf/pn532/helpers -OBJS += pn532.o pn532_bus_i2c.o pn532_bus_uart.o -OBJS += pn532_mifare_classic.o pn532_mifare_ultralight.o - -# TAOS Light Sensors -VPATH += drivers/sensors/tcs3414 drivers/sensors/tsl2561 -OBJS += tcs3414.o tsl2561.o - -# SPI Flash -VPATH += drivers/storage/spiflash/w25q16bv -OBJS += w25q16bv.o - -# FM Radio -VPATH += drivers/audio/tea5767 -OBJS += tea5767.o - -########################################################################## -# Library files -########################################################################## - -VPATH += core core/adc core/cmd core/cpu core/gpio core/i2c core/pmu -VPATH += core/ssp core/systick core/timer16 core/timer32 core/uart -VPATH += core/usbhid-rom core/wdt core/usbcdc core/pwm core/iap -VPATH += core/libc -OBJS += stdio.o string.o -OBJS += adc.o cpu.o cmd.o gpio.o i2c.o pmu.o ssp.o systick.o timer16.o -OBJS += timer32.o uart.o uart_buf.o usbconfig.o usbhid.o -OBJS += wdt.o cdcuser.o cdc_buf.o usbcore.o usbdesc.o usbhw.o usbuser.o -OBJS += sysinit.o pwm.o iap.o - -########################################################################## -# GNU GCC compiler prefix and location -########################################################################## - -CROSS_COMPILE = arm-none-eabi- -AS = $(CROSS_COMPILE)gcc -CC = $(CROSS_COMPILE)gcc -LD = $(CROSS_COMPILE)gcc -SIZE = $(CROSS_COMPILE)size -OBJCOPY = $(CROSS_COMPILE)objcopy -OBJDUMP = $(CROSS_COMPILE)objdump -OUTFILE = firmware -LPCRC = ./lpcrc - -########################################################################## -# GNU GCC compiler flags -########################################################################## -ROOT_PATH = . -INCLUDE_PATHS = -I$(ROOT_PATH) -I$(ROOT_PATH)/project - -########################################################################## -# Startup files -########################################################################## - -LD_PATH = lpc1xxx -LD_SCRIPT = $(LD_PATH)/linkscript.ld -LD_TEMP = $(LD_PATH)/memory.ld - -ifeq (LPC11xx,$(TARGET)) - CORTEX_TYPE=m0 -else - CORTEX_TYPE=m3 -endif - -CPU_TYPE = cortex-$(CORTEX_TYPE) -VPATH += lpc1xxx -OBJS += $(TARGET)_handlers.o LPC1xxx_startup.o - -########################################################################## -# Compiler settings, parameters and flags -########################################################################## -ifeq (TRUE,$(DEBUGBUILD)) - CFLAGS = -c -g -O0 $(INCLUDE_PATHS) -Wall -mthumb -ffunction-sections -fdata-sections -fmessage-length=0 -mcpu=$(CPU_TYPE) -DTARGET=$(TARGET) -fno-builtin $(OPTDEFINES) - ASFLAGS = -c -g -O0 $(INCLUDE_PATHS) -Wall -mthumb -ffunction-sections -fdata-sections -fmessage-length=0 -mcpu=$(CPU_TYPE) -D__ASSEMBLY__ -x assembler-with-cpp -else - CFLAGS = -c -g -Os $(INCLUDE_PATHS) -Wall -mthumb -ffunction-sections -fdata-sections -fmessage-length=0 -mcpu=$(CPU_TYPE) -DTARGET=$(TARGET) -fno-builtin $(OPTDEFINES) - ASFLAGS = -c -g -Os $(INCLUDE_PATHS) -Wall -mthumb -ffunction-sections -fdata-sections -fmessage-length=0 -mcpu=$(CPU_TYPE) -D__ASSEMBLY__ -x assembler-with-cpp -endif - -LDFLAGS = -nostartfiles -mthumb -mcpu=$(CPU_TYPE) -Wl,--gc-sections -LDLIBS = -lm -OCFLAGS = --strip-unneeded - -all: firmware - -%.o : %.c - $(CC) $(CFLAGS) -o $@ $< - -%.o : %.s - $(AS) $(ASFLAGS) -o $@ $< - -firmware: $(OBJS) $(SYS_OBJS) - -@echo "MEMORY" > $(LD_TEMP) - -@echo "{" >> $(LD_TEMP) - -@echo " flash(rx): ORIGIN = 0x00000000, LENGTH = $(FLASH)" >> $(LD_TEMP) - -@echo " sram(rwx): ORIGIN = 0x10000000+$(SRAM_USB), LENGTH = $(SRAM)-$(SRAM_USB)" >> $(LD_TEMP) - -@echo "}" >> $(LD_TEMP) - -@echo "INCLUDE $(LD_SCRIPT)" >> $(LD_TEMP) - $(LD) $(LDFLAGS) -T $(LD_TEMP) -o $(OUTFILE).elf $(OBJS) $(LDLIBS) - -@echo "" - $(SIZE) $(OUTFILE).elf - -@echo "" - $(OBJCOPY) $(OCFLAGS) -O binary $(OUTFILE).elf $(OUTFILE).bin - $(OBJCOPY) $(OCFLAGS) -O binary $(OUTFILE).elf $(OUTFILE).bin - $(OBJCOPY) $(OCFLAGS) -O ihex $(OUTFILE).elf $(OUTFILE).hex - -@echo "" - $(LPCRC) firmware.bin - -clean: - rm -f $(OBJS) $(LD_TEMP) $(OUTFILE).elf $(OUTFILE).bin $(OUTFILE).hex +########################################################################## +# User configuration and firmware specific object files +########################################################################## + +# The target, flash and ram of the LPC1xxx microprocessor. +# Use for the target the value: LPC11xx, LPC13xx or LPC17xx +TARGET = LPC13xx +FLASH = 32K +SRAM = 8K + +# For USB HID support the LPC134x reserves 384 bytes from the sram, +# if you don't want to use the USB features, just use 0 here. +SRAM_USB = 384 + +VPATH = +OBJS = main.o + +########################################################################## +# Debug settings +########################################################################## + +# Set DEBUGBUILD to 'TRUE' for full debugging (larger, slower binaries), +# or to 'FALSE' for release builds (smallest, fastest binaries) +DEBUGBUILD = FALSE + +########################################################################## +# IDE Flags (Keeps various IDEs happy) +########################################################################## + +OPTDEFINES = -D __NEWLIB__ + +########################################################################## +# Project-specific files +########################################################################## + +VPATH += project +OBJS += commands.o + +VPATH += project/commands +OBJS += cmd_chibi_addr.o cmd_chibi_tx.o +OBJS += cmd_i2ceeprom_read.o cmd_i2ceeprom_write.o cmd_lm75b_gettemp.o +OBJS += cmd_reset.o cmd_sd_dir.o cmd_sysinfo.o cmd_uart.o +OBJS += cmd_roundedcorner.o cmd_pwm.o + +VPATH += project/commands/drawing +OBJS += cmd_backlight.o cmd_bmp.o cmd_button.o cmd_calibrate.o +OBJS += cmd_circle.o cmd_clear.o cmd_line.o cmd_orientation.o +OBJS += cmd_pixel.o cmd_progress.o cmd_rectangle.o cmd_text.o +OBJS += cmd_textw.o cmd_tsthreshhold.o cmd_tswait.o cmd_triangle.o + +########################################################################## +# Optional driver files +########################################################################## + +# Chibi Light-Weight Wireless Stack (AT86RF212) +VPATH += drivers/rf/chibi +OBJS += chb.o chb_buf.o chb_drvr.o chb_eeprom.o chb_spi.o + +# 4K EEPROM +VPATH += drivers/storage/eeprom drivers/storage/eeprom/mcp24aa +OBJS += eeprom.o mcp24aa.o + +# LM75B temperature sensor +VPATH += drivers/sensors/lm75b +OBJS += lm75b.o + +# ISL12022M RTC +VPATH += drivers/rtc/isl12022m +OBJS += isl12022m.o + +# TFT LCD support +VPATH += drivers/displays/tft drivers/displays/tft/hw +OBJS += drawing.o touchscreen.o colors.o theme.o bmp.o + +# GUI Controls +VPATH += drivers/displays/tft/controls +OBJS += button.o hsbchart.o huechart.o label.o +OBJS += labelcentered.o progressbar.o + +# Bitmap (non-AA) fonts +VPATH += drivers/displays/tft/fonts +OBJS += fonts.o +OBJS += dejavusans9.o dejavusansbold9.o dejavusanscondensed9.o +OBJS += dejavusansmono8.o dejavusansmonobold8.o +OBJS += verdana9.o verdana14.o verdanabold14.o + +# Anti-aliased fonts +VPATH += drivers/displays/tft/aafonts/aa2 drivers/displays/tft/aafonts/aa4 +OBJS += aafonts.o +OBJS += DejaVuSansCondensed14_AA2.o DejaVuSansCondensedBold14_AA2.o +OBJS += DejaVuSansMono10_AA2.o DejaVuSansMono13_AA2.o DejaVuSansMono14_AA2.o + +# LCD Driver (Only one can be included at a time!) +# OBJS += hx8340b.o +OBJS += ILI9328.o +# OBJS += ILI9325.o +# OBJS += ssd1331.o +# OBJS += ssd1351.o +# OBJS += st7735.o +# OBJS += st7783.o + +# Bitmap/Monochrome LCD support (ST7565, SSD1306, etc.) +VPATH += drivers/displays +VPATH += drivers/displays/bitmap/sharpmem +VPATH += drivers/displays/bitmap/st7565 +VPATH += drivers/displays/bitmap/ssd1306 +OBJS += smallfonts.o sharpmem.o st7565.o ssd1306.o + +#Character Displays (VFD text displays, etc.) +VPATH += drivers/displays/character/samsung_20T202DA2JA +OBJS += samsung_20T202DA2JA.o + +# ChaN FatFS and SD card support +VPATH += drivers/fatfs +OBJS += ff.o mmc.o + +# Motors +VPATH += drivers/motor/stepper +OBJS += stepper.o + +# RSA Encryption/Descryption +VPATH += drivers/rsa +OBJS += rsa.o + +# DAC +VPATH += drivers/dac/mcp4725 drivers/dac/mcp4901 +OBJS += mcp4725.o mcp4901.o + +# RFID/NFC +VPATH += drivers/rf/pn532 drivers/rf/pn532/helpers +OBJS += pn532.o pn532_bus_i2c.o pn532_bus_uart.o +OBJS += pn532_mifare_classic.o pn532_mifare_ultralight.o + +# TAOS Light Sensors +VPATH += drivers/sensors/tcs3414 drivers/sensors/tsl2561 +OBJS += tcs3414.o tsl2561.o + +# SPI Flash +VPATH += drivers/storage/spiflash/w25q16bv +OBJS += w25q16bv.o + +# FM Radio +VPATH += drivers/audio/tea5767 +OBJS += tea5767.o + +########################################################################## +# Library files +########################################################################## + +VPATH += core core/adc core/cmd core/cpu core/gpio core/i2c core/pmu +VPATH += core/ssp core/systick core/timer16 core/timer32 core/uart +VPATH += core/usbhid-rom core/wdt core/usbcdc core/pwm core/iap +VPATH += core/libc +OBJS += stdio.o string.o +OBJS += adc.o cpu.o cmd.o gpio.o i2c.o pmu.o ssp.o systick.o timer16.o +OBJS += timer32.o uart.o uart_buf.o usbconfig.o usbhid.o +OBJS += wdt.o cdcuser.o cdc_buf.o usbcore.o usbdesc.o usbhw.o usbuser.o +OBJS += sysinit.o pwm.o iap.o + +########################################################################## +# GNU GCC compiler prefix and location +########################################################################## + +CROSS_COMPILE = arm-none-eabi- +AS = $(CROSS_COMPILE)gcc +CC = $(CROSS_COMPILE)gcc +LD = $(CROSS_COMPILE)gcc +SIZE = $(CROSS_COMPILE)size +OBJCOPY = $(CROSS_COMPILE)objcopy +OBJDUMP = $(CROSS_COMPILE)objdump +OUTFILE = firmware +LPCRC = ./lpcrc + +########################################################################## +# GNU GCC compiler flags +########################################################################## +ROOT_PATH = . +INCLUDE_PATHS = -I$(ROOT_PATH) -I$(ROOT_PATH)/project + +########################################################################## +# Startup files +########################################################################## + +LD_PATH = lpc1xxx +LD_SCRIPT = $(LD_PATH)/linkscript.ld +LD_TEMP = $(LD_PATH)/memory.ld + +ifeq (LPC11xx,$(TARGET)) + CORTEX_TYPE=m0 +else + CORTEX_TYPE=m3 +endif + +CPU_TYPE = cortex-$(CORTEX_TYPE) +VPATH += lpc1xxx +OBJS += $(TARGET)_handlers.o LPC1xxx_startup.o + +########################################################################## +# Compiler settings, parameters and flags +########################################################################## +ifeq (TRUE,$(DEBUGBUILD)) + CFLAGS = -c -g -O0 $(INCLUDE_PATHS) -Wall -mthumb -ffunction-sections -fdata-sections -fmessage-length=0 -mcpu=$(CPU_TYPE) -DTARGET=$(TARGET) -fno-builtin $(OPTDEFINES) + ASFLAGS = -c -g -O0 $(INCLUDE_PATHS) -Wall -mthumb -ffunction-sections -fdata-sections -fmessage-length=0 -mcpu=$(CPU_TYPE) -D__ASSEMBLY__ -x assembler-with-cpp +else + CFLAGS = -c -g -Os $(INCLUDE_PATHS) -Wall -mthumb -ffunction-sections -fdata-sections -fmessage-length=0 -mcpu=$(CPU_TYPE) -DTARGET=$(TARGET) -fno-builtin $(OPTDEFINES) + ASFLAGS = -c -g -Os $(INCLUDE_PATHS) -Wall -mthumb -ffunction-sections -fdata-sections -fmessage-length=0 -mcpu=$(CPU_TYPE) -D__ASSEMBLY__ -x assembler-with-cpp +endif + +LDFLAGS = -nostartfiles -mthumb -mcpu=$(CPU_TYPE) -Wl,--gc-sections +LDLIBS = -lm +OCFLAGS = --strip-unneeded + +all: firmware + +%.o : %.c + $(CC) $(CFLAGS) -o $@ $< + +%.o : %.s + $(AS) $(ASFLAGS) -o $@ $< + +firmware: $(OBJS) $(SYS_OBJS) + -@echo "MEMORY" > $(LD_TEMP) + -@echo "{" >> $(LD_TEMP) + -@echo " flash(rx): ORIGIN = 0x00000000, LENGTH = $(FLASH)" >> $(LD_TEMP) + -@echo " sram(rwx): ORIGIN = 0x10000000+$(SRAM_USB), LENGTH = $(SRAM)-$(SRAM_USB)" >> $(LD_TEMP) + -@echo "}" >> $(LD_TEMP) + -@echo "INCLUDE $(LD_SCRIPT)" >> $(LD_TEMP) + $(LD) $(LDFLAGS) -T $(LD_TEMP) -o $(OUTFILE).elf $(OBJS) $(LDLIBS) + -@echo "" + $(SIZE) $(OUTFILE).elf + -@echo "" + $(OBJCOPY) $(OCFLAGS) -O binary $(OUTFILE).elf $(OUTFILE).bin + $(OBJCOPY) $(OCFLAGS) -O binary $(OUTFILE).elf $(OUTFILE).bin + $(OBJCOPY) $(OCFLAGS) -O ihex $(OUTFILE).elf $(OUTFILE).hex + -@echo "" + $(LPCRC) firmware.bin + +clean: + rm -f $(OBJS) $(LD_TEMP) $(OUTFILE).elf $(OUTFILE).bin $(OUTFILE).hex diff --git a/drivers/dac/mcp4901/mcp4901.c b/drivers/dac/mcp4901/mcp4901.c new file mode 100644 index 0000000..faed8bd --- /dev/null +++ b/drivers/dac/mcp4901/mcp4901.c @@ -0,0 +1,127 @@ +/**************************************************************************/ +/*! + @file mcp4901.c + @author Tauon + + @section LICENSE + + Software License Agreement (BSD License) + + Copyright (c) 2012, Tauon + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holders nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/**************************************************************************/ +#include "mcp4901.h" + +#define DAC_BUF 0 +#define DAC_GA 1 +#define DAC_SHDN 1 +#define DAC_BITS8 + +uint16_t settings; + +// Control pins +#define MCP4901_GPIODATAREG (*(pREG32 (0x50023FFC))) // GPIO2DATA +#define MCP4901_PORT (2) + +#define MCP4901_LDAC (0) +#define MCP4901_CS_PIN (6) +#define MCP4901_SCL_PIN (7) +#define MCP4901_SDI_PIN (8) + +// Macros for control line state +#define CLR_SDI do { MCP4901_GPIODATAREG &= ~(1<>8) & 0xFF); + mcpWriteData(data & 0xFF); +} + +void mcp4901Init() +{ + settings = (DAC_BUF << 2 | DAC_GA << 1 | DAC_SHDN) << 12; + gpioSetDir(MCP4901_PORT, MCP4901_LDAC , gpioDirection_Output); + gpioSetDir(MCP4901_PORT, MCP4901_CS_PIN , gpioDirection_Output); + gpioSetDir(MCP4901_PORT, MCP4901_SCL_PIN, gpioDirection_Output); + gpioSetDir(MCP4901_PORT, MCP4901_SDI_PIN, gpioDirection_Output); +} +void mcp4901ChangeSettings(bool BUFFER, bool GAIN, bool SHUTDOWN) +{ + settings = (BUFFER << 2 | GAIN << 1 | (!SHUTDOWN)) << 12; +} +void mcp4901LDAC(void) +{ + gpioSetValue(MCP4901_PORT,MCP4901_LDAC,0); + gpioSetValue(MCP4901_PORT,MCP4901_LDAC,1); +} +void mcp4901SetVoltage( uint8_t output) +{ + uint16_t data; + #ifdef DAC_BITS8 + data = settings | (output << 4); + #endif + + #ifdef DAC_BITS10 + data = settings | (output << 2); + #endif + + #ifdef DAC_BITS12 + data = settings | output; + #endif + CLR_CS; + mcpWriteData16(data); + SET_CS; +} + + diff --git a/drivers/dac/mcp4901/mcp4901.h b/drivers/dac/mcp4901/mcp4901.h new file mode 100644 index 0000000..930e3bf --- /dev/null +++ b/drivers/dac/mcp4901/mcp4901.h @@ -0,0 +1,48 @@ +/**************************************************************************/ +/*! + @file mcp4901.h + @author Tauon + + @section LICENSE + + Software License Agreement (BSD License) + + Copyright (c) 2012, Tauon + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holders nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/**************************************************************************/ + +#ifndef _MCP4901_H_ +#define _MCP4901_H_ + +#include "projectconfig.h" +#include "core/gpio/gpio.h" + +void mcp4901Init(void); +void mcp4901SetVoltage( uint8_t output); +void mcp4901LDAC(void); +void mcp4901ChangeSettings(bool BUFFER, bool GAIN, bool SHUTDOWN); + +#endif -- 2.20.1