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

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

?? board_memories.c

?? at91sam9263 lcd基礎包源代碼
?? C
字號:
/* ----------------------------------------------------------------------------
 *         ATMEL Microcontroller Software Support 
 * ----------------------------------------------------------------------------
 * Copyright (c) 2008, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */

/*
    Title: Memories implementation
*/

//------------------------------------------------------------------------------
//         Headers
//------------------------------------------------------------------------------

#include <board.h>
#include <pio/pio.h>

/*
    Macros:
        READ - Reads a register value. Useful to add trace information to read
               accesses.
        WRITE - Writes data in a register. Useful to add trace information to
                write accesses.
*/
#define READ(peripheral, register)          (peripheral->register)
#define WRITE(peripheral, register, value)  (peripheral->register = value)

//------------------------------------------------------------------------------
//         Exported functions
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/// Changes the mapping of the chip so that the remap area mirrors the
///  internal ROM or the EBI CS0.
//------------------------------------------------------------------------------
void BOARD_RemapRom()
{
    AT91C_BASE_MATRIX->MATRIX_MRCR &= ~(AT91C_MATRIX_RCA926I | AT91C_MATRIX_RCA926D);
}

//------------------------------------------------------------------------------
/// Changes the mapping of the chip so that the remap area mirrors the
/// internal RAM.
//------------------------------------------------------------------------------
void BOARD_RemapRam()
{
    AT91C_BASE_MATRIX->MATRIX_MRCR |= (AT91C_MATRIX_RCA926I | AT91C_MATRIX_RCA926D);
}


//------------------------------------------------------------------------------
/// Initialize and configure the SDRAM
//------------------------------------------------------------------------------
void BOARD_ConfigureSdram()
{
    volatile unsigned int i;
    static const Pin pinsSdram[] = {PINS_SDRAM};
    volatile unsigned int *pSdram = (unsigned int *) AT91C_EBI0_SDRAM;

    // Enable corresponding PIOs
    PIO_Configure(pinsSdram, 1);

    // Enable EBI chip select for the SDRAM
    WRITE(AT91C_BASE_CCFG, CCFG_EBI0CSA, AT91C_EBI_CS1A_SDRAMC);

    // Set Configuration Register
    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_CR, AT91C_SDRAMC_NC_9
                                    | AT91C_SDRAMC_NR_13
                                    | AT91C_SDRAMC_CAS_2
                                    | AT91C_SDRAMC_NB_4_BANKS
                                    | AT91C_SDRAMC_DBW_32_BITS
                                    | AT91C_SDRAMC_TWR_2
                                    | AT91C_SDRAMC_TRC_7
                                    | AT91C_SDRAMC_TRP_2
                                    | AT91C_SDRAMC_TRCD_2
                                    | AT91C_SDRAMC_TRAS_5
                                    | AT91C_SDRAMC_TXSR_8);

    for (i = 0; i < 1000; i++);

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_NOP_CMD); // Perform NOP
    pSdram[0] = 0x00000000;

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_PRCGALL_CMD); // Set PRCHG AL
    pSdram[0] = 0x00000000;                     // Perform PRCHG

    for (i = 0; i < 10000; i++);

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 1st CBR
    pSdram[1] = 0x00000001;                     // Perform CBR

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 2 CBR
    pSdram[2] = 0x00000002;                     // Perform CBR

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 3 CBR
    pSdram[3] = 0x00000003;                    // Perform CBR

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 4 CBR
    pSdram[4] = 0x00000004;                   // Perform CBR

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 5 CBR
    pSdram[5] = 0x00000005;                   // Perform CBR

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 6 CBR
    pSdram[6] = 0x00000006;                 // Perform CBR

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 7 CBR
    pSdram[7] = 0x00000007;                 // Perform CBR

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 8 CBR
    pSdram[8] = 0x00000008;                 // Perform CBR

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_LMR_CMD);     // Set LMR operation
    pSdram[9] = 0xcafedede;                 // Perform LMR burst=1, lat=2

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_TR, (BOARD_MCK * 7) / 1000000);     // Set Refresh Timer

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_NORMAL_CMD);  // Set Normal mode
    pSdram[0] = 0x00000000;                     // Perform Normal mode


}

