📄 pci_configspace_init.asm
字号:
/* ********************************************************************************
*
* Copyright (c) 2003 Analog Devices Inc. All rights reserved.
*
* *******************************************************************************/
#include "defBF535.h"
#include "pci_ids.h"
#include "My_Header.h"
.GLOBAL PCI_CFG_INIT;
.section program2;
/********************** PCI module Configuration ****************************/
PCI_CFG_INIT:
Initialize:
P4.H = HI(PCI_STAT); P4.L = LO(PCI_STAT);
R1 = [P4];
[P4] = R1; // Clear PCI status register
SSYNC;
P4.H = HI(PCI_CTL); P4.L = LO(PCI_CTL);
R0.H= 0x0; R0.L = 0x0;
[P4] = R0; // disable PCI before writing config space
SSYNC;
P4.H = HI(PCI_ICTL); P4.L = LO(PCI_ICTL);
R0.H= 0x0; R0.L = 0x0;
[P4] = R0; // clear PCI interrupt enables before writing config space
SSYNC;
/*************** BEGIN INITIALIZATION ***************************/
Vendor_ID:
P4.H = HI(PCI_CFG_VIC); P4.L = LO(PCI_CFG_VIC);
R0.H= 0x0; R0.L = PCI_VENDOR_ID;
[P4] = R0; // write PCI_CFG_VIC
SSYNC;
Device_ID:
P4.H = HI(PCI_CFG_DIC); P4.L = LO(PCI_CFG_DIC);
R0.H= 0x0; R0.L = PCI_DEVICE_ID;
[P4] = R0; // write PCI_CFG_DIC
SSYNC;
Command:
P4.H = HI(PCI_CFG_CMD); P4.L = LO(PCI_CFG_CMD);
R0.H= 0x0; R0.L = 0x307;
[P4] = R0;
SSYNC;
Revision_ID:
P4.H = HI(PCI_CFG_RID); P4.L = LO(PCI_CFG_RID);
R0.H= 0x0; R0.L = PCI_REVISION_ID;
[P4] = R0;
SSYNC;
Class_Code:
P4.H = HI(PCI_CFG_CC); P4.L = LO(PCI_CFG_CC);
R0.H= PCI_BASE_CLASS_SIGNAL_PROCESSING; R0.L = PCI_CLASS;
[P4] = R0;
SSYNC;
Latency_Timer:
P4.H = HI(PCI_CFG_MLT); P4.L = LO(PCI_CFG_MLT);
R0 = 0x0;
[P4] = R0; // no stringent requirements
SSYNC;
Header_Type:
P4.H = HI(PCI_CFG_HT); P4.L = LO(PCI_CFG_HT);
R0.H= 0x0; R0.L = 0x0;
[P4] = R0; // Header Type 0
SSYNC;
Subsystem_Vendor_ID:
P4.H = HI(PCI_CFG_SVID); P4.L = LO(PCI_CFG_SVID);
R0.H= 0x0; R0.L = 0x0;
[P4] = R0;
SSYNC;
Subsystem_ID:
P4.H = HI(PCI_CFG_SID); P4.L = LO(PCI_CFG_SID);
R0.H= 0x0; R0.L = 0x0;
[P4] = R0;
SSYNC;
Interrupt_Pin:
P4.H = HI(PCI_CFG_IP); P4.L = LO(PCI_CFG_IP);
R0.H= 0x0; R0.L = 0x1; /* INTA is used by ADSP-BF535 in device mode */
[P4] = R0;
SSYNC;
// the host system will provide this information
Interrupt_Line:
P4.H = HI(PCI_CFG_IL); P4.L = LO(PCI_CFG_IL);
R0.H= 0x0; R0.L = 0x0;
[P4] = R0;
SSYNC;
Minimum_Grant:
P4.H = HI(PCI_CFG_MING); P4.L = LO(PCI_CFG_MING);
R0.H= 0x0; R0.L = PCI_MIN_GRANT;
[P4] = R0;
SSYNC;
Maximum_Latency:
P4.H = HI(PCI_CFG_MAXL); P4.L = LO(PCI_CFG_MAXL);
R0.H= 0x0; R0.L = PCI_MAX_LATENCY;
[P4] = R0;
SSYNC;
HMCTL:
P4.H = HI(PCI_HMCTL); P4.L = LO(PCI_HMCTL);
R0.H = 0X0; R0.L = (PCI_HMCTL_SYSMMRENAB | PCI_HMCTL_L2ENAB);
W[P4] = R0; // allow access to L2 and MMR spaces
SSYNC;
/* enable PCI interrupts */
P4.H = HI(PCI_ICTL); P4.L = LO(PCI_ICTL);
R0.H= 0x0; R0.L = (PCI_ICTL_RESET);
[P4] = R0; // Enable PCI reset to generate an interrupt to the ADSP-BF535 core
SSYNC;
enable_PCI:
P4.H = HI(PCI_CTL); P4.L = LO(PCI_CTL);
R0.H= 0x0; R0.L = (PCI_CTL_HOST | PCI_CTL_ENABPCI | PCI_CTL_FASTBCK2BCK) ;
[P4] = R0; /* enable PCI as a Device; enable Fast back-to-back*/
SSYNC;
PCI_CFG_INIT.END: rts; /* Return from PCI init subroutine */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -