MCU
小さなRTOSみたいなものを動かす/1 システム初期化
小さなRTOSみたいなものを動かす/2 ディスパッチ処理
小さなRTOSみたいなものを動かす/3 タイマー割り込み
小さなRTOSみたいなものを動かす/4 システムコール(1)
小さなRTOSみたいなものを動かす/5 システムコール(2)
小さなRTOSみたいなものを動かす/6 システムコール(3)
小さなRTOSみたいなものを動かす/7 システムコール(4)
小さなRTOSみたいなものを動かす/8 インクルード・ファイル

小さなRTOSみたいなものを動かす/5 システムコール(2)

個々の処理が、あまり大きくないので、並べてあげていきます。

00376         ;
00377         ;-------------------------------------------------------------
00378         ; 割り込み禁止
00379         ;-------------------------------------------------------------
00380         .global _dis_int
00381 _dis_int:
00382         orc     #0x80,ccr               ; 割り込み禁止
00383         rts                             ;
00384         ;
00385         ;-------------------------------------------------------------
00386         ; 割り込み許可
00387         ;-------------------------------------------------------------
00388         .global _ena_int
00389 _ena_int:
00390         andc    #0x7F,ccr               ; 割り込み許可
00391         rts                             ;
00392         ;
00393         ;-------------------------------------------------------------
00394         ; ディスパッチ禁止
00395         ;-------------------------------------------------------------
00396         .global _dis_dsp
00397 _dis_dsp:
00398         mov.b   @os_sys_sts,r0l         ; ディスパッチ禁止フラグのセット
00399         or.b    #OS_DLY_DSP,r0l         ;
00400         mov.b   r0l,@os_sys_sts         ;
00401         rts                             ;
00402         ;
00403         ;-------------------------------------------------------------
00404         ; ディスパッチ許可
00405         ;-------------------------------------------------------------
00406         .global _ena_dsp
00407 _ena_dsp:
00408         mov.b   @os_sys_sts,r0l         ; ディスパッチ禁止フラグのクリア
00409         and.b   #~OS_DLY_DSP,r0l        ;
00410         mov.b   r0l,@os_sys_sts         ;
00411         jmp     os_dispatch             ; ディスパッチの必要があれば行う
00412         ;
00413         ;-------------------------------------------------------------
00414         ; 割り込み処理開始
00415         ;-------------------------------------------------------------
00416         .global _INT_ENT
00417 _INT_ENT:
00418         push.w  r0                      ; 割り込みネストカウンタ更新
00419         orc     #0x80,ccr               ; 割り込み禁止
00420         mov.w   @os_int_nest,r0         ;
00421         inc.w   #1,r0                   ;
00422         mov.w   r0,@os_int_nest         ;
00423         pop.w   r0                      ;
00424         rts                             ;
00425         ;
00426         ;-------------------------------------------------------------
00427         ; 割り込み処理終了
00428         ;-------------------------------------------------------------
00429         .global _RET_INT
00430 _RET_INT:
00431         push.w  r0                      ;
00432         orc     #0x80,ccr               ; 割り込み禁止
00433         mov.w   @os_int_nest,r0         ; 割り込みネストカウンタ更新
00434         dec.w   #1,r0                   ;
00435         mov.w   r0,@os_int_nest         ;
00436         mov.b   @os_sys_sts,r0l         ; 遅延ディスパッチ?
00437         andc    #0x7F,ccr               ; 割り込み許可
00438         and.b   #OS_DLY_DSP,r0l         ;
00439         beq     ret_in9                 ; ディスパッチ要求なし
00440         pop.w   r0                      ;
00441         jmp     os_dispatch             ;
00442 ret_in9:
00443         pop.w   r0                      ;
00444         rts                             ;
00445         ;
00446         ;-------------------------------------------------------------
00447         ; システムタイマー値セット
00448         ;
00449         ; INP: er0にセットする値
00450         ; OUT:
00451         ;-------------------------------------------------------------
00452         .global _set_tim
00453 _set_tim:
00454         mov.l   er0,@os_sys_timer       ;
00455         rts                             ;
00456         ;
00457         ;-------------------------------------------------------------
00458         ; システムタイマー値取得
00459         ; INP:
00460         ; OUT: er0に取得した値
00461         ;-------------------------------------------------------------
00462         .global _get_tim
00463 _get_tim:
00464         mov.l   @os_sys_timer,er0       ;
00465         rts                             ;
00466         ;
00467         ;-------------------------------------------------------------
00468         ; 自タスクID取得-実行中タスクが自タスクである
00469         ; INP:
00470         ; OUT: er0に取得した値
00471         ;-------------------------------------------------------------
00472         .global _get_tid
00473 _get_tid:
00474         sub.l   er0,er0                 ;
00475         mov.b   @os_cur_task,r0l        ;
00476         rts                             ;


小さなRTOSみたいなものを動かす/6

最終更新のRSS
Last-modified: 2010-03-26 (金) 17:55:48 3341日前
HTML convert time: 0.029 sec.