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


#include "MDR32F9Qx_config.h"
#include "MDR32Fx.h"
#include "MDR32F9Qx_uart.h"
#include "MDR32F9Qx_port.h"
#include "MDR32F9Qx_rst_clk.h"

#define LED1 PORT_Pin_0
#define LED2 PORT_Pin_1

static PORT_InitTypeDef PortInit;
static UART_InitTypeDef UART_InitStructure;

volatile uint8_t Receive_buff[256];
volatile uint8_t Receive_Wr = 0;
volatile uint8_t Receive_Rd = 0;
volatile uint8_t Receive_Cnt = 0;

void UART2_IRQHandler(void)
{
    if (UART_GetITStatus(MDR_UART2, UART_IT_RX) == SET)
    {
        UART_ClearITPendingBit(MDR_UART2, UART_IT_RX);

        Receive_buff[Receive_Wr] = UART_ReceiveData(MDR_UART2);

        Receive_Wr++;
        Receive_Cnt++;
    }
}

void init_leds(void)
{
    RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTB, ENABLE);

    PORT_StructInit(&PortInit);

    PortInit.PORT_Pin   = LED1 | LED2;
    PortInit.PORT_OE    = PORT_OE_OUT;
    PortInit.PORT_FUNC  = PORT_FUNC_PORT;
    PortInit.PORT_MODE  = PORT_MODE_DIGITAL;
    PortInit.PORT_SPEED = PORT_SPEED_FAST;

    PORT_Init(MDR_PORTB, &PortInit);

    PORT_ResetBits(MDR_PORTB, LED1 | LED2);
}

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

    PORT_StructInit(&PortInit);

    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 = 115200;
    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_OFF;
    UART_InitStructure.UART_HardwareFlowControl =
        UART_HardwareFlowControl_RXE | UART_HardwareFlowControl_TXE;

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

    NVIC_EnableIRQ(UART2_IRQn);
    UART_ITConfig(MDR_UART2, UART_IT_RX, ENABLE);
}

int main(void)
{
    uint8_t command = 0;

    init_leds();
    init_UART2();

    while (1)
    {
        if (Receive_Cnt > 0)
        {
            command = Receive_buff[Receive_Rd];

            Receive_Rd++;
            Receive_Cnt--;

            switch (command)
            {
                case 0x0A:
                    PORT_SetBits(MDR_PORTB, LED1);
                    break;

                case 0x1A:
                    PORT_ResetBits(MDR_PORTB, LED1);
                    break;

                case 0x0B:
                    PORT_SetBits(MDR_PORTB, LED2);
                    break;

                case 0x1B:
                    PORT_ResetBits(MDR_PORTB, LED2);
                    break;

                case 0xAA:
                    PORT_SetBits(MDR_PORTB, LED1 | LED2);
                    break;

                case 0x11:
                    PORT_ResetBits(MDR_PORTB, LED1 | LED2);
                    break;

                default:
                    break;
            }
        }
    }
}