簡體   English   中英

如何在msp430上分配一個變量指針來訪問硬件寄存器?

[英]How to assign a variable pointer to access hardware register on msp430?

對於上下文,我在啟動板開發板上使用mspgccmsp430g2553

我想創建一個指向各種硬件寄存器的指針。 標准頭通過如下語句提供對寄存器的訪問:

P1DIR &= 0x08;

以上是端口1 gpio引腳的方向寄存器。 P1DIR是一個8位硬件寄存器。

我嘗試分配可用於修改它的指針如下:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM