关于ahb-gpio的一些内容1

gpio通俗来讲就是专门对引脚进行控制的模块,他提供了16bit的i/o的intrface,而gpio的目标是将数据发送到有限的pad引脚上,gpio可以对外部的pad和内部的信号进行管理,当然,理论上这两个可以直连,但是这会造成极大的资源浪费,因为引脚的数量再多也没有信号多。值得注意的是,GPIO虽然是16跟信号线捆在一起,但不是一般意义的总线信号,即其16跟信号线并不会相互关联(比如一起变化或者仪器被采样)GPIO的信号线之间没有必然的联系

 AHB_GPIO具有如下能力:1.可通过编程生成中断功能。 2.支持bit的掩码功能。 3.支持pin max的替代功能。4.采用两级触发器对输入进行采样来避免亚稳态问题。而AHB-GPIO的两大特性是:生成中断和屏蔽访问。

既然是ahb-gpio,首要的就是通过ahb接口实现了对gpio接口数据的传输控制。我们可以看到,整个AHB-GPIO模块暴露出来的接口有如下几个:属于AHB端的FCLK,HCLK,HADDR,HTRANS,HSIZE,HWRITE,HREADY,HWDATA,HRDATA等等,而属于GPIO的有:PORTIN,PORTOUT,PORTEN,PORTFUNC,GPIOINT,COMBINT。在tb中,我们首先向PORTIN写数据(即pin_dr),储存在GPIO的寄存器中,再从AHB端读出来(pin_rd),对这两个数据进行比较,之后,我们再从AHB接口写进去(pout_rd),从portout读出来(pout_mo),再进行比较。

接下来讲一下生成中断,这是由三个寄存器所控制的,分别是interrupt enable, interrupt  polarity, interrupt type,每个寄存器都有单独的设置和清除地址,可以用来配置i/o引脚的每一位来生成中断。在储发中断后,会导致gpioint信号的响应位被断言,并且组合中的中断信号combint也被断言,我们还可以使用中断处理程序清除中断,即将1写入intclear寄存器的相应位。

需要注意的是,在中断检测期间,自由运行时钟信号FCLK必须处于活动状态,中断生成有三个周期的等待时间,其中两个周期用于输入信号的同步,一个周期用于记录中断状态。

 而在tb中,我们可以首先针对16个中断bit进行遍历,这两层foreach可以针对当前bit进行不同类型和不同极性的4种组合的扫描,每个中断位都可以设置成不同的类型(电平触发和边缘储发)以及不同的极性。在配置完成后,我们从port的每一维输入激励来储发中断,之后中断使能,并且我们在确保使能之前,两个外部的新信号位0,之后我们可以通过gpio的外部信号(gpioint 和 combint) 对是否完成中断进行判断,如果这一个bit成功的实现了四种不同情况的中断功能,我们再去检查剩余位的中断。

接下来是屏蔽访问。首先我们要明白为什么要进行屏蔽访问,访问屏蔽功能可以允许在单个传输中读取或者写入单个位或者多个位,这样可以避免非线性安全的基于软件的读-修改-写操作。通过屏蔽访问操作,我们可以将i/o分成两部分,低字节和高字节,掩码地址空间可以i当以为两个数组,每个数组可以包含256个字。

以上图作为例子,假设gpioout驱动为32e8,由于是masklowbyte,因此我们只对32e8的低两位(e8,即1110-1000)进行修改,而mask是1100-0011,即只针对7-6位和1-0位进行修改,而mask这个信号可以映射到寄存器地址的9-2位,因此我们还要对寄存器的地址进行相应的数据修改。又因为dataout是3(0000-0011),即e8(1110-1000)就被修改成了0010-1011,而这个数据可以在下个周期传送给gpioout。而在测试中,我们只需要首先对portout写入数据,之后进行mask操作将其输出,设计一个局部变量portout_expected,将这两组数据进行对比即可。

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值