亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bsl_bsl.c

?? BSL64xx是一dsp的程序代碼
?? C
字號:
/******************************************************************************\
* Copyright (C) 2004 by RTD Embedded Technologies, Inc.   All rights reserved.
* Confidential and Proprietary, Not for Public Release
*------------------------------------------------------------------------------
* PROJECT.......... Board Support Library for SPM6420 and SPM6430
* VERSION.......... (Defined in README.TXT)
*------------------------------------------------------------------------------
* CONTENT.......... Main source file of Board Support Library for SPM6420/6430
* FILENAME......... bsl_bsl.c
\******************************************************************************/
#define _BSL_BSL_MOD_

#include <bsl.h>

#include <std.h>
#include <csl.h>
#include <csl_emifa.h>
#include <csl_emifb.h>
#include <csl_pci.h>
#include <csl_irq.h>
#include <c6x.h>        // for SAVE_AMR, RESTORE_AMR, SAVE_SAT, RESTORE_SAT

#include <bsl_umisc.h>
#include <bsl_uint.h>


/******************************************************************************\
*                         L O C A L   S E C T I O N
\******************************************************************************/


/******************************************************************************\
* static macro declarations
\******************************************************************************/

// offsets of HW info variables in EEPROM
#define EEVAR_DSPNOMSP_OFFS         14  // DSP processor's nominal speed in MHz
#define EEVAR_FLASHSZ_OFFS          15  // size of the installed Flash memory in MB
#define EEVAR_SDRAMSZ_OFFS          16  // size of the installed SDRAM memory in MB

// EMIF Configuration for SPM6420/6430 board with 600 MHz DSP processor
// These are default configuration values, and are overridden in SPM6400_EMIF_INIT().
#define CFG_EMIFA_GBLCTL_600            0x00082024
#define CFG_EMIFA_CECTL0_600            0xFFFFFFDF
#define CFG_EMIFA_SDCTL_600             0x63116000
#define CFG_EMIFA_SDTIM_600             0x0000030C
#define CFG_EMIFA_SDEXT_600             0x00055C28
#define CFG_EMIFB_GBLCTL_600            0x00092024
#define CFG_EMIFB_CECTL0_600            0x13410D10
#define CFG_EMIFB_CECTL1_600            0x33514D10
#define CFG_EMIFB_CECTL2_600            0x33514D10
#define CFG_EMIFB_CECTL3_600            0x11814610


