K1Guitar/rt-thread/bsp/_template/board.c

172 lines
4.6 KiB
C
Raw Normal View History

/*
* Copyright (c) 2006-2019, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-05-24 the first version
*/
#include <rthw.h>
#include <rtthread.h>
#include "at32f403a_407.h"
#include "includes.h"
#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
/*
* Please modify RT_HEAP_SIZE if you enable RT_USING_HEAP
* the RT_HEAP_SIZE max value = (sram size - ZI size), 1024 means 1024 bytes
*/
#define RT_HEAP_SIZE (20*1024)
static rt_uint8_t rt_heap[RT_HEAP_SIZE];
RT_WEAK void *rt_heap_begin_get(void)
{
return rt_heap;
}
RT_WEAK void *rt_heap_end_get(void)
{
return rt_heap + RT_HEAP_SIZE;
}
#endif
void rt_os_tick_callback(void)
{
rt_interrupt_enter();
rt_tick_increase();
rt_interrupt_leave();
}
/**
* This function will initial your board.
*/
void rt_hw_board_init(void)
{
//#error "TODO 1: OS Tick Configuration."
/*
* TODO 1: OS Tick Configuration
* Enable the hardware timer and call the rt_os_tick_callback function
* periodically with the frequency RT_TICK_PER_SECOND.
*/
wk_system_clock_config();
system_core_clock_update();
/* 使能 FPUCP10/CP11 全访问)。
RT-Thread __low_level_init() IAR cstartup __iar_init_vfp
使 VFP IAR VFP memcpy
NOCP UsageFault HardFault */
SCB->CPACR |= ((3UL << (10 * 2)) | (3UL << (11 * 2)));
__DSB();
__ISB();
//_SysTick_Config(system_core_clock / RT_TICK_PER_SECOND);
SysTick_Config(system_core_clock/RT_TICK_PER_SECOND);
/* Call components board initial (use INIT_BOARD_EXPORT()) */
#ifdef RT_USING_COMPONENTS_INIT
rt_components_board_init();
#endif
#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get());
#endif
}
#ifdef RT_USING_CONSOLE
//#include <LowLevelIOInterface.h>
/* --------------------------------------------------------------------------
* USART2PA2=TX, PA3=RX@115200
* 使 UART
* rt_show_versionrt_kprintfHardFault dumpprintf
* ------------------------------------------------------------------------ */
static uint8_t console_uart_inited = 0;
static void console_uart_init(void)
{
gpio_init_type gpio_init_struct;
if (console_uart_inited)
return;
console_uart_inited = 1;
gpio_default_para_init(&gpio_init_struct);
/* 使能时钟 */
crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_USART2_PERIPH_CLOCK, TRUE);
/* PA2 = USART2_TX复用推挽输出 */
gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_MODERATE;
gpio_init_struct.gpio_pins = GPIO_PINS_2;
gpio_init(GPIOA, &gpio_init_struct);
/* PA3 = USART2_RX输入 */
gpio_init_struct.gpio_mode = GPIO_MODE_INPUT;
gpio_init_struct.gpio_pins = GPIO_PINS_3;
gpio_init(GPIOA, &gpio_init_struct);
usart_init(USART2, 115200, USART_DATA_8BITS, USART_STOP_1_BIT);
usart_transmitter_enable(USART2, TRUE);
usart_receiver_enable(USART2, TRUE);
usart_parity_selection_config(USART2, USART_PARITY_NONE);
usart_hardware_flow_control_set(USART2, USART_HARDWARE_FLOW_NONE);
usart_enable(USART2, TRUE);
}
static void console_uart_putchar(char c)
{
while ((USART2->sts & USART_TDBE_FLAG) == RESET)
{
}
USART2->dt = (uint16_t)c;
}
void rt_hw_console_output(const char *str)
{
console_uart_init();
while (*str)
{
if (*str == '\n')
console_uart_putchar('\r');
console_uart_putchar(*str++);
}
}
///* printf() 重定向到 USART2IAR DLib low-level interface */
//size_t __write(int handle, const unsigned char *buffer, size_t size)
//{
// size_t n;
//
// if (handle != _LLIO_STDOUT && handle != _LLIO_STDERR)
// return 0;
//
// console_uart_init();
// for (n = 0; n < size; n++)
// {
// if (buffer[n] == '\n')
// console_uart_putchar('\r');
// console_uart_putchar((char)buffer[n]);
// }
// return size;
//}
static int uart_init(void)
{
/* console 采用惰性初始化,见 rt_hw_console_output / __write */
return 0;
}
INIT_BOARD_EXPORT(uart_init);
#endif