娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年10月09日(星期三)

正在發生

2019年10月09日 | FL2440(3) 裸板程序

發布者:Jinyu2022 來源: eefocus關鍵字:FL2440  裸板程序  led閃 手機看文章 掃描二維碼
隨時隨地手機看文章

程序主要是JZ2440的,只是改了一下led.c,下載后發現led閃得非常快.


head.S


@*************************************************************************

@ File:head.S

@ 功能:設置SDRAM,將第二部分代碼復制到SDRAM,設置頁表,啟動MMU,

@       然后跳到SDRAM繼續執行

@*************************************************************************       

 

.text

.global _start

_start:

    ldr sp, =4096                       @ 設置棧指針,以下都是C函數,調用前需要設好棧

    bl  disable_watch_dog               @ 關閉WATCHDOG,否則CPU會不斷重啟

    bl  memsetup                        @ 設置存儲控制器以使用SDRAM

    bl  copy_2th_to_sdram               @ 將第二部分代碼復制到SDRAM

    bl  create_page_table               @ 設置頁表

    bl  mmu_init                        @ 啟動MMU

    ldr sp, =0xB4000000                 @ 重設棧指針,指向SDRAM頂端(使用虛擬地址)

    ldr pc, =0xB0004000                 @ 跳到SDRAM中繼續執行第二部分代碼

halt_loop:

    b   halt_loop

 

init.c


/*

 * init.c: 進行一些初始化,在Steppingstone中運行

 * 它和head.S同屬第一部分程序,此時MMU未開啟,使用物理地址

 */ 

 

/* WATCHDOG寄存器 */

#define WTCON           (*(volatile unsigned long *)0x53000000)

/* 存儲控制器的寄存器起始地址 */

#define MEM_CTL_BASE    0x48000000

 

 

/*

 * 關閉WATCHDOG,否則CPU會不斷重啟

 */

void disable_watch_dog(void)

{

    WTCON = 0;  // 關閉WATCHDOG很簡單,往這個寄存器寫0即可

}

 

/*

 * 設置存儲控制器以使用SDRAM

 */

void memsetup(void)

{

    /* SDRAM 13個寄存器的值 */

    unsigned long  const    mem_cfg_val[]={ 0x22011110,     //BWSCON

                                            0x00000700,     //BANKCON0

                                            0x00000700,     //BANKCON1

                                            0x00000700,     //BANKCON2

                                            0x00000700,     //BANKCON3  

                                            0x00000700,     //BANKCON4

                                            0x00000700,     //BANKCON5

                                            0x00018005,     //BANKCON6

                                            0x00018005,     //BANKCON7

                                            0x008C07A3,     //REFRESH

                                            0x000000B1,     //BANKSIZE

                                            0x00000030,     //MRSRB6

                                            0x00000030,     //MRSRB7

                                    };

    int     i = 0;

    volatile unsigned long *p = (volatile unsigned long *)MEM_CTL_BASE;

    for(; i < 13; i++)

        p[i] = mem_cfg_val[i];

}

 

/*

 * 將第二部分代碼復制到SDRAM

 */

void copy_2th_to_sdram(void)

{

    unsigned int *pdwSrc  = (unsigned int *)2048;

    unsigned int *pdwDest = (unsigned int *)0x30004000;

    

    while (pdwSrc < (unsigned int *)4096)//pdwSrc表示地址值

    {

        *pdwDest = *pdwSrc;

        pdwDest++;

        pdwSrc++;

    }

}

 

/*

 * 設置頁表

 */

void create_page_table(void)

{

 

/* 

 * 用于段描述符的一些宏定義

 */ 

#define MMU_FULL_ACCESS     (3 << 10)   /* 訪問權限 */

#define MMU_DOMAIN          (0 << 5)    /* 屬于哪個域 */

#define MMU_SPECIAL         (1 << 4)    /* 必須是1 */

#define MMU_CACHEABLE       (1 << 3)    /* cacheable */

#define MMU_BUFFERABLE      (1 << 2)    /* bufferable */

#define MMU_SECTION         (2)         /* 表示這是段描述符 */

#define MMU_SECDESC         (MMU_FULL_ACCESS | MMU_DOMAIN | MMU_SPECIAL |

                             MMU_SECTION)

#define MMU_SECDESC_WB      (MMU_FULL_ACCESS | MMU_DOMAIN | MMU_SPECIAL |

                             MMU_CACHEABLE | MMU_BUFFERABLE | MMU_SECTION)

