00001
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 #ifndef _DAC_H_
00049 #define _DAC_H_
00050
00051 #ifdef __GNUC__
00052 #include <avr32/io.h>
00053 #elif __ICCAVR32__
00054 #include <avr32/ioap7000.h>
00055 #else
00056 #error No known compiler used
00057 #endif
00058
00059 #ifdef __AVR32_AP7000__
00060
00061 #define ABDAC_TIMEOUT 5000
00062
00063 #define ABDAC_GCLK 6
00064 #else
00065 #error No GCLK, DMA handshake and DMA channel defined for ABDAC on this device
00066 #endif
00067
00068 enum {
00069 EINVAL = 22,
00070 ETIMEOUT,
00071 };
00072
00073 void abdac_enable(volatile avr32_abdac_t *abdac);
00074 void abdac_disable(volatile avr32_abdac_t *abdac);
00075
00076 unsigned long abdac_set_dac_hz(volatile avr32_abdac_t *abdac,
00077 const unsigned long bus_hz, const unsigned long dac_hz);
00078 unsigned long abdac_get_dac_hz(volatile avr32_abdac_t *abdac,
00079 const unsigned long bus_hz);
00080
00081 int abdac_sink(volatile avr32_abdac_t *abdac,
00082 const unsigned short ch0, const unsigned short ch1);
00083
00085 #define ABDAC_BIT(name) \
00086 (1 << AVR32_ABDAC_##name##_OFFSET)
00087
00088 #define ABDAC_BF(name, value) \
00089 (((value) & ((1 << AVR32_ABDAC_##name##_SIZE) - 1)) \
00090 << AVR32_ABDAC_##name##_OFFSET)
00091
00092 #define GCLK_BIT(name) \
00093 (1 << AVR32_PM_GCCTRL0_##name##_OFFSET)
00094
00095 #define GCLK_BF(name, value) \
00096 (((value) & ((1 << AVR32_PM_GCCTRL0_##name##_SIZE) - 1))\
00097 << AVR32_PM_GCCTRL0_##name##_OFFSET)
00098
00099 #define GCLK_BFEXT(name, value) \
00100 (((value) >> AVR32_PM_GCCTRL0_##name##_OFFSET) \
00101 & ((1 << AVR32_PM_GCCTRL0_##name##_SIZE) - 1))
00102
00103 #endif