世纪电源网社区logo
社区
Datasheet
标题
返回顶部
未解决

如何读懂msp430的头文件msp430x44x.h

[复制链接]
查看: 241 |回复: 4
1
liuyan11
  • 积分:507
  • |
  • 主题:8
  • |
  • 帖子:31
积分:507
LV6
高级工程师
  • 2023-3-22 10:35:05
10问答币
/********************************************************************
*
* Standard register and bit definitions for the Texas Instruments
* MSP430 microcontroller.
*
* This file supports assembler and C development within the IAR
* Workbench environment for MSP430x44x devices.
*
* Texas Instruments, Version 1.1
*
* Rev. 1.1, Enclose all #define statements with parenthesizes
*
********************************************************************/

#ifndef __msp430x44x
#define __msp430x44x
/************************************************************
* STANDARD BITS
************************************************************/

#define BIT0 (0x0001)
#define BIT1 (0x0002)
#define BIT2 (0x0004)
#define BIT3 (0x0008)
#define BIT4 (0x0010)
#define BIT5 (0x0020)
#define BIT6 (0x0040)
#define BIT7 (0x0080)
#define BIT8 (0x0100)
#define BIT9 (0x0200)
#define BITA (0x0400)
#define BITB (0x0800)
#define BITC (0x1000)
#define BITD (0x2000)
#define BITE (0x4000)
#define BITF (0x8000)

/************************************************************
* STATUS REGISTER BITS
************************************************************/

#define C (0x0001)
#define Z (0x0002)
#define N (0x0004)
#define V (0x0100)
#define GIE (0x0008)
#define CPUOFF (0x0010)
#define OSCOFF (0x0020)
#define SCG0 (0x0040)
#define SCG1 (0x0080)
/* Low Power Modes coded with Bits 4-7 in SR */

#ifndef __IAR_SYSTEMS_ICC /* Begin #defines for assembler */
#define LPM0 (CPUOFF)
#define LPM1 (SCG0+CPUOFF)
#define LPM2 (SCG1+CPUOFF)
#define LPM3 (SCG1+SCG0+CPUOFF)
#define LPM4 (SCG1+SCG0+OSCOFF+CPUOFF)
/* End #defines for assembler */

以上是msp430x44x.h的前面一小部分,请教各位老师:
#define BIT0 (0x0001)

#define C (0x0001)
中的(0x0001)指的是同一个物理地址吗?在该头文件的后面部分还有很多类似情况出现,难道这么多的定义都指的是同一个物理地址吗?
收藏收藏
刘微
  • 刘微
  • 离线
  • LV4
  • 初级工程师
  • 积分:382
  • |
  • 主题:8
  • |
  • 帖子:62
积分:382
LV4
初级工程师
  • 2023-3-23 11:35:19
  • 倒数4
 
#define BIT0 (0x0001)中的(0x0001)不是地址,而是一个16进制数值。

1、例如:P3DIR |= BIT3;实际上也可以写成P3DIR |= 0x0008;
意思是将P3口的默认上电值0x0000和0x0008相与,设置P3口的第三位(即P3.3)管脚作输出使用。
2、例如:WDTCTL = WDTPW + WDTHOLD;实际上就是WDTCTL=0x5A80;
你可以在头文件中查到#define WDTPW (0x5A00)和#define WDTHOLD (0x0080)。WDTCTL是看门狗的控制寄存器,在msp430的User'Guide中有说明:当它的值为0x5A80时停止看门狗定时。

那为什么我们不直接写成WDTCTL=0x5A80;呢?这样的话程序的可读性会很差。
0x5A80只是一个数值,当你下次再看你写的程序,或者别人读你的程序时,就不明白WDTCTL=0x5A80;的意思了。
如果写成WDTCTL = WDTPW + WDTHOLD;就好理解多了:
WDTPW(Watchdog timer password,看门狗的密码,WDTCTL的高8位):只有WDTCTL的高8位为0x5A时才能对WDTCTL寄存器进行写操作。
WDTHOLD(Watchdog timer hold,WDTCTL的第7位):当WDTCTL的第7位为1时,停止看门狗计时。
这样我们通过PW,HOLD就可以轻松的知道WDTCTL = WDTPW + WDTHOLD;是做什么的了。可以看出msp430的头文件是很人性化的。

当然也有表示地址的,例如,头文件中有以下部分:
#ifdef __IAR_SYSTEMS_ASM__
#define DEFC(name, address) sfrb name = address;
#define DEFW(name, address) sfrw name = address;
#endif
……
……
#define P6OUT_ (0x0035)
DEFC( P6OUT , P6OUT_)
这里的0x0035就是指P6OUT这个寄存器的地址了。

不知道说清楚了没有,建议看看msp430x44x的User's Guide,对照程序,对照头文件来看。
ZAZA
  • ZAZA
  • 离线
  • LV6
  • 高级工程师
  • 积分:795
  • |
  • 主题:28
  • |
  • 帖子:246
积分:795
LV6
高级工程师
  • 2023-4-4 16:27:56
  • 倒数3
 
只要具备基本的宏定义的知识,和430寄存器的基本了解看这个头文件应该就不是问题了。你说的那个问题,0x0001并不是你所说的物理地址,而只是BIT0和C这些变量相关联的值,并不是物理地址。在程序设计中,这样的宏定义一是方便,二是可以选择各位,产生相应的功能。建议你买一本430的书,市面上是很多的。
z443233785
  • 积分:5343
  • |
  • 主题:117
  • |
  • 帖子:1003
积分:5343
LV8
副总工程师
  • 2023-4-5 18:26:43
  • 倒数2
 
首先你要知道msp430的存储器结构。典型微处理器的结构有两种:冯。诺依曼结构——程序存储器和数据存储器统一编码;哈佛结构——程序存储器和数据存储器;msp430系列单片机属于前者,而常用的mcs51系列属于后者
qlnveder164
  • 积分:572
  • |
  • 主题:19
  • |
  • 帖子:67
积分:572
LV6
高级工程师
最新回复
  • 2023-4-7 14:25:30
  • 倒数1
 
#define BIT0 (0x0001) 也可以理解成是:将BIT0定义为0x0001,这样方便操作,比如在端口寄存器里的操作。定义的并不一定就全是地址的



热门技术、经典电源设计资源推荐

世纪电源网总部

地 址:天津市南开区黄河道大通大厦8层

电 话:400-022-5587

传 真:(022)27690960

邮 编:300110

E-mail:21dy#21dianyuan.com(#换成@)

世纪电源网分部

广 东:(0755)82437996 /(138 2356 2357)

北 京:(010)69525295 /(15901552591)

上 海:(021)24200688 /(13585599008)

香 港:HK(852)92121212

China(86)15220029145

网站简介 | 网站帮助 | 意见反馈 | 联系我们 | 广告服务 | 法律声明 | 友情链接 | 清除Cookie | 小黑屋 | 不良信息举报 | 网站举报

Copyright 2008-2024 21dianyuan.com All Rights Reserved    备案许可证号为:津ICP备10002348号-2   津公网安备 12010402000296号