-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdacMonitor.cpp
More file actions
58 lines (47 loc) · 2.86 KB
/
dacMonitor.cpp
File metadata and controls
58 lines (47 loc) · 2.86 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
/********************************************************************/
/* Description: DAC12を用いたアナログモニタの設定 */
/* File: dacMonitor.cpp */
/* Date: 2024/07/09 */
/* Author: Takashi YOSHIOKA */
/********************************************************************/
/********************************************************************/
/* ヘッダファイルのインクルード */
/********************************************************************/
#include "dacMonitor.h"
/********************************************************************/
/* Description: DAC12の初期化 */
/* Function: setup_dac_monitor */
/* Arguments: なし */
/* Return value: なし */
/********************************************************************/
void setup_dac_monitor(void)
{
R_PMISC->PWPR_b.B0WI = 0; // PFSロック解除(1)
R_PMISC->PWPR_b.PFSWE = 1; // PFSロック解除(2)
R_PFS->PORT[0].PIN[14].PmnPFS_b.PMR = 0; // A0(=D14)(P014)を汎用入出力に設定
R_PFS->PORT[0].PIN[14].PmnPFS_b.PDR = 0; // A0(=D14)(P014)を入力端子として使用
R_PFS->PORT[0].PIN[14].PmnPFS_b.ASEL = 0; // A0(=D14)(P014)をアナログ入力端子として使用しない
R_PMISC->PWPR_b.PFSWE = 0; // PFSロック(1)
R_PMISC->PWPR_b.B0WI = 1; // PFSロック(2)
R_DAC->DADR[0] = DACOUT_CEN; // 中央値で初期化
R_DAC->DADPR_b.DPSEL = 0; // 0:フォーマット右詰め
R_DAC->DAADSCR_b.DAADST = 0; // 0:DAC12とADC14の動作は同期させない
R_DAC->DAVREFCR_b.REF = 0b000; // 基準電圧変更前に一度ゼロイングの必要あり
R_DAC->DAVREFCR_b.REF = 0b001; // 0b001:基準電圧選択 AVCC0--AVSS0
R_DAC->DACR_b.DAOE0 = 1; // DA出力許可
}
/********************************************************************/
/* Description: DAC12からのアナログモニタ値出力 */
/* Function: set_dac_out */
/* Arguments: int16_t型 値域:-2048 ~ 2047 */
/* Return value: なし */
/********************************************************************/
void set_dac_out(int16_t dacOutArg)
{
int16_t dacOutTmp;
dacOutTmp = dacOutArg;
if (dacOutTmp > DACOUT_MAX) dacOutTmp = DACOUT_MAX; // 引数のリミット処理
if (dacOutTmp < DACOUT_MIN) dacOutTmp = DACOUT_MIN;
dacOutTmp += DACOUT_CEN; // -2048 -- 2047 を 0 -- 4095にオフセット
R_DAC->DADR[0] = dacOutTmp;
}