hi3531的pcie控制器使能

根据5.2中的讲解,当监控high priority queue的PDSP channel设定好后,那么与之对应的event就知道了(PDSP channel与event一一对应)(注意5.x讲的是中断的配置,并不是exception的配置,4.x讲的是exception)

中断event与ISR配置代码如下,目的是使event与ISR建立联系:

/*Configure event*/

EventCombinerEventConfig( systemEvent,  (TEventCombinerCallback)SysComC2CIsr, GLO_NULL));

因为中断的event combiner将event 4~127分为4个group,所以在EventCombinerEventConfig函数中要判断systemEevent属于哪个group以及group的哪一位,然后判断该event之前没有被exception使用过;有没有被其他的中断使用过;有没有配置到vector上,若有一个条件成立,则该systemEvent不能再次使用:

u32 vectorIndex;

evtVector = systemEvent >> 5;

evtBit        = systemEvent & 31;

evtMask   = 1<<(systemEvent & 31);

/* (0100) Check if the event is an exception. */

u32 eventIsException = (~gCorePacINTCRegs->EXPMASK[evtVector]) & evtMask; //EXPMASK是exception mask寄存器,若相应位为0,表示该event已被exception使用

u32 eventIsInterrupt = 0;

/* (0200) Check if the event is already combined. */

u32 eventIsCombined = (~gCorePacINTCRegs->EVTMASK[evtVector]) & evtMask;//EVTMASK是中断mask寄存器,若相应位为0,表示该event已被其他中断使用

EEventCombinerRetVal retVal;

/* (0300) Check if the event is an interrupt. */

for(vectorIndex = 15; vectorIndex >= 4; vectorIndex--) //因为CPU有12个中断输入INT4~15,所以有12个vector.

{

/* Check all the vectors to ensure nobody uses the event ID*/

if (gPdb.startUpInfo.eventAtIntVector[DNUM][vectorIndex] == systemEvent) //DNUM是cpu编号,对于Nyquist,DNUM=0,1,2,3.

{

/* The event is already in use */

eventIsInterrupt = 1;  //若找到有vector与该systemEvent有联系,表明该event已被设置过.

break;

}

}

retVal = (eventIsException | eventIsInterrupt | eventIsCombined) ? EEventCombinerRetVal_AlreadyReserved: EEventCombinerRetVal_NoError;

if (retVal == EEventCombinerRetVal_NoError)

{

/* (0400) Register event for being combined. */

gCorePacINTCRegs->EVTMASK[evtVector] &= ~(1 << evtBit);//向EVTMASK寄存器注册该event,表明该event已经被该中断使用,其他的中断或exception不能再次使用

/* (0500) Register callback. */

gEventCombinerCallbacks[systemEvent].cb   = callback; //注册ISR,如文中提到的SysComC2CIsr就是callback

gEventCombinerCallbacks[systemEvent].data = callbackData;

}

对寄存器或者某些全局变量的操作一定要在中断disable的情况下进行,这里并没有给出代码。5.5中将会讲解ISR什么时候会被调用。

hi3531的pcie控制器使能,布布扣,bubuko.com

时间: 2024-10-05 22:09:36

hi3531的pcie控制器使能的相关文章

hi3531的pcie atu资源重映射

1. 设置ATU 区域号寄存器为需要配置的地址转换区编号. 2. 设置ATU Region Lower Base Address Register 和ATU Region Upper Base Address Register.(在此区域内的目标地址将由区域号寄存器所在的ATU 转换) 3. 设置ATU Region Limit Address Register. 4. 设置ATU Region Lower Target Address Register 和ATU Region Upper Ta

HI3531由DMA 发起PCIe 事务

Hi3531 PCIe 控制器内含DMA 控制器,DMA 控制器包含有两个DMA 通道(一个 DMA 读通道和一个DMA 写通道).PCIe 控制器内包含的DMA 控制器用于大数据量 的存储器读写事务,以提高数据传输的速率. DMA 控制器可以实现如下的存储器读写事务: DMA 控制寄存器 软件可通过DMA 控制寄存器来配置DMA 传输,也可以通过DMA 控制寄存器启动和 停止DMA 传输.DMA 控制寄存器位于PCIe 控制器的配置寄存器空间内,DMA 控制 寄存器的定义请参考本章的PCIe

PCIe闪存控制器技术解析

