1.     打開S+core IDE eCos創造一個專案

2.     於專案目錄下,找到default_install資料夾將它刪除

3.     打開eCos Configuration Tool

4.     點選Build > packages

5.     增加 file IOIOB support for Score SPCE3200兩個packages

6.     命名為default.ecc存於eCos專案目錄下編譯

7.  運行程式下載至開發版上觀察結果

#include <cyg/hal/hal_arch.h>           // CYGNUM_HAL_STACK_SIZE_TYPICAL

#include <cyg/kernel/kapi.h>

#include <cyg/fileio/fileio.h>

#include <stdio.h>

#include <stdlib.h>

#include <cyg/io/spce3200_iob.h>

#include <cyg/infra/testcase.h>         // test macros

#include <unistd.h>


#define C_IOB2_OUT_EN                             0x00000400            // P_IOB_GPIO_SETUP

#define C_IOB3_OUT_EN                             0x00000800            // P_IOB_GPIO_SETUP

#define C_IOB4_OUT_EN                             0x00001000            // P_IOB_GPIO_SETUP

#define C_IOB5_OUT_EN                             0x00002000            // P_IOB_GPIO_SETUP

//===================================================

主要執行緒,完成LED跑馬燈功能

//===================================================

void Run_LED(cyg_addrword_t data)

{

        cyg_int32 fd_LED;                           // IOB驅動標識符

        cyg_uint32 Key;                                                                                      


        printf(" RunLED thread start\n");                                                                      

        fd_LED = open("/dev/iob", O_WRONLY | O_NONBLOCK);           // 打開IOB驅動


        Key = C_IOB2_OUT_EN                                                                                             

                | C_IOB3_OUT_EN

                | C_IOB4_OUT_EN

                | C_IOB5_OUT_EN

                ;                                                                                                      

        cyg_fs_fsetinfo(fd_LED, CYGNUM_DEVS_IOB_SPCE3200_ATTRIB, &Key, 4);     // 設置IOB為輸出

        Key = 0x4;          // '00000100'==>LED1(IOB2)

        while(1)

        {

                write(fd_LED, &Key,  1);    // IOB輸出值                                                                          

                printf(" Key = %d\n", Key);

                Key = Key << 1;

                if(Key > 0x3C)

                        Key = 0x4;

                cyg_thread_delay(50);                // 延時  

        }

}


cyg_uint8 Run_LED_Stack[4096];                // 執行緒用到的堆棧

cyg_handle_t Run_LED_Handle;                  // 執行緒控制碼

cyg_thread Run_LED_Info;                          // 執行緒信息結構體

//====================================================

void cyg_user_start(void)

{


        cyg_thread_create( 20,                                                                     // 執行緒優先級

                                                Run_LED,                                                   // 執行緒函數

                                                0,                                                               // 執行緒參數

                                                "light_LED",                                                // 執行緒名稱

                                                (void *)Run_LED_Stack,                              // 執行緒堆棧基址

                                                4096,                                                           // 執行緒堆疊大小

                                                &Run_LED_Handle,                                      // 返回執行緒控制碼

                                                &Run_LED_Info                                            // 返回執行緒信息結構體

                                                );

        cyg_thread_resume( Run_LED_Handle);                                              // 啟動執行緒

}

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 pixnote21 的頭像
    pixnote21

    pixnote21的隨手筆記

    pixnote21 發表在 痞客邦 留言(0) 人氣()