打开例程,目录树下的Includes中包含了各个片上资源对应的头文件,这些头文件定义了相应外设的寄存器地址(寄存器是内置于各个 IP 外设中,是一种用于配置外设功能的存储器,就是一种内存,并且有相对应的地址。——野火)以及操作寄存器的方法——结构体。

1.IfxPort_reg.h:定义Port寄存器地址

/** \\ 定义MODULE_P13(I/O)的寄存器基地址 */
#define MODULE_P13 /*lint --e(923)*/ ((*(Ifx_P*)0xF003B300u))
/** \\ 定义MODULE_P13(I/O)的各个子寄存器地址(基地址+偏移量) */
/** \addtogroup IfxLld_Port_Cfg_P13
* \{ */ /** \\brief FC, Port Access Enable Register 0 */
#define P13_ACCEN0 /*lint --e(923)*/ (*(volatile Ifx_P_ACCEN0*)0xF003B3FCu) /** \\brief F8, Port Access Enable Register 1 */
#define P13_ACCEN1 /*lint --e(923)*/ (*(volatile Ifx_P_ACCEN1*)0xF003B3F8u) /** \\brief 0, Port Output Register */
#define P13_OUT /*lint --e(923)*/ (*(volatile Ifx_P_OUT*)0xF003B300u) ......

2.IfxPort_regdef.h:定义操作I/O寄存器的结构体

/** \\ 定义包含所有寄存器的结构体,占用256(0x0100)个字节,即MODULE_P13的地址范围大小,见如下定义。(该方法通过定义与寄存器结构相对应的结构体,来操作寄存器) */
/* #define MODULE_P13 /*lint --e(923)*/ ((*(Ifx_P*)0xF003B300u)) */
/* #define MODULE_P14 /*lint --e(923)*/ ((*(Ifx_P*)0xF003B400u)) */
typedef volatile struct _Ifx_P
{
Ifx_P_OUT OUT; /**< \brief 0, Port Output Register */
Ifx_P_OMR OMR; /**< \brief 4, Port Output Modification Register */
Ifx_P_ID ID; /**< \brief 8, Identification Register */
unsigned char reserved_C[]; /**< \brief C, \internal Reserved */
Ifx_P_IOCR0 IOCR0; /**< \brief 10, Port Input/Output Control Register 0 */
Ifx_P_IOCR4 IOCR4; /**< \brief 14, Port Input/Output Control Register 4 */
Ifx_P_IOCR8 IOCR8; /**< \brief 18, Port Input/Output Control Register 8 */
Ifx_P_IOCR12 IOCR12; /**< \brief 1C, Port Input/Output Control Register 12 */
unsigned char reserved_20[]; /**< \brief 20, \internal Reserved */
Ifx_P_IN IN; /**< \brief 24, Port Input Register */
unsigned char reserved_28[]; /**< \brief 28, \internal Reserved */
Ifx_P_PDR0 PDR0; /**< \brief 40, Port Pad Driver Mode 0 Register */
Ifx_P_PDR1 PDR1; /**< \brief 44, Port Pad Driver Mode 1 Register */
unsigned char reserved_48[]; /**< \brief 48, \internal Reserved */
Ifx_P_ESR ESR; /**< \brief 50, Port Emergency Stop Register */
unsigned char reserved_54[]; /**< \brief 54, \internal Reserved */
Ifx_P_PDISC PDISC; /**< \brief 60, Port Pin Function Decision Control Register */
Ifx_P_PCSR PCSR; /**< \brief 64, Port Pin Controller Select Register */
unsigned char reserved_68[]; /**< \brief 68, \internal Reserved */
Ifx_P_OMSR0 OMSR0; /**< \brief 70, Port Output Modification Set Register 0 */
Ifx_P_OMSR4 OMSR4; /**< \brief 74, Port Output Modification Set Register 4 */
Ifx_P_OMSR8 OMSR8; /**< \brief 78, Port Output Modification Set Register 8 */
Ifx_P_OMSR12 OMSR12; /**< \brief 7C, Port Output Modification Set Register 8 */
Ifx_P_OMCR0 OMCR0; /**< \brief 80, Port Output Modification Clear Register 0 */
Ifx_P_OMCR4 OMCR4; /**< \brief 84, Port Output Modification Clear Register 4 */
Ifx_P_OMCR8 OMCR8; /**< \brief 88, Port Output Modification Clear Register 8 */
Ifx_P_OMCR12 OMCR12; /**< \brief 8C, Port Output Modification Clear Register 12 */
Ifx_P_OMSR OMSR; /**< \brief 90, Port Output Modification Set Register */
Ifx_P_OMCR OMCR; /**< \brief 94, Port Output Modification Clear Register */
unsigned char reserved_98[]; /**< \brief 98, \internal Reserved */
Ifx_P_LPCR0 LPCR0; /**< \brief A0, Port LVDS Pad Control Register 0 */
Ifx_P_LPCR1 LPCR1; /**< \brief A4, Port LVDS Pad Control Register 1 */
Ifx_P_LPCR2 LPCR2; /**< \brief A8, Port LVDS Pad Control Register 2 */
Ifx_P_LPCR3 LPCR3; /**< \brief AC, Port LVDS Pad Control Register 3 */
unsigned char reserved_A4[]; /**< \brief B0, \internal Reserved */
Ifx_P_ACCEN1 ACCEN1; /**< \brief F8, Port Access Enable Register 1 */
Ifx_P_ACCEN0 ACCEN0; /**< \brief FC, Port Access Enable Register 0 */
} Ifx_P;

