попытка перенести работу с прерываниями в hal. зависаем где-то, не доходя до trap_handler(), хотя по map файлу все логично
This commit is contained in:
1 parent
562c29dbe1
commit
85d81a54b1
6 files changed
+47
-21
No files matched your search
@@ -1,11 +1,15 @@
|
|||||||
#include "board.h"
|
#include "board.h"
|
||||||
#include "mik32_hal_pcc.h"
|
#include "mik32_hal_pcc.h"
|
||||||
|
#include "mik32_hal_irq.h"
|
||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
|
|
||||||
// --------------------- init --------------------- //
|
// --------------------- init --------------------- //
|
||||||
// called before setup()
|
// called before setup()
|
||||||
void pre_init(void)
|
void pre_init(void)
|
||||||
{
|
{
|
||||||
|
// set irq vector to ram region
|
||||||
|
write_csr(mtvec, 0x020000c0);
|
||||||
|
|
||||||
HAL_Init();
|
HAL_Init();
|
||||||
|
|
||||||
// gpio clock
|
// gpio clock
|
||||||
@@ -23,6 +27,8 @@ void post_init(void)
|
|||||||
{
|
{
|
||||||
// enable global interrupts by default
|
// enable global interrupts by default
|
||||||
interrupts();
|
interrupts();
|
||||||
|
|
||||||
|
((GPIO_0)->SET = (GPIO_PIN_0));
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------- other --------------------- //
|
// --------------------- other --------------------- //
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ SECTIONS {
|
|||||||
*crt0.S.o(.text .text.*)
|
*crt0.S.o(.text .text.*)
|
||||||
*(.text.smallsysteminit)
|
*(.text.smallsysteminit)
|
||||||
*(.text.SmallSystemInit)
|
*(.text.SmallSystemInit)
|
||||||
. = ORIGIN(rom) + 0xC0;
|
/*. = ORIGIN(rom) + 0xC0;*/
|
||||||
KEEP(*crt0.S.o(.trap_text))
|
/*KEEP(*crt0.S.o(.trap_text))*/
|
||||||
|
|
||||||
*(.text)
|
*(.text)
|
||||||
*(.text.*)
|
*(.text.*)
|
||||||
@@ -50,16 +50,17 @@ SECTIONS {
|
|||||||
AT( __TEXT_END__ ) {
|
AT( __TEXT_END__ ) {
|
||||||
PROVIDE(__DATA_START__ = .);
|
PROVIDE(__DATA_START__ = .);
|
||||||
_gp = .;
|
_gp = .;
|
||||||
|
. = ORIGIN(ram) + 0xC0;
|
||||||
|
KEEP(*crt0.S.o(.trap_text))
|
||||||
*(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata*)
|
*(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata*)
|
||||||
*(.sdata .sdata.* .sdata* .sdata*.* .gnu.linkonce.s.*)
|
*(.sdata .sdata.* .sdata* .sdata*.* .gnu.linkonce.s.*)
|
||||||
*(.data .data.*)
|
*(.data .data.*)
|
||||||
*(.ramfunc)
|
|
||||||
. = ALIGN(CL_SIZE);
|
. = ALIGN(CL_SIZE);
|
||||||
|
PROVIDE(__DATA_END__ = .);
|
||||||
} >ram
|
} >ram
|
||||||
|
|
||||||
__DATA_IMAGE_START__ = LOADADDR(.data);
|
__DATA_IMAGE_START__ = LOADADDR(.data);
|
||||||
__DATA_IMAGE_END__ = LOADADDR(.data) + SIZEOF(.data);
|
__DATA_IMAGE_END__ = LOADADDR(.data) + SIZEOF(.data);
|
||||||
ASSERT(__DATA_IMAGE_END__ < ORIGIN(rom) + LENGTH(rom), "Data image overflows rom section")
|
|
||||||
|
|
||||||
/* thread-local data segment */
|
/* thread-local data segment */
|
||||||
.tdata : {
|
.tdata : {
|
||||||
@@ -85,10 +86,26 @@ SECTIONS {
|
|||||||
|
|
||||||
.bss : {
|
.bss : {
|
||||||
*(.bss .bss.*)
|
*(.bss .bss.*)
|
||||||
|
*(COMMON)
|
||||||
. = ALIGN(CL_SIZE);
|
. = ALIGN(CL_SIZE);
|
||||||
PROVIDE(__BSS_END__ = .);
|
PROVIDE(__BSS_END__ = .);
|
||||||
} >ram
|
} >ram
|
||||||
|
|
||||||
|
/* Code intended to be copied to REGION_RAM before execution */
|
||||||
|
.ram_text :
|
||||||
|
AT( ALIGN(__DATA_IMAGE_END__, CL_SIZE) ) {
|
||||||
|
PROVIDE(__RAM_TEXT_START__ = .);
|
||||||
|
*(.ram_text)
|
||||||
|
. = ALIGN(CL_SIZE);
|
||||||
|
PROVIDE(__RAM_TEXT_END__ = .);
|
||||||
|
} > ram
|
||||||
|
|
||||||
|
__RAM_TEXT_IMAGE_START__ = LOADADDR(.ram_text);
|
||||||
|
__RAM_TEXT_IMAGE_END__ = LOADADDR(.ram_text) + SIZEOF(.ram_text);
|
||||||
|
ASSERT(__RAM_TEXT_IMAGE_END__ < ORIGIN(rom) + LENGTH(rom), "rom segment overflows")
|
||||||
|
|
||||||
|
ASSERT(__RAM_TEXT_END__ < ORIGIN(ram) + LENGTH(ram) - STACK_SIZE - HEAP_SIZE, "REGION_RAM section overflows")
|
||||||
|
|
||||||
.heap : {
|
.heap : {
|
||||||
PROVIDE(__heap_start = .);
|
PROVIDE(__heap_start = .);
|
||||||
. += HEAP_SIZE;
|
. += HEAP_SIZE;
|
||||||
|
|||||||
@@ -62,6 +62,11 @@ memset_2:
|
|||||||
|
|
||||||
_start:
|
_start:
|
||||||
|
|
||||||
|
li t0, 128000
|
||||||
|
start_loop_delay:
|
||||||
|
nop
|
||||||
|
addi t0, t0, -1
|
||||||
|
bnez t0, start_loop_delay
|
||||||
# Init stack and global pointer
|
# Init stack and global pointer
|
||||||
#
|
#
|
||||||
la_abs sp, __C_STACK_TOP__
|
la_abs sp, __C_STACK_TOP__
|
||||||
@@ -74,20 +79,19 @@ _start:
|
|||||||
la_abs a3, __DATA_START__
|
la_abs a3, __DATA_START__
|
||||||
memcpy a1, a2, a3, t0
|
memcpy a1, a2, a3, t0
|
||||||
|
|
||||||
|
# Init ramfunc
|
||||||
|
#
|
||||||
|
la_abs a1, __RAM_TEXT_IMAGE_START__
|
||||||
|
la_abs a2, __RAM_TEXT_IMAGE_END__
|
||||||
|
la_abs a3, __RAM_TEXT_START__
|
||||||
|
memcpy a1, a2, a3, t0
|
||||||
|
|
||||||
# Clear bss
|
# Clear bss
|
||||||
#
|
#
|
||||||
la_abs a1, __BSS_START__
|
la_abs a1, __BSS_START__
|
||||||
la_abs a2, __BSS_END__
|
la_abs a2, __BSS_END__
|
||||||
memset a1, a2, zero
|
memset a1, a2, zero
|
||||||
|
|
||||||
#ifdef MIK32V0
|
|
||||||
# Enable pad_config clocking
|
|
||||||
#
|
|
||||||
li t0, (1 << 3)
|
|
||||||
li t1, 0x50014
|
|
||||||
sw t0, (t1)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
jalr_abs ra, SmallSystemInit
|
jalr_abs ra, SmallSystemInit
|
||||||
jalr_abs ra, SystemInit
|
jalr_abs ra, SystemInit
|
||||||
|
|
||||||
|
|||||||
@@ -14,13 +14,13 @@ void __attribute__((weak)) wire_handler_wrapper(void)
|
|||||||
extern void softSerial_handler_wrapper(void);
|
extern void softSerial_handler_wrapper(void);
|
||||||
|
|
||||||
// ---------------------------------------------- //
|
// ---------------------------------------------- //
|
||||||
void trap_handler(void)
|
void __attribute__((noinline, section(".ram_text"))) trap_handler(void)
|
||||||
{
|
{
|
||||||
((GPIO_0)->SET = (GPIO_PIN_8));
|
((GPIO_0)->CLEAR = (GPIO_PIN_0));
|
||||||
// gpio interrupt
|
// gpio interrupt
|
||||||
if (EPIC_CHECK_GPIO_IRQ())
|
if (EPIC_CHECK_GPIO_IRQ())
|
||||||
// gpio_interrupts_handler();
|
gpio_interrupts_handler();
|
||||||
softSerial_handler_wrapper();
|
// softSerial_handler_wrapper();
|
||||||
|
|
||||||
// tone timer interrupt
|
// tone timer interrupt
|
||||||
if (EPIC_CHECK_TIMER16_1())
|
if (EPIC_CHECK_TIMER16_1())
|
||||||
@@ -40,5 +40,5 @@ void trap_handler(void)
|
|||||||
|
|
||||||
// reset all interrupts
|
// reset all interrupts
|
||||||
HAL_EPIC_Clear(0xFFFFFFFF);
|
HAL_EPIC_Clear(0xFFFFFFFF);
|
||||||
((GPIO_0)->CLEAR = (GPIO_PIN_8));
|
((GPIO_0)->SET = (GPIO_PIN_0));
|
||||||
}
|
}
|
||||||
@@ -74,7 +74,7 @@ private:
|
|||||||
static uint32_t subtract_cap(uint32_t num, uint16_t sub);
|
static uint32_t subtract_cap(uint32_t num, uint16_t sub);
|
||||||
|
|
||||||
// private static method for timing
|
// private static method for timing
|
||||||
static void tunedDelay(uint32_t delayTicks) __attribute__((noinline, section(".ramfunc")));
|
static void tunedDelay(uint32_t delayTicks) __attribute__((noinline, section(".ram_text")));
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// public methods
|
// public methods
|
||||||
@@ -94,7 +94,7 @@ public:
|
|||||||
}
|
}
|
||||||
int peek();
|
int peek();
|
||||||
|
|
||||||
virtual size_t write(uint8_t byte) __attribute__((noinline, section(".ramfunc")));
|
virtual size_t write(uint8_t byte) __attribute__((noinline, section(".ram_text")));
|
||||||
virtual int read();
|
virtual int read();
|
||||||
virtual int available();
|
virtual int available();
|
||||||
virtual void flush();
|
virtual void flush();
|
||||||
|
|||||||
+1
-2
@@ -18,8 +18,7 @@ compiler.MIK32_Amur.extra_include= "-I{build.core.path}/avr/" "-I{build.core.pat
|
|||||||
compiler.define="-DMCU_{build.mcu}" "-DF_CPU={build.f_cpu}" "-DARDUINO={runtime.ide.version}" "-DARDUINO_{build.board}" "-DARDUINO_ARCH_{build.arch}" "-DMIK32V2" "-D__ELBEAR_ACE_UNO__" "-D__RISC_V__" "-D__ARDUINO_ARC__" "-D__CPU_ARC__"
|
compiler.define="-DMCU_{build.mcu}" "-DF_CPU={build.f_cpu}" "-DARDUINO={runtime.ide.version}" "-DARDUINO_{build.board}" "-DARDUINO_ARCH_{build.arch}" "-DMIK32V2" "-D__ELBEAR_ACE_UNO__" "-D__RISC_V__" "-D__ARDUINO_ARC__" "-D__CPU_ARC__"
|
||||||
|
|
||||||
build.flags.optimize=-Os
|
build.flags.optimize=-Os
|
||||||
# build.ldscript=spifi_cpp.ld
|
build.ldscript=spifi_cpp.ld
|
||||||
build.ldscript=ram.ld
|
|
||||||
|
|
||||||
# Compiler flags
|
# Compiler flags
|
||||||
compiler.warning_flags=-Wunused -Wuninitialized
|
compiler.warning_flags=-Wunused -Wuninitialized
|
||||||
|
|||||||
Reference in new issue
Block a user