历史上的今天
今天是:2025年07月16日(星期三)
2021年07月16日 | MSP430的学习(4)
2021-07-16 来源:eefocus
TA是一个16的定时/计数器,最多拥有3个捕获/比较寄存器。TA可以支持捕获/比较功能 PWM输出和定时器功能。TA还有扩展中断的功能,中断可以由定时器溢出产生或捕获比较寄存器产生。
定时器的时钟源可以是内部时钟源ACLK,SMCLK,或外部源TACLK INCLK。时钟源由TASSEL来选择,然后通过ID位来进行2 4或8分频。
定时器的2种启动方式:
1 :当计数到MCX〉0并且时钟源处于活动状态时。
2:当定时器模式为up uo/down模式时,定时器可以通过写0到TACCR0来停止计数。定时器可以通过写一个非0的数值来重新开始计数。
定时器模式控制:(操作模式由MC位来选择)。
1:单调模式:用于计数周期不是0FFFFH的情况。定时器重复增计数值寄存器TACCR0的值,而它的值取决于定时周期,计数器计数周期为TACCR0+1。当计数到TACCRO的值时,中断标志CCIFG位置位。当其值返回0时,TAIFG中断标志置位。
2:连续模式:计数器重复计数到0FFFFH,然后再从0开始增计数。捕获比较寄存器TACCR0以及其他捕获比较器工作方式一样。不理解其用途?...
3: 增减模式:先增到TACCR0的值,再递减。每个周期中,CCIFG TAIFG只置位一次,当定时器计数由TACCR0-1到TACCR0时,CCIFG置位,由0001H到0000H时,TAIFG置位。支持在输出信号之间有死区时间的应用。具体理解??
捕获比较模块:可以用于定时器数据的捕获或产生时间间隔。当CAP=1时,选择捕获模式。捕获模式用于记录时间事件,比如速度估计或时间测量。捕获输入CCIxA CCIxBL连接外部的引脚或内部的信号,这通过CCIS位来选择。CM位选择捕获输入信号触发沿:上升沿 下降沿或2者都捕获。若发生了捕获事件,定时器的值复制到TACCR寄存器中。
比较模式:通过将CAP=0来进入。比较模式用于选择PWM输出信号或在特定的时间间隔中断。
输出单元:每个捕获比较模块包含一个输出单元。输出单元用于产生如PWM这样的信号。每个输出单元可以根据EXU产生8种模式的信号。
输出模式由OUTMOD位来确定。在输出模式间切换时,OUTMOD的一个位必须在过度时保持置位,除非是切换到模式0。切换的方法之一是用输出模式7作为过度状态。
TA有两个中断向量:TACCR0 CCIFG的TACCR0中断向量,所有其他CCIFG和TAIFG的TAIV中断向量。
TACCR1 CCIFG,TACCR2 CCIFG,TAIFG标志共用一个中断向量。中断向量寄存器TAIV用于确定他们中的哪个要求响应中断。最高优先级的中断在TAIV寄存器中产生一个数字,这个数字是规定的数字,可以在程序中识别并自动进入相应的子程序。禁止定时器A中断不会影响TAIV的值。
上一篇:MSP430的学习(3)
下一篇:msp430实现串口计算器
史海拾趣
|
我是2004年毕业的,现在马上跟这个公司就要合同到期了.而自己面临一个人生的重要抉择.在这个公司3年基本都是在学习,解bug,参与的项目也有好几个,但都是非核心技术的,只能学学东西.所以到现在感觉都是皮毛,基本都是驱动,及CE方面的.感觉方向是蛮不错 ...… 查看全部问答> |
|
我写了关于STM8S207的互补输出代码,是按照例程写的,选项字在STVD中已经设置,可就是互补输出还是出不来,但主输出是有的,下面附上代码,大家帮忙看看什么问题, TIM1_DeInit();TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, 800, 0);TIM1_OC1Init ...… 查看全部问答> |
|
前段时间整了下1302,顺便带上了18B20,底层驱动还挺麻烦的,主要是延时不太准,我没调整闰年那部分,就是说虽然正常时钟芯片走的时候不会有2月30号,但是通过按键可以调出来,这点我没改了,附上程序吧,电路图的话看懂程序就知道是怎 ...… 查看全部问答> |
|
有用过MSP-EXP430G2 Launchpad的朋友吗 请教几个问题 主要由以下几个问题:1. 板子默认的ACLK是多少HZ? 是使用的内部晶振吗2. TI官方给的温度测量的例子是使用TimerA的CCR0模拟串口,这样的话CCR1还可以用于捕获吗?(个人感觉可以)3.用TimerA的捕获测频并通过串口调试助手实时显示在PC上,当被测频 ...… 查看全部问答> |
|
就是最近论坛上拍卖的那一款,我的发帖数不够,买不了。 Ti官网现在不对大陆销售。 淘宝要550+。 求好心人卖给我一款,挑战杯急需,不要太贵就好。 … 查看全部问答> |
|
unsigned char H = 0; unsigned char M = 0; unsigned char S = 0; unsigned long RTCTime = 0; unsigned char TimeDisplayFlag = 0x00; unsigned int i = 0; unsigned char TIME[8]; void RTC_LCDDisplay(void) { if(i… 查看全部问答> |