一.PCIe-SSD架构解析 PCIe作为CPU的局部总线,最大的特点在于数据传输吞吐量大和延迟低.对于NandFlash固态存储而言,传统磁盘存储领域存在的随机读写问题将不复存在,因此,整个存储系统的瓶颈从存储介质转移到了传输接口上来了.为存储而生的SATA/SAS接口在SSD上的表现不是那么理想了,非常影响IO的传输延迟.为此,显而易见,存储接口应该从传统的SATA/SAS往离CPU更近的系统总线PCIe或者DIMM方向发展. 大家其实很早就认识到了这一点,当年Fusion-io推出基于PC

Zynq Qspi控制器应用笔记

Zynq Qspi控制器应用笔记 Hello,panda 1 Zynq Qspi控制器 Zynq Qspi控制器支持三种模式:I/O模式.线性地址模式和传统SPI模式,其中线性地址模式双片选支持最大的线性地址空间为32MB,可通过PS DMA读取. 1.1 线性地址模式 线性地址模式只可从Qspi Flash中读数.在配置QSPI BOOT时,BOOT ROM工作在线性地址模式,且访问时钟为ARM接入的晶振时钟,因此在选用晶振时频率不能大于Flash的最高访问时钟频率. 线性地址模式下IO可以配

Nand Flash 控制器工作原理

对 Nand Flash 存储芯片进行操作, 必须通过 Nand Flash 控制器的专用寄存器才能完成.所以,不能对 Nand Flash 进行总线操作.而 Nand Flash 的写操作也必须块方式进行.对 Nand Flash 的读操作可以按字节读取.   Nand Flash 控制器特性 1. 支持对 Nand Flash 芯片的读.检验.编程控制 2. 如果支持从 Nand Flash 启动, 在每次重启后自动将前 Nand Flash 的前 4KB 数据搬运到 ARM 的内部 RAM

macbook pro 2016 2017 15寸 雷电3 外接显卡 epu 简单教程(不修改UEFI)

雷电3外接显卡效果还不错,但是除了akitio node 其他厂家并不会维护自己的固件来适配新机型,我自己买的mbp 2016 15''就出现了和AORUS Gaming Box 1070不兼容的问题,在引导的时候会在win徽标处转圈卡死,我联系了厂家,客服,给他们打了电话发了邮件,都快变成骚扰了,不过并没有解决问题,得到的回复是问题在解决中,不知道什么时候能解决. 后来在egpu.io上找到了解决方案并尝试成功,效果还不错 https://egpu.io/forums/implementati

Tilera平台使用体会

搞了一个半月的Tilera平台,总体上对该平台有一定的认识,这里写篇文章,算是做一个总结. 首先大概介绍一下Tilera处理器吧,这个处理器是一个众核处理器,一共有多种不同类型的CPU,其核心分别为9.36.72.100个核心.我们使用的Gx36 CPU,里面一共有36个核心.这中类型的CPU在官方宣传中号称是可以在非常低的功耗下达到Xeon E5的性能,对此我们在使用中表示呵呵呵~~~~开发这个CPU的公司是MIT搞得企业,貌似现在已经被Mellanox收购啦 好了,废话不说,简单介绍一下Ti

硬RAID可以为NVMe SSD数据可靠性保驾护航吗?

随着NAND Flash价格的不断下降,NVMe SSD正在慢慢普及.NVMe SSD由于极高的性能常被用作数据缓存,即使NVMe SSD发生故障,数据还在持久化介质中存储,不会导致数据丢失等严重事件.随着NVMe SSD的大量使用,其逐渐被用作持久化存储介质,替代传统磁盘.一旦NVMe SSD被用作持久化介质,便提出了数据保护的需求.传统磁盘采用RAID或者多副本的方式实现数据保护,那么在NVMe SSD上如何进行数据保护?是否还可以采用传统的硬RAID卡为NVMe SSD提供数据保护服务?

ok6410的DMA裸机总结

1.为何使用DMA:为了提高CPU的工作效率,避免多余的等待时间 2.关于DMA控制器:(1)通道数:2440有4个通道,6410有4个DMA控制器(初始化的时候要选择),32个通道.210有两种DMA一种是内存与内存之间,另外则是普通的内存与外设之间.(2)请求源:(3)基本时序 nXDREQ请求生效并经过2CLK周期同步后,nXDACK响应并开始生效,但至少还要经过3CLK的周期延迟,DMA控制器才可获得总线的控制权,并开始数据传输(4)工作模式:•Demond模式:如果DMA完成一次请求后