我正在开发一个开发板,上面有一个基于 ARM 的 32 位微 Controller (即该板是 Atmel SAM D21J18A)。我仍处于学习阶段,还有很多路要走,但我真的很喜欢嵌入式系统。
我有一些 C 语言的背景。但是,这显然是不够的。我正在查看 Atmel 的一个示例项目的代码,但我并没有真正理解其中的某些部分。这是其中之一:
#define PORT ((Port *)0x41004400UL) /**< \brief (PORT) APB Base Address */
端口定义为:
typedef struct {
PortGroup Group[2]; /**< \brief Offset: 0x00 PortGroup groups [GROUPS] */
} Port;
端口组定义为:
typedef struct {
__IO PORT_DIR_Type DIR; /**< \brief Offset: 0x00 (R/W 32) Data Direction */
__IO PORT_DIRCLR_Type DIRCLR; /**< \brief Offset: 0x04 (R/W 32) Data Direction Clear */
__IO PORT_DIRSET_Type DIRSET; /**< \brief Offset: 0x08 (R/W 32) Data Direction Set */
__IO PORT_DIRTGL_Type DIRTGL; /**< \brief Offset: 0x0C (R/W 32) Data Direction Toggle */
__IO PORT_OUT_Type OUT; /**< \brief Offset: 0x10 (R/W 32) Data Output Value */
__IO PORT_OUTCLR_Type OUTCLR; /**< \brief Offset: 0x14 (R/W 32) Data Output Value Clear */
__IO PORT_OUTSET_Type OUTSET; /**< \brief Offset: 0x18 (R/W 32) Data Output Value Set */
__IO PORT_OUTTGL_Type OUTTGL; /**< \brief Offset: 0x1C (R/W 32) Data Output Value Toggle */
__I PORT_IN_Type IN; /**< \brief Offset: 0x20 (R/ 32) Data Input Value */
__IO PORT_CTRL_Type CTRL; /**< \brief Offset: 0x24 (R/W 32) Control */
__O PORT_WRCONFIG_Type WRCONFIG; /**< \brief Offset: 0x28 ( /W 32) Write Configuration */
RoReg8 Reserved1[0x4];
__IO PORT_PMUX_Type PMUX[16]; /**< \brief Offset: 0x30 (R/W 8) Peripheral Multiplexing n */
__IO PORT_PINCFG_Type PINCFG[32]; /**< \brief Offset: 0x40 (R/W 8) Pin Configuration n */
RoReg8 Reserved2[0x20];
} PortGroup;
所以在这里,我们正在查看地址 0x41004400UL,从那里获取数据,然后会发生什么?
我查找了这个但找不到任何有用的东西。如果您有任何建议(教程、书籍等),请告诉我。
最佳答案
什么都没有发生,因为你只提供了一些声明。我不完全确定问题到底是什么,但简要解释一下该代码:
0x41004400UL
显然是 I/O 空间(不是常规内存)中端口开始的地址(一组 I/O 寄存器)此端口由两组具有类似排列的单个寄存器组成
struct
PortGroup
完全按照硬件上的布局对这些寄存器进行建模
要了解寄存器的含义,请查看硬件文档。
关于c - ((Port *)0x41004400UL) 在这里是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31262865/