gpt4 book ai didi

c - 如何分配一个变量指针来访问msp430上的硬件寄存器?

转载 作者:行者123 更新时间:2023-12-04 11:49:35 25 4
gpt4 key购买 nike

对于上下文,我在启动板开发板上使用 mspgccmsp430g2553

我想创建一个可以指向各种硬件寄存器的指针。标准头文件通过如下语句提供对寄存器的访问:

P1DIR &= 0x08;

以上是端口1 gpio管脚的方向寄存器。 P1DIR是一个8bit的硬件寄存器。

我尝试分配一个可用于修改它的指针如下:

volatile unsigned char *reg;
reg = (unsigned char *) &P1DIR;

gcc 不会生成任何错误或警告,但它不起作用。当使用 gdb 测试值时,reg 包含值 0xFFFF 而不是数据表中所述的 0x0022(P1DIR 的地址)。

以下是标题中帮助解决问题的行:

/* External references resolved by a device-specific linker command file */
#define SFR_8BIT(address) extern volatile unsigned char address
...
SFR_8BIT(P1DIR); /* Port 1 Direction */

据我所知,链接器使用了一个名为 periph.x 的文件(位于 /usr/local/msp430-uniarch-20110716/msp430/lib/ldscripts/msp430g2553) 其中包含以下行:

__P1DIR = 0x0022;

最佳答案

不需要任何特定的编译器,只需标准 C...

#define WDTCTL     (*((volatile unsigned short *)0x0120))
#define P1DIR (*((volatile unsigned char *)0x0022))
...
WDTCTL = 0x5A80;
...
    P1DIR |= 0x01;
    P1OUT |= 0x01;
  P1DIR &= ~0x02;

然后检查您的反汇编以确保它有效。

f8b4:   b2 40 80 5a     mov #23168, &0x0120 ;#0x5a80
...
f8ca: d2 d3 22 00 bis.b #1, &0x0022 ;r3 As==01
f8ce: d2 d3 21 00 bis.b #1, &0x0021 ;r3 As==01
f8d2: f2 f0 fd ff and.b #-3, &0x0022 ;#0xfffd

关于c - 如何分配一个变量指针来访问msp430上的硬件寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19046570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com