在模組A上課時,我會講解嵌入式系統之硬體與系統架構,目前以 ARM-PXA270 教學開發板為主,講解內容包括: ARM 處理器底層架構、ARM處理器之組合語言、Boot Loader( 操作及設計要點 )、開機初始化流程、FLASH 的 Read/Write/Erase、開發板內之各類嵌入式硬體介面控制實作,以及如何將嵌入式Linux OS Porting至 ARM 開發版。
在介紹開發板內之各類嵌入式硬體介面控制實作時,可以利用Linux Device Driver方式撰寫( 這我是在 模組C時講解與實作 ),也可以在 U-Boot 上寫單獨執行的程式範例( 如 UART 控制、GPIO控制 ),這裡貼上在課程間實作的 GPIO控制 LED 閃爍範例:
硬體線路圖如下:
利用一顆 74374 Latch IC 來擴展GPIO。( 上課時有講解此IC 的SPEC及如何控制 )。
程式碼寫好編譯後,產生一LED8Exam.bin 可執行檔,接著在 超級終端機鍵入 loadb 指令,畫面如下:
接著在 超級終端機上 選 轉送/傳送檔案,然後通訊協定選擇 Kermit ,檔案名稱選擇 LED8Exam.bin,按下 傳送鍵,操作畫面如下:
傳送成功的畫面如下, 接著 在 U-Boot 上鍵入 go 指令,以執行該載入的程式。
此 LED8Exam.bin 執行時,會透過 74374 Latch IC 控制 IO子版的 8個LED,讓其 閃爍,也就是亮一秒、暗一秒交互20 次。在 8個LED暗的同時,在母板上的 LED3 將會亮,在 8個LED亮的同時,在母板上的 LED3 將變暗。畫面如下:
8個LED同時亮,在母板上的 LED3 暗
8個LED同時暗,在母板上的 LED3 亮
現在貼上在 U-Boot 上單獨執行範例的程式碼 ,程式碼如下:
/****************************************************************
* $Author: YiHua,Chiang. EMail: microcyh@seed.net.tw $
****************************************************************/
#include
#include
#include "LED8Exam.h"
void regInit(void);
int main( int argc, char *argv[] )
{
int i;
app_startup(argv);
printf( "Hello TCFST\r\n" );
regInit();
for( i=0;i< 20; i++ )
{
GPIO27_DD0_0
GPIO105_DD1_0
GPIO116_DD2_0
GPIO103_DD3_0
GPIO95_DD4_0
GPIO94_DD5_0
GPIO93_DD6_0
GPIO12_DD7_0
GPIO20_LED3_1
udelay( 100 );
GPIO21_CSLED_1
udelay( 100 );
GPIO21_CSLED_0
udelay( 1000000 );
//====================
GPIO27_DD0_1
GPIO105_DD1_1
GPIO116_DD2_1
GPIO103_DD3_1
GPIO95_DD4_1
GPIO94_DD5_1
GPIO93_DD6_1
GPIO12_DD7_1
GPIO20_LED3_0
udelay( 100 );
GPIO21_CSLED_1
udelay( 100 );
GPIO21_CSLED_0
udelay( 1000000 );
}
return 0;
}
Dear CYH
回覆刪除as I compiled the source code with the arm-linux-gcc (3.3.2), it worked, but it was failed with version:: 3.4.1 .
So maybe we can find something different with 3.3.2 and 3.4.1 when we have enough free time !!
Titan