#define MMU_SECTION_SIZE    0x00100000

 

    unsigned long virtuladdr, physicaladdr;

    unsigned long *mmu_tlb_base = (unsigned long *)0x30000000;

    

    /*

     * Steppingstone的起始物理地址為0,第一部分程序的起始運行地址也是0,

     * 為了在開啟MMU后仍能運行第一部分的程序,

     * 將0~1M的虛擬地址映射到同樣的物理地址

     */

    virtuladdr = 0;

    physicaladdr = 0;

    *(mmu_tlb_base + (virtuladdr >> 20)) = (physicaladdr & 0xFFF00000) |   //一共三個其實是在建表

                                            MMU_SECDESC_WB;

 

    /*

     * 0x56000000是GPIO寄存器的起始物理地址,

     * GPBCON和GPBDAT這兩個寄存器的物理地址0x56000050、0x56000054,

     * 為了在第二部分程序中能以地址0xA0000050、0xA0000054來操作GPFCON、GPFDAT,

     * 把從0xA0000000開始的1M虛擬地址空間映射到從0x56000000開始的1M物理地址空間

     */

    virtuladdr = 0xA0000000;

    physicaladdr = 0x56000000;

    *(mmu_tlb_base + (virtuladdr >> 20)) = (physicaladdr & 0xFFF00000) |

                                            MMU_SECDESC;

 

    /*

     * SDRAM的物理地址范圍是0x30000000~0x33FFFFFF,

     * 將虛擬地址0xB0000000~0xB3FFFFFF映射到物理地址0x30000000~0x33FFFFFF上,

     * 總共64M,涉及64個段描述符

     */

    virtuladdr = 0xB0000000;

    physicaladdr = 0x30000000;

    while (virtuladdr < 0xB4000000)

    {

        *(mmu_tlb_base + (virtuladdr >> 20)) = (physicaladdr & 0xFFF00000) |

                                                MMU_SECDESC_WB;

        virtuladdr += 0x100000;

        physicaladdr += 0x100000;

    }

}

 

/*

 * 啟動MMU

 */

void mmu_init(void)

