⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 amba_scan.c

📁 这是leon3处理器的交叉编译链
💻 C
字号:
/*    LEON2/3 LIBIO low-level routines     Written by Jiri Gaisler.    Copyright (C) 2004  Gaisler Research AB    This program is free software; you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation; either version 2 of the License, or    (at your option) any later version.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with this program; if not, write to the Free Software    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#include <asm-leon/leon.h>#include <stdio.h>#include <stdlib.h>#include <string.h>unsigned int leon3_ahbslv_scan(register unsigned int vendor,register unsigned int driver) {  register unsigned int conf,i, *confp;  register unsigned int cfg_area = (unsigned int ) (LEON3_IO_AREA | LEON3_CONF_AREA | LEON3_AHB_SLAVE_CONF_AREA);  for (i = 0; i < LEON3_AHB_SLAVES; i++)  {    confp = (unsigned int*)(cfg_area + (i * LEON3_AHB_CONF_WORDS * 4));    conf = *confp;    if ((amba_vendor(conf) == vendor) && (amba_device(conf) == driver)) {      return (unsigned int)confp;    }  }  return 0;}unsigned int leon3_getbase(register unsigned int *mbar,register unsigned int iobase, int *irq) {  register unsigned int conf = mbar[1];  return (unsigned int )(((iobase & 0xfff00000) |          ((conf & 0xfff00000)>> 12)) & (((conf & 0x0000fff0) <<4) | 0xfff00000));}unsigned int leon3_apbslv_scan(register unsigned int base,				register unsigned int vendor, 				register unsigned int driver, 				amba_apb_device *apbdevs, int c) {  register unsigned int conf, i, *confp;int j = 0;  for (i = 0; i < LEON3_APB_SLAVES; i++) {    confp = (unsigned int*)(base + (i * LEON3_APB_CONF_WORDS * 4));    conf = *confp;    if ((amba_vendor(conf) == vendor) && (amba_device(conf) == driver)) {      if (j < c) {	apbdevs[j].start = leon3_getbase(confp,base,0);        apbdevs[j].irq = amba_irq(conf);	j++;      }    }  }  return j;}unsigned int leon3_getapbbase(register unsigned int vendor,			      register unsigned int driver, 			      amba_apb_device *apbdevs, int c) {    unsigned int apb = leon3_ahbslv_scan(VENDOR_GAISLER,GAISLER_APBMST);    apb = (*(unsigned int *)(apb + 16)) & LEON3_IO_AREA;    apb |= LEON3_CONF_AREA;    return leon3_apbslv_scan(apb,vendor,driver,apbdevs,c);}    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -