toppers edu jsp
https://qiita.com/kaizen_nagoya/items/5561df93c7e156573fd2
toppersedujsp/config/h8/
https://github.com/kaizen-nagoya/toppersedujsp/tree/main/config/h8
akih8_3048f
akih8_3052f
akih8_3067f
akih8_3068f
akih8_3069f
Makefile.config
cpu_config.c
cpu_config.h
cpu_context.h
cpu_defs.h
cpu_insn.h
cpu_rename.def
cpu_rename.h
cpu_support.S
cpu_unrename.h
h8.h
hw_serial.c
hw_serial.cfg
hw_serial.h
hw_timer.h
makeoffset.c
start.S
tinet_cpu_config.h
tinet_cpu_defs.h
tool_config.h
tool_defs.h
Makefile.config
cpu_config.c
cpu_config.h
cpu_context.h
cpu_defs.h
cpu_insn.h
cpu_rename.def
cpu_rename.h
cpu_support.S
cpu_unrename.h
h8.h
/*
* TOPPERS/JSP Kernel
* Toyohashi Open Platform for Embedded Real-Time Systems/
* Just Standard Profile Kernel
*
* Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
* Toyohashi Univ. of Technology, JAPAN
* Copyright (C) 2001-2003 by Industrial Technology Institute,
* Miyagi Prefectural Government, JAPAN
* Copyright (C) 2001-2003 by Dep. of Computer Science and Engineering
* Tomakomai National College of Technology, JAPAN
*
* 上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
* によって公表されている GNU General Public License の Version 2 に記
* 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
* を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
* 利用と呼ぶ)することを無償で許諾する.
* (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
* 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
* スコード中に含まれていること.
* (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
* 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
* 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
* の無保証規定を掲載すること.
* (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
* 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
* と.
* (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
* 作権表示,この利用条件および下記の無保証規定を掲載すること.
* (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
* 報告すること.
* (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
* 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
*
* 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
* よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
* 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
* 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
*
* @(#) $Id: h8.h,v 1.4 2003/11/11 10:07:15 honda Exp $
*/
#ifndef _H8_H_
#define _H8_H_
/*
* H8 用定義
*/
/*
* 数値データ文字列化用マクロ
*/
#define TO_STRING(arg) #arg
#define _TO_STRING(arg) TO_STRING(arg)
/* Condition Code Register (CCR) */
#define H8CCR_I_BIT 7
#define H8CCR_UI_BIT 6
#define H8CCR_H_BIT 5
#define H8CCR_U_BIT 4
#define H8CCR_N_BIT 3
#define H8CCR_Z_BIT 2
#define H8CCR_V_BIT 1
#define H8CCR_C_BIT 0
#define H8CCR_I (1<<H8CCR_I_BIT)
#define H8CCR_UI (1<<H8CCR_UI_BIT)
#define H8CCR_H (1<<H8CCR_H_BIT)
#define H8CCR_U (1<<H8CCR_U_BIT)
#define H8CCR_N (1<<H8CCR_N_BIT)
#define H8CCR_Z (1<<H8CCR_Z_BIT)
#define H8CCR_V (1<<H8CCR_V_BIT)
#define H8CCR_C (1<<H8CCR_C_BIT)
/* CCR の UI ビットを割り込みマスクビットとして使用する。*/
#define H8INT_MASK_ALL H8CCR_UI
#define H8INT_DIS_ALL H8INT_MASK_ALL
#define H8INT_ENA_ALL (~(H8INT_MASK_ALL))
#define str_H8INT_DIS_ALL _TO_STRING(H8INT_DIS_ALL)
#define str_H8INT_ENA_ALL _TO_STRING(H8INT_ENA_ALL)
/*
* SCI 共通定数、マクロ
*/
#define H8BRR_RATE(b) ((b)>38400?((UB)(((CPU_CLOCK+(16*(b)))/(32*(b)))-1))\
:((UB)((CPU_CLOCK/(32*(b)))-1)))
#define SCI_SETUP_COUNT(b) ((CPU_CLOCK)/(b)/5)
/* port access */
#define inb(p) (*(volatile UB*)(p))
#define inw(p) (*(volatile UH*)(p))
#define outb(p,d) (*(volatile UB*)(p)=(d))
#define outw(p,d) (*(volatile UH*)(p)=(d))
#endif /* _H8_H_ */
hw_serial.c
/*
* TOPPERS/JSP Kernel
* Toyohashi Open Platform for Embedded Real-Time Systems/
* Just Standard Profile Kernel
*
* Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
* Toyohashi Univ. of Technology, JAPAN
* Copyright (C) 2001-2003 by Industrial Technology Institute,
* Miyagi Prefectural Government, JAPAN
* Copyright (C) 2001-2003 by Dep. of Computer Science and Engineering
* Tomakomai National College of Technology, JAPAN
*
* 上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
* によって公表されている GNU General Public License の Version 2 に記
* 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
* を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
* 利用と呼ぶ)することを無償で許諾する.
* (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
* 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
* スコード中に含まれていること.
* (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
* 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
* 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
* の無保証規定を掲載すること.
* (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
* 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
* と.
* (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
* 作権表示,この利用条件および下記の無保証規定を掲載すること.
* (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
* 報告すること.
* (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
* 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
*
* 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
* よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
* 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
* 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
*
* @(#) $Id: hw_serial.c,v 1.5 2003/12/11 07:00:10 honda Exp $
*/
/*
* ターゲット依存シリアルI/Oモジュール(H8用)
* ・ポートが 1本の場合は HWPORT1_ADDRに指定されたポートを使用し、
* 2本の場合は、HWPORT1_ADDRをユーザ用、HWPORT2_ADDRをコンソール
* 出力として使用する。
* HWPORTx_ADDRは ターゲット依存の sys_config.h中で指定する。
* ・共通部のモジュールによって、XON/XOFFフロー制御が行わ
* れているので、信号線はTxDとRxDの2本でよい
*/
#include "jsp_kernel.h"
#include <hw_serial.h>
/*
* シリアルポートの初期化ブロック
*/
const SIOPINIB siopinib_table[TNUM_PORT] = {
#if TNUM_PORT == 1
{
SYSTEM_SCI,
SYSTEM_BAUD_RATE,
SYSTEM_SCI_SMR,
},
#elif TNUM_PORT == 2 /* of #if TNUM_PORT == 1 */
{
USER_SCI,
USER_BAUD_RATE,
USER_SCI_SMR,
},
{
SYSTEM_SCI,
SYSTEM_BAUD_RATE,
SYSTEM_SCI_SMR,
},
#endif /* of #if TNUM_PORT == 1 */
};
/*
* シリアルポートの制御ブロック
*/
SIOPCB siopcb_table[TNUM_PORT];
/*
* SIO ID から管理ブロックへの変換マクロ
*/
#define get_siopinib(sioid) (&(siopinib_table[INDEX_SIO(sioid)]))
/*
* SCI の初期化
*/
void
SCI_initialize (ID sioid)
{
const SIOPINIB *inib;
int i;
inib = get_siopinib(sioid);
SCI_cls_por(inib->base);
outb(inib->base + H8SMR, inib->smr_init);
/* ボーレート設定 */
outb(inib->base + H8BRR, H8BRR_RATE(inib->baudrate));
/* 割込み禁止とクロックソースの選択 */
outb(inib->base + H8SCR,
inb(inib->base + H8SCR) & ~(H8SCR_TIE | H8SCR_RIE |
H8SCR_MPIE | H8SCR_TEIE |
H8SCR_CKE1 | H8SCR_CKE0 ));
/* ボーレートの設定後、1ビット分待たなければならない。*/
for(i = SCI_SETUP_COUNT(inib->baudrate); i -- > 0; )
;
/* エラーフラグをクリア */
outb(inib->base + H8SSR,
inb(inib->base + H8SSR) & ~(H8SSR_ORER | H8SSR_FER | H8SSR_PER));
/* 受信割り込みと送信割込みの許可はシリアル I/O で行う */
/* 送受信許可 */
outb(inib->base + H8SCR,
inb(inib->base + H8SCR) | (H8SCR_TE | H8SCR_RE));
}
/*
* SCI のクローズ
*/
void
SCI_cls_por (UW base)
{
int i;
/* TDRE が 1 になるまで待つ */
while ((inb(base + H8SSR) & H8SSR_TDRE) == 0)
;
/* 11ビット送信分待つ。*/
for(i = SCI_SETUP_COUNT(H8_MIN_BAUD_RATE) * 11; i -- > 0; )
;
/* 送受信停止 */
outb(base + H8SCR,
inb(base + H8SCR) & ~(H8SCR_TIE | H8SCR_RIE | H8SCR_TE | H8SCR_RE));
}
/*
* SCI_in_handler -- SCI 入力割込みハンドラ
*/
void
SCI_in_handler(ID sioid)
{
SIOPCB *pcb;
UB status;
pcb = get_siopcb(sioid);
status = inb(pcb->inib->base + H8SSR);
if (status & (H8SSR_ORER | H8SSR_FER | H8SSR_PER)) {
/* エラー処理 */
/* エラーフラグをクリア */
outb(pcb->inib->base + H8SSR, status & ~(H8SSR_ORER | H8SSR_FER | H8SSR_PER));
}
if (status & H8SSR_RDRF) {
if (pcb->openflag)
/* 受信可能コールバックルーチンを呼出す。*/
SCI_ierdy_rcv(pcb->exinf);
else
outb(pcb->inib->base + H8SSR, status & ~H8SSR_RDRF);
}
}
/*
* SCI_out_handler -- SCI 出力割込みハンドラ
*/
void
SCI_out_handler(ID sioid)
{
SIOPCB *pcb;
pcb = get_siopcb(sioid);
if (pcb->openflag) {
/* 送信可能コールバックルーチンを呼出す。*/
SCI_ierdy_snd(pcb->exinf);
}
}
#ifdef H8_CFG_SCI_ERR_HANDLER
/*
* SCI_err_handler -- SCI エラー入力割込みハンドラ
*/
void
SCI_err_handler(ID sioid)
{
SIOPCB *pcb;
UB status;
pcb = get_siopcb(sioid);
status = inb(pcb->inib->base + H8SSR);
if (status & (H8SSR_ORER | H8SSR_FER | H8SSR_PER)) {
/* エラー処理 */
/* エラーフラグをクリア */
outb(pcb->inib->base + H8SSR, status & ~(H8SSR_ORER | H8SSR_FER | H8SSR_PER));
}
}
#endif /* of #ifdef H8_CFG_SCI_ERR_HANDLER */
/*
* sio_initialize -- シリアルポートドライバの初期化
*/
void
sio_initialize (void)
{
int ix;
/* SIO 管理ブロックの初期化 */
for (ix = TNUM_PORT; ix -- > 0; ) {
siopcb_table[ix].inib = &siopinib_table[ix];
siopcb_table[ix].openflag = FALSE;
}
}
/*
* sio_ena_cbr -- シリアル I/O からのコールバックの許可
*/
void
sio_ena_cbr(SIOPCB *pcb, UINT cbrtn)
{
switch (cbrtn) {
case SIO_ERDY_SND:
SCI_enable_send(pcb);
break;
case SIO_ERDY_RCV:
SCI_enable_recv(pcb);
break;
}
}
/*
* sio_dis_cbr -- シリアル I/O からのコールバックの禁止
*/
void
sio_dis_cbr(SIOPCB *pcb, UINT cbrtn)
{
switch (cbrtn) {
case SIO_ERDY_SND:
SCI_disable_send(pcb);
break;
case SIO_ERDY_RCV:
SCI_disable_recv(pcb);
break;
}
}
/*
* SCI 割り込み
*/
void
sio_in_handler (void)
{
SCI_in_handler(1);
}
void
sio_out_handler (void)
{
SCI_out_handler(1);
}
#ifdef H8_CFG_SCI_ERR_HANDLER
void
sio_err_handler (void)
{
SCI_err_handler(1);
}
#endif /* of #ifdef H8_CFG_SCI_ERR_HANDLER */
#if TNUM_PORT >= 2
void
sio_in2_handler (void)
{
SCI_in_handler(2);
}
void
sio_out2_handler (void)
{
SCI_out_handler(2);
}
#ifdef H8_CFG_SCI_ERR_HANDLER
void
sio_err2_handler (void)
{
SCI_err_handler(2);
}
#endif /* of #ifdef H8_CFG_SCI_ERR_HANDLER */
#endif /* of #if TNUM_PORT >= 2 */
hw_serial.cfg
hw_serial.h
hw_timer.h
makeoffset.c
start.S
/*
* TOPPERS/JSP Kernel
* Toyohashi Open Platform for Embedded Real-Time Systems/
* Just Standard Profile Kernel
*
* Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
* Toyohashi Univ. of Technology, JAPAN
* Copyright (C) 2001-2003 by Industrial Technology Institute,
* Miyagi Prefectural Government, JAPAN
* Copyright (C) 2001-2003 by Dep. of Computer Science and Engineering
* Tomakomai National College of Technology, JAPAN
*
* 上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
* によって公表されている GNU General Public License の Version 2 に記
* 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
* を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
* 利用と呼ぶ)することを無償で許諾する.
* (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
* 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
* スコード中に含まれていること.
* (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
* 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
* 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
* の無保証規定を掲載すること.
* (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
* 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
* と.
* (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
* 作権表示,この利用条件および下記の無保証規定を掲載すること.
* (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
* 報告すること.
* (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
* 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
*
* 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
* よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
* 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
* 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
*
* @(#) $Id: start.S,v 1.9 2003/12/11 07:00:10 honda Exp $
*/
#define _MACRO_ONLY
#include <t_config.h>
/*
* H8用スタートアップモジュール
* カーネルはアプリケーションとリンクして使用する
* だけなのでJSPカーネルのみ使用する。
*/
.h8300h
.text
.align 2
.global _start
_start:
/*
* タスク独立のスタックをSTACKTOPに初期化する
* STACKTOPは、sys_config.hで定義
*/
mov.l #STACKTOP, sp
/*
* _hardware_init_hook を呼び出す。(0でない場合)
*
* ハードウェア依存に必要な初期化処理がある場合は,
* hardware_init_hook という関数を用意すればよい.
* 具体的にはROM化の際、RAMを使用可能にするための
* バスコントローラの初期化等を行う。
* sys_support.S 内で hardware_init_hook を定義してい
* る.
*/
start_0:
mov.l @_hardware_init_hook_k, er0
or.l er0, er0
beq start_1
jsr @er0
/*
* bssセクションをクリア
*/
start_1:
mov.l #__bss_start, er0
mov.l #_end, er1
sub.l er2, er2
start_2:
mov.l er2, @er0
add.l #4, er0
cmp.l er1, er0
blo start_2 /* er1 > er0 */
/*
* dataセクションを初期化する(ROM化対応).
*
* __idata_start から __idata_end までを,__data_start 以降に
* コピーする.
*/
mov.l #__idata_start, er0
mov.l #__idata_end, er1
mov.l #__data_start, er2
start_4:
mov.l @er0+, er4 /* *er2++ = *er0 ++; */
mov.l er4, @er2
add.l #4, er2
cmp.l er1, er0
blo start_4 /* er1 > er0 */
/*
* software_init_hook を呼び出す(0 でない場合).
*
* ソフトウェア環境(特にライブラリ)に依存して必要な初期化処
* 理がある場合は,software_init_hook という関数を用意すれば
* よい.
*/
mov.l @_software_init_hook_k, er0
or.l er0, er0
beq start_6
jsr @er0
/*
* カーネルを起動する
*/
start_6:
jmp @_kernel_start
.align 4
_hardware_init_hook_k:
.long _hardware_init_hook
_software_init_hook_k:
.long _software_init_hook
tinet_cpu_config.h
tinet_cpu_defs.h
tool_config.h
tool_defs.h