📄 sh3.txt
字号:
♂ TOPPERS/JSPカ〖ネル ユ〖ザズマニュアル ♂ ∈SH3/SH4 タ〖ゲット巴赂婶∷ ∈Release 1.3滦炳·呵姜构糠: 08-Apr-2002∷------------------------------------------------------------------------ TOPPERS/JSP Kernel Toyohashi Open Platform for Embedded Real-Time Systems/ Just Standard Profile Kernel Copyright (C) 2000-2002 by Embedded and Real-Time Systems Laboratory Toyohashi Univ. of Technology, JAPAN 惧淡螟侯涪荚は·Free Software Foundation によって给山されている GNU General Public License の Version 2 に淡揭されている掘凤か·笆 布の(1)×(4)の掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェ アを猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· 网脱と钙ぶ∷することを痰浸で钓满するˉ (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 スコ〖ド面に崔まれていることˉ (2) 塑ソフトウェアを浩网脱材墙なバイナリコ〖ド∈リロケ〖タブルオブ ジェクトファイルやライブラリなど∷の妨で网脱する眷圭には·网脱 に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯涪山绩· この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ (3) 塑ソフトウェアを浩网脱稍材墙なバイナリコ〖ドの妨または怠达に寥 み哈んだ妨で网脱する眷圭には·肌のいずれかの掘凤を塔たすことˉ (a) 网脱に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ (b) 网脱の妨轮を·侍に年める数恕によって·惧淡螟侯涪荚に鼠桂する ことˉ (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 巢からも·惧淡螟侯涪荚を倘勒することˉ 塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚は· 塑ソフトウェアに簇して·その努脱材墙拉も崔めて·いかなる瘦沮も乖わ ないˉまた·塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じたい かなる禄巢に簇しても·その勒扦を砷わないˉ @(#) $Id: sh3.txt,v 1.23 2002/04/10 08:25:00 honda Exp $------------------------------------------------------------------------1ˉSH3/SH4 タ〖ゲット巴赂婶の车妥1.1 タ〖ゲットシステムと倡券茨董SH3 プロセッサのタ〖ゲットシステムとしては·それぞれ SH7708, SH7709,SH7709Aを烹很した笆布のボ〖ドをサポ〖トしているˉˇ(臭)EPSON 澜の CARD-E09A ボ〖ド(CPU: SH7709A)ˇ话嫂排怠マイコン怠达ソフトウエア(臭)澜の MU200-RSH3 ボ〖ド(CPU: SH7709)ˇ(臭)排缓澜の DVE-SH7700 ボ〖ド (CPU: SH7708)ˇ(臭)泣惟亩LSIシステムズ澜の MS7709ASE01 ボ〖ド (CPU: SH7709A)また·FPU はサポ〖トしてないが·SH7750∈SH4∷を烹很した笆布のボ〖ドもサポ〖トしているˉ笆布·SH3 と SH4 の惰侍が涩妥で痰い眷圭はタ〖ゲット叹は SH3 とするˉˇCQ叫惹(臭)の CQ RISC 删擦キット/SH-4 ∈KZ_SH4∷倡券茨董には·GCC などの GNU倡券茨董を脱い·オブジェクトファイルフォ〖マットは ELF を筛洁とするˉなお·CARD-E09A については·柒垄件收怠达脱のクロックは 33Mhz として肋年してるが·介袋の澜墒は柒垄件收怠达脱のクロックが 22Mhz であるため·タイマ猛の肋年(sys_config.hの TIMER_CLOCK )を恃构する涩妥があるˉ1.2 サポ〖トする怠墙の车妥SH3 巴赂の怠墙として·充哈みマスクの恃构ˇ徊救(chg_ixx·get_ixx)と·拉墙删擦脱システム箕癸徊救怠墙(vxget_tim)をサポ〖トしているˉ充哈みの敦贿と钓材(dis_int·ena_int)はサポ〖トしていないˉ1.3 戮のタ〖ゲットへのポ〖ティング附バ〖ジョンでは·SH7708 とその橙磨惹の SH7709,SH7709A をサポ〖トしているˉ充り哈み箕に充り哈み妥傍がセットされるレジスタは·SH7708 では INTVET だが·SH7709/A では纳裁された柒垄モジュ〖ルの充り哈み妥傍は INTVET2 に肋年されるˉそのため·この婶尸をコンパイルプラグにより磊り仑えているˉ1.4 GDB スタブTOPPERS/JSP カ〖ネルは GDB スタブと鼎に蝗脱することを涟捏にしているˉそのため·sys_putc はスタブ钙び叫しで悸附し·充り哈みハンドラはスタブ沸统で钙ばれるˉスタブを蝗脱せずROMやCFにカ〖ネルを弥き悸乖するためには·木儡シリアルポ〖トへの叫蜗や·VBRの肋年が涩妥になるˉそこで·GDB_STUB というコンパイルフラグによりこれらの怠墙を磊り仑えるˉだたし·ROM步の狠に涩妥なバスコントロ〖ラの肋年は淡揭していないため·介袋步ル〖チンに淡揭する涩妥があるˉそれぞれのタ〖ゲットで GDB_STUB のコンパイルフラグをとった眷圭涩妥な侯度を布に绩すˉ介袋步ル〖チンはスタブでの淡揭が徊雇になると蛔われるˉˇCARD-E09A 泼に痰しˇMU200-RSH3 hardware_init_hook にバスステ〖トコントロ〖ラ霹の介袋步を纳裁ˉ sys_initialize に SCIF の介袋步を纳裁ˉˇDVE-SH7700 hardware_init_hook にバスステ〖トコントロ〖ラ霹の介袋步を纳裁ˉ 介袋步ル〖チンはスタブでの淡揭が徊雇になるˉˇMS7709ASE01 hardware_init_hook にバスステ〖トコントロ〖ラ霹の介袋步を纳裁ˉ sys_initialize に SCIF の介袋步を纳裁ˉなお·KZ_SH4 では·GDB スタブでのデバッグではなく·PARTNER-J によるデバッグを筛洁とするˉそのため·sys_putc は·PARTNER-WIN のコンソ〖ルに叫蜗するˉPARTNER-J については肌泪で棱汤するˉ1.5 PARTNER-JKZ_SH4 には·叠旁マイクロコンピュ〖タ澜の PARTNER-J がバンドルされているため·GDB スタブではなく·PARTNER-J を蝗脱するˉまた·MS7709ASE01 も PARTNER-J を儡鲁材墙なため·こちらは·GDB スタブ·PARTNER-J 尉数をサポ〖トするˉこれらのタ〖ゲットで PARTNER-J を蝗うためには·Makefile の GDB_STUB = true の乖をコメントアウトして·PARTNER_J = true の乖の黎片にあるコメントアウトを嘲すˉなお·KZ_SH4脱の GDB スタブは脱罢していないため·KZ_SH4 に滦して·GDB_STUB = true を铜跟にしてメイクすることはできないˉ附哼のところ·GCC でコンパイルしたオブジェクトを PARTNER-J でデバッグすると·グロ〖バル恃眶のシンボルが苞けない扩嘎があるˉ1.6 シリアルポ〖トCARD-E09A·MU200-RSH3·MS7709ASE01は·スタブによる GDB との奶慨と·カ〖ネルのログ叫蜗脱に2つのシリアルポ〖ト蝗脱するˉそれぞれ蝗脱するポ〖トとそのボ〖レ〖トを布に绩すˉMU200-RSH3はオシレ〖タを恃构できるが·40,16MHz をサポ〖トしており·DVE-SH7700 では·CPU柒婶クロックを60MHzか30MHzに联买が材墙であるˉこれらは·システム巴赂の Makefile.config で联买できるˉ戮のクロックを蝗脱する眷圭は·スタブも崔めてタイマ·シリアルポ〖トの肋年猛を恃构する涩妥があるˉなお·链てのポ〖トにおいて デ〖タ:8bit,Parity:none,Stop:1bitであるˉ GDB 奶慨脱 カ〖ネルログ脱ˇCARD-E09A SCIF:115200bps Companion Chip柒シリアル3:19200bps ˇMU200-RSH3 SCIF:57600bps SCI1(IrDA):57600bpsˇDVE-SH7700 SCI:115200bpsˇMS7709ASE01 SCIF(CN2):115200bps ス〖パ〖I/O柒垄SCI(CN3):19200bps ˇKZ_SH4 SCI:19200bpsDVE-SH7700 は·シリアルポ〖トが1ポ〖トしか积たないため· カ〖ネルのログの叫蜗数恕として·肌の2奶りがあるˉ 1.シリアルドライバを蝗わず GDB スタブ沸统での叫蜗 2.シリアルドライバを蝗う1の菇喇では GDB によるデバッグが材墙で·シリアルドライバ·ログタスク蝗わないため· この菇喇にするには·Makefile の GDB_STUB = true を铜跟にして·アプリケ〖ションのコンフィギュレ〖ションファイルで·serial.cfg,logtask.cfg をインクル〖ドしないようにする涩妥があるˉシリアルドライバを蝗脱しないため·serial_read() による掐蜗は稍材墙であり·sample1.c は瓢侯しないˉ2の菇喇では·プログラムのロ〖ドに GDB スタブを蝗い·その稿ディタッチしてから·カ〖ネルの悸乖を浩柴させるˉこの菇喇にするには· GDB_STUB =true を痰跟にして·アプリケ〖ションのコンフィギュレ〖ションファイルで·serial.cfg,logtask.cfgをインクル〖ドすればよいˉこの菇喇では·GDB によるデバッグは稍材墙であるが·serial_read() によるシリアルラインからの掐蜗が材墙であるˉGDB のディタッチとその稿のカ〖ネルの悸乖の缄界を笆布に绩すˉ侯喇された jsp を苞眶にGDBを悸乖する。 % sh-hitachi-elf-gdb jsp GNU gdb 4.18 Copyright 1998 Free Software Foundation, Inc. .......... (gdb)GDBが悸乖されたら、DVE-SH7700 と儡鲁されたポ〖トとボ〖レ〖トを肋年して儡鲁して、カ〖ネルをダウンロ〖ドしダウンロ〖ドが姜位したら、detach コマンドでディタッチする。 (gdb) set remotebaud 115200 (gdb) target remote /dev/ttyS0 Remote debugging using /dev/ttyS0 0x461100a0 in ?? () (gdb) load Loading section .text, size 0x6ede lma 0xc033000 Loading section .data, size 0x258 lma 0xc03b514 Loading section .rodata, size 0x1632 lma 0xc039ee0 Start address 0xc033000 , load size 34664 Transfer rate: 46218 bits/sec. (gdb) detach Ending remote debugging. (gdb)ディタッチしたら努碰なタ〖ミナルソフトで儡鲁し、キ〖ボ〖ドからスタブに滦して$c#63とコマンドを流るとカ〖ネルの悸乖が倡幌されるˉその稿このタ〖ミナル沸统でカ〖ネルへの掐叫蜗が乖える。Connecting to /dev/ttyS0, speed 115200.The escape character is Ctrl-\ (ASCII 28, FS)Type the escape character followed by C to get back,or followed by ? to see other options.----------------------------------------------------$c#63 <----(悸狠には斧えない)2ˉSH3 プロセッサ巴赂婶の怠墙この泪では·カ〖ネルおよびシステムサ〖ビスの怠墙の面で·SH3巴赂の婶尸について豺棱するˉ2.1 デ〖タ房int房および unsigned int房のサイズは 32ビットであるˉ2.2 充哈み瓷妄怠墙と充哈みハンドラカ〖ネル瓷妄嘲の充哈みとしては· NMI があるˉよって·CPUロック觉轮や介袋步ル〖チン柒では·NMI 笆嘲の充哈みはすべて敦贿されているˉ恶挛弄には·IPM(Interrupt Priority Mask)が 15 に肋年されるˉしかしながら·ボ〖ド惧に NMI 掐蜗を积たないタ〖ゲットのため·GDB のスタブがホストのマシンと奶慨するためのシリアルポ〖トの庭黎刨を 15 で判峡し·GDB で Ctrl-C を病すと 充り哈みが掐りスタブに扩告が败るようにしてあるˉこの怠墙を蝗脱するためにはCPUロック觉轮では·庭黎刨が 14 になるようにしなければならないˉそのため·CPUロックで肋年される庭黎刨をマクロで MAX_IPM で回年しているˉMAX_IPM はcpu_config.h の面で #define されているˉスタブを蝗う眷圭は 14 にスタブを蝗わない眷圭は 15 に肋年しているˉDEF_INH で回年する充哈みハンドラ戎规(inhno)は·SH7708 では·充り哈み祸据レジスタ(INTEVT)に肋年されるコ〖ドであり·SH7709/A では·充り哈み祸据レジスタ2(INTEVT2)に肋年されるコ〖ドであるˉデ〖タ房(INHNO)は unsigned int房に年盗されているˉDEF_INH で·INTEVT,INTEVT2コ〖ドとして铜跟でない猛や·嘲婶充哈みに滦炳しない戎规を回年した眷圭の瓢侯は瘦沮されないˉSH3巴赂の怠墙として·SR(Status Register)面の 充り哈みマスクビット(I3×I0)の猛を恃构するためのサ〖ビスコ〖ル chg_ipm と·徊救するためのサ〖ビスコ〖ル get_ipm をサポ〖トしているˉなお·充り哈みマスクビットの猛を山すデ〖タ房 IPM は·unsigned int房に年盗されているˉこれらのサ〖ビスコ〖ルは·タスクコンテキストで CPUロック豺近觉轮の眷圭にのみ钙び叫すことができるˉchg_ipm により IPM を 0 笆嘲(すなわち·部らかの充哈みが敦贿されている觉轮)にした眷圭でも·ディスパッチは敦贿されず·chg_ipm により恃构した IPM の猛は·ディスパッチ稿のタスクに苞き费がれるˉ毋えば·あるタスクで IPM を 1 に恃构した稿·部らかの充哈みにより侍のタスクに磊り仑わると·磊り仑わった稿のタスクでも IPM は 1 になるˉchg_ipm をサポ〖トするために·充哈みハンドラの叫掐庚借妄などにオ〖バヘッドを栏じているˉそこで·SUPPORT_CHG_IPM というマクロにより·これらのサ〖ビスコ〖ルをサポ〖トするかどうかを磊り仑えられるようにしているˉSUPPORT_CHG_IPM は·cpu_config.h の面で #define されているˉSH3巴赂の充哈みマスクの恃构ˇ徊救のためのサ〖ビスコ〖ルの慌屯は肌の奶りˉ(1) chg_ipm 充哈みマスクの恃构≮C咐胳API≯ ER ercd = chg_ipm(IPM ipm);≮パラメ〖タ≯ IPM ipm 肋年すべき IPM の猛≮リタ〖ンパラメ〖タ≯ ER ercd エラ〖コ〖ド≮エラ〖コ〖ド≯ E_CTX コンテキストエラ〖 E_PAR パラメ〖タエラ〖(ipm が稍赖)≮怠墙≯IPM(Interrupt Priority Mask)を ipm で回年された猛に肋年するˉ回年した猛が 0×14ないし15笆嘲の眷圭·E_PARエラ〖となるˉIPM を 1×MAX_IPM -1 に肋年した眷圭でも·ディスパッチは敦贿されないˉまた·肋年した IPM の猛は·ディスパッチ敦贿稿も苞き费がれるˉなお·このサ〖ビスコ〖ルを脱いて·IPM を MAX_IPM (すべての充哈みを敦贿)に肋年することはできないˉIPM を MAX_IPM にしたい眷圭には·loc_cpu を蝗うべきであるˉこのサ〖ビスコ〖ルは·タスクコンテキストで CPUロック豺近觉轮の箕のみ钙び叫すことができるˉ润タスクコンテキストや CPUロック觉轮で钙び叫した眷圭には·E_CTXエラ〖となるˉ(2) get_ipm 充哈みマスクの徊救≮C咐胳API≯ ER ercd = get_ipm(IPM *p_ipm);≮パラメ〖タ≯ なし≮リタ〖ンパラメ〖タ≯ ER ercd エラ〖コ〖ド IPM ipm 附哼の IPM の猛
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -