-
-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy pathicu_mgr.hpp
105 lines (92 loc) · 3.62 KB
/
icu_mgr.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#pragma once
//=========================================================================//
/*! @file
@brief RX13T/RX23T/RX24T/RX24U グループ・割り込みマネージャー
@author 平松邦仁 ([email protected])
@copyright Copyright (C) 2016, 2024 Kunihito Hiramatsu @n
Released under the MIT license @n
https://github.com/hirakuni45/RX/blob/master/LICENSE
*/
//=========================================================================//
#include "common/device.hpp"
#include "RX600/icu_utils.hpp"
namespace device {
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
/*!
@brief 割り込みマネージャー・クラス
*/
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
struct icu_mgr {
//-----------------------------------------------------------------//
/*!
@brief 割り込みタスクを設定
@param[in] vec 割り込み要因
@param[in] task 割り込みタスク
*/
//-----------------------------------------------------------------//
static void set_task(ICU::VECTOR vec, icu_utils::ITASK task) noexcept {
set_interrupt_task(task, static_cast<uint32_t>(vec));
}
//-----------------------------------------------------------------//
/*!
@brief 割り込みを設定する(ベクター別)
@param[in] vec 割り込みベクター
@param[in] lvl 割り込みレベル(0の場合、割り込み禁止)
*/
//-----------------------------------------------------------------//
static void set_level(ICU::VECTOR vec, ICU::LEVEL lvl) noexcept
{
bool ena = lvl != ICU::LEVEL::NONE ? true : false;
ICU::IER.enable(vec, 0);
ICU::IPR[vec] = static_cast<uint8_t>(lvl);
ICU::IER.enable(vec, ena);
}
//-----------------------------------------------------------------//
/*!
@brief 割り込みレベルを取得する
@param[in] vec 割り込み要因
@return 割り込みレベル
*/
//-----------------------------------------------------------------//
static auto get_level(ICU::VECTOR vec) noexcept {
return static_cast<ICU::LEVEL>(ICU::IPR[vec]);
}
//-----------------------------------------------------------------//
/*!
@brief 割り込み設定(通常ベクター)
@param[in] vec 割り込み要因
@param[in] task 割り込みタスク
@param[in] lvl 割り込みレベル(0の場合、割り込み禁止)
@return ベクター番号
*/
//-----------------------------------------------------------------//
static ICU::VECTOR set_interrupt(ICU::VECTOR vec, icu_utils::ITASK task, ICU::LEVEL lvl) noexcept
{
set_task(vec, task);
set_level(vec, lvl);
return vec;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
/*!
@brief グループ割り込みに対するベクタを返すダミー
@return グループベクターでは無いので「NONE]を返す。
*/
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
static ICU::VECTOR get_group_vector(ICU::VECTOR vec) noexcept
{
return ICU::VECTOR::NONE;
}
//-----------------------------------------------------------------//
/*!
@brief グループ割り込み設定のダミー
@param[in] idx インデックス
@param[in] task 割り込みタスク(※nullptr なら無効)
@return グループ割り込み以外なら「false」
*/
//-----------------------------------------------------------------//
static bool install_group_task(ICU::VECTOR idx, icu_utils::GTASK task) noexcept
{
return false;
}
};
}