тесты с приемом данных. работаем из ram, в обработчике прерываний только нужные сейчас прерывания. все функции в модуле SS по максимуму заменены на дефайны для ускорения. в таких парниковых условиях работает и прием, и отправка нескольких байт до 115200 включительно

This commit is contained in:
klassents committed 2024-09-25 10:29:59 +07:00
1 parent fbe6abaa4f
commit 5d5ec4de22
4 files changed
+83 -38

No files matched your search

+30 -7
View File
@@ -10,36 +10,52 @@ MEMORY {
}
STACK_SIZE = 1024;
HEAP_SIZE = 1024;
CL_SIZE = 16;
SECTIONS {
.text ORIGIN(ram) : {
PROVIDE(__TEXT_START__ = .);
*crt0.o(.text .text.*)
*crt0.S.o(.text .text.*)
*(.text.smallsysteminit)
*(.text.SmallSystemInit)
. = ORIGIN(ram) + 0xC0;
KEEP(*crt0.o(.trap_text))
KEEP(*crt0.S.o(.trap_text))
*(.text)
*(.text.*)
*(.rodata)
*(.rodata.*)
. = ALIGN(CL_SIZE);
PROVIDE(__TEXT_END__ = .);
} >ram
.init_array (READONLY) :
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
PROVIDE_HIDDEN (__init_array_end = .);
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP(*(SORT_BY_INIT_PRIORITY(.fini_array.*)))
KEEP(*(.fini_array))
PROVIDE_HIDDEN (__fini_array_end = .);
PROVIDE(__TEXT_END__ = .);
} >ram AT>ram
.data :
AT( __TEXT_END__ ) {
PROVIDE(__DATA_START__ = .);
_gp = .;
*(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata*)
*(.sdata .sdata.* .gnu.linkonce.s.*)
*(.sdata .sdata.* .sdata* .sdata*.* .gnu.linkonce.s.*)
*(.data .data.*)
*(.ramfunc)
. = ALIGN(CL_SIZE);
} >ram
} >ram
__DATA_IMAGE_START__ = LOADADDR(.data);
__DATA_IMAGE_END__ = LOADADDR(.data) + SIZEOF(.data);
ASSERT(__DATA_IMAGE_END__ < ORIGIN(ram) + LENGTH(ram) - STACK_SIZE, "Data image overflows ram section")
@@ -72,12 +88,19 @@ SECTIONS {
PROVIDE(__BSS_END__ = .);
} >ram
.heap : {
PROVIDE(__heap_start = .);
. += HEAP_SIZE;
. = ALIGN(CL_SIZE);
PROVIDE(__heap_end = .);
} >ram
_end = .;
PROVIDE(__end = .);
/* End of uninitalized data segement */
.stack ORIGIN(ram) + LENGTH(ram) - STACK_SIZE : {
.stack ORIGIN(ram) + LENGTH(ram) - STACK_SIZE: {
FILL(0);
PROVIDE(__STACK_START__ = .);
. += STACK_SIZE;
+14 -9
View File
@@ -1,5 +1,8 @@
#include "mik32_hal_irq.h"
#include "mik32_hal_gpio.h"
// isr functions
extern void serial_handler_wrapper(uint8_t uartNumInt);
extern void gpio_interrupts_handler(void);
@@ -13,6 +16,7 @@ extern void softSerial_handler_wrapper(void);
// ---------------------------------------------- //
void trap_handler(void)
{
((GPIO_0)->SET = (GPIO_PIN_8));
// gpio interrupt
if (EPIC_CHECK_GPIO_IRQ())
// gpio_interrupts_handler();
@@ -22,18 +26,19 @@ void trap_handler(void)
if (EPIC_CHECK_TIMER16_1())
tone_interrupt_handler();
// uart0 interrupt
if (EPIC_CHECK_UART_0())
serial_handler_wrapper(0);
// // uart0 interrupt
// if (EPIC_CHECK_UART_0())
// serial_handler_wrapper(0);
// uart1 interrupt
if (EPIC_CHECK_UART_1())
serial_handler_wrapper(1);
// // uart1 interrupt
// if (EPIC_CHECK_UART_1())
// serial_handler_wrapper(1);
// i2c interrupt
if (EPIC_CHECK_I2C_1())
wire_handler_wrapper();
// // i2c interrupt
// if (EPIC_CHECK_I2C_1())
// wire_handler_wrapper();
// reset all interrupts
HAL_EPIC_Clear(0xFFFFFFFF);
((GPIO_0)->CLEAR = (GPIO_PIN_8));
}