#include "MDR32F9Qx_config.h"
#include "MDR32Fx.h"
#include "MDR32F9Qx_port.h"
#include "MDR32F9Qx_rst_clk.h"
#include "MDR32F9Qx_uart.h"
#include "core_cm3.h"
#define LED1 PORT_Pin_0
#define LED2 PORT_Pin_1
static PORT_InitTypeDef PortInit;
static UART_InitTypeDef UART_InitStructure;
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 = 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 process_command(uint8_t cmd)
{
switch (cmd)
{
case '1':
PORT_SetBits(MDR_PORTB, LED1);
break;
case '2':
PORT_ResetBits(MDR_PORTB, LED1);
break;
case '3':
PORT_SetBits(MDR_PORTB, LED2);
break;
case '4':
PORT_ResetBits(MDR_PORTB, LED2);
break;
case '5':
PORT_SetBits(MDR_PORTB, LED1 | LED2);
break;
case '6':
PORT_ResetBits(MDR_PORTB, LED1 | LED2);
break;
default:
break;
}
}
int main(void)
{
uint8_t rx_data;
init_leds();
init_UART2();
while (1)
{
if (UART_GetFlagStatus(MDR_UART2, UART_FLAG_RXFE) == RESET)
{
rx_data = UART_ReceiveData(MDR_UART2);
process_command(rx_data);
}
}
}