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.
DMAFuncGen.h@0:337ad0fe7734, 2013-12-29 (annotated)
- Committer:
- Mischa
- Date:
- Sun Dec 29 01:00:30 2013 +0000
- Revision:
- 0:337ad0fe7734
First version.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Mischa | 0:337ad0fe7734 | 1 | #ifndef MBED_DMAFUNCGEN_H |
| Mischa | 0:337ad0fe7734 | 2 | #define MBED_DMAFUNCGEN_H |
| Mischa | 0:337ad0fe7734 | 3 | |
| Mischa | 0:337ad0fe7734 | 4 | #include "mbed.h" |
| Mischa | 0:337ad0fe7734 | 5 | #include "MODDMA.h" |
| Mischa | 0:337ad0fe7734 | 6 | |
| Mischa | 0:337ad0fe7734 | 7 | //! DMAFuncGen class generates a waveform on Analog output using Direct Memory Access alone. |
| Mischa | 0:337ad0fe7734 | 8 | class DMAFuncGen { |
| Mischa | 0:337ad0fe7734 | 9 | public: |
| Mischa | 0:337ad0fe7734 | 10 | /// Create DMAFucGen instance |
| Mischa | 0:337ad0fe7734 | 11 | /// @param dma The dma to use. |
| Mischa | 0:337ad0fe7734 | 12 | /// @param channel The dma channel to use for transferring data to the D/A converter. |
| Mischa | 0:337ad0fe7734 | 13 | DMAFuncGen(MODDMA& dma, MODDMA::CHANNELS channel); |
| Mischa | 0:337ad0fe7734 | 14 | |
| Mischa | 0:337ad0fe7734 | 15 | /// Number of data points in the waveform. Must be set by client. |
| Mischa | 0:337ad0fe7734 | 16 | int buffer_size; |
| Mischa | 0:337ad0fe7734 | 17 | /// Buffer for the binary data that will be transferred by DMA. Must be allocated by client. |
| Mischa | 0:337ad0fe7734 | 18 | uint32_t* buffer; |
| Mischa | 0:337ad0fe7734 | 19 | |
| Mischa | 0:337ad0fe7734 | 20 | /// Set waveform value for a specified data point. |
| Mischa | 0:337ad0fe7734 | 21 | /// @param idx The index of the data point in #buffer, must be in range 0..#buffer_size-1. |
| Mischa | 0:337ad0fe7734 | 22 | /// @param x The value for the D/A, in the range 0..65535. |
| Mischa | 0:337ad0fe7734 | 23 | void set(int idx, uint16_t x); |
| Mischa | 0:337ad0fe7734 | 24 | /// Get waveform value for a specified data point |
| Mischa | 0:337ad0fe7734 | 25 | /// @param idx The index of the data point in the #buffer, in the range 0..#buffer_size-1. |
| Mischa | 0:337ad0fe7734 | 26 | /// @returns The value for the data point, in the range 0..65535. |
| Mischa | 0:337ad0fe7734 | 27 | uint16_t operator[](const uint16_t idx); |
| Mischa | 0:337ad0fe7734 | 28 | |
| Mischa | 0:337ad0fe7734 | 29 | /// Connect the D/A converter pin (enable output) |
| Mischa | 0:337ad0fe7734 | 30 | void Connect(); |
| Mischa | 0:337ad0fe7734 | 31 | /// Disconnect the D/A converter pin (pin becomes tri-state) |
| Mischa | 0:337ad0fe7734 | 32 | void Disconnect(); |
| Mischa | 0:337ad0fe7734 | 33 | |
| Mischa | 0:337ad0fe7734 | 34 | /// Reference to the DMA instance |
| Mischa | 0:337ad0fe7734 | 35 | MODDMA& dma; |
| Mischa | 0:337ad0fe7734 | 36 | |
| Mischa | 0:337ad0fe7734 | 37 | /// Set up the dma. |
| Mischa | 0:337ad0fe7734 | 38 | /// Must set #buffer and #buffer_size first. |
| Mischa | 0:337ad0fe7734 | 39 | void Setup(void); |
| Mischa | 0:337ad0fe7734 | 40 | |
| Mischa | 0:337ad0fe7734 | 41 | /// Set waveform frequency |
| Mischa | 0:337ad0fe7734 | 42 | /// @note Must set #buffer_size first. |
| Mischa | 0:337ad0fe7734 | 43 | /// @param f Frequency of a complete cycle of the waveform (in Hz). |
| Mischa | 0:337ad0fe7734 | 44 | void SetFrequency(float f); |
| Mischa | 0:337ad0fe7734 | 45 | /// Read the actual waveform frequency that will be generated. |
| Mischa | 0:337ad0fe7734 | 46 | float Frequency(); |
| Mischa | 0:337ad0fe7734 | 47 | |
| Mischa | 0:337ad0fe7734 | 48 | /// Start generating the waveform (start dma) |
| Mischa | 0:337ad0fe7734 | 49 | void Start(); |
| Mischa | 0:337ad0fe7734 | 50 | /// Stop generating the waveform (but waits for the current cycle to complete) |
| Mischa | 0:337ad0fe7734 | 51 | void Stop(); |
| Mischa | 0:337ad0fe7734 | 52 | |
| Mischa | 0:337ad0fe7734 | 53 | private: |
| Mischa | 0:337ad0fe7734 | 54 | MODDMA_Config conf; |
| Mischa | 0:337ad0fe7734 | 55 | MODDMA_LLI lli; |
| Mischa | 0:337ad0fe7734 | 56 | |
| Mischa | 0:337ad0fe7734 | 57 | /// ISR routine, called on Terminal Count |
| Mischa | 0:337ad0fe7734 | 58 | void TC_callback(void); |
| Mischa | 0:337ad0fe7734 | 59 | /// ISR routine, called on dma ERRor |
| Mischa | 0:337ad0fe7734 | 60 | void ERR_callback(void); |
| Mischa | 0:337ad0fe7734 | 61 | }; |
| Mischa | 0:337ad0fe7734 | 62 | |
| Mischa | 0:337ad0fe7734 | 63 | #endif |