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[4]; /**< \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[4]; /**< \brief 20, \internal Reserved */ Ifx_P_IN IN; /**< \brief 24, Port Input Register */ unsigned char reserved_28[24]; /**< \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[8]; /**< \brief 48, \internal Reserved */ Ifx_P_ESR ESR; /**< \brief 50, Port Emergency Stop Register */ unsigned char reserved_54[12]; /**< \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[8]; /**< \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[8]; /**< \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[72]; /**< \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:1;                      /**< \brief [0:0]  (rwh) */
    unsigned int P1:1;                      /**< \brief [1:1]  (rwh) */
    unsigned int P2:1;                      /**< \brief [2:2]  (rwh) */
    unsigned int P3:1;                      /**< \brief [3:3]  (rwh) */
    unsigned int P4:1;                      /**< \brief [4:4]  (rwh) */
    unsigned int P5:1;                      /**< \brief [5:5]  (rwh) */
    unsigned int P6:1;                      /**< \brief [6:6]  (rwh) */
    unsigned int P7:1;                      /**< \brief [7:7]  (rwh) */
    unsigned int P8:1;                      /**< \brief [8:8]  (rwh) */
    unsigned int P9:1;                      /**< \brief [9:9]  (rwh) */
    unsigned int P10:1;                     /**< \brief [10:10]  (rwh) */
    unsigned int P11:1;                     /**< \brief [11:11]  (rwh) */
    unsigned int P12:1;                     /**< \brief [12:12]  (rwh) */
    unsigned int P13:1;                     /**< \brief [13:13]  (rwh) */
    unsigned int P14:1;                     /**< \brief [14:14]  (rwh) */
    unsigned int P15:1;                     /**< \brief [15:15]  (rwh) */
    unsigned int reserved_16:16;            /**< \brief \internal Reserved */
} Ifx_P_OUT_Bits;
......

 

转载于:https://www.cnblogs.com/uestcliming666/p/10335431.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值