|
★★k-mix1601のソフトウェア★★
**** 全体構成 ****
k-mix1601はCPUにH8/3048Fを使用しています。ソフトウェアは大きく分けて
ブートプログラム(Bios)とアプリケーションプログラムにわかれますが、
入出力の様々なライブラリはブートプログラムに含まれており、その機能を
利用してアプリケーションプログラムを構成しています。
開発環境としては cygwin上でH8用のgccを利用して開発しました。newlibは
プログラムサイズが巨大になるので、その機能をほとんど使用していません。
cygwin-1.0.0
gcc-2.95.2
binutils-2.10.1
newlib-1.8.1
**** Bios ****
Biosは、H8/3048Fの内部フラッシュメモリに書き込まれており、
基本的な設定を行なってアプリケーションソフトウェアを起動する役割と、
アプリケーションのメンテナンス(バージョンアップ)等を行なうことのできる
シェル、各種ライブラリを提供する役割を持っています。
- (1) 起動
-
起動に関しては特に特別なことはせず、シリアル通信の設定、
H8/3048F内臓周辺モジュールのうち最低限の設定を行なってから、
アプリケーション用フラッシュメモリのチェックを行ない、アプリケーションが
書き込まれていたらメインメモリにロードしてアプリケーションを実行します。
アプリケーションが実行されたらBios本体は基本的に何もしません。
なお、あらかじめkmix-1601とPCをシリアル通信接続して端末ソフトを
起動しておき、スペースを押しながら電源を投入するとシェルモードが
起動します。
- (2) シェル
-
Biosはアプリケーションのメンテナンス等や動作チェックを行なうことが
できるよう、コマンドヒストリ付きのシェルモードが備わっています。
kmix-1601とPCの間をシリアル通信接続して端末ソフト(TeraTerm等)を
起動しておき、、電源起動時にスペースキーを押しっぱなしにするとシェルモード
が起動し、リスト1のように端末ソフトに表示されます。なお、端末ソフトは、
3800bps、8bit Data、1stop bit、Parityなしに設定しておきます。
"ls"と入力すると、使用できるコマンドが表示されます。
リスト1:シェルモードの起動
***************************************
* K-mix Boot *
* Ver. 0.4 *
* 2004. 3.24 *
***************************************
KmixBoot>
- (3) ライブラリ関数
-
Biosにはボリュームコントロール、LCD制御、7segmentLED制御、
フロントパネルの各種入力、シリアル通信関連等のハードウェア制御ライブラリ
が多数含まれています。ここではその代表的なものを紹介します。詳細は
ソースコードをご覧ください。
システム操作
|
panelLockOnOff(), mnsetoff(), mnseton(), chsetoff(), chseton()
BeepEnable(), BeepDisable(), getBeepLen(), Beep(), setBeepLength(),
setContrast()
|
フロントパネル入力
|
swcheck(), checkPush(), setdpmode(), checkVolUp()
|
システムリソース
|
sysParamInit(), readRom(), sysParamRec(), getStartMode(), setStartMode()
sciSetBaud(), getSciBaud(), getSciDataLen(), getSciParity(),
getSciStopBit(), sciSetMode(), writeLcd(), outToLcd(), lcdInit(),
initVCgRam(), initHCgRam(), wrietLcdRAM(), lcdWait(), lcdOut(),
lcdRawOut(), lcdBackspace(), lcdMoveto(), lcdCommand(),
ledoutLeft(), ledoutLeftRaw(), ledoutCenter(), ledoutCenterRaw(),
ledLampOut(), ledLampOut2(), setLedMode(), swinput(), getSwStat(),
checksw(), auxswUpdateSet(), getAuxSendSw(),
checkTimeFlag(), setBeepFreq(), getBeepFreq(), BeepOn(), BeepOff()
|
ホストPC通信
|
pcomInit(), cmd_ping(), cmd_chdsend(), cmd_chdrcv(), cmd_chrcv(),
cmd_mndsend(), cmd_mndrcv(), cmd_mnrcv(), cmd_pgm(), cmd_pgmname(),
cmd_pgmdate(), cmd_lock(), pgmInfoToPC(), pgmNGToPC(), cmd_sysreq(),
cmd_sysset(), sendComToPC(), sendSysToPC()
|
ミキシング関数
|
volinit(), resetchdata(), resetmndata(), initchdata(), initmdata(),
initauxsend(), copychdata(), copymdata(), volSet(), mainSetL(),
mainSetR(), auxRtnL(), auxRtnR(), chvolSet(), auxSendSetA(),
auxSendSetB(), toneSet(), vbufinit(), vbufInput(), vbufOutput(),
mainvolume(), phone(), auxrtn(), chvolume(), auxsend(), auxsw(),
tone(), getChDataPtr(), getMnDataPtr(), getAllChDataPtr(),
|
コマンド実行
|
miscInit(), execDispInfo(), execSysEnv(), dispSysEnv(int),
editSysEnv(), dispBeepOnOff(), editBeepOnOff(), dispBeepFreq(),
editBeepFreq(), dispBeepMsec(), editBeepMsec(), dispContrast(),
editContrast(), dispStartMode(), editStartMode(), saveSysEnv()
|
メッセージ表示
|
initmsg(), startmsg(), graphOutMain(), graphOutAuxRtn(), graphChData(),
graphOutPan(), dispChData(), graphOutCh(), graphPanVol(), numCmpOut(),
numOutCh(), numOutAuxCh(), dispVgraph(), clear_vgraph(), disp_hgraph(),
disp_start(), dispMain(), chOutNumTitle(), chOutNumAuxTitle(),
dispCH(), checkYesNo()
|
Program関数
|
pgmInit(), pgmIncDec(), savePgmData(), loadPgmData(), falshProgram(),
execSavePgm(), setAuxName(), getAuxName(), setChName(), getChName(),
waitSecLoop(), waitSecLoop2(), pgmnoWarning(), getpgmStrLoop(),
nstripPstr(), stripPstr(), pstrlen(), delStr(), refleshNameSpace(),
getPushStat(), loadPgm(), getCurPgmName(), getCurPgmDate(),
umemcpy()
|
**** ミキサー制御ソフトウェア ****
ミキサー制御ソフトウェアはいわゆるミキサーのコントロールアプリケーションです。
フロントパネルの入力およびホストPCとの通信から内部の各種音量制御や
LCD/LEDをコントロールします。
アプリケーションの起動シーケンスは以下のようになります。
- Bios→アプリケーション起動
- バックアップRAM検査および保存してあるパラメータ復帰
- シリアル通信初期化
- ADC, DAC, LCD, LED, 各種入力スイッチ、ボリューム制御変数初期化
- その他変数、システムリソース初期化
- 初期化ループ:LCDへの起動メッセージ出力とボリュームのデフォルト設定
- メインループ:ミキサー制御ループ
4msec毎:通信メンテナンス
8msec毎:ビープ音制御
16msec毎:スイッチ状態、LED出力制御
32msec毎:LCD出力制御
- 2msec毎の割り込み処理
実際のAD入力、Volume設定LCD駆動等を行なう。
各種操作関数の実態はほとんどBiosのライブラリを使用しており、
ミキサー制御ソフトウェアではそのライブラリを使用して、全体の
制御の流れをコントロールするような形で動作しています。
|