KL16系列寄存器配置详解与增补手册

需积分: 9 5 下载量 132 浏览量 更新于2024-07-19 收藏 9.22MB PDF 举报
本资源是一份来自Freescale Semiconductor, Inc.的KL16系列处理器的Sub-Family Reference Manual,文档编号为KL16P80M48SF4RM Rev.3.3,发布日期为2015年6月。这份手册是关于KL16系列芯片的详细参考指南,主要包括各个功能模块寄存器的配置说明,旨在帮助用户理解和操作该系列的硬件。 该手册分为两个部分:一是修订3.2版本的手册的补充资料,紧跟封面页之后,记录了从旧版到3.3版本的变化;二是修订3.2版本的手册本身,包含了完整的功能描述和技术细节。特别值得注意的是,此版本还包含了一个Addendum,即Addendum Rev.0 to the KL16 Sub-Family Reference Manual, Rev.3.2,发布于同一年,其主要目的是列出对原有3.2版本手册所做的更改,以确保信息的准确性和一致性。 核心内容之一是Multipurpose Clock Generator (MCG)块图,它在之前版本中可能缺失。该图在第24.1.1节,页面379处被添加,以便用户能更好地理解MCG的工作原理,包括其输出时钟(MCGOUTCLK)、输入时钟(MCGIRCLK)、分频时钟(MCGFFCLK)以及用于调整频率的DCO OUT。此外,文档还提及了Phase Detector和Charge Pump组件,这些是MCG模块中的关键部分,它们负责时钟信号的相位校准和频率调节,对于实现精确的系统时钟管理至关重要。 在整个手册中,读者可以找到关于电源管理、中断系统、外设接口、存储器映射以及低功耗模式等方面的详细介绍,这些都是KL16系列处理器设计者和开发者进行系统集成和调试的重要参考资料。通过阅读和参考这份文档,开发人员能够优化芯片性能,确保系统稳定运行,并了解如何适当地配置寄存器以满足特定的应用需求。 这份KL16 Sub-Family Reference Manual是一个技术深度颇高的资源,提供了深入的硬件设计和编程指导,对于使用KL16系列芯片的工程师来说,是不可或缺的工具。通过学习和应用其中的知识,开发者可以提升系统的效率,减少错误,并确保符合规格要求。

帮我给每一行代码添加注释 class DeepKalmanFilter(nn.Module): def __init__(self, config): super(DeepKalmanFilter, self).__init__() self.emitter = Emitter(config.z_dim, config.emit_hidden_dim, config.obs_dim) self.transition = Transition(config.z_dim, config.trans_hidden_dim) self.posterior = Posterior( config.z_dim, config.post_hidden_dim, config.obs_dim ) self.z_q_0 = nn.Parameter(torch.zeros(config.z_dim)) self.emit_log_sigma = nn.Parameter(config.emit_log_sigma * torch.ones(config.obs_dim)) self.config = config @staticmethod def reparametrization(mu, sig): return mu + torch.randn_like(sig) * sig @staticmethod def kl_div(mu0, sig0, mu1, sig1): return -0.5 * torch.sum(1 - 2 * sig1.log() + 2 * sig0.log() - (mu1 - mu0).pow(2) / sig1.pow(2) - (sig0 / sig1).pow(2)) def loss(self, obs): time_step = obs.size(1) batch_size = obs.size(0) overshoot_len = self.config.overshooting kl = torch.Tensor([0]).to(self.config.device) reconstruction = torch.Tensor([0]).to(self.config.device) emit_sig = self.emit_log_sigma.exp() for s in range(self.config.sampling_num): z_q_t = self.z_q_0.expand((batch_size, self.config.z_dim)) for t in range(time_step): trans_loc, trans_sig = self.transition(z_q_t) post_loc, post_sig = self.posterior(trans_loc, trans_sig, obs[:, t]) z_q_t = self.reparametrization(post_loc, post_sig) emit_loc = self.emitter(z_q_t) reconstruction += ((emit_loc - obs[:, t]).pow(2).sum(dim=0) / 2 / emit_sig + self.emit_log_sigma * batch_size / 2).sum() if t > 0: over_loc, over_sig = self.transition(overshooting[:overshoot_len - 1]) over_loc = torch.cat([trans_loc.unsqueeze(0), over_loc], dim=0) over_sig = torch.cat([trans_sig.unsqueeze(0), over_sig], dim=0) else: over_loc = trans_loc.unsqueeze(0) over_sig = trans_sig.unsqueeze(0) overshooting = self.reparametrization(over_loc, over_sig) kl = kl + self.kl_div(post_loc.expand_as(over_loc), post_sig.expand_as(over_sig), over_loc, over_sig) / min(t + 1, self.config.overshooting) reconstruction = reconstruction / self.config.sampling_num kl = kl / self.config.sampling_num return reconstruction, kl

2023-02-22 上传