如何优雅的配置寄存器---ZYNQ Cortex-A9定时器配置函数解析XTmrCtr_SetOptions()

本文介绍了在ZYNQ Cortex-A9中使用Xilinx的XTmrCtr_SetOptions函数配置定时器的过程。通过分析函数参数及其实现,展示了该函数如何以更易读的方式设置定时器控制寄存器,增强了程序的可读性和易用性。
摘要由CSDN通过智能技术生成

日常废话

北京可太冷了,说好要写一段废话,发生了不少事情,好与丧的都有,丧的占大多数。话不能多说,自己消化就好,多说就泄露了天机。

底层寄存器配置与定时器配置函数的引入

在使用ARM Cortex-A9的中断系统时,阅读到了一段配置定时器的程序,其中包含的一行程序引起了我的注意。

XTmrCtr_SetOptions(&TMRInst, 0, XTC_INT_MODE_OPTION | XTC_AUTO_RELOAD_OPTION);//第三个变量选择了模式选项对寄存器进行了配置

这行程序是对定时器的 Control/Status 寄存器XTC_TCSR_OFFSET进行配置,一般来说配置寄存器是通过修改寄存器的某1bit的值 0,1 来对这一位代表的功能进行设置,或者直接写入一个字节8bit的数来直接将一个寄存器配置完成。

但是这行程序是使用了一个封装更好,更易读的方式对寄存器进行配置的,使用了Xilinx提供的XTmrCtr_SetOptions()函数对定时器进行模式配置。可以看到函数的第三个变量通过选择option的形式,选择了定时器的不同功能,也就是设置了定时器控制寄存器的不同位的功能,以一个更易读的方式配置了定时器的工作方式,使得程序更易读。下面对此函数的底层进行分析,来看看它是如何工作的。

首先此函数有3个变量,首先要理解这三个变量的含义。

/*****************************************************************************
* @param	InstancePtr is a pointer to the XTmrCtr instance.
* @param	TmrCtrNumber is the timer counter of the device to operate on.
*		Each device may contain multiple timer counters. The timer
*		number is a zero based number with a range of
*		0 - (XTC_DEVICE_TIMER_COUNT - 1).
* @param	Options contains the desired options to be set or cleared.
*		Setting the option to '1' enables the option, clearing the to
*		'0' disables the option. The options are bit masks such that
*		multiple options may be set or cleared. The options are
*		described in xtmrctr.h.
******************************************************************************/
void XTmrCtr_SetOptions(XTmrCtr * InstancePtr, u8 TmrCtrNumber, u32 Options)

Xilinx的函数不仅提供了文档,而且在每个函数都详细备注了函数的功能与变量的意义,这点很棒,就不需要详细解释了,大致含义是InstancePtr是定时器实例,TmrCtrNumber是在有多个定时器的时候指示是第几个定时器,Options是用来设置选项的,当选择了一个选项,该bit就会被置1,未被选择的就被置0.

定时器配置函数的实现文件xtmrctr_options.c

要理解函数是如何工作的,就需要查看这个配置函数实现的文件xtmrctr_options.c,将这个文件的代码贴到最后以便查阅。

文件提供了两个函数接口,一个是配置定时器的控制寄存器函数XTmrCtr_SetOptions,另一个是获得寄存器当前状态的XTmrCtr_GetOptions,两个函数实现的功能类似,只需要看懂一个就能理解另一个。

函数实现如图下,实现核心配置功能的代码是for循环后面。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值