090206

|



今回作成する5個のうち3つまで組み立てました。これだけ合い口があると、ボ
ンドを塗るだけでもかなり手間がかかります。あと二つ!



3664の続きです。周辺デバイスについて。 3664のシリアルコミュニケーションユニットはSCI3。この3はチャネル番号ではなく、'SCI3'というデバイス名。これは結構大きな変更が入っている。
TDRに書きこんだ後の、TDREビットのクリア、RDRを読みこんだ後のRDRFビットの クリアをコントローラ側で行なうように変更されているので、ユーザ側でビット を落としてはだめ。(出力だと、ダブって出力されるようなことになります。)
後はRXI,TXI,ERI,TEIの割り込み要因が3052ではそれぞれ別のベクタだったのが 一つのベクタになってSSRを参照するようになっている。これは妥当なとこかな。
タイマは
Timer A
オーバーフロー時の設定でその後カウントするかしないかが決まる。クリアは
TMR3,TMR2ビット(プリスケーラもリセットされる) カウンタはリードオンリー
オーバーフローフラグは割り込みコントローラのIRRを参照TCAは内部クロック
によりカウントアップ。時計用タイムベースの時は参照できない。
時計用の時はオーバーフローの割りこみのみ。

Timer V
動作クロックを指定するとカウントしはじめる。
止めるにはクロックの入力を禁止に設定する。

カウンタはR/W
オーバーフローフラグはTCSRV

Timer W
3052のITUに近い。
Timer A,Vはレジスタの使い方がとりわけトリッキー。単純なデバイスだし多少 びっくりするくらいで、このくらいでもいいのかもねというような気もする。
ということで、なんとかカーネルは動いた。ほとんどメモリ2KBを使いきってるけど。 3スレッドくらいまでならいけるかな。

$ tip hmon38400
connected
stack_start: 0xffffff7c
ROM data: 0x2c58-0x2c70
RAM data: 0xfffff780-0xfffff798 24byte
bss: 0xfffff798-0xfffffe7a 1762byte
NMI return address|CCR: 800003aa
div=125 mult=63: 100msec 238-7
,,,,,,,,,,board_device_init
regs.sp = f94c
regs.sp = fb44
board_main
>hoelp
[0] help
3: 270
2: 262
1: 162
---Ready Queue---
<0>: 
<1>: 
<2>: 
<3>: 1 
---Thread Status---
id   pri(used/total)
[3] W 1 (114/384) sci send
[2] W 0 (122/384) sci recv
[1] R 3 (222/384) root
---Monitor---
W ringbuffer
        lock : 
        event: 3(sci send) 
avaliable command: help reset 
>oo