//------------------------------------------------------------------------------
/// Initialize and configure the SDRAM for a 48 MHz MCK (ROM code clock settings)
//------------------------------------------------------------------------------
void BOARD_ConfigureSdram48MHz()
{
    volatile unsigned int i;
    static const Pin pinsSdram[] = {PINS_SDRAM};
    volatile unsigned int *pSdram = (unsigned int *) AT91C_EBI0_SDRAM;

    // Enable corresponding PIOs
    PIO_Configure(pinsSdram, 1);

    // Enable EBI chip select for the SDRAM
    WRITE(AT91C_BASE_CCFG, CCFG_EBI0CSA, AT91C_EBI_CS1A_SDRAMC);

    // Set Configuration Register
    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_CR, AT91C_SDRAMC_NC_9
                                         | AT91C_SDRAMC_NR_13
                                         | AT91C_SDRAMC_CAS_2
                                         | AT91C_SDRAMC_NB_4_BANKS
                                         | AT91C_SDRAMC_DBW_32_BITS
                                         | AT91C_SDRAMC_TWR_1
                                         | AT91C_SDRAMC_TRC_4
                                         | AT91C_SDRAMC_TRP_1
                                         | AT91C_SDRAMC_TRCD_1
                                         | AT91C_SDRAMC_TRAS_2
                                         | AT91C_SDRAMC_TXSR_3);

    for (i = 0; i < 1000; i++);

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_NOP_CMD); // Perform NOP
    pSdram[0] = 0x00000000;

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_PRCGALL_CMD); // Set PRCHG AL
    pSdram[0] = 0x00000000;                     // Perform PRCHG

    for (i = 0; i < 10000; i++);

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 1st CBR
    pSdram[1] = 0x00000001;                     // Perform CBR

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 2 CBR
    pSdram[2] = 0x00000002;                     // Perform CBR

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 3 CBR
    pSdram[3] = 0x00000003;                    // Perform CBR

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 4 CBR
    pSdram[4] = 0x00000004;                   // Perform CBR

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 5 CBR
    pSdram[5] = 0x00000005;                   // Perform CBR

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 6 CBR
    pSdram[6] = 0x00000006;                 // Perform CBR

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 7 CBR
    pSdram[7] = 0x00000007;                 // Perform CBR

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD);    // Set 8 CBR
    pSdram[8] = 0x00000008;                 // Perform CBR

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_LMR_CMD);     // Set LMR operation
    pSdram[9] = 0xcafedede;                 // Perform LMR burst=1, lat=2

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_TR, (48000000 * 7) / 1000000);      // Set Refresh Timer

    WRITE(AT91C_BASE_SDRAMC0, SDRAMC_MR, AT91C_SDRAMC_MODE_NORMAL_CMD);  // Set Normal mode
    pSdram[0] = 0x00000000;                     // Perform Normal mode


}

//------------------------------------------------------------------------------
/// Configures the EBI for NandFlash access. Pins must be configured after or
/// before calling this function.
//------------------------------------------------------------------------------
void BOARD_ConfigureNandFlash(unsigned char busWidth)
{
    // Configure EBI
    AT91C_BASE_CCFG->CCFG_EBI0CSA |= AT91C_EBI_CS3A_SM;

    // Configure SMC
    AT91C_BASE_SMC0->SMC_SETUP3 = 0;
	AT91C_BASE_SMC0->SMC_PULSE3 = 0x30003;
	AT91C_BASE_SMC0->SMC_CYCLE3 = 0x50005;
  	AT91C_BASE_SMC0->SMC_CTRL3 = 0x2003;

    if (busWidth == 8) {

        AT91C_BASE_SMC0->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_EIGTH_BITS;
    }
    else if (busWidth == 16) {
 
        AT91C_BASE_SMC0->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS;
    }
}

//------------------------------------------------------------------------------
/// Configures the EBI for NandFlash access at 48MHz. Pins must be configured
/// after or before calling this function.
//------------------------------------------------------------------------------
void BOARD_ConfigureNandFlash48MHz(unsigned char busWidth)
{
    // Configure EBI
    AT91C_BASE_CCFG->CCFG_EBI0CSA |= AT91C_EBI_CS3A_SM;

    // Configure SMC
    AT91C_BASE_SMC0->SMC_SETUP3 = 0x00010001;
    AT91C_BASE_SMC0->SMC_PULSE3 = 0x04030302;
    AT91C_BASE_SMC0->SMC_CYCLE3 = 0x00070004;
    AT91C_BASE_SMC0->SMC_CTRL3  = (AT91C_SMC_READMODE
                                 | AT91C_SMC_WRITEMODE
                                 | AT91C_SMC_NWAITM_NWAIT_DISABLE
                                 | ((0x1 << 16) & AT91C_SMC_TDF));

    if (busWidth == 8) {

        AT91C_BASE_SMC0->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_EIGTH_BITS;
    }
    else if (busWidth == 16) {

        AT91C_BASE_SMC0->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS;
    }
}

