OSDN Git Service

ファイル名~Init.c/hを~.c/hに変更
[mochi/master.git] / src / lib / libmk / LibMkTimer.c
1 /******************************************************************************/
2 /*                                                                            */
3 /* src/lib/libmk/LibMkTimer.c                                                 */
4 /*                                                                 2019/07/28 */
5 /* Copyright (C) 2018-2019 Mochi.                                             */
6 /*                                                                            */
7 /******************************************************************************/
8 /******************************************************************************/
9 /* インクルード                                                               */
10 /******************************************************************************/
11 /* 標準ヘッダ */
12 #include <stdint.h>
13
14 /* ライブラリヘッダ */
15 #include <MLib/MLib.h>
16
17 /* カーネルヘッダ */
18 #include <kernel/timer.h>
19
20
21 /******************************************************************************/
22 /* グローバル関数宣言                                                         */
23 /******************************************************************************/
24 /******************************************************************************/
25 /**
26  * @brief       スリープ
27  * @details     指定した時間スリープする。
28  *
29  * @param[in]   usec  スリープ時間(マイクロ秒)
30  * @param[out]  *pErr エラー内容
31  *                  - MK_ERR_NONE        エラー無し
32  *                  - MK_ERR_NO_RESOURCE リソース不足
33  *
34  * @return      処理結果を返す。
35  * @retval      MK_RET_SUCCESS 成功
36  * @retval      MK_RET_FAILURE 失敗
37  *
38  * @attention   カーネルのtick時間よりも短いスリープ時間を設定した場合、tick時
39  *              間に丸められる。
40  */
41 /******************************************************************************/
42 MkRet_t LibMkTimerSleep( uint32_t usec,
43                          MkErr_t  *pErr )
44 {
45     volatile MkTimerParam_t param;
46
47     /* パラメータ設定 */
48     param.funcId = MK_TIMER_FUNCID_SLEEP;
49     param.ret    = MK_RET_FAILURE;
50     param.err    = MK_ERR_NONE;
51     param.usec   = usec;
52
53     /* カーネルコール */
54     __asm__ __volatile__ ( "mov esi, %0\n"
55                            "int %1"
56                            :
57                            : "a" ( &param         ),
58                              "i" ( MK_TIMER_INTNO )
59                            : "esi"                   );
60
61     /* エラー内容設定 */
62     MLIB_SET_IFNOT_NULL( pErr, param.err );
63
64     return param.ret;
65 }
66
67
68 /******************************************************************************/