{

    unsigned long ttb = 0x30000000;

 

__asm__(

    "mov    r0, #0n"

    "mcr    p15, 0, r0, c7, c7, 0n"    /* 使無效ICaches和DCaches */

    

    "mcr    p15, 0, r0, c7, c10, 4n"   /* drain write buffer on v4 */

    "mcr    p15, 0, r0, c8, c7, 0n"    /* 使無效指令、數據TLB */

    

    "mov    r4, %0n"                   /* r4 = 頁表基址 */

    "mcr    p15, 0, r4, c2, c0, 0n"    /* 設置頁表基址寄存器 */

    

    "mvn    r0, #0n"                   

    "mcr    p15, 0, r0, c3, c0, 0n"    /* 域訪問控制寄存器設為0xFFFFFFFF,

                                         * 不進行權限檢查 

                                         */    

    /* 

     * 對于控制寄存器,先讀出其值,在這基礎上修改感興趣的位,

     * 然后再寫入

     */

    "mrc    p15, 0, r0, c1, c0, 0n"    /* 讀出控制寄存器的值 */

    

    /* 控制寄存器的低16位含義為:.RVI ..RS B... .CAM

     * R : 表示換出Cache中的條目時使用的算法,

     *     0 = Random replacement;1 = Round robin replacement

[1] [2]
關鍵字:FL2440  裸板程序  led閃 引用地址:FL2440(3) 裸板程序

上一篇:s3c2440——實現裸機的簡易printf函數
下一篇:FL2440 (2) 裸板程序 SDRAM

0

推薦閱讀

預備知識—程序的內存分配一個由C/C 編譯的程序占用的內存分為以下幾個部分棧區(stack)— 由編譯器自動分配釋放,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧。堆區(heap) — 一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收 。注意它與數據結構中的堆是兩回事,分配方式倒是類似于鏈表。全局區(靜態區)(stat...
隨著國民經濟快速增長,汽車保有量節節攀升。龐大的汽車數量表現出了我國經濟發展強勁,人民生活質量的提高,但同時也引起了一系列的交通問題,比如交通擁堵、道路安全、泊車困難等,尤其是泊車困難,已經成為各大城市的通病,如何著力解決這一難題已經成為各界關注的重點領域?,F今科學技術的高速發展,智慧停車行業也因此成為了改善停車環境、滿足停車需...
環境:主機:XP開發環境:MDK4.23MCU:STM32F103CBT6說明:通過腳PA1,PA2采集AD。每路AD采集10次。參考鏈接:http://hi.baidu.com/kangxuebin/item/f4f4370f9d7f3c123a53ee30源代碼:#include "ad_driver.h" //全局變量//AD采樣存放空間__IO uint16_t ADCConvertedValue[20]; //函數//初始化ADvoid init_ad(void){ ADC_InitTypeDef ADC_InitStructure; DM...
文件說明uart.c 實現輸入反顯及命令識別cmd.c實現命令函數及命令查找main.c進入shell模式uart.c#include "usart.h" /***************************************************************************** 名 稱:void USART1_Configuration(void)* 功 能:配置USART1參數* 入口參數:* 出口參數:無* 說 明:* 調用方法:無 *********...

史海拾趣

問答坊 | AI 解惑

請問EVB的下載地址。找了很久找不到。

求EVB或者EVC的下載地址。POCKET PC(掌上電腦)應用程序開發有用。如熟悉者,并請提供相應的學習網站。謝謝!…

查看全部問答∨

推薦ARM開發板

現在急需推薦一款ARM開發板,要求: 可以做觸摸屏;操作系統WinCE——可以自己修改源碼;應用于大型系統集成;處理數據采集系統;抗干擾能力強;數據運算速度快;擴展口多。哪位大俠給推薦一下,謝謝:)…

查看全部問答∨

mfc新手問一個問題

在wince下用mfc的dialog類編程,我在resource中加入了菜單,然后通過下面代碼加入到dialog的init中,實現了wince下dialog中添加菜單的功能 SHMENUBARINFO   m_menu_bar;         ZeroMemory(&m_menu_bar,  ...…

查看全部問答∨

光控輸入,延時氣動開關控制器

五個光控輸入, 分別控制五個氣動開關,時延可調。最好有顯示屏! 有沒有解決方案? 多長時間?大概多少鐵? 高手回答一下, yijian_102@163.com 謝謝! …

查看全部問答∨

DSP 硬件構架 QQ群:47827656

DSP 硬件構架 QQ群:47827656…

查看全部問答∨

有關JTAG調試問題

我看的資料中說 如果我要在一條指令設斷點 其實就是運行中實時監測地址總線 如果是斷點 就激活cpu的debug 不過如果指令在cache中怎么辦 不就無法中斷了么? 我搜到網上的資料又說 “...所幸的是,我用的debugger提供JTAG Monitor,允許斷點 ...…

查看全部問答∨

請問用過SIM508模塊的朋友們

 本人現在將買來的SIM508模塊做成了一個獨立的板,有兩個串口,請問其Windows的調試軟件如何編寫呢,謝謝啦…

查看全部問答∨

PIC12F675延時不準確問題

你好!我現在使用PIC16F675,使用內部4MHZ。 GP5   輸入口;  H : 工作; L:停止; GP3   不使用; GP4,GP2,GP1,GP0  輸出口,輸出脈沖,時間50US; GP4    外接NPN管    L ...…

查看全部問答∨

為什么退出一個函數時會產生 Usage Fault?

一個朋友說程序死機,拿過來仿真,發現在退出某函數時就產生了一個 Usage Fault:試圖在無效的 ISA 狀態中執行指令。例如,不是thumb    試圖在無效的 EPSR 狀態中執行,例如,在BX類型指令改變狀態之后。這包括從異常中返回之后的 ...…

查看全部問答∨

我是剛剛接觸單片機的 是個新手

我想向各位高手求一流水燈的程序       用51單片機的…

查看全部問答∨
小廣播
添点儿料...
无论热点新闻、行业分析、技术干货……
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 固安县| 永仁县| 疏勒县| 和田县| 永定县| 滨海县| 阿克苏市| 贺州市| 潞城市| 义马市| 凤城市| 渝中区| 都昌县| 兴安县| 夏河县| 东城区| 娄底市| 天全县| 乃东县| 玉门市| 明星| 平泉县| 昆山市| 夏津县| 郁南县| 丹寨县| 玛沁县| 祥云县| 乡城县| 余江县| 方正县| 青阳县| 衢州市| 汕尾市| 西吉县| 介休市| 梨树县| 芮城县| 新竹县| 克山县| 手机|