查看: 350|回复: 1
打印 上一主题 下一主题

一个关于ARM处理器的头文件问题

[复制链接] qrcode

396

主题

405

帖子

1210

积分

金牌会员

Rank: 6Rank: 6

积分
1210
楼主
跳转到指定楼层
发表于 2015-12-12 05:46 AM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ARM开发时会有一些处理器头文件,比如AT91SAM7S64.h。我现在看资料知道这个处理器的某个控制器组(比如高级中断控制器AIC)的起始地址是0xffff0000,但是在这个头文件的C定义时,只定义了各个控制器组寄存器的结构体,比如:
typedef struct _AT91S_AIC {
AT91_REG AIC_SMR[32]; // Source Mode Register
AT91_REG AIC_SVR[32]; // Source Vector Register
AT91_REG AIC_IVR; // IRQ Vector Register
AT91_REG AIC_FVR; // FIQ Vector Register
AT91_REG AIC_ISR; // Interrupt Status Register
AT91_REG AIC_IPR; // Interrupt Pending Register
AT91_REG AIC_IMR; // Interrupt Mask Register
AT91_REG AIC_CISR; // Core Interrupt Status Register
AT91_REG Reserved0[2]; //
AT91_REG AIC_IECR; // Interrupt Enable Command Register
AT91_REG AIC_IDCR; // Interrupt Disable Command Register
AT91_REG AIC_ICCR; // Interrupt Clear Command Register
AT91_REG AIC_ISCR; // Interrupt Set Command Register
AT91_REG AIC_EOICR; // End of Interrupt Command Register
AT91_REG AIC_SPU; // Spurious Vector Register
AT91_REG AIC_DCR; // Debug Control Register (Protect)
AT91_REG Reserved1[1]; //
AT91_REG AIC_FFER; // Fast Forcing Enable Register
AT91_REG AIC_FFDR; // Fast Forcing Disable Register
AT91_REG AIC_FFSR; // Fast Forcing Status Register
} AT91S_AIC, *AT91PS_AIC;
他怎么能保证AT91S_AIC的起始地址就是0xffff0000呢?谢谢!问题补充:但是操作系统中对于寄存器的操作就是给这些结构体的成员进行操作啊??
回复

使用道具 举报

0

主题

8

帖子

18

积分

新手上路

Rank: 1

积分
18
沙发
发表于 2015-12-13 09:25 AM | 只看该作者
这里只是声明结构体,并没有使用啊。

让这个结构体指向0xffff0000很简单。

1. sturct AT91S_AIC * sreg = (struct AT91S_AIC*)0xffff0000

2. strutct AT91S_AIC sreg ........ __at__ 0xffff0000

第一种比较标准,第二种好像是有这种用法。。中间有一点东西忘了。可能是violent类型吧。。。非标准C语言的写法。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表