Chirp Signal Generator

Dependencies:   mbed

Fork of TAU_ZOOLOG_Playback_Rev1_1 by Yossi_Students

main.cpp

Committer:
Arkadi
Date:
2017-08-21
Revision:
16:8274b4ad84ee
Parent:
main_filter3.cpp@ 13:24d8512fc722
Child:
17:c0c17da42990

File content as of revision 16:8274b4ad84ee:

/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Generate Chirp Signal - 21/08/2017    %
% Arkadi Rafalovich - % Arkadiraf@gmail.com         %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Pinout:
DAC -- PA_4 -- A2

I/O -- PA_5 -- D13 (Status LED, Condition)
I/O -- PA_6 -- D12 (Toggle Pin, Loop Freq)

*/
#include "mbed.h"
#include "chirp.h"

// Serial over USB as input device
Serial pc(SERIAL_TX, SERIAL_RX);

// mbed variables, Settings
AnalogOut out(PA_4);

// digital pins
DigitalOut led(LED1);
DigitalOut outPulse(PA_6); // Toggle pin, Loop Freq

// User Button as interrupt
DigitalIn mybutton(USER_BUTTON);

//DAC declarations
DAC_HandleTypeDef hdac1;

// Dac Register for direct method of setting DAC value`s
__IO uint32_t Dac_Reg = 0;

// Variables
bool toggle_state=0;

// nop operation
inline void NOP()
{
    __ASM volatile ("nop");    // one tick operation, Use to adjust frequency by slowing down the proccess
}

/* DAC1 init function */
void DAC1_Init(void);

// Main procedure
int main()
{
    DAC1_Init();

    HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);

    // define Dac Register for direct method of setting DAC value`s
    Dac_Reg = (uint32_t) (hdac1.Instance);
    Dac_Reg += __HAL_DHR12R1_ALIGNEMENT(DAC_ALIGN_12B_R);

    // set outputs
    outPulse.write(0);
    led.write(0);
    // Output value using DAC
    // HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, ADCValueOut);
    *(__IO uint32_t *) Dac_Reg = (uint16_t)(4095/2);

    // Infinite loop
    while(true) {
        if (mybutton.read()==0) { // if button pressed, generate pulse out
            led.write(1);
            wait(0.005);
            // generate chirp out
            for (int ii=0; ii<NUM_SAMPLES; ii++) {
                // toogle io for loop frequency
                toggle_state=!toggle_state;
                outPulse.write(toggle_state);
                // generate delay for 1MHz Sample rate
                for (int jj=0; jj<32; jj++) {
                    NOP();
                }
                NOP();
                NOP();
                NOP();
                NOP();
                // Output value using DAC
                // HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, ADCValueOut);
                *(__IO uint32_t *) Dac_Reg = chirpData[ii];
            }
            // Output value using DAC
            // HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, ADCValueOut);
            *(__IO uint32_t *) Dac_Reg = (uint16_t)(4095/2);
            led.write(0);
            wait(1);
        } // end button press
        led.write(0);
    }// end while(True)
}


// init dac

/* DAC1 init function */
void DAC1_Init(void)
{
    DAC_ChannelConfTypeDef sConfig;

    // DAC Initialization
    hdac1.Instance = DAC;
    if(HAL_DAC_Init(&hdac1) != HAL_OK) {
        printf("!!! Error in DAC initialization !!!\n");
    }

    // DAC channel OUT1 config
    sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
    sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
    if (HAL_DAC_ConfigChannel(&hdac1, &sConfig, DAC_CHANNEL_1) != HAL_OK) {
        printf("!!! Error in DAC channel initialization !!!\n");
    }
}