// function to configure the EMIF_A and EMIF_B according to the given SDRAM size
SPM6400_EMIF_INIT(int SDRAMSize)
{
    Uint32 PBus_temp, EMIFA_temp, EMIFB_temp;
    Uint32 Timer_Tick_Count;
    Uint16 pbctl_temp;
    TIMER_Handle hTimer;

    /*
        Setup SDRAM timing in EMIFA
    */

    EMIFA_temp = EMIFA_RGET(GBLCTL);
    EMIFA_temp &= 0xFFF0D007;
    EMIFA_temp |= 0x000820A0;
    EMIFA_RSET(GBLCTL, EMIFA_temp);

    // CECTL0
    EMIFA_RSET( CECTL0, 0xFFFFFFDF); // No reserved bits, just write a value

    // SDTIM
    EMIFA_temp = EMIFA_RGET(SDTIM);
    EMIFA_temp &= 0xFC000000;
    EMIFA_temp |= 0x00000190;
    EMIFA_RSET(SDTIM, EMIFA_temp);

    // SDEXT
    EMIFA_temp = EMIFA_RGET(SDEXT);
    EMIFA_temp &= 0xFFE00000;
    EMIFA_temp |= 0x00055CA8;
    EMIFA_RSET(SDEXT, EMIFA_temp);

    /*
        Do some basic EMIFB setup so the platformBus can be configured
    */

    // GBLCTL
    EMIFB_temp = EMIFB_RGET(GBLCTL);
    EMIFB_temp &= 0xFFF0D007;
    EMIFB_temp |= 0x000920A0;
    EMIFB_RSET(GBLCTL, EMIFB_temp);

    // CECTL0-3
    EMIFB_RSET( CECTL0, 0x13410D10); // No reserved bits, just write a value
    EMIFB_RSET( CECTL1, 0x33514D10);
    EMIFB_RSET( CECTL2, 0x33514D10);
    EMIFB_RSET( CECTL3, 0x11814610);

	EMIFA_temp = EMIFA_RGET(SDCTL);
    EMIFA_temp &= 0x80000FFE;
    switch(SDRAMSize)
    {
        case 32:
            EMIFA_temp |= 0x57116000;
            EMIFA_RSET(SDCTL, EMIFA_temp);
            break;
        case 128:
        	EMIFA_temp |= 0x53116000;
        	EMIFA_RSET(SDCTL, EMIFA_temp);
            break;
        case 256:
        	EMIFA_temp |= 0x5B116000;
            EMIFA_RSET(SDCTL, EMIFA_temp);
            break;
        case 512:
            EMIFA_RSET(CECTL1, 0xFFFFFFDF);
            EMIFA_temp |= 0x5B116000;
            EMIFA_RSET(SDCTL, EMIFA_temp);
            break;
        default:
            // We should never actually get here, unless the
            // EEPROM is corrupt.  In that case, load the
            // 32MB values, because they are the safest defaults.
            EMIFA_temp |= 0x57116000;
            EMIFA_RSET(SDCTL, EMIFA_temp);
            break;
    }

    // Setup platformBus and put it into Reset
    // PlatformBus must be in Reset for the bus speed to be changed.
    pbctl_temp = UMISC_RGET(PBCTL0);
    UMISC_RSET(PBCTL1, 0x0100);

	UMISC_RSET(PBCTL0, 0x8220);
	
    /*
        Change platformBus speed to 50 MHz

        We must do this without touching any of the reserved bits in the
        GBLCTL register.  Modifiying the reserved bits can crash the 1GHz
        version of the DSP.
    */

    // Read in the current EMIFB GBLCTL register
    PBus_temp = EMIFB_RGET(GBLCTL);

    // Wipe out all the bits we want to change, without affecting any reserved bits.
    PBus_temp &= 0xFFF0D007;

    // Set the bits
    PBus_temp |= 0x000520A0;

    // Write the modified value
    EMIFB_RSET(GBLCTL, PBus_temp);



    /*
        The platformBus must be held in reset for 50us after a speed
        change.  Since there is no udelay() function in the DSP's C runtime
        library, we have to use one of the onboard timers for the delay.

        The timers count based on the DSP clock speed.  Therefore, we
        can't delay for a fixed number of timer ticks.  We already know
        the DSP frequency in MHz, so we can use it to calculate the
        number of timer ticks.

        This value has to be divided by 8, because the timers use 1/8 the
        DSP clock.
    */
    Timer_Tick_Count = ((BSL_boardDescriptor.dspNomSpeed * 50) / 8);

    hTimer = TIMER_open(TIMER_DEVANY, TIMER_OPEN_RESET);

    TIMER_reset(hTimer);

    // This will configure and start the timer in one operation.
    TIMER_configArgs(hTimer, 0x000002C0, 0xFFFFFFFF, 0x00000000);

    while( TIMER_getCount(hTimer) < Timer_Tick_Count);

    // Bring platformBus out of reset
    UMISC_RSET(PBCTL0, (pbctl_temp & 0x40FC)|(0x0220 & ~0x40FC));


    // Delay for another 50us to make sure the platformBus made it all the
    // way out of reset before returning.
    TIMER_reset(hTimer);
    TIMER_configArgs(hTimer, 0x000002C0, 0xFFFFFFFF, 0x00000000);
    while( TIMER_getCount(hTimer) < Timer_Tick_Count);


    // Reset and close the timer when we're done, so it is restored to a
    // known state.
    TIMER_reset(hTimer);
    TIMER_close(hTimer);

}


/******************************************************************************\
* static typedef declarations
\******************************************************************************/


/******************************************************************************\
* static function declarations
\******************************************************************************/

