toppersssp/arch /arm_m_gcc/

µITRON4.0 Specification
https://www.ertl.jp/ITRON/SPEC/mitron4-e.html

TOPPERS/SSP
https://www.toppers.jp/ssp-kernel.html

Drags files here, to add them to your repository
Yowza, that’s a lot of files. Try uploading fewer than 100 at a time.
Github
https://github.com/kaizen-nagoya/toppersssp

toppers/ssp upload
https://qiita.com/kaizen_nagoya/items/cffa0aaf2c029cef7334

# arch /arm_m_gcc/

MANIFEST
Makefile.prc
arm_m.h
prc.tf
prc_cfg1_out.h
prc_check.tf
prc_config.c
prc_config.h
prc_def.csv
prc_design.txt
prc_insn.h
prc_kernel.h
prc_rename.def
prc_rename.h
prc_sil.h
prc_stddef.h
prc_support.S
prc_test.h
prc_timer.c
prc_timer.cfg
prc_timer.h
prc_unrename.h
prc_user.txt
start.S

## MANIFEST
```c:
PACKAGE ssp

MANIFEST
Makefile.prc
arm_m.h
prc.tf
prc_cfg1_out.h
prc_check.tf
prc_config.c
prc_config.h
prc_def.csv
prc_design.txt
prc_insn.h
prc_kernel.h
prc_rename.def
prc_rename.h
prc_sil.h
prc_stddef.h
prc_support.S
prc_test.h
prc_timer.cfg
prc_timer.c
prc_timer.h
prc_unrename.h
prc_user.txt
start.S
```
## Makefile.prc
```c:
#
#  @(#) $Id: Makefile.prc 1304 2008-08-27 07:28:36Z ertl-honda $
# 

#
#		Makefile のプロセッサ依存部（ARM-M用）
#

#
#  コンパイルオプション
#
COPTS := $(COPTS) -mthumb 
INCLUDES := $(INCLUDES) -I$(SRCDIR)/arch/$(PRC)_$(TOOL)/
LDFLAGS := -nostdlib $(LDFLAGS) 
CDEFS := $(CDEFS) -DTOPPERS_LABEL_ASM
LIBS := $(LIBS)  -lgcc

#
#  カーネルに関する定義
#
KERNEL_DIR := $(KERNEL_DIR) $(SRCDIR)/arch/$(PRC)_$(TOOL)
KERNEL_ASMOBJS := $(KERNEL_ASMOBJS) prc_support.o
KERNEL_COBJS := $(KERNEL_COBJS) prc_config.o prc_timer.o

#
#  コンフィギュレータ関係の変数の定義
#
CFG_TABS := $(CFG_TABS) --cfg1-def-table $(SRCDIR)/arch/$(PRC)_$(TOOL)/prc_def.csv

#
#  依存関係の定義
#
cfg1_out.c: $(SRCDIR)/arch/$(PRC)_$(TOOL)/prc_def.csv
kernel_cfg.timestamp: $(SRCDIR)/arch/$(PRC)_$(TOOL)/prc.tf
```
## arm_m.h
```c:
/*
 *  TOPPERS/SSP Kernel
 *      Smallest Set Profile Kernel
 * 
 *  Copyright (C) 2008 by Embedded and Real-Time Systems Laboratory
 *              Graduate School of Information Science, Nagoya Univ., JAPAN
 * 
 *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
 *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
 *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
 *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
 *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
 *      スコード中に含まれていること．
 *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
 *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
 *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
 *      の無保証規定を掲載すること．
 *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
 *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
 *      と．
 *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
 *        作権表示，この利用条件および下記の無保証規定を掲載すること．
 *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
 *        報告すること．
 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
 *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
 *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
 *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
 *      免責すること．
 * 
 *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
 *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
 *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
 *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
 *  の責任を負わない．
 * 
 *  @(#) $Id: arm_m.h 1304 2008-08-27 07:28:36Z ertl-honda $
 */

/*
 *  ARMVx-Mのハードウェア資源の定義
 */

#ifndef ARM_M_H
#define ARM_M_H


/*
 *  EPSRのTビット
 */
#define EPSR_T   0x01000000

/*
 * IPSRの ISR NUMBER
 */
#define IPSR_ISR_NUMBER 0x1ff

/*
 *  例外・割込み発生時にスタック上に積まれる保存領域のサイズ
 *  本カーネルでは例外フレームと呼ぶ
 */
#define EXC_FRAME_SIZE         (8*4)

/*
 *  例外・割込み発生時にLRに設定されるEXC_RETURNの値
 */
#define EXC_RETURN_HANDLER      0x0
#define EXC_RETURN_THREAD       0x8
#define EXC_RETURN_MSP          0x0
#define EXC_RETURN_PSP          0x4

/*
 *  CONTROLレジスタ
 */
#define CONTROL_PSP            0x02
#define CONTROL_MSP            0x00

/*
 *  例外番号
 */
#define EXCNO_NMI         2
#define EXCNO_HARD        3
#define EXCNO_MPU         4
#define EXCNO_BUS         5
#define EXCNO_USAGE       6
#define EXCNO_SVCALL     11          
#define EXCNO_DEBUG      12
#define EXCNO_PENDSV     14

/*
 *  例外番号の最小値と最大値
 */
#define TMIN_EXCNO   2
#define TMAX_EXCNO  14

/*
 *  割込み番号
 */
#define IRQNO_SYSTICK    15

/*
 *  割込み番号の最小値
 */
#define TMIN_INTNO       15

/*
 *  例外フレームのオフセット
 */
#define P_EXCINF_OFFSET_EXC_RETURN  0x00
#define P_EXCINF_OFFSET_BASEPRI     0x01
#define P_EXCINF_OFFSET_XPSR        0x09
#define P_EXCINF_OFFSET_PC          0x08

/*
 *  NVIC関連
 */

/*
 *  コントロールレジスタ
 */
#define NVIC_INT_CTRL       0xe000ed04

#define NVIC_PENDSVSET      0x10000000

/*
 *  システムハンドラーコントロールレジスタ
 */
#define NVIC_SYS_HND_CTRL   0xE000ED24

/*
 *  各例外の許可ビット
 */
#define NVIC_SYS_HND_CTRL_USAGE 0x00040000
#define NVIC_SYS_HND_CTRL_BUS   0x00020000
#define NVIC_SYS_HND_CTRL_MEM   0x00010000

/*
 *  優先度設定レジスタ
 */
#define NVIC_SYS_PRI1       0xE000ED18  // Sys. Handlers 4 to 7 Priority
#define NVIC_SYS_PRI2       0xE000ED1C  // Sys. Handlers 8 to 11 Priority
#define NVIC_SYS_PRI3       0xE000ED20  // Sys. Handlers 12 to 15 Priority
#define NVIC_PRI0           0xE000E400  // IRQ 0 to 3 Priority Register

/*
 *  割込み許可レジスタ
 */
#define NVIC_SETENA0        0xE000E100  // IRQ 0 to 31 Set Enable Register

/*
 *  割込み禁止レジスタ
 */
#define NVIC_CLRENA0        0xE000E180  // IRQ 0 to 31 Set Disable Register

/*
 *  ベクタテーブルオフセットレジスタ
 */
#define NVIC_VECTTBL        0xE000ED08


/*
 *  SYSTIC関連レジスタ
 */
#define SYSTIC_CONTROL_STATUS 0xE000E010
#define SYSTIC_RELOAD_VALUE   0xE000E014
#define SYSTIC_CURRENT_VALUE  0xE000E018
#define SYSTIC_CALIBRATION    0xE000E01C

#define SYSTIC_ENABLE    0x01
#define SYSTIC_TICINT    0x02
#define SYSTIC_CLKSOURCE 0x04
#define SYSTIC_COUNTFLAG 0x10000

#define SYSTIC_SKEW      0x40000000
#define SYSTIC_NOREF     0x80000000
#define SYSTIC_TENMS     0x00ffffff

#endif  /* ARM_M_H */
```
## prc.tf
```c:
```
## prc_cfg1_out.h
```c:
```
## prc_check.tf
```c:
```
## prc_config.c
```c:
```
## prc_config.h
```c:
```
## prc_def.csv
```c:
```
## prc_design.txt
```c:
```
## prc_insn.h
```c:
```
## prc_kernel.h
```c:
```
## prc_rename.def
```c:
```
## prc_rename.h
```c:
```
## prc_sil.h
```c:
```
## prc_stddef.h
```c:
```
## prc_support.S
```c:
```
## prc_test.h
```c:
```
## prc_timer.c
```c:
```
## prc_timer.cfg
```c:
```
## prc_timer.h
```c:
```
## prc_unrename.h
```c:
```
## prc_user.txt
```c:
```
## start.S
```c:start.S
/*
 *  TOPPERS Software
 *      Toyohashi Open Platform for Embedded Real-Time Systems
 * 
 *  Copyright (C) 2008 by Embedded and Real-Time Systems Laboratory
 *              Graduate School of Information Science, Nagoya Univ., JAPAN
 *  Copyright (C) 2015 by Naoki Saito
 *             Nagoya Municipal Industrial Research Institute, JAPAN
 * 
 *  上記著作権者は，以下の(1)～(4)の条件を満たす場合に限り，本ソフトウェ
 *  ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
 *  変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
 *  (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
 *      権表示，この利用条件および下記の無保証規定が，そのままの形でソー
 *      スコード中に含まれていること．
 *  (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
 *      用できる形で再配布する場合には，再配布に伴うドキュメント（利用
 *      者マニュアルなど）に，上記の著作権表示，この利用条件および下記
 *      の無保証規定を掲載すること．
 *  (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
 *      用できない形で再配布する場合には，次のいずれかの条件を満たすこ
 *      と．
 *    (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
 *        作権表示，この利用条件および下記の無保証規定を掲載すること．
 *    (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
 *        報告すること．
 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
 *      害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
 *      また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
 *      由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
 *      免責すること．
 * 
 *  本ソフトウェアは，無保証で提供されているものである．上記著作権者お
 *  よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
 *  に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
 *  アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
 *  の責任を負わない．
 * 
 *  @(#) $Id: start.S 1304 2008-08-27 07:28:36Z ertl-honda $
 */
                
/*
 *   カーネル用のスタートアップモジュール(ARM-M用)
 */
#define TOPPERS_MACRO_ONLY
#define UINT_C(val)		(val)		/* uint_t型の定数を作るマクロ */
#define ULONG_C(val)	(val)		/* ulong_t型の定数を作るマクロ */
#define CAST(type, val)	(val)		/* 型キャストを行うマクロ */

#include "kernel_impl.h"
#include "arm_m.h"

/*
 *  スタートアップルーチン
 *
 *  Threadモードで呼び出されることを前提としてる．
 */
	.text
	.align 2
	.code 16
	.syntax unified
	.globl _start
	.type _start, function
_start:
	cpsid f                 /* 割込みロック状態へ */

#ifdef INIT_MSP
	/*
	 * MSPの設定
	 */
	mov   r0, #CONTROL_MSP  /* MSPを有効に  */
	msr   control, r0
	isb                     /* control の操作後に必要 */
	ldr  r0,=_kernel_istkpt
	ldr  r1,[r0]
	msr  msp, r1
#endif /* INIT_MSP */

	/*
	 * hardware_init_hookの呼び出し （0でない場合）
	 *
	 * ターゲットハードウェアに依存して必要な初期化処理がある場合
	 * は，hardware_init_hook という関数を用意する
	 */
	ldr  r0, =hardware_init_hook
	cbz  r0, start_1
	blx  r0

start_1:
#ifndef OMIT_BSS_INIT
	/*
	 *  BSSセクション初期化
	 */
	mov  r0, #0
	ldr  r1, =__bss_start
	ldr  r2, =__bss_end
	cmp  r1, r2
	bhs  start_3
start_2:
	str  r0, [r1]
	add  r1,r1, #4    
	cmp  r1, r2
	blo  start_2
#endif /* OMIT_BSS_INIT */


start_3:

#ifndef OMIT_DATA_INIT
	/*
	 *  DATAセクション初期化
	 *  __idata_start から __idata_end までを，__data_start 以降に
	 *  コピーする
	 */
	ldr  r1, =__idata_start
	ldr  r2, =__idata_end
	cmp  r1, r2
	bhs  start_5
	ldr  r3, =__data_start
start_4:
	ldr  r0, [r1]
	str  r0, [r3]
	add  r1, #4
	add  r3, #4
	cmp  r1, r2
	blo  start_4
#endif /* OMIT_DATA_INIT */

	/*
	 *  software_init_hook を呼出し（0 でない場合）
	 *
	 *  ソフトウェア環境（特にライブラリ）に依存して必要な初期化処
	 *  理がある場合は，software_init_hook という関数を用意すれば
	 *  よい．
	 */
start_5:
	ldr  r0, =software_init_hook
	cbz  r0, start_6
	blx  r0

start_6:
	bl   sta_ker

l_end:
	b   l_end
```