Загрузка данных


#include "MDR32F9Qx_config.h"
#include "MDR32Fx.h"
#include "MDR32F9Qx_port.h"
#include "MDR32F9Qx_rst_clk.h"
#include "MDR32F9Qx_adc.h"
#include "MDR32F9Qx_uart.h"
#include <stdint.h>

static PORT_InitTypeDef PortInit;
static UART_InitTypeDef UART_InitStructure;
static ADC_InitTypeDef sADC;
static ADCx_InitTypeDef sADCx;

volatile uint32_t delay_dec = 0;

void SysTick_Handler(void)
{
    if (delay_dec != 0)
    {
        delay_dec--;
    }
}

void delay_ms(uint32_t delay_ms_value)
{
    delay_dec = delay_ms_value;

    while (delay_dec != 0)
    {
    }
}

void init_delay(void)
{
    SysTick->LOAD = (8000000 / 1000) - 1;
    SysTick->VAL = 0;
    SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
                    SysTick_CTRL_TICKINT_Msk |
                    SysTick_CTRL_ENABLE_Msk;
}

void init_UART2(void)
{
    RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTF, ENABLE);
    RST_CLK_PCLKcmd(RST_CLK_PCLK_UART2, ENABLE);

    PortInit.PORT_PULL_UP   = PORT_PULL_UP_OFF;
    PortInit.PORT_PULL_DOWN = PORT_PULL_DOWN_OFF;
    PortInit.PORT_PD_SHM    = PORT_PD_SHM_OFF;
    PortInit.PORT_PD        = PORT_PD_DRIVER;
    PortInit.PORT_GFEN      = PORT_GFEN_OFF;
    PortInit.PORT_FUNC      = PORT_FUNC_ALTER;
    PortInit.PORT_SPEED     = PORT_SPEED_MAXFAST;
    PortInit.PORT_MODE      = PORT_MODE_DIGITAL;

    PortInit.PORT_OE  = PORT_OE_OUT;
    PortInit.PORT_Pin = PORT_Pin_1;
    PORT_Init(MDR_PORTF, &PortInit);

    PortInit.PORT_OE  = PORT_OE_IN;
    PortInit.PORT_Pin = PORT_Pin_0;
    PORT_Init(MDR_PORTF, &PortInit);

    RST_CLK_CPU_PLLconfig(RST_CLK_CPU_PLLsrcHSIdiv2, 0);

    UART_BRGInit(MDR_UART2, UART_HCLKdiv1);

    UART_InitStructure.UART_BaudRate = 57600;
    UART_InitStructure.UART_WordLength = UART_WordLength8b;
    UART_InitStructure.UART_StopBits = UART_StopBits1;
    UART_InitStructure.UART_Parity = UART_Parity_No;
    UART_InitStructure.UART_FIFOMode = UART_FIFO_ON;
    UART_InitStructure.UART_HardwareFlowControl =
        UART_HardwareFlowControl_RXE | UART_HardwareFlowControl_TXE;

    UART_Init(MDR_UART2, &UART_InitStructure);
    UART_Cmd(MDR_UART2, ENABLE);
}

void init_ADC(void)
{
    RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTD, ENABLE);
    RST_CLK_PCLKcmd(RST_CLK_PCLK_ADC, ENABLE);

    PortInit.PORT_PULL_UP   = PORT_PULL_UP_OFF;
    PortInit.PORT_PULL_DOWN = PORT_PULL_DOWN_OFF;
    PortInit.PORT_PD_SHM    = PORT_PD_SHM_OFF;
    PortInit.PORT_PD        = PORT_PD_DRIVER;
    PortInit.PORT_GFEN      = PORT_GFEN_OFF;
    PortInit.PORT_FUNC      = PORT_FUNC_PORT;
    PortInit.PORT_SPEED     = PORT_SPEED_FAST;
    PortInit.PORT_MODE      = PORT_MODE_ANALOG;
    PortInit.PORT_OE        = PORT_OE_IN;
    PortInit.PORT_Pin       = PORT_Pin_2;

    PORT_Init(MDR_PORTD, &PortInit);

    sADC.ADC_SynchronousMode = ADC_SyncMode_Independent;
    sADC.ADC_StartDelay = 0;
    sADC.ADC_IntVRefTrimming = 1;

    ADC_Init(&sADC);

    sADCx.ADC_ClockSource = ADC_CLOCK_SOURCE_CPU;
    sADCx.ADC_SamplingMode = ADC_SAMPLING_MODE_CICLIC_CONV;
    sADCx.ADC_ChannelSwitching = ADC_CH_SWITCHING_Disable;
    sADCx.ADC_ChannelNumber = ADC_CH_ADC2;
    sADCx.ADC_Channels = 0;
    sADCx.ADC_LevelControl = ADC_LEVEL_CONTROL_Disable;
    sADCx.ADC_LowLevel = 0;
    sADCx.ADC_HighLevel = 0;
    sADCx.ADC_VRefSource = ADC_VREF_SOURCE_INTERNAL;
    sADCx.ADC_IntVRefSource = ADC_INT_VREF_SOURCE_INEXACT;
    sADCx.ADC_Prescaler = ADC_CLK_div_512;
    sADCx.ADC_DelayGo = 7;

    ADC1_Init(&sADCx);
    ADC1_Cmd(ENABLE);
    ADC1_Start();
}

void UART2_SendByte(uint8_t data)
{
    while (UART_GetFlagStatus(MDR_UART2, UART_FLAG_BUSY))
    {
    }

    UART_SendData(MDR_UART2, data);
}

int main(void)
{
    uint16_t adc_value = 0;

    init_delay();
    init_UART2();
    init_ADC();

    while (1)
    {
        adc_value = MDR_ADC->ADC1_RESULT & 0x0FFF;

        UART2_SendByte((uint8_t)(adc_value >> 8));
        UART2_SendByte((uint8_t)(adc_value & 0xFF));

        delay_ms(500);
    }
}