- use debugger from bootloader

git-svn-id: http://moon:8086/svn/mips@100 a8ebac50-d88d-4704-bea3-6648445a41b3
This commit is contained in:
2017-01-18 23:17:58 +00:00
parent cf233c4d81
commit 0b96f7202d
11 changed files with 103 additions and 207 deletions
+42 -50
View File
@@ -5,21 +5,15 @@
*/
#include <stddef.h>
#include "board.h"
#include "../../irq.h"
#include "../../mips_ps2.h"
#include "../../mips_gfx.h"
#include "../../screen.h"
#include "../../uart.h"
#include "../../console.h"
#include "board.h"
#include "../../regdef.h"
extern int dbg_handler(struct xcptcontext * xcp);
#define DEBUGGER dbg_handler
const fp_xcpt_t dbg_func = (fp_xcpt_t)0xbfc01f00;
extern uart_if_t uart_if[];
extern ps2_if_t ps2_if[];
extern vga_if_t vga_if;
#define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0]))
@@ -28,11 +22,8 @@ const con_if_entry_t con_if_entry[] =
{0, "stdin", &uart_if[0], NULL, NULL, UART_readchar, NULL},
{1, "stdout", &uart_if[0], NULL, NULL, NULL, UART_writechar},
{2, "stderr", &uart_if[0], NULL, NULL, NULL, UART_writechar},
{10, "UART-0", &uart_if[0], NULL, NULL, UART_readchar, UART_writechar},
{11, "UART-1", &uart_if[1], NULL, NULL, UART_readchar, UART_writechar},
{20, "PS2-0", &ps2_if[0], PS2_open, PS2_close, PS2_readchar, NULL},
{21, "PS2-1", &ps2_if[1], PS2_open, PS2_close, PS2_readchar, NULL},
{30, "VGA-0", &vga_if, cg_open, cg_close, NULL, cg_writechar}
{3, "UART-0", &uart_if[0], NULL, NULL, UART_readchar, UART_writechar},
{4, "UART-1", &uart_if[1], NULL, NULL, UART_readchar, UART_writechar}
};
const con_if_t con_if =
@@ -40,59 +31,60 @@ const con_if_t con_if =
con_if_entry, ARRAYSIZE(con_if_entry)
};
void handle_debugger_int(struct xcptcontext * xcp)
static uart_if_t const *dbg_uart = NULL;
void dbg_uart_isr(struct xcptcontext *xcp)
{
dbg_handler(xcp);
if(SYS_UART_BIT_RX_AVAIL & *dbg_uart->pCTRL)
{
char c = *dbg_uart->pDATA;
if (c == 3)
{
dbg_func(xcp);
}
}
}
void dbg_uart_setup()
{
const int UART_INT = SYS_INT_UART;
dbg_uart = (uart_if_t*)con_getInterfaceByName("UART-1")->pInst;
*dbg_uart->pCTRL = SYS_UART_BIT_RX_INTEN;
interrupt_register(UART_INT, dbg_uart_isr);
interrupt_enable(UART_INT);
}
void dbg_init()
{
xcpt_register(EXC_ADEL, DEBUGGER);
xcpt_register(EXC_ADES, DEBUGGER);
xcpt_register(EXC_IBE, DEBUGGER);
xcpt_register(EXC_DBE, DEBUGGER);
xcpt_register(EXC_BP, DEBUGGER);
xcpt_register(EXC_RI, DEBUGGER);
xcpt_register(EXC_CPU, DEBUGGER);
xcpt_register(EXC_OV, DEBUGGER);
xcpt_register(EXC_ADEL, dbg_func);
xcpt_register(EXC_ADES, dbg_func);
xcpt_register(EXC_IBE, dbg_func);
xcpt_register(EXC_DBE, dbg_func);
xcpt_register(EXC_BP, dbg_func);
xcpt_register(EXC_RI, dbg_func);
xcpt_register(EXC_CPU, dbg_func);
xcpt_register(EXC_OV, dbg_func);
}
void board_init(void)
{
uint32_t volatile *pITIM_ctrl = (uint32_t*)SYS_ITIM_CTRL;
// Screen_clr();
// Disable timers
*pITIM_ctrl = 0;
// Disable all VGA stuff
// *pVGA_ctrl = 0;
// Initialzie syscall support
// Setup syscall support
syscalls_init();
// Initialzie interrupt support
// Setup Uart ISR
dbg_uart_setup();
// Setup debugger
dbg_init();
// Setup interrupt support
interrupt_init();
// Initalize debugger
dbg_init();
interrupt_register(2, handle_debugger_int);
interrupt_enable(2);
// flush stdin
// flush(con_getPort(0));
// Do some initializations here
}
void dbg_putchar(char c)
{
writechar(1, c);
}
char dbg_getchar()
{
return (char)readchar(0);
}