MCU
小さなRTOSみたいなものを動かす/1 システム初期化
小さなRTOSみたいなものを動かす/2 ディスパッチ処理
小さなRTOSみたいなものを動かす/3 タイマー割り込み
小さなRTOSみたいなものを動かす/4 システムコール(1)
小さなRTOSみたいなものを動かす/5 システムコール(2)
小さなRTOSみたいなものを動かす/6 システムコール(3)
小さなRTOSみたいなものを動かす/7 システムコール(4)
小さなRTOSみたいなものを動かす/8 インクルード・ファイル
個々の処理が、あまり大きくないので、並べてあげていきます。
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 ;