打开例程,目录树下的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;
......

TC297B - 外设头文件解析(以IO为例)的更多相关文章

  1. NSObject头文件解析 / 消息机制 / Runtime解读 (一)

    NSObject头文件解析 当我们需要自定义类都会创建一个NSObject子类, 比如: #import <Foundation/Foundation.h> @interface Clas ...

  2. Spring的配置文件ApplicationContext.xml配置头文件解析

    Spring的配置文件ApplicationContext.xml配置头文件解析 原创 2016年12月16日 14:22:43 标签: spring配置文件 5446 spring中的applica ...

  3. NSObject头文件解析 / 消息机制 / Runtime解读 (二)

    本章接着NSObject头文件解析 / 消息机制 / Runtime解读(一)写 给类添加属性: BOOL class_addProperty(Class cls, const char *name, ...

  4. 探索C++头文件解析方法

    最近一直在搞基于SWIG的C++接口翻译Java代码的工作.SWIG内部基于Bison(Yacc)的C/C++解析器,最近纠结于SWIG不能解析C++构造函数中的默认初始化赋值操作,想找一个能够补充此 ...

  5. MSP430G2553头文件解析

    MSP430寄存器中文注释---P1/2口(带中断功能)       /************************************************************     ...

  6. Unix网络编程 — 头文件解析

    1.1. < sys/types.h > primitive system data types(包含很多类型重定义,如pid_t.int8_t等) 1.2. < sys/socke ...

  7. 带BOM头文件解析

    在java中apache提供了一个工具类BOMStream,在获取文件流时,将获取到的文件流转化成为BOM流: InputStreamReader is = new InputStreamReader ...

  8. C++解析头文件-Qt自动生成信号声明

    目录 一.瞎白话 二.背景 三.思路分析 四.代码讲解 1.类图 2.内存结构声明 3.QtHeaderDescription 4.私有函数讲解 五.分析结果 六.下载 一.瞎白话 时间过的ZTMK, ...

  9. C/C++常用头文件及函数汇总

    转自: C/C++常用头文件及函数汇总 C/C++头文件一览 C #include <assert.h> //设定插入点#include <ctype.h> //字符处理#in ...

随机推荐

  1. 腾讯正式开源图计算框架Plato,十亿级节点图计算进入分钟级时代

    腾讯开源再次迎来重磅项目,14日,腾讯正式宣布开源高性能图计算框架Plato,这是在短短一周之内,开源的第五个重大项目. 相对于目前全球范围内其它的图计算框架,Plato可满足十亿级节点的超大规模图计 ...

  2. 数据可视化:绘图库-Matplotlib

    为什么要绘图? 一个图表数据的直观分析,下面先看一组北京和上海上午十一点到十二点的气温变化数据: 数据: 这里我用一段代码生成北京和上海的一个小时内每分钟的温度如下: import random co ...

  3. 品优购(IDEA版)-第二天

    品优购-第2天 学习目标 目标1:运用AngularJS前端框架的常用指令 目标2:完成品牌管理的列表功能 目标3:完成品牌管理的分页列表功能 目标4:完成品牌管理的增加功能 目标5:完成品牌管理的修 ...

  4. PHP常用的header头部定义

    <?php header('HTTP/1.1 200 OK'); // ok 正常访问 header('HTTP/1.1 404 Not Found'); //通知浏览器 页面不存在 heade ...

  5. F#周报2019年第46期

    新闻 使用Pulumi和.NET Core创建现代云应用 宣告.NET Core 3.1预览版3 ML.NET模型构建器升级 .NET Framework修复工具 Mac上的Visual Studio ...

  6. 监听器以及在监听类里面获得bean的方法

    1实现HttpSessionListener和ServletContextListener,2个接口 2然后在contextInitialized初始化方法里面: ServletContext app ...

  7. 【SQL SERVER】2017 Developer 安装教程

    官网下载地址:https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 1.下载之后双击exe文件,选择基本 自定义都行 2.选择 ...

  8. jenkins手把手教你从入门到放弃01-jenkins简介(详解)

    一.简介 jenkins是一个可扩展的持续集成引擎.持续集成,也就是通常所说的CI(Continues Integration),可以说是现代软件技术开发的基础.持续集成是一种软件开发实践, 即团队开 ...

  9. nyoj 283-对称排序 (sort)

    283-对称排序 内存限制:64MB 时间限制:1000ms 特判: No 通过数:2 提交数:4 难度:1 题目描述: In your job at Albatross Circus Managem ...

  10. 在校生如何面向面试地学习Java

    最近我在博客园里,看到不少在校的同学在学java,而且,在我最近举办的一次直播活动中,也有不少在校生同学来提问,java该怎么学. 对于那些已经工作的同学,哪怕才工作不久,毕竟也能从项目实践里总结和探 ...