-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsequenceTimer.cpp
More file actions
71 lines (56 loc) · 3.37 KB
/
sequenceTimer.cpp
File metadata and controls
71 lines (56 loc) · 3.37 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: AGTを用いたインターバルタイマの設定 */
/* File: sequenceTimer.cpp */
/* Date: 2024/07/19 */
/* Author: Takashi YOSHIOKA */
/********************************************************************/
/********************************************************************/
/* ヘッダファイルのインクルード */
/********************************************************************/
#include <IRQManager.h>
#include "sequenceTimer.h"
#include "controlFunction.h"
/********************************************************************/
/* ソース内グローバルクラスの定義 */
/********************************************************************/
static GenericIrqCfg_t cfg;
/********************************************************************/
/* ソース内関数のプロトタイプ宣言 */
/********************************************************************/
static void MYISR_AGT1_INT(void);
/********************************************************************/
/* シーケンススキャン割り込み関数の外部宣言 */
/********************************************************************/
extern void sequence_scan(void);
/********************************************************************/
/* Description: AGTの初期化 */
/* Function: setup_sequence_scan */
/* Arguments: なし */
/* Return value: なし */
/********************************************************************/
void setup_sequence_scan(void)
{
// AGTの設定
R_AGT1->AGTCR_b.TSTART = 0; // カウントストップ
R_AGT1->AGTMR1_b.TMOD = 0b000; // 0b000:タイマモード
R_AGT1->AGTMR1_b.TCK = 0b001; // 0b001:AGT clock = PCKB/8 = 3MHz
R_AGT1->AGTMR2_b.LPM = 0; // 0:通常モード
R_AGT1->AGT = PERIOD_SEQ_SET;
// 割り込み設定
cfg.irq = FSP_INVALID_VECTOR; // 良く分からんが固定値
cfg.ipl = 5; // 割り込み優先度 0(最高)-15(最低)
cfg.event = ELC_EVENT_AGT1_INT; // 割り込み要因としてAGT1アンダーフロー割り込みを指定
IRQManager::getInstance().addGenericInterrupt(cfg, MYISR_AGT1_INT); // 割り込み要因のセット
R_AGT1->AGTCR_b.TSTART = 1; // カウントスタート
}
/********************************************************************/
/* Description: 割り込みサービスルーチン(AGT1アンダーフロー割り込み) */
/* Function: MYISR_AGT1_INT */
/* Arguments: なし */
/* Return value: なし */
/********************************************************************/
void MYISR_AGT1_INT(void)
{
sequence_scan(); // シーケンススキャン割り込み処理
R_ICU->IELSR_b[cfg.irq].IR = 0; // 割り込み要因フラグのクリア
}