[求助] 求分析,求解答

火火山   2016-6-24 15:32 楼主
在看例程的时候,有一个语句没看懂,求分析:
TACTL = TASSEL_1 + TACLR;


其中:
#define TASSEL_1               (1*0x100u)           /* Timer A clock source select: 1 - ACLK  */   
#define TACLR                  (0x0004)       /* Timer A counter clear */

虽然有注释,但是没看懂,为什么 (1*0x100u) + (0x0004)   得到的是什么东西?这两个可以相加的吗?谢谢解答!


TACTL的寄存器配置如下:
!111.png

回复评论 (5)

(1*0x100u) 即TASSELx字段=1  后缀u表示无符号数
(0x0004) 即TACLR字段(TACLR位)=1
两个都是数值当然可以相加
点赞  2016-6-24 16:02
引用: cj_in 发表于 2016-6-24 16:02
(1*0x100u) 即TASSELx字段=1  后缀u表示无符号数
(0x0004) 即TACLR字段(TACLR位)=1
两个都是数值当然 ...

那如果7*0x100u这个怎么看啊?
点赞  2016-6-24 18:58
引用: 火火山 发表于 2016-6-24 18:58
那如果7*0x100u这个怎么看啊?

(1*0x100u) 。bit8的值为1,这是根据寄存器的含义得到的数据,7*0x100u,就是0x700u,对应的三个bit是1 啊。这只是一个数而已,由寄存器含义决定值。
点赞  2016-6-25 00:56
引用: ienglgge 发表于 2016-6-25 00:56
(1*0x100u) 。bit8的值为1,这是根据寄存器的含义得到的数据,7*0x100u,就是0x700u,对应的三个bit是1  ...

哦哦,明白啦,谢谢
点赞  2016-6-25 09:33
其实,TACTL = TASSEL_1 + TACLR;
按照我的理解可以等价于:TACTL = TASSEL_1 | TACLR;就像stm32中初始化gpio的时候GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9 | GPIO_Pin_10;//选择 GPIOF的9和10
是一个道理。
因为TACTL定时器A寄存器,有16位来控制。TACTL = TASSEL_1 + TACLR,就表示TASSEL位和TACLR位被置位了。
至于#define TASSEL_1               (1*0x100u) 这个应该是头文件中定义的吧。
0x100u中的这个u很必要,因为不写的话,默认是有符号。所以如果是有符号的话,最高位是符号位。所以写了理解起来更容易一些。
其他的解释参考4楼答案。
点赞  2016-6-27 22:44
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复