第6节 代码举例
推荐给好友
打印
加入收藏
更新于2009-01-11 23:24:24

        下例代码设置MCF5445x MCU使用内部PCI仲裁器和所有PCI请求/允许引脚。该例也配置了PCI总线控制器以允许发起PCI事务和接收PCI事务。这里用寄存器的名称来作为宏定义,它的实际值在后面的注释中给出。其它配置也是可能的。
        /*设置PCI仲裁器*/
        MCF_PCIARB_PACR = 0 /* 0x001f001f */
        | MCF_PCIARB_PACR_INTMPRI
        | MCF_PCIARB_PACR_INTMINTEN
        | MCF_PCIARB_PACR_EXTMPRI(0x1F)
        | MCF_PCIARB_PACR_EXTMINTEN(0x1F);
        /*设置所有PCI使用的PCI请求和允许引脚*/
        MCF_GPIO_PAR_PCI = 0 /* 0xd5d5*/
        | MCF_GPIO_PAR_PCI_GNT3_GNT3
        | MCF_GPIO_PAR_PCI_GNT2_GNT2
        | MCF_GPIO_PAR_PCI_GNT1_GNT1
        | MCF_GPIO_PAR_PCI_GNT0_GNT0
        | MCF_GPIO_PAR_PCI_REQ3_REQ3
        | MCF_GPIO_PAR_PCI_REQ2_REQ2
        | MCF_GPIO_PAR_PCI_REQ1_REQ1
        | MCF_GPIO_PAR_PCI_REQ0_REQ0;
        /*设置PCI接口转换速率(从66MHz到33MHz),这是引导时的初始化配置,但如果需要,在运行时也可以配置*/
        MCF_GPIO_MSCR_PCI = MCF_GPIO_MSCR_PCI_PCI_HI_66MHZ;
        /*设置发起窗口:基地址,大小和事务地址*/
        /*窗口0将解码从0xa0000000开始的64MB并且转到PCI存储器地址空间的相同区域。这将作为PCI存储器窗口*/
        | MCF_PCI_PCIIWBTAR_WBA(PCI_MEM_ADDRESS)
        | MCF_PCI_PCIIWBTAR_WAM(PCI_MEM_SIZE)
        | MCF_PCI_PCIIWBTAR_WTA(PCI_MEM_T_ADDRESS);
        /*窗口1将解码从0xa4000000开始的16MB并且转到PCI IO地址空间的0xa4000000。这将作为PCI IO窗口*/
        MCF_PCI_PCIIW1BTAR = 0 /* 0xa400a400 */
        | MCF_PCI_PCIIWBTAR_WBA(PCI_IO_ADDRESS)
        | MCF_PCI_PCIIWBTAR_WAM(PCI_IO_SIZE)
        | MCF_PCI_PCIIWBTAR_WTA(PCI_IO_T_ADDRESS);
        /*窗口2将解码从0xa5000000开始的16MB并且可以用作配置数据窗口。如果PCICAR的使能位置位,任何IO窗口也必须用作配置窗口。当作为配置窗口时,使用PCICAR内的地址而不是转换值。*/
        MCF_PCI_PCIIW2BTAR = 0 /* 0xa500a500 */
        | MCF_PCI_PCIIWBTAR_WBA(PCI_CFG_ADDRESS)
        | MCF_PCI_PCIIWBTAR_WAM(PCI_CFG_SIZE)
        | MCF_PCI_PCIIWBTAR_WTA(PCI_CFG_T_ADDRESS);
        MCF_PCI_PCIIWCR = 0 /* 0x01090900 */
        | MCF_PCI_PCIIWCR_WINCTRL0_MEMREAD
        | MCF_PCI_PCIIWCR_WINCTRL1_IO
        | MCF_PCI_PCIIWCR_WINCTRL2_IO;
        /*允许发起者访问和目标存储器访问*/
        MCF_PCI_PCISCR |= 0 /* 0x00000006 */
        | MCF_PCI_PCISCR_B
        | MCF_PCI_PCISCR_M;
        /*设置最大重试写为0,以无限重试并且禁止块中的中断*/
        MCF_PCI_PCIICR = MCF_PCI_PCIICR_MAXRETRY(0);/* 0x00000000 */
        /*设置发起者事务的等待时间和缓存现大小*/
        MCF_PCI_PCICR1 = 0 /* 0x0000f804 */
        | MCF_PCI_PCICR1_LATTIMER(255)
        | MCF_PCI_PCICR1_CACHELINESIZE(4);
        /*设置目标寄存器。通常只需要一个BAR寄存器并且它指向DRAM。然而BAR0用于特殊目的,比如指向内部寄存器空间或SRAM*/
        MCF_PCI_PCIBAR0 = PCI_TARG0_BAR0; /* 0xfc000000 */
        MCF_PCI_PCIBAR5 = PCI_TARG0_BAR1; /* 0x00000001 */
        MCF_PCI_PCITBATR0 = IPSBAR_ADDRESS | 1; /* 0xfc000001 */
        MCF_PCI_PCITBATR5 = SDRAM_ADDRESS | 1; /* 0x40000001 */
        MCF_PCI_PCITCR2 = 0 /* 0x00002100 */
        | MCF_PCI_PCITCR2_B0E
        | MCF_PCI_PCITCR2_B5E; /*使能目标性能特色例如预期和联合写*/
        MCF_PCI_PCITCR = 0 /* 0x00010008 */
        | MCF_PCI_PCITCR_P
        | MCF_PCI_PCITCR_WCT(8);
        /*PCI复位位无效*/
        MCF_PCI_PCIGSCR = 0;
        /*在这里插入等待允许PCI设备离开复位*/


<<上一页    下一页>>
相关链接


 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.