#ifdef __cplusplus
extern "C" {
#endif

// Initialization functions of COMM and FLASH modules
extern far void COMM_init();    // defined in bsl_comm.c
extern far void FLASH_init();   // defined in bsl_flash.c

// Callback Interrupt Service Routine of COMM and FLASH modules
extern far void COMM_ISR_CB();  // defined in bsl_comm.c
extern far void FLASH_ISR_CB(); // defined in bsl_flash.c

#ifdef __cplusplus
}
#endif  // extern "C" {


/******************************************************************************\
* static variable definitions
\******************************************************************************/


/******************************************************************************\
* static function definitions
\******************************************************************************/

interrupt void BSL_ISR_DISPATCHER()
{
    // In this ISR, there are assembly instructions whose results depend on
    // AMR and SAT. That is, the AMR and SAT have to be saved and restored.
    Uint32  temp_AMR, temp_SAT; // to save the AMR and SAT

    // save AMR and SAT
    SAVE_AMR(temp_AMR);
    SAVE_SAT(temp_SAT);

    do
    {
        if( UINT_FGETSQ( STATUS, P2LDBIA, ACTIVE ) ) COMM_ISR_CB();
        if( UINT_FGETSQ( STATUS, FRYBYIA, ACTIVE ) ) FLASH_ISR_CB();
    }
    while( UINT_RGET(STATUS) & (_UINT_STATUS_P2LDBIA_ACTIVE_SV | _UINT_STATUS_FRYBYIA_ACTIVE_SV) );

    // restore AMR and SAT
    RESTORE_AMR(temp_AMR);
    RESTORE_SAT(temp_SAT);
}


/******************************************************************************\
*                        G L O B A L   S E C T I O N
\******************************************************************************/


/******************************************************************************\
* global variable definitions
\******************************************************************************/

BSL_BoardDescriptor BSL_boardDescriptor;


/******************************************************************************\
* global function definitions
\******************************************************************************/

/*----------------------------------------------------------------------------*/
void BSL_init()
{
    //------------------------------------------------------
    // initializing of the DSP interrupt conditions
    //------------------------------------------------------
    IER = 0x0003;   // enable Reset and NMI only
    ICR = 0xFFFF;   // clear all pending ITs
    CSR |= 1;       // enable Global Interrupt Enable (GIE)

    //------------------------------------------------------
    // initializing of the Chip Support Library
    //------------------------------------------------------
    CSL_init();

    //------------------------------------------------------
    // reading HW information from the EEPROM
    //------------------------------------------------------

    // per-initializing EMIFB for the fastest board to reach the FPGA registers
    EMIFB_RSET( GBLCTL, CFG_EMIFB_GBLCTL_600 );
    EMIFB_RSET( CECTL3, CFG_EMIFB_CECTL3_600 );

    // set "DSP is in use" flag
    UMISC_RFSETS( DHCOMM, DSPINUSE, INUSE );

    // wait for EEPROM ready
    while( ! (PCI_FGET(RSTSRC,CFGDONE)) );

    // McBSP2 override for EEPROM access
    UMISC_switchToEEPROM();

    // reading HW information from the EEPROM
    BSL_boardDescriptor.dspNomSpeed = (Uint32)PCI_eepromRead(EEVAR_DSPNOMSP_OFFS);
    BSL_boardDescriptor.flashSize   = (Uint32)PCI_eepromRead(EEVAR_FLASHSZ_OFFS);
    BSL_boardDescriptor.sdramSize   = (Uint32)PCI_eepromRead(EEVAR_SDRAMSZ_OFFS);

    // switch to AUTO mode(McBSP is active except for a few milliseconds after PCI reset)
    UMISC_switchToAuto();

    //BSL_boardDescriptor.dspNomSpeed   = 600;
    //BSL_boardDescriptor.flashSize = 4;
    //BSL_boardDescriptor.sdramSize = 128;

    SPM6400_EMIF_INIT(BSL_boardDescriptor.sdramSize);

    //------------------------------------------------------
    // initializing Communication and Flash Controller
    // after the initialization of EMIF
    //------------------------------------------------------

    IRQ_disable(IRQ_EVT_EXTINT7);

    // ExtInt7 must be a rising edge sensitive pin (EXTPOL.XIP7 = 0)
    IRQ_RSET( EXTPOL, IRQ_RGET(EXTPOL) & (~0x8) );

    // Disable every sources for ExtInt7 pin
    // The proper sources will be set by the COMM_init() and by the FLASH_init()
    UINT_RSET( EIT7SRC, 0 );

    COMM_init();
    FLASH_init();

    IRQ_clear(IRQ_EVT_EXTINT7);
    IRQ_enable(IRQ_EVT_EXTINT7);

    //------------------------------------------------------
    // initializing PCI Bus peripheral Controller
    //------------------------------------------------------

    IRQ_disable(IRQ_EVT_DSPINT);

    PCIBUS_init();

    // enables DSPINT's interrupt on Int13 by default
    // for the PCI peripheral interrupts
    IRQ_clear(IRQ_EVT_DSPINT);
    IRQ_enable(IRQ_EVT_DSPINT);

}


