基于A(yíng)RM7核處理器VxWorks系統BSP設計

發(fā)布時(shí)間:2010-11-16 10:43    發(fā)布者:eetech
關(guān)鍵詞: ARM7 , BSP , VxWorks , 核處理器
該文主要介紹了SAMSUNG公司的基于ARM7TDMI核S3C4510B微處理器,并詳細介紹了利用該處理器所設計的嵌入式系統以及VxWorks操作系統下BSP(Board Supported Package)的開(kāi)發(fā)。

1 介紹  

S3C4510B是三星公司推出的針對嵌入式應用的16/32 位嵌入式處理器,該微控制器專(zhuān)為以太網(wǎng)通信系統的集線(xiàn)器和路由器而設計,具有低成本和高性能的特點(diǎn), S3C4510B中內置了ARM公司設計的16/32位ARM7TDMI處理器, 可以執行32位的ARM指令,也可執行16位的THUMB指令, 并集成了多種外圍部件,主要有:  

● 時(shí)鐘頻率50MHz  
● 內核/IO電壓3.3V  
● 8KB的Cache/SRAM  
● 一個(gè)10/100Mbps 以太網(wǎng)控制器,MII接口  
● 兩個(gè)HDLC通道,每個(gè)通道可支持10Mbps  
● 兩個(gè)UART通道  
● 兩個(gè)DMA通道  
● 兩個(gè)32位定時(shí)/計數器  
● 18個(gè)可編程I/O口  
● 中斷控制器,支持21個(gè)中斷源,包括4個(gè)外部中斷  
● 支持SDRAM,EDO DRAM,SRAM,Flash等  
● 具有擴展外部總線(xiàn)  
● JTAG接口,支持軟件開(kāi)發(fā) ,硬件調試  

S3C4510B支持目前常用的嵌入式操作系統,如VxWorks、pSoS、ucLinux等,本文將主要介紹VxWorks操作系統下的軟件開(kāi)發(fā)。  
ARM7TDMI是ARM家族通用的一款32位微處理器,它主要為用戶(hù)提供了高性能、低價(jià)格解決方案。  

ARM7TDMI具有三級流水線(xiàn)的32位RISC處理器,處理器結構為馮%26;#183;諾依曼Load/Store。該CPU具有兩種指令集,即ARM和Thumb指令集。ARM指令集是32位,它可以利用CPU最大性能;而Thumb指令集則是16位指令集。  

ARM7TDMI內核方塊圖如圖1所示。




2 系統硬件圖  

該系統主要以S3C4510B為核心,外圍集成了以太網(wǎng)卡、SDRAM、FLASH、UART以及HDLC等。圖2是以S3C4510B為核心的最小系統設計圖。




SDRAM選用HY57V653220(8Mbyte)、兩片FLASH分別為AM29F040(存放bootrom)和T28F160BT(作為文件系統用)。

3 VxWorks操作系統下BSP構建  

在完成板上基本硬件的測試后,下面我就開(kāi)始對vxWorks操作系統下BSP進(jìn)行開(kāi)發(fā),開(kāi)發(fā)前需要做一些準備工作,如準備開(kāi)發(fā)工具等。  

① 開(kāi)發(fā)工具用的是Tornado2.2 for ARM;  
② 參考資料有BSP Kit、S3C4510B DataSheet;  
③ 參考Tornado2.2 for ARM下自帶的wrSBCArm7 BSP;  
④ 燒寫(xiě)程序采用編程器。  

通常在開(kāi)發(fā)BSP的時(shí)候,我們需要在Tornado原帶BSP目錄下找一個(gè)與我們所用的處理器相同或相近。與BSP相關(guān)的文件有:romInit.s、sysAlib.s、bootInit.c、bootConfig.c、sysLib.c、config.h、configNet.h、makefile以及與我們硬件相關(guān)的,如串口sysSerial.c等。由于篇幅所限,具體的文件作用在此就不說(shuō)了。下面主要根據S3C4510B來(lái)闡述一下BSP開(kāi)發(fā)步驟。  

(1)拷貝BSP  

將wrSBCArm7 BSP拷貝一份并命名為4510BSP,接下來(lái)的工作就是修改該目錄下的文件,從而得到自己的BSP。  

(2)修改MakeFile文件  

修改4510BSP目錄下的makefile文件,修改如下幾行:  

TARGET_DIR = 4510BSP # changed by caiyang  
VENDOR = CAI # changed by caiyang  
BOARD = MyArmBoard # changed by caiyang  
ROM_TEXT_ADRS = 01000000 # ROM entry address  
ROM_WARM_ADRS = 01000004 # ROM warm entry address  
ROM_SIZE = 00080000 # number of bytes of ROM space  
RAM_LOW_ADRS = 00006000 # RAM text/data address (bootrom)  
RAM_HIGH_ADRS = 00486000 # RAM text/data address (bootrom)  
MACH_EXTRA =  

注解:ROM_TEXT_ADRS:BOOT ROM的入口地址。對大多數板來(lái)說(shuō),這就是ROM地址區的首地址,然而也有的硬件配置使用ROM起始的一部分地址區作為復位向量,因此需要根據此設置偏移量作為它的地址。這個(gè)偏移量因CPU結構而定。  

ROM_WARM_ADRS:BOOT ROM熱啟動(dòng)入口地址。它通常位于固定的ROM_TEXT_ADRS+4的地方。當需要熱啟動(dòng)時(shí),sysLib.c文件中sysToMonitor( )函數代碼明確的跳轉到ROM_WARM_ADRS地址處開(kāi)始執行。  

