Ryo Od
/
Nucleo-F767_DCO_Test01
Nucleo-F767 DCO Test 01
main.cpp@2:4834d4483ea6, 2018-07-23 (annotated)
- Committer:
- ryood
- Date:
- Mon Jul 23 17:34:47 2018 +0000
- Revision:
- 2:4834d4483ea6
- Parent:
- 1:4fc93890f58e
- Child:
- 3:19bb7c30c354
use the 32k wave table
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ryood | 0:000c6506ff90 | 1 | /* |
ryood | 0:000c6506ff90 | 2 | Nucleo F767 DCO |
ryood | 0:000c6506ff90 | 3 | 2018.07.22 |
ryood | 0:000c6506ff90 | 4 | |
ryood | 0:000c6506ff90 | 5 | */ |
ryood | 0:000c6506ff90 | 6 | #include "mbed.h" |
ryood | 0:000c6506ff90 | 7 | |
ryood | 2:4834d4483ea6 | 8 | #include "wavetable_12bit_32k.h" |
ryood | 2:4834d4483ea6 | 9 | #define COUNT_OF_ENTRIES (32768) |
ryood | 0:000c6506ff90 | 10 | |
ryood | 0:000c6506ff90 | 11 | #define PIN_CHECK (1) |
ryood | 0:000c6506ff90 | 12 | #define UART_TRACE (0) |
ryood | 0:000c6506ff90 | 13 | #define TITLE_STR1 ("Nucleo F767 DCO") |
ryood | 0:000c6506ff90 | 14 | #define TITLE_STR2 ("20180724") |
ryood | 0:000c6506ff90 | 15 | |
ryood | 0:000c6506ff90 | 16 | // Pin Assign |
ryood | 0:000c6506ff90 | 17 | AnalogOut Dac1(PA_4); |
ryood | 0:000c6506ff90 | 18 | AnalogOut Dac2(PA_5); |
ryood | 0:000c6506ff90 | 19 | |
ryood | 0:000c6506ff90 | 20 | #if (PIN_CHECK) |
ryood | 0:000c6506ff90 | 21 | DigitalOut CheckPin(D4); |
ryood | 0:000c6506ff90 | 22 | #endif |
ryood | 0:000c6506ff90 | 23 | |
ryood | 0:000c6506ff90 | 24 | // Parameter |
ryood | 1:4fc93890f58e | 25 | double drate = 1000.0; // initial output rate (Hz) |
ryood | 1:4fc93890f58e | 26 | const double refclk = 200000; // Hz |
ryood | 0:000c6506ff90 | 27 | |
ryood | 0:000c6506ff90 | 28 | // Interruput |
ryood | 0:000c6506ff90 | 29 | Ticker ticker; |
ryood | 0:000c6506ff90 | 30 | |
ryood | 0:000c6506ff90 | 31 | // DDS |
ryood | 0:000c6506ff90 | 32 | volatile uint32_t phaccu; |
ryood | 0:000c6506ff90 | 33 | volatile uint32_t tword_m; |
ryood | 0:000c6506ff90 | 34 | |
ryood | 0:000c6506ff90 | 35 | //------------------------------------------------------------------------------------------------- |
ryood | 0:000c6506ff90 | 36 | // Interrupt Service Routine |
ryood | 0:000c6506ff90 | 37 | // |
ryood | 0:000c6506ff90 | 38 | |
ryood | 0:000c6506ff90 | 39 | // param |
ryood | 0:000c6506ff90 | 40 | // val: 0 .. 4095 |
ryood | 0:000c6506ff90 | 41 | void InternalDacWrite(uint16_t val) |
ryood | 0:000c6506ff90 | 42 | { |
ryood | 0:000c6506ff90 | 43 | // avoid distortion of built-in DAC |
ryood | 0:000c6506ff90 | 44 | uint16_t v = ((val + 1024) << 3); |
ryood | 0:000c6506ff90 | 45 | |
ryood | 0:000c6506ff90 | 46 | Dac2.write_u16(v); |
ryood | 0:000c6506ff90 | 47 | } |
ryood | 0:000c6506ff90 | 48 | |
ryood | 0:000c6506ff90 | 49 | void update() |
ryood | 0:000c6506ff90 | 50 | { |
ryood | 0:000c6506ff90 | 51 | #if (PIN_CHECK) |
ryood | 0:000c6506ff90 | 52 | CheckPin.write(1); |
ryood | 0:000c6506ff90 | 53 | #endif |
ryood | 0:000c6506ff90 | 54 | |
ryood | 0:000c6506ff90 | 55 | phaccu = phaccu + tword_m; |
ryood | 2:4834d4483ea6 | 56 | uint16_t idx = phaccu >> 17; // use upper 15 bits |
ryood | 0:000c6506ff90 | 57 | |
ryood | 2:4834d4483ea6 | 58 | InternalDacWrite(sin_12bit_32k[idx]); |
ryood | 0:000c6506ff90 | 59 | |
ryood | 0:000c6506ff90 | 60 | #if (PIN_CHECK) |
ryood | 0:000c6506ff90 | 61 | CheckPin.write(0); |
ryood | 0:000c6506ff90 | 62 | #endif |
ryood | 0:000c6506ff90 | 63 | } |
ryood | 0:000c6506ff90 | 64 | |
ryood | 0:000c6506ff90 | 65 | //------------------------------------------------------------------------------------------------- |
ryood | 0:000c6506ff90 | 66 | // Main routine |
ryood | 0:000c6506ff90 | 67 | // |
ryood | 0:000c6506ff90 | 68 | |
ryood | 0:000c6506ff90 | 69 | int main() |
ryood | 0:000c6506ff90 | 70 | { |
ryood | 0:000c6506ff90 | 71 | tword_m = pow(2.0, 32) * drate / refclk; // calculate DDS tuning word; |
ryood | 0:000c6506ff90 | 72 | |
ryood | 0:000c6506ff90 | 73 | float interruptPeriodUs = 1000000.0 / refclk; |
ryood | 0:000c6506ff90 | 74 | ticker.attach_us(&update, interruptPeriodUs); |
ryood | 0:000c6506ff90 | 75 | |
ryood | 0:000c6506ff90 | 76 | while (1) { |
ryood | 0:000c6506ff90 | 77 | } |
ryood | 0:000c6506ff90 | 78 | } |
ryood | 0:000c6506ff90 | 79 |