/*----------------------------------------------------------------------------*/

/******************************************************************************\
* End of bsl_bsl.c
\******************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品中文字幕在线不卡尤物 | 丝袜美腿亚洲综合| 另类小说一区二区三区| 色综合一区二区| 久久久久久影视| 天堂成人免费av电影一区| 国产69精品久久久久毛片| 欧美一级在线免费| 亚洲午夜久久久久久久久久久| 国产精品一级在线| 日韩欧美一区电影| 午夜伊人狠狠久久| 色八戒一区二区三区| 欧美国产日韩亚洲一区| 激情综合网天天干| 日韩免费视频一区二区| 亚洲精品成人a在线观看| 国产不卡免费视频| 久久午夜免费电影| 精品亚洲成av人在线观看| 精品视频色一区| 日韩欧美国产综合| 久久精品国产免费看久久精品| 欧美性一二三区| 亚洲影院理伦片| av午夜精品一区二区三区| 国产精品乱码一区二三区小蝌蚪| 麻豆91在线观看| 日韩欧美国产一区二区三区 | 国产欧美视频在线观看| 美女视频黄 久久| 日本不卡不码高清免费观看| 成人在线视频首页| 欧美极品少妇xxxxⅹ高跟鞋| 国产一区二区导航在线播放| 日韩精品自拍偷拍| 激情小说欧美图片| 久久久蜜臀国产一区二区| 久久午夜羞羞影院免费观看| 蜜臀av性久久久久av蜜臀妖精| 欧美日韩国产色站一区二区三区| 亚洲在线观看免费视频| 欧美在线999| 日韩经典中文字幕一区| 精品久久久网站| 国产91精品一区二区麻豆亚洲| 欧美激情资源网| 91女人视频在线观看| 亚洲一卡二卡三卡四卡五卡| 欧美日韩美女一区二区| 美腿丝袜亚洲三区| 国产情人综合久久777777| 国产v综合v亚洲欧| 亚洲一区在线视频观看| 91精品国产综合久久婷婷香蕉| 日本sm残虐另类| 日本一区二区成人| 欧美午夜片在线观看| 免费av网站大全久久| 国产精品系列在线| 欧美吻胸吃奶大尺度电影| 久久精品国产999大香线蕉| 亚洲国产精华液网站w| 色综合久久久久网| 免费观看成人鲁鲁鲁鲁鲁视频| 日本一区二区成人在线| 91精品婷婷国产综合久久性色| 另类小说视频一区二区| 日韩美女啊v在线免费观看| 欧美精品久久久久久久多人混战| 国产美女视频一区| 亚洲国产一区二区三区| 国产婷婷色一区二区三区| 91片在线免费观看| 国内精品免费在线观看| 一卡二卡三卡日韩欧美| 久久久九九九九| 欧美日本韩国一区| k8久久久一区二区三区| 免费在线观看精品| 亚洲精品国产品国语在线app| 欧美电影免费观看高清完整版在| 色呦呦网站一区| 国产精品亚洲第一| 日本特黄久久久高潮| 亚洲视频在线一区二区| 2017欧美狠狠色| 91精品国产综合久久蜜臀| 一本久久a久久免费精品不卡| 国产在线精品一区二区| 日日夜夜免费精品视频| 亚洲人xxxx| 欧美激情一区二区三区不卡| 制服丝袜成人动漫| 色综合久久久久综合体桃花网| 国产综合色精品一区二区三区| 亚洲一卡二卡三卡四卡无卡久久| 国产精品情趣视频| 欧美高清在线视频| 久久亚洲欧美国产精品乐播| 日韩欧美国产系列| 欧美精品久久99久久在免费线| 日本电影亚洲天堂一区| 91浏览器打开| 99re这里都是精品| 99久久99久久久精品齐齐| 国产91丝袜在线播放| 狠狠色狠狠色合久久伊人| 偷窥国产亚洲免费视频| 婷婷成人综合网| 亚洲国产精品麻豆| 日本伊人精品一区二区三区观看方式| 亚洲制服欧美中文字幕中文字幕| 亚洲一区av在线| 亚洲国产cao| 国产suv精品一区二区三区| 国产高清亚洲一区| 高清在线不卡av| 99久久99久久久精品齐齐| 99国产精品久久久久久久久久| 99久久免费国产| 色呦呦一区二区三区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 色综合视频一区二区三区高清| 色婷婷综合久久久中文字幕| 欧美色电影在线| 91精品国产综合久久精品性色| 日韩一级高清毛片| 久久久99精品免费观看| 国产精品乱人伦一区二区| 一区二区欧美国产| 蜜臀久久99精品久久久久久9| 精品一区二区免费看| 成人一区二区三区中文字幕| 972aa.com艺术欧美| 欧美日韩五月天| 精品黑人一区二区三区久久| 国产日韩欧美高清在线| ...中文天堂在线一区| 亚洲午夜在线电影| 激情综合网激情| av一二三不卡影片| 这里是久久伊人| 国产亚洲欧美激情| 亚洲最大的成人av| 精品伊人久久久久7777人| 99视频热这里只有精品免费| 欧美日韩在线播放一区| 精品国内片67194| 中文字幕一区二区三区在线观看 | 国产亚洲欧美一区在线观看| 国产精品不卡一区二区三区| 亚洲国产精品尤物yw在线观看| 老司机午夜精品| 色婷婷综合激情| 欧美精品一区视频| 亚洲一二三四在线观看| 国产精品888| 欧美日韩激情一区二区| 久久精子c满五个校花| 亚洲成国产人片在线观看| 国模冰冰炮一区二区| 精品视频在线免费看| 国产欧美一区二区三区沐欲| 亚洲777理论| kk眼镜猥琐国模调教系列一区二区 | 美女精品自拍一二三四| 一本久道中文字幕精品亚洲嫩| 精品欧美一区二区久久| 夜夜精品视频一区二区| 国产91清纯白嫩初高中在线观看| 欧美一区二区视频观看视频| 中文字幕一区二区视频| 国产精品自拍一区| 欧美一级黄色大片| 亚洲成人动漫在线观看| 一本色道a无线码一区v| 中文字幕成人av| 国产乱子伦一区二区三区国色天香| 91福利在线导航| 日韩一区在线免费观看| 国产激情一区二区三区四区 | 欧美精品三级日韩久久| 亚洲黄色片在线观看| 成人午夜在线播放| 久久久久久麻豆| 亚洲欧美色图小说| 欧美电影免费观看高清完整版在线 | 国产剧情一区二区| 欧美在线观看18| 亚洲视频在线一区| 99久久国产综合精品女不卡| 久久精品一区二区| 国产伦精品一区二区三区免费| 日韩欧美一区在线| 免播放器亚洲一区| 日韩欧美在线1卡| 九色|91porny| 337p粉嫩大胆色噜噜噜噜亚洲| 久久精品免费观看|