Ⅰ S3C2410A復位後執行的第一條指令存放首地址是什麼
下面是我個人的一點認知,希望對你有幫助。
1、從nor flash啟動則存在地址0x00000000,也就是說要用FLASH做程序啟動,FLASH必須放BANK0,且地址從0x0開始,你可以直接在nor flash 中運行程序,也可把程序用自己寫在啟動代碼拷入SDRAM運行。
2、若從NAND FLASH啟動,則存放在NAND FLASH的開始區域,上電後系統會硬拷貝到內部的4KBRAM運行。
下面是我寫的一個直接從nor啟動的程序代碼:
只有init.s與led.c兩個文件,我調試過,運行正常
ADS環境參數設置中把:RO-BASE設為0x00000000,RW-BASE設為0x30000000(根據具體硬體來定)
image entry point 設為:0x00000000,
設置好的合令為:-info totals -entry 0x00000000 -ro-base 0x00000000 -map -symbols -rw-base 0x31000000 -first init.o(Init) -xref
init.s文件內容:
AREA Init,CODE,READONLY ;該偽指令定義了一個代碼段,段名為Init,屬性只讀
ENTRY ;程序的入口點標識
ResetEntry
ldr sp,=0x31000000 ;定義堆棧指針(根據具體硬體來定)
IMPORT Main ;聲明主函數Main
BL Main ;調用主函數
END ;程序結束符
led.C代碼:
/*led.c*/
/*用GPB5~GPB8控制四個發光二極體閃爍*/
#define GPBCON (*(volatile unsigned *)0x56000010) //Port B control
#define GPBDAT (*(volatile unsigned *)0x56000014) //Port B data
#define GPBUP (*(volatile unsigned *)0x56000018) //Pull-up control B
void Main(void)
{
int i;
GPBCON &= ~((0x3<<10) | (0x3<<12) | (0x3<<14) | (0x3<<16
GPBCON |= (0x1<<10) | (0x1<<12) | (0x1<<14) | (0x1<<16); //GPBCON=0x00015400;
while (1)
{
GPBDAT=0x061F;
for(i=0;i<10000;i++);
GPBDAT=0x07FF;
for(i=0;i<10000;i++);
}
}
Ⅱ S3C2410串口中斷代碼
手冊上那樣說是沒錯的,雖然從數字邏輯上來說是一樣,但是有這個操作之後,硬體會有動作的,你可以試試嘛,那個語句之後再查查那個寄存器(用中斷或者串口打到電腦,都簡單,多試試)。 intpnd的還是跟上面說的一樣,賦0不變,賦1清除,...