NetBSDの時間管理はFreeBSDと同じでタイマー割り込みでhardclock()をよぶ仕組みでした。
またプロファイル用にstatclock()というのもあるようですが、プロファイルを使わなければダミーでも良さそうです。
これとは別にtcというのがあって、登録した関数でカウンター値を返すし仕組みです。FreeBSDにもあります。
Comcertoはたくさんタイマーがあるので、それぞれTimer0,Timer1,Timer2で実装してみました。
tcの周波数はAHBのクロックの165MHzでした。ストップウオッチで計って確認しました。
デフォルトではhardclock()は10ms毎に呼びます。
おそらくhardclockだけでもいけるけど、10ms単位での時間しか出なくなるのでtcが必要なようです。
tcのtc_get_timecountは0から0xffffffffの値を返すようにします。タイマーがデクリメントで動いている場合は否定(~)にして返します。
逆だと以下のメッセージが出るようです。
[ 4.5773560] WARNING: negative runtime; monotonic clock has gone backwards
割り込みコントローラーの前にタイマーがattachされると割り込みが受けられなくなると思ったのですが、タイマーの初期化はすべてのデバイスのプローブが送ってからタイマーはcpu_initclocks()で行うようです。
armv7以降は標準でタイマーが入り、共通ルーチンがあるので、個別に作る必要はありません。
タイマーの制御はあまりないので、複数のタイマーを一つのデバイスで制御する事も出来ますし、それぞれのタイマーを別々のデバイスにすることもできます。