新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 2440裸機學習心得(上)

2440裸機學習心得(上)

作者: 時間:2016-11-29 來源:網(wǎng)絡 收藏
哎,以前總想裸機加系統(tǒng)一齊學,學著學著發(fā)現(xiàn)好混亂,D驅動~~然后又重新齋跑2440的裸機。以下系少少心得,記錄下學習過程。
里面有三個地方還沒弄好:1、 硬盤的文件系統(tǒng) FAT部分(后面有空補補)
2、 NORFLASH中的讀寫有點問題
3、 USB主機中對U盤的UFI命令
有什么問題歡迎一起交流。以下是部分心得:
LED
GPXCON中每兩位控制一個引腳:00輸入,01輸出,10特殊功能
初始化 rGPBCON , rGPBUP ,rGPBDAT三個寄存器
關于ADS配置的解釋:
在Target Settings中的Post-linker中選擇ARM fromELF,因為我們需要把ELF文件格式轉化為下載到flash中所必須的二進制文件。
在Language Settings中的所有語言的Target下的Architecture or Processor,選擇ARM920T,因為s3c2440是ARM920T內(nèi)核。
在ARM Linker中的Output中的RO Base填寫0x30000000,因為在開發(fā)板上SDRAM是從0x30000000地址開始。在Layout中的Object/Symbol中填寫2440init.o,它是啟動文件的目標文件,在Section中填寫Init,它是在啟動文件中我們所定義的入口代碼段的名稱。
外部中斷
我們要打開某一中斷的屏蔽,這樣才能響應該中斷,相對應的寄存器為INTMSK;
還要設置外部中斷的觸發(fā)方式,如低電平、高電平、上升沿、下降沿等,相對應的寄存器為EXTINTn。
另外由于EINT4到EINT7共用一個中斷向量,EINT8到EINT23也共用一個中斷向量,而INTMSK只負責總的中斷向量的屏蔽,要具體打開某一具體的中斷屏蔽,還需要設置EINTMASK。
有一些中斷是共用一個中斷向量的,而一個中斷向量只能有一個中斷執(zhí)行函數(shù),因此具體是哪個外部中斷,還需要EINTPEND或rINTOFFSET來判斷
使用__irq這個關鍵詞來定義中斷處理函數(shù),這樣系統(tǒng)會為我們自動保存一些必要的變量,并能夠在中斷處理函數(shù)執(zhí)行完后正確地返回
這種形式:void __irq key(); pISR_EINT0=(int)key;
定時器使用
主要配置:外部時鐘源→通過寄存器MPLLCON得到FCLK→再通過寄存器CLKDIVN得到HCLK和PCLK->再得到定時器的工作頻率
PWM定時器使用:
蜂鳴器=GPB0=TOUT0=定時器0
蜂鳴器高電平響,低電平不響
關鍵是設置寄存器TCNTBn和TCMPBn,前者可以確定一個計數(shù)周期的時間長度,而后者可以確定方波的占空比
定時器中斷使用:
不需要配置TCMPBn,只需TCNTBn,TCNTBn*1/定時器的工作頻率=定時的時間
但要記住中斷要:
void __irq timer0_sever();
pISR_TIMER0=(int)timer0_sever;
rINTMSK =~BIT_TIMER0;
Uart
主要配置以下寄存器:
UBRDIVn,UCONn,UTRSTATn
收發(fā)寄存器: UTXHn,URXHn
注意幾點:
1.對于s3c2440來說,接收數(shù)據(jù)是被動的,發(fā)送數(shù)據(jù)是主動的,因此一般來說,接收數(shù)據(jù)用中斷方式,發(fā)送數(shù)據(jù)用查詢方式較好;
2.在中斷方式下,當接收到數(shù)據(jù)時,盡管可能該數(shù)據(jù)無用,但也一定要讀取它,否則下次再接收數(shù)據(jù)時,不會再引起中斷,因為接收數(shù)據(jù)緩存器被上次接收到的數(shù)據(jù)所霸占,只要沒有讀取它,它就永遠在那里;
3.由于UART中斷涉及到SUBSRCPND寄存器,因此在中斷處理程序中不僅要清SRCPND寄存器,還要清SUBSRCPND寄存器,它們的順序一定是先清SUBSRCPND寄存器,再清SRCPND寄存器,否則就會引起一個中斷兩次響應的問題。因為是否中斷由SRCPND寄存器決定,而SRCPND寄存器的相關狀態(tài)位由SUBSRCPND寄存器決定
簡單的串口控制臺:1.鍵盤輸入數(shù)據(jù)后在控制臺上進行回顯
recv_data = uart_getc();
return recv_data;
2.讓接收的字符組成命令data_buf[i] = uart0_scanf();
if(data_buf[i] ==