m9s12x context save structure

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3298 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo 2011-02-16 01:45:35 +00:00
parent 4ca1ea2ac8
commit 5e1e70fdbb
5 changed files with 178 additions and 7 deletions

View File

@ -1459,4 +1459,7 @@
shorter and more general.
* The NuttX repository has been converted to SVN and can now be found here
http://nuttx.svn.sourceforge.net/viewvc/nuttx/
* configs/mbed/hidkbd -- Added USB host support for the mbed LPC1768 board; add
a USB host HID keyboard configuraion.

View File

@ -8,7 +8,7 @@
<tr align="center" bgcolor="#e4e4e4">
<td>
<h1><big><font color="#3c34ec"><i>NuttX RTOS</i></font></big></h1>
<p>Last Updated: February 14, 2011</p>
<p>Last Updated: February 15, 2011</p>
</td>
</tr>
</table>
@ -2036,6 +2036,8 @@ nuttx-5.18 2011-xx-xx Gregory Nutt &lt;spudmonkey@racsa.co.cr&gt;
shorter and more general.
* The NuttX repository has been converted to SVN and can now be found here
http://nuttx.svn.sourceforge.net/viewvc/nuttx/
* configs/mbed/hidkbd -- Added USB host support for the mbed LPC1768 board; add
a USB host HID keyboard configuraion.
pascal-2.1 2011-xx-xx Gregory Nutt &lt;spudmonkey@racsa.co.cr&gt;

View File

