TC297B - 外设头文件解析(以IO为例)
打开例程,目录树下的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为例)的更多相关文章
- NSObject头文件解析 / 消息机制 / Runtime解读 (一)
NSObject头文件解析 当我们需要自定义类都会创建一个NSObject子类, 比如: #import <Foundation/Foundation.h> @interface Clas ...
- Spring的配置文件ApplicationContext.xml配置头文件解析
Spring的配置文件ApplicationContext.xml配置头文件解析 原创 2016年12月16日 14:22:43 标签: spring配置文件 5446 spring中的applica ...
- NSObject头文件解析 / 消息机制 / Runtime解读 (二)
本章接着NSObject头文件解析 / 消息机制 / Runtime解读(一)写 给类添加属性: BOOL class_addProperty(Class cls, const char *name, ...
- 探索C++头文件解析方法
最近一直在搞基于SWIG的C++接口翻译Java代码的工作.SWIG内部基于Bison(Yacc)的C/C++解析器,最近纠结于SWIG不能解析C++构造函数中的默认初始化赋值操作,想找一个能够补充此 ...
- MSP430G2553头文件解析
MSP430寄存器中文注释---P1/2口(带中断功能) /************************************************************ ...
- Unix网络编程 — 头文件解析
1.1. < sys/types.h > primitive system data types(包含很多类型重定义,如pid_t.int8_t等) 1.2. < sys/socke ...
- 带BOM头文件解析
在java中apache提供了一个工具类BOMStream,在获取文件流时,将获取到的文件流转化成为BOM流: InputStreamReader is = new InputStreamReader ...
- C++解析头文件-Qt自动生成信号声明
目录 一.瞎白话 二.背景 三.思路分析 四.代码讲解 1.类图 2.内存结构声明 3.QtHeaderDescription 4.私有函数讲解 五.分析结果 六.下载 一.瞎白话 时间过的ZTMK, ...
- C/C++常用头文件及函数汇总
转自: C/C++常用头文件及函数汇总 C/C++头文件一览 C #include <assert.h> //设定插入点#include <ctype.h> //字符处理#in ...
随机推荐
- day 2 下午 骑士 基环树+树形DP
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #inc ...
- svg路径蒙版动画
svg路径蒙版动画,是比较实用的一种动画效果,能够绘制如下图所示的动画. 接下来细说这样的动画是如何做成的: 1.准备工作 2.SVG路径动画 3.SVG路径蒙版动画 4.复杂图形的编辑技巧 1.准备 ...
- 大数据之路week01--day02我实在时被继承super这些东西搞的头疼,今天来好好整理以下。
这一周的第一天的内容是面向对象的封装,以及对方法的调用.实在时没法单独拿出来单说,就结合这一节一起说了. 我实在是被继承中的super用法给弄的有点晕,程序总是不能按照我想的那样,不是说结果,而是实现 ...
- JVM 中你不得不知的一些参数
有的同学虽然写了一段时间 Java 了,但是对于 JVM 却不太关注.有的同学说,参数都是团队规定好的,部署的时候也不用我动手,关注它有什么用,而且,JVM 这东西,听上去就感觉很神秘很高深的样子,还 ...
- pxe批量部署脚本
#!/bin/bash #检查环境 setenforce 0 sed -i 's/=enforce/=disabled/g' /etc/selinux/config systemctl restart ...
- maven的项目结构
1.标准目录结构: src -main –bin 脚本库 –java java源代码文件 –resources 资源库,会自动复制到classes目录里 ...
- netty服务端的创建
服务端的创建 示例代码 netty源码中有一个netty-example项目,不妨以经典的EchoServer作为楔子. // 步骤1 EventLoopGroup bossGroup = new N ...
- 别翻了,这篇文章绝对让你深刻理解java类的加载以及ClassLoader源码分析【JVM篇二】
目录 1.什么是类的加载(类初始化) 2.类的生命周期 3.接口的加载过程 4.解开开篇的面试题 5.理解首次主动使用 6.类加载器 7.关于命名空间 8.JVM类加载机制 9.双亲委派模型 10.C ...
- PHP laravel+thrift+swoole打造微服务框架
Laravel作为最受欢迎的php web框架一直广受广大互联网公司的喜爱. 笔者也参与过一些由laravel开发的项目.虽然laravel的性能广受诟病但是业界也有一些比较好的解决方案,比如堆机器, ...
- mysql出现ERROR 1819 (HY000)的解决方法
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements, 出现这个问题怎么办? 为了加强安 ...