以下为个人学习笔记,如有疏漏,请大家指正补充~~
GPIO功能介绍:
一、AHB GPIO提供了一个16位的I/O接口,具有以下属性:
• 可编程中断生成能力。
• 使用地址值的位掩码支持。
• 具有引脚多路复用支持的备用功能切换寄存器。
• 通过为控制寄存器提供单独的设置和清除地址实现线程安全操作。
• 输入使用双触发器采样以避免亚稳态问题。
其中,cmsdk_ahb_io_bridge.v是硬件模块,主要用于实现AHB总线到GPIO端口的桥接,提供GPIO口控制、数据缓存和中断控制等功能;而cmsdk_io_gpio.v是纯软件模块,主要用于实现GPIO的具体功能,包括GPIO口的配置、读写和中断等。GPIO自己提供了一个16bit的I/O的interface接口,既可以进来也可以读出去;进来是指外部portin进来,portout出去;而外部的引脚可以和外设相连,因为GPIO具有掩码功能,可以与外部的LED阵列相连接呈现图案化显示。
其中FCLK与HCLK是same phase的,也就是它们的上升沿和下降沿在时间上保持对齐;此外,GPIO默认采用小端;
大端:(Big-Endian):
就是把数值的高位字节放在内存的低位地址上,把数值的地位字节放在内存的高位地址上。
小端:(Little-Endian):
就是把数字的高位字节放在高位的地址上,低位字节放在低位地址上。
【注】不管是大端法还是小端法存储,计算机在内存中存放数据的顺序都是从低地址到高地址,所不同的是首先取低字节的数据存放在低地址还是取高字节数据存放在低地址。
二、中断功能
中断由三个寄存器控制,每个寄存器都有单独的设置和清除地址;由于双触发器同步逻辑, FCLK 在中断检测期间必须处于活动状态。中断生成还有一个三个周期的延迟,其中包括两个用于输入信号同步的周期和一个用于记录中断状态的周期。
INTTYPESET寄存器用于设置GPIO端口的中断类型(寄存器类型在最后)。通过设置相应的位,可以将该引脚的中断类型设置为上升沿触发、下降沿触发、高电平触发或低电平触发。
三、掩码功能(Masked access)
16 bit的mask包括低八位掩码和高八位掩码,即MASKLOWBYTE和MASKHIGNBYTE;
MASKLOWBYTE逻辑:只想对16 bit位的GPIOOUT的低8位做操作,即只对E8做修改;由于此时的bit mask是b1100_0011表明mask对低两位和高两位做操作;此时的GPIO被bit mask修改后变为0010_1011 = 2B;
MASKHIGHBYTE逻辑:只想对16 bit位的GPIOOUT的高8位做操作,即只对32做修改;由于此时的bit mask是b1001_1000,所以此时的GPIO被bit mask修改后变为1010_0010 = A2;