音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

我來貼我寫的9200的eeprom的bootload代碼

作者:masashinakayama 欄目:ARM技術(shù)
我來貼我寫的9200EEPROM.html">EEPROM的bootload代碼
這是main.c
我寫的完整的bootload主要完成兩件事:1.配置寄存器,2.燒寫FLASH
雖然簡單了些,但是可以給大家參考一下,之前的1個匯編啟動文件和1個c初始化文件同ATMEL差不多,基本改了下SDRAM.html">SDRAM配置而已(我使用一片HY57V561620
下面我改u-boot去嘍

#include "at91rm9200.h"
#include "lib_at91rm9200.h"

#define XMODEM_SOH    0x01
#define XMODEM_EOT    0x04
#define XMODEM_ACK    0x06
#define XMODEM_NAK    0x15
#define XMODEM_CAN    0x18
#define XMODEM_EOF    0x1A

#define AT91C_BASE_NCS0        0x10000000        //NCS0全部16位訪問
#define AT91C_BASE_SDRAM    0x20000000

extern void AT91F_DBGU_Printk(CHAR *buffer);
void DelayMS(unsigned SHORT time)            //ms等級定時,time=1..1000
{
    unsigned SHORT piv;
    piv=32768*time/1000;
    AT91C_BASE_ST->ST_PIMR=piv;
    while (!(AT91C_BASE_ST->ST_SR&AT91C_ST_PITS));
}

unsigned SHORT AT91F_CRC16(CHAR *ptr, int count)
{
    int crc = 0;
    CHAR i;
    while (--count >= 0)
    {
        crc = crc ^ (int) *ptr++ << 8;
        i = 8;
        do
        {
        if (crc & 0x8000)
            crc = crc << 1 ^ 0x1021;
        else
            crc = crc << 1;
        } while(--i);
    }
    return (crc);
}

int AT91F_Flash_ReadID()
{
    unsigned SHORT DeviceID;
    *(volatile unsigned SHORT *)(AT91C_BASE_NCS0+0x5555*2)=0xAA;
    *(volatile unsigned SHORT *)(AT91C_BASE_NCS0+0x2AAA*2)=0x55;
    *(volatile unsigned SHORT *)(AT91C_BASE_NCS0+0x5555*2)=0x90;
    DeviceID=*(volatile unsigned SHORT *)(AT91C_BASE_NCS0+0x1*2);
    *(volatile unsigned SHORT *)(AT91C_BASE_NCS0+0x0000*2)=0xF0;
    return (DeviceID);
}

void AT91F_Flash_ChipErase()
{
    *(volatile unsigned SHORT *)(AT91C_BASE_NCS0+0x5555*2)=0xAA;
    *(volatile unsigned SHORT *)(AT91C_BASE_NCS0+0x2AAA*2)=0x55;
    *(volatile unsigned SHORT *)(AT91C_BASE_NCS0+0x5555*2)=0x80;
    *(volatile unsigned SHORT *)(AT91C_BASE_NCS0+0x5555*2)=0xAA;
    *(volatile unsigned SHORT *)(AT91C_BASE_NCS0+0x2AAA*2)=0x55;
    *(volatile unsigned SHORT *)(AT91C_BASE_NCS0+0x5555*2)=0x10;
    DelayMS(100);    //wait >50 ms
}

void At91F_Flash_Write(unsigned int addr,unsigned SHORT data)
{
    volatile SHORT TEMP;
    *(volatile unsigned SHORT *)(AT91C_BASE_NCS0+0x5555*2)=0xAA;
    *(volatile unsigned SHORT *)(AT91C_BASE_NCS0+0x2AAA*2)=0x55;
    *(volatile unsigned SHORT *)(AT91C_BASE_NCS0+0x5555*2)=0xA0;
    *(volatile unsigned SHORT *)(AT91C_BASE_NCS0+addr*2)=data;
    while (1)
    {
        TEMP=*(volatile unsigned SHORT *)(AT91C_BASE_NCS0+addr*2);
        TEMP^=*(volatile unsigned SHORT *)(AT91C_BASE_NCS0+addr*2);
        if (!(TEMP&0x40)) break;
    }
}

unsigned CHAR AT91F_DBGU_GetChar()                //帶阻塞
{
    while (!AT91F_US_RxReady((AT91PS_USART)AT91C_BASE_DBGU));
    return (AT91F_US_GetChar((AT91PS_USART)AT91C_BASE_DBGU));
}

void AT91F_DBGU_PutChar(unsigned CHAR c)        //帶阻塞
{
    while (!AT91F_US_TxReady((AT91PS_USART)AT91C_BASE_DBGU));
    AT91F_US_PutChar((AT91PS_USART)AT91C_BASE_DBGU,c);
}
volatile int a,b;
int Main(void)
{
    unsigned CHAR     bIsFlashReady=0,
                    bIsXmodemReady=0,
                    bIsFileReady=0,
                    bIsVerifyOK=1;
    volatile unsigned CHAR c;
    unsigned SHORT    crc16;
    unsigned int i,block=0;
    
    AT91F_DBGU_Printk("\n\r\n\r");
    AT91F_DBGU_Printk("******************************\n\r");
    AT91F_DBGU_Printk("*     ZT9200 EEPROM BIOS     *\n\r");
    AT91F_DBGU_Printk("*          VER 1.0           *\n\r");
    if (AT91F_Flash_ReadID()==0x234b)
    {    AT91F_DBGU_Printk("*      NCS0=SST39VF1601      *\n\r");
        AT91F_DBGU_Printk("*     Download by Xmodem     *\n\r");
        bIsFlashReady=1;
    }    
    else
    {
        AT91F_DBGU_Printk("*        NCS0=UNKNOWN        *\n\r");
        bIsFlashReady=0;
    }
    AT91F_DBGU_Printk("******************************\n\r");
    if (!bIsFlashReady) while(1);
    
    // 下面開始執(zhí)行讀文件入SDRAM,協(xié)議為Xmodem
    while (!bIsXmodemReady)
    {
        AT91F_DBGU_PutChar('C');
        AT91C_BASE_ST->ST_PIMR=0;        //等待時間為兩秒
        while (!(AT91C_BASE_ST->ST_SR&AT91C_ST_PITS))
            if (AT91F_US_RxReady((AT91PS_USART)AT91C_BASE_DBGU))
            {
 &nb
2樓: >>參與討論
roosvelt
支持一下!
 
3樓: >>參與討論
leifeng
厲害!
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
菜鳥請教大俠們ARM開發(fā)環(huán)境建立問題
nios2調(diào)試uclinux的視頻
關(guān)于閃存,簡單而讓人迷惑的問題!
誰有ARM2104學(xué)習板的ucos 系統(tǒng)源碼?
請教Quartus II 4.2/157的安裝問題
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號