打开例程,目录树下的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. 如何用CSS实现中间自适应,两边定宽三栏布局

    1.前言 用css实现“两边定宽,中间自适应的三栏布局”这个问题应该是在前端面试中被面试官提问到的高频问题了,一般当面试者写出一种实现方法之后,面试官还会问你还有没有别的方法,尽量多的写出几种实现方法 ...

  2. 部署https并自动续期

    1.其它步骤参考地址https://blog.csdn.net/achenyuan/article/details/79021340https://blog.csdn.net/Dancen/artic ...

  3. Unix/Linux 从哪儿来?那些改变世界的人们...

    昨天看文章时发现自己对 linux 操作系统不够了解,还记得 17 年时听过老师的一些课,对 linux 的历史有一点了解,不过当时并没有记录笔记,现在已经忘的差不多了. 这次从网上找资料,又重新看了 ...

  4. mysql-大量数据的sql查询优化

    1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...

  5. 每天一道算法题-leetcode136-只出现一次的数字

    前言 打卡第一天 2019.10.26日打卡 算法,即解决问题的方法.同一个问题,使用不同的算法,虽然得到的结果相同,但是耗费的时间和资源是不同的.这就需要我们学习算法,找出哪个算法更好. 大家都知道 ...

  6. 今天做一个项目的时候,要在一个编辑的jsp页面的textarea标签设置value属性,结果发现他没有value属性,但是是编辑页面又必须要回显要修改的内容,所以在参考了w3cschool之后很轻松的解决了这个问题。

    今天做一个项目的时候,要在一个编辑的jsp页面的textarea标签设置value属性,结果发现他没有value属性,但是是编辑页面又必须要回显要修改的内容,所以在参考了w3cschool之后很轻松的 ...

  7. PHP程序员-常用工具

    三连问 经常有社区的同学问: “我的PHP程序有没有阻塞,我的PHP程序有没有开启协程(对自己写好的代码表示不自信),我的PHP程序有没有问题”.然后贴出了自己的程序,然后进入了愉快的灌水环节,随着时 ...

  8. [剑指offer] 二叉搜索树的后序遍历序列 (由1个后续遍历的数组判断它是不是BST)

    ①题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. ②思路 1.后续遍历的数组里,最后一个元素是根. 2 ...

  9. 使用JSP脚本在页面输出九九乘法表

    <% int i,j; for(i=1;i<10;i++) { for(j=1;j<=i;j++) { out.println(i+"*"+j+"=&q ...

  10. VLAN实验(2)Trunk接口

    1.选择1台S5700.2台S3700和4台pc机,并根据实验编址完成此拓扑图. 2.启动设备,检查设备的连通性: 由于现在我们还没有划分VLAN,这5台PC,还在同一个VLAN中,现在我们启动所有的 ...