summaryrefslogtreecommitdiff
path: root/src/arch/msp430fr5994lp/model.py
blob: 525ecb7875a71e38a2c00bb9998b8f032ace31d7 (plain)
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
#!/usr/bin/env python3
#
# Copyright 2020 Daniel Friesel
#
# SPDX-License-Identifier: BSD-2-Clause

import numpy as np
import sys

# include/arch/msp430fr5969lp/driver/timer.h
def get_timer_frequency(f_cpu, f_timer):
    if f_cpu == 16000000:
        ta0_main_div = 8
    elif f_cpu == 8000000:
        ta0_main_div = 4
    elif f_cpu == 4000000:
        ta0_main_div = 2
    elif f_cpu == 1000000:
        ta0_main_div = 1
    else:
        raise ValueError("Invalid f_cpu")

    if f_cpu == 1000000:
        if f_timer >= 1000:
            divisor = 1
            counter = 1000 / (f_timer / 1000)
        elif f_timer >= 20:
            divisor = 1
            counter = 1000000 / f_timer
        else:
            divisor = 8 * 2
            counter = 62500 / f_timer
    else:
        if f_timer >= 1000:
            divisor = ta0_main_div * 1
            counter = 2000 / (f_timer / 1000)
        else:
            divisor = ta0_main_div * 1
            counter = 2000000 / f_timer

    return f_cpu / divisor / int(counter)

module = sys.argv[1]

if module == 'f_timer' and len(sys.argv) == 4:
    try:
        f_cpu = int(sys.argv[2])
        f_timer = int(sys.argv[3])
    except:
        sys.exit(0)
    if f_cpu != 0 and f_timer != 0:
        print('{:.2f}'.format(get_timer_frequency(f_cpu, f_timer)))