//------------------------------------------------------------------------------
/// Configures the EBI for NorFlash access at 48MHz.
/// \Param busWidth Bus width 
//------------------------------------------------------------------------------
void BOARD_ConfigureNorFlash48MHz(unsigned char busWidth)
{
    // Configure SMC
    AT91C_BASE_SMC0->SMC_SETUP0 = 0x00000001;
    AT91C_BASE_SMC0->SMC_PULSE0 = 0x07070703;
    AT91C_BASE_SMC0->SMC_CYCLE0 = 0x00070007;
    AT91C_BASE_SMC0->SMC_CTRL0  = (AT91C_SMC_READMODE
                                  | AT91C_SMC_WRITEMODE
                                  | AT91C_SMC_NWAITM_NWAIT_DISABLE
                                  | ((0x1 << 16) & AT91C_SMC_TDF));
                           
    if (busWidth == 8) {

        AT91C_BASE_SMC0->SMC_CTRL0 |= AT91C_SMC_DBW_WIDTH_EIGTH_BITS;
    }
    else if (busWidth == 16) {
 
        AT91C_BASE_SMC0->SMC_CTRL0 |= AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS;
    }
    else if (busWidth == 32) {
 
        AT91C_BASE_SMC0->SMC_CTRL0 |= AT91C_SMC_DBW_WIDTH_THIRTY_TWO_BITS;
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩精品久久久久| 2024国产精品| 不卡的看片网站| 国产毛片精品国产一区二区三区| 五月天激情综合网| 午夜私人影院久久久久| 亚洲午夜电影在线| 天天综合日日夜夜精品| 一区二区高清视频在线观看| 亚洲色图清纯唯美| 一区二区三区蜜桃| 亚洲妇女屁股眼交7| 天堂蜜桃一区二区三区| 天天射综合影视| 久久国产日韩欧美精品| 国产一区二区三区电影在线观看| 国产精品亚洲人在线观看| 国产福利91精品| 成人app下载| 欧美日韩中字一区| 91精品国产aⅴ一区二区| 精品久久久久久久久久久院品网 | 中文字幕免费不卡在线| 国产精品久久午夜夜伦鲁鲁| 亚洲欧美欧美一区二区三区| 一区二区三区波多野结衣在线观看| 夜夜爽夜夜爽精品视频| 日本va欧美va欧美va精品| 国产一区二区影院| 日本高清不卡在线观看| 欧美电影免费观看高清完整版| 久久久噜噜噜久久中文字幕色伊伊| 国产精品美女一区二区三区| 一区二区在线观看视频| 日韩精品久久久久久| 国产不卡高清在线观看视频| 91官网在线免费观看| 欧美精品日韩一本| 中文字幕av免费专区久久| 亚洲午夜国产一区99re久久| 国产精品亚洲午夜一区二区三区| 色av一区二区| 欧美成人精品福利| 亚洲欧洲一区二区三区| 蜜桃一区二区三区四区| 色综合一个色综合亚洲| 欧美精品一区男女天堂| 一区二区在线电影| 国产精品77777| 欧美美女视频在线观看| 18成人在线观看| 六月丁香综合在线视频| 在线观看日韩一区| 中文成人综合网| 麻豆精品在线视频| 欧美日韩一区二区三区四区五区| 国产欧美一区二区在线| 麻豆专区一区二区三区四区五区| 色婷婷综合视频在线观看| 国产性做久久久久久| 日韩激情一区二区| 欧美日韩精品专区| 亚洲天堂成人网| 波多野结衣在线一区| 欧美sm极限捆绑bd| 久久精品国产秦先生| 欧美日韩国产美女| 亚洲成人免费在线| 欧美视频一区二区三区在线观看| 国产精品久久久久一区二区三区共 | 欧美精品在线一区二区三区| 成人欧美一区二区三区在线播放| 国模大尺度一区二区三区| 91精品国产福利在线观看| 婷婷六月综合亚洲| 欧美高清精品3d| 亚洲电影你懂得| 欧美狂野另类xxxxoooo| 亚洲18女电影在线观看| 欧美精品久久久久久久多人混战| 亚洲精品久久久久久国产精华液| 色婷婷综合激情| 亚洲综合色噜噜狠狠| 欧美视频一区二区| 日韩中文字幕区一区有砖一区| 欧美裸体bbwbbwbbw| 日韩电影一区二区三区四区| 欧美一区二区三区视频在线观看| 爽好多水快深点欧美视频| 91麻豆精品国产91久久久更新时间| 日韩在线观看一区二区| 欧美一区二区成人| 国产在线精品一区二区三区不卡| 国产欧美日韩一区二区三区在线观看| 国产精一品亚洲二区在线视频| 国产女人18毛片水真多成人如厕 | 色欧美日韩亚洲| 亚洲图片欧美色图| 日韩免费电影网站| 成人精品电影在线观看| 亚洲精品成人悠悠色影视| 欧美日韩高清在线播放| 久久国产成人午夜av影院| 中文字幕av一区二区三区高| 欧美在线播放高清精品| 男人的j进女人的j一区| 国产精品久99| 欧美人牲a欧美精品| 国产在线一区二区综合免费视频| 国产精品乱码一区二区三区软件| 在线观看一区二区视频| 久久99热这里只有精品| 亚洲丝袜制服诱惑| 国产精品久久福利| 欧美日韩免费在线视频| 国产精品18久久久久久久久 | 欧美国产欧美综合| 欧美日韩免费观看一区二区三区| 久久99久久99小草精品免视看| 中文字幕亚洲视频| 日韩欧美亚洲另类制服综合在线| 成人av资源在线| 另类小说一区二区三区| 亚洲精品写真福利| 久久久综合九色合综国产精品| 91国内精品野花午夜精品| 国内精品伊人久久久久av一坑 | 久久国内精品自在自线400部| 国产精品天干天干在线综合| 8v天堂国产在线一区二区| 成人福利视频网站| 国产在线精品一区二区夜色| 亚洲一卡二卡三卡四卡无卡久久 | 中文字幕在线观看不卡视频| 欧美一区日韩一区| 一本久道中文字幕精品亚洲嫩| 国产乱国产乱300精品| 日韩影视精彩在线| 亚洲国产日韩a在线播放性色| 国产精品人人做人人爽人人添| 日韩欧美一区在线观看| 欧美日韩国产bt| 精品视频一区二区三区免费| 97久久人人超碰| 成人h动漫精品| www.一区二区| 成人av小说网| av亚洲精华国产精华| 国产91对白在线观看九色| 国产福利一区二区三区视频在线 | 色丁香久综合在线久综合在线观看| 韩国三级中文字幕hd久久精品| 日本不卡1234视频| 丝袜诱惑制服诱惑色一区在线观看| 一区二区三区美女视频| 亚洲精品日韩一| 亚洲一区二区中文在线| 一区二区三区在线播放| 亚洲自拍偷拍网站| 亚洲制服丝袜一区| 三级影片在线观看欧美日韩一区二区 | 国产精品国产三级国产普通话99 | 久久毛片高清国产| 国产亚洲污的网站| 久久精品亚洲一区二区三区浴池 | 五月综合激情婷婷六月色窝| 午夜激情综合网| 美日韩一区二区三区| 蜜臂av日日欢夜夜爽一区| 国产在线精品一区在线观看麻豆| 国产美女精品人人做人人爽 | 亚洲最大成人综合| 亚洲一区二区av电影| 天天射综合影视| 激情五月激情综合网| 国产黄人亚洲片| 色噜噜夜夜夜综合网| 欧美精选午夜久久久乱码6080| 精品蜜桃在线看| 免费久久精品视频| 国产精品一区在线观看你懂的| 国产精品中文欧美| 色狠狠色噜噜噜综合网| 欧美精品一卡两卡| 国产女人18毛片水真多成人如厕 | 成人性生交大片| 色噜噜狠狠色综合中国| 日韩一区二区三区在线视频| 国产午夜精品美女毛片视频| 亚洲综合色在线| 国产一区二区视频在线| 91久久免费观看| 久久嫩草精品久久久精品一| 亚洲免费三区一区二区| 久久精品国产久精国产| 99国产精品久久久| 欧美精品一区二区三区久久久| 亚洲视频免费在线观看| 美女被吸乳得到大胸91| 色猫猫国产区一区二在线视频|