讲座视频 - 周期性输入

+荐课 提问/讨论 评论 收藏
  • 视频加载中。。。
大家好,我是 John Valvano,在本视频中, 让我们讨论定时器。 时间是嵌入式系统的重要参数, 我们将看到,在本课程中, 我们实际上要在三件事情中使用时间。 在本视频中,我们将讨论如何把它们 用于周期性中断,换句话说, 定期执行一段软件指令。 在码盘模块中,我们将使用定时器作为输入 来测量周期或频率。 这将告诉我们电机的旋转速度有多快。 然后,在与该模块关联的实验中, 我们将使用定时器作为输出来生成 脉宽调制输出(PWM)。 您可以在这里的图中看到, 定时器是如此重要,以至于处理器中有很多定时器。 它们分为两级。 第一级是模块,那么我们有一、二、三、四个模块。 第二级是子模块,我们将看到,每个 模块具有多个子模块。 好,让我们继续。 请注意,定时器类似于 Systick, 但定时器的模式和配置方法远远 多于 Systick。 请注意,它之所以类似于 Systick, 是因为它有这里的常量,并且它 还有那里的计数器值。 然后,如果您愿意,可以把该常量 加载到计数器中。 它们的不同之处有很多, 其中一个不同之处是它只有16 位宽, 所以这里的定时器 A 上的定时器只有 16 位宽。 正如我说过的,我们将在整个课程中使用它。 我们将在码盘的实验中把它用于输入, 在本实验中把它用于输出, 并且我们将在本视频中 把它用于周期性中断。 现在,为了简化问题, 我们将选择系统模块时钟(SMCLK), 它的频率是总线时钟除以 4, 因此我们在本章中执行的所有操作 -- 或者我们在机器人中执行的所有操作 将具有设置为 12MHz 的 SMCLK 时钟。 因此,我们的所有时钟分辨率, 是 1/12MHz, 也就是大约83 纳秒。 好,正如我说过的,这里有大量的寄存器。 它比 Systick 更复杂。 让我们为您指出其中的几点。 首先是这里的计数器本身, 您可以看到计数器。 它是一个 16 位计数器。 我们将看到,我们可以向上计数或向下计数, 这就是我们的计数器。 这些全部是常量寄存器。 这些是常量。 我们可以看出这是一整个模块 -- 在本例中,我们可以看到这是模块 0 -- 以及所有子模块。 对于每个模块,有五个关联的引脚, 但对于每个模块,实际上有七个 关联的子模块。 我们将看到其中有很多位。 我们将看到其中有很多位。 我们将看到其中有很多位。 在本章中,我们将看到这里的触发位, 这就是触发位。 这将 -- 换句话说,该位会被置为 1 , 从而导致我们在本章中 所看到的中断。 还有与特定的子模块 0 中断相关联的 ARM 位, 还有与特定的子模块 0 中断相关联的 ARM 位, 我们将看到时钟选择位。 另外当我们指定设备时,将看到这里的其他位。 另外当我们指定设备时,将看到这里的其他位。 现在,当我们转到下一个模块时, 将讨论这些引脚,但在此模块中, 我们只讨论上面这些引脚。 好,让我们开始吧。 首先,我们将通过时钟子模块来选择定时器的时钟。 首先,我们将通过时钟子模块来选择定时器的时钟。 我们要用的是 12MHz 的时钟, 设置它的方法是,设置这里的 TA Select , 即定时器 A 时钟选择寄存器为 10, 以选择该 12MHz 时钟。 下面我们要做的是, 在我们选择 12MHz 时钟之后, 我们现在可以使它运行得更慢,因为如果我们以更慢的速度进行计数, 我们可以计量更长的时间。 因此,最基本的取舍关系存在于 时钟分辨率 -- 也就是定时器输入/输出或者周期性中断时可以设置的最小时间 -- 也就是定时器输入/输出或者周期性中断时可以设置的最小时间 -- 和计时范围,也就是最大计时时间之间。 这实际上很容易看出来, 这是一个 16 位计数器,最大计数值是 65535 。 那么,我们将看到,选择这里的预分频、 ID 和 TAIDEX 寄存器位, 允许我们实现时钟分辨率和最大计时范围的折衷, 允许我们实现时钟分辨率和最大计时范围的折衷, 无论是作为输入进行测量、作为输出, 或产生周期性中断。 因此,举例来说, 如果我想在那里产生 500KHz 的时钟, 那么我可以做下面几件事情。 我可以设置 ID 位,将时钟除以 4 进行预分频, 然后选择这里(TAIDEX)的预分频值为 5。 现在,我将采用我的 1/12MHz 时钟, 进行 4 预分频和 6 预分频, 这将生成在我下面的示例中 使用的 2 us 分辨率。 那么,这就是该折衷的过程。 现在,我们有许多计数模式。 我们将在本视频中使用的是 向上计数模式。基本来说, 计数器将向上计数,0,1,2,3。 当它达到该溢出值, 也就是这里的结束值之后,它将重新回到 0、1、2、3。 因此您现在可以看到,如果我把该常量设置为 n , 那么就设置了一个触发器, 这里就是我的触发器。 当计数值归零时,它会设置触发器,因此我们可以看到, 在采用我们前一张幻灯片所设置的预分频情况下, 在采用我们前一张幻灯片所设置的预分频情况下, 2 微秒乘以 (n+1), 这将是该置位信号的周期, 或是中断的周期。 很显然,我们可以看到n 是一个 16 位数字, 因此,这再次说明了时间分辨率与 最大中断时间间隔的比率。 在下一个视频中,我们将使用向上/向下模式, 并使用其他这些输出位,但在本视频中, 我们仅会生成一个周期性控制中断。 下面是产生周期性中断的步骤。 下面是产生周期性中断的步骤。 我们必须选择一个时钟,并且必须选择一个预分频。 正如我在示例中说过的, 我将选择 500kHz、2 微秒周期的预分频。 我需要对中断进行使能, 我将使能 TA0CCR0 的中断。 然后,我把这里的值设置成任何周期减 1, 其中周期乘以 2 微秒是我想要设置的中断周期。 其中周期乘以 2 微秒是我想要设置的中断周期。 其中周期乘以 2 微秒是我想要设置的中断周期。 现在,它是一个中断,因此它具有优先级。 我们将设置嵌套向量中断优先级寄存器。 我们将设置嵌套向量中断优先级寄存器。 还有一个步骤, 我们必须在嵌套向量中断控制器中开启该中断, 我们必须在嵌套向量中断控制器中开启该中断, 我们要开启该中断。 在所有初始化完成之后,我们要在处理器中, 在 primask 中设置 i=0, 这是在 primask 中, 它是处理器中的一个寄存器, 在 C 语言中,我们通过调用该函数 EnableInterrupts 来执行它。 但要再次强调的是,这个操作是在所有初始化完成之后。 但要再次强调的是,这个操作是在所有初始化完成之后。 这里是中断向量表, 正如我说过的,我们将使用定时器中断, 共有四个定时器模块, 其中每个定时器模块有七个子模块, 因此您在 MSP432 上可以有多达 28 个 不同的周期性中断。 我们只是将执行其中的一个, 我将使用定时器 2 的子模块 0, 下面将对它进行说明, 如果您查看该文件中的代码, 您将看到中断服务例程的标准定义。 您将看到中断服务例程的标准定义。 您还可以看到,对于这个特定中断, 这是定义中断优先级的三个 bit 所在的位置。 它位于 NVIC_IPR3 寄存器的7、6 和 5 中, 它是第 12 个中断 -- 我是说 IRQ 12 和中断 28。 因此,我们一会儿将在代码中看到这个 12。 这里是实际的代码, 这是摘取出来的部分代码,因此您看到, 它实际上具有一个函数指针。 这个 32 位的变量指向一个 用户函数,该函数以一个函数返回值结束, 然后,当我们调用该函数时, 我们将把这里的用户代码传递过去。 我们将传递该周期, 正如我在前一张幻灯片中所说的, 该周期将具有 2 微秒的单位。 我使这一切工作的方法是, 设置 SMCLK 为 12MHz 时钟, 并在那里选择 4 预分频,在这里选择 6 预分频, 这将生成我的 2 微秒周期。 之前说过,我将使用向上计数模式, 因此我要在这里将定时器设置为以向上计数模式运行。 我将 -- 周期性中断是另一个名称 --使用比较模式。 我将 -- 周期性中断是另一个名称 --使用比较模式。 我将 -- 周期性中断是另一个名称 --使用比较模式。 在比较模式下,换句话说,当计数器达到这里的值之后, 它会把重载标志位置 0 并继续计数。 这里是中断优先级寄存器 3 的位 7-5 , 这里是中断优先级寄存器 3 的位 7-5 , 它将设置中断优先级, 我告诉过您它是中断 12。 我通过设置嵌套向量中断控制器的设置位 12 来使能该中断。 我通过设置嵌套向量中断控制器的设置位 12 来使能该中断。 正如我说过的,我们要 首先初始化所有设备,然后再 启用中断。 这是中断服务例程看起来的样子。 您应该记得,对于 Systick, 引发 Systick 的标志在 Systick 中断运行时 自动清除。 而对于定时器来说不是这样。 这里是我们说过的触发标志位,它位于 CCTL 的位 0 中。 这是导致该中断发生的标志位, 因此为了能识别该中断, 需要将该标志位清除, 我将在这里清除该标志位。 然后,我将调用本例中特定的用户函数。 然后,我将调用本例中特定的用户函数。 然后,我将调用本例中特定的用户函数。 现在,这是定时器A2 子模块 0。 对于实验,您必须做的是,在定时器 A 子模块 0 上 创建一个周期性中断 -- 我是说定时器 A0 子模块 0。 因此,有几项内容必须改变。 在这里,所有您看到 2 的位置 -- 它们必须变为 0。 在这里,这是中断 12 -- 这 必须变为中断 10。 在这里,这是中断优先级 3 寄存器位 7、6、5 -- 它必须是中断优先级 2 寄存器。 这里的位,23、22 和 21。 这里的位,23、22 和 21。 这些是基本的差异。 除此之外,这全部四个模块具有非常 类似的工作方式。 总之,我们讨论了 定时器,它具有输入、输出功能和 周期性中断。 本节中我们特别讨论了使用定时器 来创建其它周期性运行的线程。 来创建其它周期性运行的线程。 正如我提到过的,您的系统上有四个定时器 -- 定时器 A0、A1、A2、A3。 在本视频中的代码向您展示了如何控制定时器 A1, 在本视频中的代码向您展示了如何使用定时器 A1, 您的任务是使用定时器 A0 ,并根据需要使用定时器 A2 和 A3。 希望您喜欢本实验。 在下一个视频中, 我们将扩展定时器的功能, 以生成脉宽调制输出。 好,希望您喜欢本次实验。
课程介绍 共计4课时,37分36秒