@ -1,7 +1,7 @@
/************************************************************************************
* arch/hc/include/hcs12/irq.h
*
* Copyright (C) 2009 Gregory Nutt. All rights reserved.
* Copyright (C) 2009, 2011 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
*
* Redistribution and use in source and binary forms, with or without
@ -50,6 +50,79 @@
/************************************************************************************
* Definitions
************************************************************************************/
/************************************************************************************
* Register state save strucure
* Low Address <-- SP after state save
* [PPAGE]
* [soft regisers]
* XYH
* XYL
* ZH
* ZL
* TMPH
* TMPL
* FRAMEH
* FRAMEL <-- SP after interrupt
* CCR
* B
* A
* XH
* XL
* YH
* YL
* PCH
* High Address PCL <-- SP before interrupt
*
************************************************************************************/
/* Byte offsets */
#ifndef CONFIG_HCS12_NONBANKED
# define REG_PPAGE 0
# define REG_FIRST_SOFTREG 1
#else
# define REG_FIRST_SOFTREG 0
#endif
#if CONFIG_HCS12_MSOFTREGS > 2
# error "Need to save more registers"
#elif CONFIG_HCS12_MSOFTREGS == 2
# define REG_SOFTREG1 REG_FIRST_SOFTREG
# define REG_SOFTREG2 (REG_FIRST_SOFTREG+2)
# define REG_FIRST_HARDREG (REG_FIRST_SOFTREG+4)
#elif CONFIG_HCS12_MSOFTREGS == 1
# define REG_SOFTREG1 REG_FIRST_SOFTREG
# define REG_FIRST_HARDREG (REG_FIRST_SOFTREG+2)
#else
# define REG_FIRST_HARDREG REG_FIRST_SOFTREG
#endif
#define REG_XY REG_FIRST_HARDREG
#define REG_Z (REG_FIRST_HARDREG+2)
# define REG_ZH (REG_FIRST_HARDREG+2)
# define REG_ZL (REG_FIRST_HARDREG+3)
#define REG_TMP (REG_FIRST_HARDREG+4)
# define REG_TMPH (REG_FIRST_HARDREG+4)
# define REG_TMPL (REG_FIRST_HARDREG+5)
#define REG_FRAME (REG_FIRST_HARDREG+6)
# define REG_FRAMEH (REG_FIRST_HARDREG+6)
# define REG_FRAMEL (REG_FIRST_HARDREG+7)
#define REG_CCR (REG_FIRST_HARDREG+8)
#define REG_BA (REG_FIRST_HARDREG+9)
# define REG_B (REG_FIRST_HARDREG+9)
# define REG_A (REG_FIRST_HARDREG+10)
#define REG_X (REG_FIRST_HARDREG+11)
# define REG_XH (REG_FIRST_HARDREG+11)
# define REG_XL (REG_FIRST_HARDREG+12)
#define REG_Y (REG_FIRST_HARDREG+13)
# define REG_YH (REG_FIRST_HARDREG+13)
# define REG_YL (REG_FIRST_HARDREG+14)
#define REG_PC (REG_FIRST_HARDREG+15)
# define REG_PCH (REG_FIRST_HARDREG+15)
# define REG_PCL (REG_FIRST_HARDREG+16)
#define XCPTCONTEXT_REGS (REG_FIRST_HARDREG+17)
/************************************************************************************
* Public Types
@ -60,7 +133,7 @@
#ifndef __ASSEMBLY__
struct xcptcontext
{
int dummy; /* For now */
uint8_t regs[XCPTCONTEXT_REGS];
};
/****************************************************************************

View File

@ -2,7 +2,7 @@
* arch/hc/src/m9s12/m9s12_vectors.S
* arch/hc/src/chip/m9s12_vectors.S
*
* Copyright (C) 2009 Gregory Nutt. All rights reserved.
* Copyright (C) 2009, 2011 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
*
* Redistribution and use in source and binary forms, with or without
@ -56,8 +56,24 @@
* Macros
************************************************************************************/
/* On entry into an I- or X-interrupt, into an SWI, or into an undefined instruction
* interrupt, the stack frame created by hardware looks like:
*
* Low Address <-- SP after interrupt
* CCR
* B
* A
* XH
* XL
* YH
* YL
* PCH
* High Address PCL <-- SP before interrupt
*/
.macro HANDLER, label, irqno
\label:
#warning "Missing Logic"
.endm
/************************************************************************************
@ -189,11 +205,83 @@ handlers:
* Common IRQ handling logic
*
* Description:
* To be provided
* On entry into an I- or X-interrupt, into an SWI, or into an undefined
* instruction interrupt, the stack frame created by hardware looks like:
*
* Low Address <-- SP after state save
* [PPAGE]
* [soft regisers]
* XYH
* XYL
* ZH
* ZL
* TMPH
* TMPL
* FRAMEH
* FRAMEL <-- SP after interrupt
* CCR
* B
* A
* XH
* XL
* YH
* YL
* PCH
* High Address PCL <-- SP before interrupt
*
************************************************************************************/
vcommon:
/* Save the rest of the frame */
movw _.frame, 2, -sp
movw _.tmp, 2, -sp
movw _.z, 2, -sp
movw _.xy, 2, -sp
/* Save the soft registers */
#if CONFIG_HCS12_MSOFTREGS > 2
# error "Need to save more registers"
#endif
#if CONFIG_HCS12_MSOFTREGS > 1
movw _.d2, 2, -sp
#endif
#if CONFIG_HCS12_MSOFTREGS > 0
movw _.d1, 2, -sp
#endif
/* Save the PPAGE register */
#ifndef CONFIG_HCS12_NONBANKED
movb HCS12_MMC_PPAGE, 1, -sp
#endif
/* Handle the IRQ */
#warning "Missing Logic"
/* Restore registers and return */
/* Restore the PPAGE register */
#ifndef CONFIG_HCS12_NONBANKED
movb 1, sp+, HCS12_MMC_PPAGE
#endif
/* Restore the soft registers */
#if CONFIG_HCS12_MSOFTREGS > 0
movw 2, sp+, _.d1
#endif
#if CONFIG_HCS12_MSOFTREGS > 1
movw 2, sp+, _.d2
#endif
movw 2, sp+, _.xy
movw 2, sp+, _.z
movw 2, sp+, _.tmp
movw 2, sp+, _.frame
rti
.size handlers, .-handlers
/************************************************************************************
@ -203,7 +291,8 @@ vcommon:
* Name: up_interruptstack/g_userstack
*
* Description:
* Shouldn't happen
* If CONFIG_ARCH_INTERRUPTSTACK is defined, this sets aside memory for the
* interrupt stack.
*
************************************************************************************/

View File

@ -46,10 +46,14 @@ ifeq ($(CONFIG_HCS12_NONBANKED),y)
ARCHCPUFLAGS = -m9s12x -mshort -mnolong-calls
LDSCRIPT = ld.script.nonbanked
else
ARCHCPUFLAGS = -m9x12x -mshort -mlong-calls
ARCHCPUFLAGS = -m9s12x -mshort -mlong-calls
LDSCRIPT = ld.script.banked
endif
ifneq ($(CONFIG_HCS12_MSOFTREGS),0)
ARCHCPUFLAGS += -msoft-reg-count=$(CONFIG_HCS12_MSOFTREGS)
endif
ifeq ($(WINTOOL),y)
# Windows-native toolchains
DIRLINK = $(TOPDIR)/tools/winlink.sh