2个不稳定版本
0.2.0 | 2020年3月16日 |
---|---|
0.1.0 | 2020年3月8日 |
#1869 in 嵌入式开发
70KB
1.5K SLoC
SAMD Timer
Microchip SAMD和SAME MCU上TCC/TC外设的高层API。
此库可使用(即我正在使用它),但可能包含错误。使用风险自担。
此库提供了用于安全地处理TC和TCC外设的Timer
和ControlTimer
类型。完全支持波形生成功能、双缓冲和捕获模式。
比atsamd-hal
提供的抽象提供了更细粒度的计时器控制。只需将库添加到项目中;它与atsamd-hal
时钟系统兼容。
用法
将以下行添加到您的Cargo.toml
中。
samd-timer = "0.2.0"
以下功能标志控制您针对哪个MCU变体。
名称 | # TC | # TCC | 板子 |
---|---|---|---|
samd21g18a | 3 | 3 | Circuit Playground Express, Feather M0, Metro M0, MKR ZERO, SAMD21 Mini, SODAQ ONE |
samd21e18a | 3 | 3 | Gemma M0, Trinket M0, Serpente |
samd21j18a | 5 | 3 | SODAQ SARA AFF |
samd51j19a | 6 | 5 | EdgeBadge, Feather M4, Metro M4 |
samd51j20a | 6 | 5 | PyPortal |
samd51g19a | 4 | 3 | ItsyBitsy M4, Trellis M4 |
same54p20a | 8 | 5 | PathfinderZA Proto1 |
示例
use atsamd_hal::target_device::Peripherals;
use atsamd_hal::clock::GenericClockController;
use samd_timer::{TimerConfig, Timer, Prescaler, Synchronization, TimerWaveGen};
fn main() {
let mut peri = Peripherals.take().unwrap();
let mut clocks = GenericClockController::with_internal_32kosc(
peri.GCLCK,
&mut peri.MCLK,
&mut peri.OSC32KCTRL,
&mut peri.OSCCTRL,
&mut peri.NVMCTRL
);
let timer_clock = clocks.gclk1();
let tc_clock = clocks.tc0_tc1(&timer_clock).unwrap();
/// Create a 8-bit width timer configuration.
let mut config = TimerConfig::count8();
config.prescaler(Prescaler::Div64)
.sync(Synchronization::Prescaler)
.wave_gen(TimerWaveGen::NPWM);
/// Initialise the timer instance.
let mut timer = config.tc0(&mut peri.MCLK, &tc_clock, peri.TC0);
// Output a PWM wave with a period of 2 secs and duty cycle of 50%
timer.set_period(999);
timer.set_cc0(499);
timer.enable();
}
功能
TCC
- 单次操作
- 中断控制
- 方向改变
- 波形生成
- 波形输出反转
- 抖动
- 死区时间插入生成器
- 输出矩阵
- 图案生成
- 故障控制
- 事件控制
- 主从操作
- 双缓冲
TC
- 8位模式(包括PER寄存器)
- 16位模式
- 32位模式
- 中断控制
- 单次操作
- 方向改变
- 波形生成
- 波形输出反转
- 捕获通道
- 事件控制
- 双缓冲(SAMx5x)
- 捕获模式(SAMx5x)
- 捕获引脚(SAMx5x)
许可协议
samd-timer
采用MIT许可协议分发。请参阅LICENSE文件以获取许可协议的完整内容。
依赖关系
~3.5–9MB
~243K SLoC