TI-RSLK 模块 13 - 计时器

TI PWM 机器人 软件 RSLK 计时器

在此模块中,您将编写用计时器创建 PWM 输出的软件。为 PWM 和周期性中断采用计时器可提供增加机器人系统复杂性的机制。

推荐帖子

TI元件库的使用方法
TI元件库的使用方法   TI的元件库一般在具体的器件页面(如AM3715在“主页地址/product/am3715”)下给出了“CAD/CAE Symbols”,如果你使用的EDA工具不能直接打开时,可以下载Ultra Librarian软件,此软件可以将TI的库文件翻译成指定格式的文件。 Ultra Librarian下载地址:、 http://webench.ti.com/...
dontium 微控制器 MCU
基于TMS320F206虚拟I2C总线软件包的结构设计
本帖最后由 fish001 于 2019-11-7 22:24 编辑        数字信号处理器在各领域中的应用已日趋广泛,其中TI(Texas Instrument)公司的TMS320系列芯片占据了主导地位。TMS320F206(简称F206)由于具有片内32K字的Flash,支持JTAG扫描端口的仿真调试,并支持程序的串行下载,便于开发设计及产品...
fish001 微控制器 MCU
CCS StarterWare的安装和设置,用CCS7.3成功编译一个工程
1.首先说明一下为什么需要了解或者学习StarterWare。个人认为第一点是,StarterWare软件中包含有大量例程,均可查看源代码,在初期学习阶段,借助于StarterWare有助于深入了解DSP的硬件,我按照的版本是C6748_StarterWare_1_20_04_01-Setup,大家可以根据自己的dsp型号选择版本,官方下载网址:http://processors.wiki.ti....
fish001 DSP 与 ARM 处理器
又开会了,2019 TI 嵌入式产品研讨会
本帖最后由 qwqwqw2088 于 2019-11-1 14:18 编辑     点击查看  会议详情 ...
qwqwqw2088 微控制器 MCU
分享到X
微博
QQ
QQ空间
微信

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新文章 手机版

站点相关: EEWORLD首页 EE大学堂 论坛 下载中心 Datasheet 活动专区 博客

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved