gossamer 0.0.1
a very lightweight app framework for SAMD and SAML chips
Loading...
Searching...
No Matches
tcc.h
1
2/*
3 * MIT License
4 *
5 * Copyright (c) 2022 Joey Castillo
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal
9 * in the Software without restriction, including without limitation the rights
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 * copies of the Software, and to permit persons to whom the Software is
12 * furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included in all
15 * copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 * SOFTWARE.
24 */
25
26#pragma once
27
28#include <stdint.h>
29#include <stdbool.h>
30#include "sam.h"
31
38typedef enum {
39 TCC_PRESCALER_DIV1 = 0,
40 TCC_PRESCALER_DIV2 = 1,
41 TCC_PRESCALER_DIV4 = 2,
42 TCC_PRESCALER_DIV8 = 3,
43 TCC_PRESCALER_DIV16 = 4,
44 TCC_PRESCALER_DIV64 = 5,
45 TCC_PRESCALER_DIV256 = 6,
46 TCC_PRESCALER_DIV1024 = 7
47} tcc_prescaler_value_t;
48
49typedef enum {
50 TCC_WAVEGEN_NORMAL_FREQUENCY = 0,
51 TCC_WAVEGEN_MATCH_FREQUENCY = 1,
52 TCC_WAVEGEN_NORMAL_PWM = 2,
53// These modes may be supported in the future, but I don't have a use for them right now.
54 // TCC_WAVEGEN_DUAL_SLOPE_TOP = 7,
55 // TCC_WAVEGEN_DUAL_SLOPE_BOTTOM = 5,
56 // TCC_WAVEGEN_DUAL_SLOPE_BOTH = 6,
57 // TCC_WAVEGEN_DUAL_SLOPE_CRITICAL = 4,
58} tcc_wavegen_t;
59
60typedef enum {
61 TCC_OUTPUT_MATRIX_MODULO_4 = 0,
62 TCC_OUTPUT_MATRIX_MODULO_2 = 1,
63 TCC_OUTPUT_MATRIX_ALL_CC0 = 2,
64 TCC_OUTPUT_MATRIX_WO0_CC0_OTHERS_CC1 = 3,
65} tcc_output_matrix_t;
66
67typedef enum {
68 TCC_CHANNEL_POLARITY_NORMAL = 0,
69 TCC_CHANNEL_POLARITY_INVERTED = 1,
70} tcc_channel_polarity_t;
71
92bool tcc_init(uint8_t instance, generic_clock_generator_t clocksource, tcc_prescaler_value_t prescaler);
93
99void tcc_set_run_in_standby(uint8_t instance, bool runStandby);
100
119void tcc_set_wavegen(uint8_t instance, tcc_wavegen_t mode);
120
136void tcc_set_output_matrix(uint8_t instance, tcc_output_matrix_t mode);
137
149void tcc_set_channel_polarity(uint8_t instance, uint8_t channel, tcc_channel_polarity_t polarity);
150
154void tcc_enable(uint8_t instance);
155
160bool tcc_is_enabled(uint8_t instance);
161
173void tcc_set_period(uint8_t instance, uint32_t period, bool buffered);
174
180uint32_t tcc_get_period(uint8_t instance);
181
193void tcc_set_cc(uint8_t instance, uint8_t channel, uint32_t value, bool buffered);
194
200void tcc_set_count(uint8_t instance, uint32_t value);
201
207uint32_t tcc_get_count(uint8_t instance);
208
221void tcc_stop(uint8_t instance);
222
227void tcc_retrigger(uint8_t instance);
228
233void tcc_update(uint8_t instance);
234
238void tcc_disable(uint8_t instance);
239
void tcc_set_period(uint8_t instance, uint32_t period, bool buffered)
Sets the period of the TCC.
Definition tcc.c:85
void tcc_disable(uint8_t instance)
Disables the TCC, but retains all its settings.
Definition tcc.c:145
void tcc_set_run_in_standby(uint8_t instance, bool runStandby)
Sets whether the TCC should run in standby mode.
Definition tcc.c:56
void tcc_set_count(uint8_t instance, uint32_t value)
Sets the value of the counter.
Definition tcc.c:119
uint32_t tcc_get_period(uint8_t instance)
Gets the period of the TCC.
Definition tcc.c:100
uint32_t tcc_get_count(uint8_t instance)
Gets the current value of the counter.
Definition tcc.c:124
bool tcc_init(uint8_t instance, generic_clock_generator_t clocksource, tcc_prescaler_value_t prescaler)
Enables the peripheral clock for the TCC and clocks it with the selected clock source....
Definition tcc.c:33
void tcc_set_output_matrix(uint8_t instance, tcc_output_matrix_t mode)
Sets the output matrix for the TCC.
Definition tcc.c:64
bool tcc_is_enabled(uint8_t instance)
Checks whether the TCC is enabled.
Definition tcc.c:81
void tcc_enable(uint8_t instance)
Enables the TCC. Make sure to call tcc_init first to set it up.
Definition tcc.c:76
void tcc_set_wavegen(uint8_t instance, tcc_wavegen_t mode)
Sets the waveform generation mode for the TCC.
Definition tcc.c:60
void tcc_stop(uint8_t instance)
Issues a STOP command to the TCC.
Definition tcc.c:130
void tcc_update(uint8_t instance)
Issues an UPDATE command to the TCC.
Definition tcc.c:140
void tcc_set_channel_polarity(uint8_t instance, uint8_t channel, tcc_channel_polarity_t polarity)
Sets the polarity of a channel.
Definition tcc.c:68
void tcc_set_cc(uint8_t instance, uint8_t channel, uint32_t value, bool buffered)
Sets the value of a compare channel.
Definition tcc.c:104
void tcc_retrigger(uint8_t instance)
Issues a RETRIGGER command to the TCC.
Definition tcc.c:135