上面结构体的实际使用:

static Ifx_P * const portLED = (Ifx_P *)&MODULE_P13;
......
#define LED_ON(x) (portLED->OMR.U = LED_PIN_RESET(x))

定义以上结构体时用到的各个子寄存器结构体的定义:

typedef union
{
/** \brief Unsigned access */
unsigned int U;
/** \brief Signed access */
signed int I;
/** \brief Bitfield access */
Ifx_P_OUT_Bits B;
} Ifx_P_OUT;
......
typedef struct _Ifx_P_OUT_Bits
{
unsigned int P0:; /**< \brief [0:0] (rwh) */
unsigned int P1:; /**< \brief [1:1] (rwh) */
unsigned int P2:; /**< \brief [2:2] (rwh) */
unsigned int P3:; /**< \brief [3:3] (rwh) */
unsigned int P4:; /**< \brief [4:4] (rwh) */
unsigned int P5:; /**< \brief [5:5] (rwh) */
unsigned int P6:; /**< \brief [6:6] (rwh) */
unsigned int P7:; /**< \brief [7:7] (rwh) */
unsigned int P8:; /**< \brief [8:8] (rwh) */
unsigned int P9:; /**< \brief [9:9] (rwh) */
unsigned int P10:; /**< \brief [10:10] (rwh) */
unsigned int P11:; /**< \brief [11:11] (rwh) */
unsigned int P12:; /**< \brief [12:12] (rwh) */
unsigned int P13:; /**< \brief [13:13] (rwh) */
unsigned int P14:; /**< \brief [14:14] (rwh) */
unsigned int P15:; /**< \brief [15:15] (rwh) */
unsigned int reserved_16:; /**< \brief \internal Reserved */
} Ifx_P_OUT_Bits;
......

最新文章

  1. Django自定义模板
  2. 从零自学Hadoop(14):Hive介绍及安装
  3. Spring JdbcTemplate 调用存储过程
  4. Netty中的坑(下篇)
  5. Dagger2 scope
  6. Android学习之-TextView的滑动效果
  7. 【Java】Linux下安装配置Oracle JDK 1.7版本
  8. 轻奢请向历史SAY NO_重青网_重庆青年报_重庆青年报电子版_重庆青年报网站_重庆青年报官方网站
  9. robotframework的分支和循环
  10. 简述C/C++调用lua中实现的自定义函数
  11. grep 笔记
  12. ionic 照相机 Camera
  13. Visual Basic 2017 操作Excel和word【1】持续更新……
  14. Android OAuth认证
  15. UITableView 显示在statusbar 下面
  16. Java-Runoob-高级教程-实例-方法:09. Java 实例 – continue 关键字用法-un
  17. POJ 2828Buy Tickets(线段树的单点维护)
  18. 虚拟化明星——深挖轻量级容器docker
  19. 设置root密码,su与sudo的区别
  20. 微信网页登录Tips

热门文章

  1. UWP 带左右滚动按钮的横向ListView———仿NetFlix首页河的设计
  2. P4409 [ZJOI2006]皇帝的烦恼(20190922B)(乱搞)
  3. C#中的取整函数
  4. 苹果审核ipv6海外解决思路-About APP Store
  5. JavaScrip 基础
  6. [Xilinx笔记] 《FPGA伴你玩转USB3.0与LVDS》 读书笔记
  7. LVM弹性硬盘
  8. Java并发之volatile关键字
  9. 微博验证码的识别并登录获取cookies
  10. Java实现AES加密解密