ROM_SIZE:ROM實(shí)際大小。  
RAM_LOW_ADRS:裝載Vxworks的地址。  
RAM_HIGH_ADRS:將Boot Rom Image拷貝到RAM的目的地址。  
注意:RAM_LOW_ADRS 和 RAM_HIGH_ADRS 都是絕對地址,通常位于DRAM起始地址的偏移量處,該偏移量取決于CPU結構,這需要參考VxWorks內存分布。對于A(yíng)RM的內存分布請看圖3,從圖3可以看出RAM_LOW_ADRS在DRAM+0x1000處。這些地址對于S3C4510B來(lái)說(shuō)都應該是重映射后的地址。  

(3)修改config.h文件  

主要是修改ROM_BASE_ADRS、ROM_TEXT_ADRS、ROM_SIZE、RAM_LOW_ADRS、RAM_HIGH_ADRS和undef掉不需要的部分。注意這些應該和makefile文件中設置的一致。  

(4)修改romInit.s文件  

CPU一上電就開(kāi)始執行romInit( )函數,因此在romInit.s代碼段中它必須是第一個(gè)函數。對于熱啟動(dòng),處理器將會(huì )執行romInit( )加上4后的代碼(具體參考sysLib.c中的sysToMonitor( )函數)。更多的硬件初始化在sysLib.c中sysHwInit( )函數中,romInit( )的工作就是做較少的初始化并把控制權交給romStart( )(在bootInit.c文件)。  

在S3C4510B處理器中,romInit.s文件主要做了以下幾個(gè)工作:  

① 禁止CPU中斷并切換到SVC32模式;  
② 禁止中斷控制器;  
③ 初始化SYSCFG、EXTDBWTH、ROMCON0、ROMCON1、DRAMCON0等寄存器,同時(shí)初始化了FLASH、SDRAM、DM9008等外圍設備;  
④ 將FLASH的內容拷貝到SDRAM中;  
⑤ 改變FLASH和SDRAM的基地址,將SDRAM基地址改為0;  
⑥ 初始化堆棧指針;  
⑦ 跳轉到C程序romStart( )函數中。  

在這里,只需要修改SYSCFG、EXTDBWTH、ROMCON0、ROMCON1、DRAMCON0等寄存器來(lái)設置FLASH、SDRAM、DM9008的基地址和大小即可。這需要根據板上的配置來(lái)修改,修改的內容在wrSbcArm7.h文件中。  

BSP基本部分就已經(jīng)修改完成,至于bootInit.c和bootConfig.c文件,我們一般不需要修改它,只是在調試過(guò)程中為了方便調試,可以將他們拷貝到BSP目錄下,然后修改makefile文件,在makefile文件中添加如下兩句。  

BOOTCONFIG = bootConfig.c  
BOOTINIT = bootInit.c  

(5)利用tsfs(target server file system)下載  

要利用tsfs下載VxWorks,首先需要配置以下內容:  

① 在config.h文件中添加如下內容  

/* Serial port configuration */  
#define INCLUDE_SERIAL  
#undef NUM_TTY  
#define NUM_TTY N_SIO_CHANNELS  
#undef CONSOLE_TTY  
#define CONSOLE_TTY 0  
#undef CONSOLE_BAUD_RATE  
#define CONSOLE_BAUD_RATE 38400  
/*** WDB ***/  
#ifdef SERIAL_DEBUG  
#define WDB_NO_BAUD_AUTO_CONFIG  
#undef WDB_COMM_TYPE  
#undef WDB_TTY_BAUD  
#undef WDB_TTY_CHANNEL  
#undef WDB_TTY_DEV_NAME  
#define WDB_COMM_TYPE WDB_COMM_SERIAL /* WDB in Serial mode */  
#define WDB_TTY_BAUD 38400 /* Baud rate for WDB Connection */  
#define WDB_TTY_CHANNEL 1 /* COM PORT #2 */  
#define WDB_TTY_DEV_NAME "/tyCo/1" /* default TYCODRV_5_2 device name */  
#endif /* SERIAL_DEBUG */  
/* tsfs added by caiyang */  
#define INCLUDE_TSFS_BOOT  
并修改引導行為  
#define DEFAULT_BOOT_LINE \par "tsfs(0,0)host:vxWorks f=8 h=169.254.72.67 e=169.254.72.68 u=caiyang pw=caiyang"  
注:串口1用來(lái)顯示引導信息,相當于PC機中的顯示器,串口2用來(lái)下載VxWorks和調試。同時(shí)串口2波特率不能太高,經(jīng)測試115200好像不行。  

② 配置target server  

啟動(dòng)Tornado開(kāi)發(fā)環(huán)境,選擇Tool->target server菜單。在下拉菜單中選“target server file system”并選中Enable File System,然后目錄指向Vxworks所在的地方。同時(shí)注意要把Tornado Registry打開(kāi),這樣配置完后點(diǎn)擊Launch按鈕即可連接成功,此后就可以通過(guò)串口2下載VxWorks和調試。




  
一般情況下,我們首先調試好BSP,然后在調試網(wǎng)卡。所以在調試網(wǎng)卡前,我們需要用串口來(lái)下載VxWorks映像。  

至此,我們的BSP就開(kāi)發(fā)完成。  

4 結論  

在沒(méi)有調試BSP的硬件工具如仿真器的時(shí)候,我們只能通過(guò)點(diǎn)燈或者串口輸出來(lái)定位程序執行的正確性。這大大增加了調試難度和進(jìn)程。對于BSP開(kāi)發(fā),一般需要從一個(gè)模板來(lái)修改。BSP開(kāi)發(fā)的正確性直接影響到VxWorks系統運行的穩定性。
本文地址:http://selenalain.com/thread-39540-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页