-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathasrTimer.cpp
More file actions
71 lines (56 loc) · 3.31 KB
/
asrTimer.cpp
File metadata and controls
71 lines (56 loc) · 3.31 KB
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
/********************************************************************/
/* Description: GPTを用いたインターバルタイマの設定 */
/* File: asrTimer.cpp */
/* Date: 2024/07/19 */
/* Author: Takashi YOSHIOKA */
/********************************************************************/
/********************************************************************/
/* ヘッダファイルのインクルード */
/********************************************************************/
#include <IRQManager.h>
#include "asrTimer.h"
#include "controlFunction.h"
/********************************************************************/
/* ソース内グローバルクラスの定義 */
/********************************************************************/
static GenericIrqCfg_t cfg;
/********************************************************************/
/* ソース内関数のプロトタイプ宣言 */
/********************************************************************/
static void MYISR_GPT0_INT(void);
/********************************************************************/
/* ASRスキャン割り込み関数の外部宣言 */
/********************************************************************/
extern void asr_scan(void);
/********************************************************************/
/* Description: GPTの初期化 */
/* Function: setup_asr_scan */
/* Arguments: なし */
/* Return value: なし */
/********************************************************************/
void setup_asr_scan(void)
{
// GPTの設定
R_GPT0->GTCR_b.CST = 0; // カウントストップ
R_GPT0->GTCR_b.MD = 0b000; // TIMER_MODE_SAWTOOTH_WAVE_PWM
R_GPT0->GTCR_b.TPCS = 0b010; // PCLK/16 = 3MHz
R_GPT0->GTPR_b.GTPR = PERIOD_ASR_SET;
R_GPT0->GTCNT_b.GTCNT = 0;
// 割り込み設定
cfg.irq = FSP_INVALID_VECTOR; // 良く分からんが固定値
cfg.ipl = 4; // 割り込み優先度 0(最高)-15(最低)
cfg.event = ELC_EVENT_GPT0_COUNTER_OVERFLOW; // 割り込み要因としてGPT0オーバーフロー割り込みを指定
IRQManager::getInstance().addGenericInterrupt(cfg, MYISR_GPT0_INT); // 割り込み要因のセット
R_GPT0->GTCR_b.CST = 1; // カウントスタート
}
/********************************************************************/
/* Description: 割り込みサービスルーチン(GPT0オーバーフロー割り込み) */
/* Function: MYISR_GPT0_INT */
/* Arguments: なし */
/* Return value: なし */
/********************************************************************/
void MYISR_GPT0_INT(void)
{
asr_scan(); // ASRスキャン割り込み処理
R_ICU->IELSR_b[cfg.irq].IR = 0; // 割り込み要因フラグのクリア
}