【led】djyos下基于tq2440开发板上跑马灯实验

//这是事件发生,将要调用的服务函数
void flash_led(void)

{

    uint32_t led=0x11111111;

    void *my_para;

    while(1)

    {

        my_para = djy_get_event_para();

        if(*(u32*)my_para ==1)

        {

            pg_gpio_reg->GPBDAT |= (led & 0x1e0);

            pg_gpio_reg->GPBDAT &= (led | 0xfe1f);

            led <<=1;

            if((led&0xf) == 0)

                led += 1;

        }else

        {

            pg_gpio_reg->GPBDAT &= 0xfe1f;

        }

        //执行本句后,事件将被阻塞,由于被同步的事件类型就是本事件的事件类型,

        //所以同步条件就是:再次发生本类型事件。

        //参数 ‘1’表示只要发生一次事件就可以了

        //参数500表示如果一直不发生,500mS后结束等待

        //关于事件类型弹出同步,参见《都江堰操作系统与嵌入式系统设计》的第5.3节

        djy_evtt_pop_sync(djy_my_evtt_id(),1,500*mS);

    }

}

//本应命名为main的,但调试器总是默认这是整个程序的入口点,罢了

void djy_main(void)

{

    uint16_t evtt_flash_led;

    uint32_t reg;

    u32 parameter;

    //对GPIO口配置

    reg = pg_gpio_reg->GPBCON;

    reg &= 0xfffc03ff;

    reg |= 0x00015400;

    pg_gpio_reg->GPBCON = reg;      //PB5~8 set to output for led

    reg = pg_gpio_reg->GPBUP;

    reg |= 0x1e0;

    pg_gpio_reg->GPBUP  = reg;     // The pull up function is disabled

    //注册跑马灯事件

    evtt_flash_led = djy_evtt_regist(true,cn_prio_RRS,0,1,

                                        flash_led,10,NULL);

    parameter = 1;
  //弹出跑马灯事件,开辟线程,调用服务函数flash_led

    djy_event_pop(evtt_flash_led,false,NULL,0,&parameter,

                    sizeof(parameter),0,0);

}

你可能感兴趣的:(function,Flash,null,嵌入式,UP,output)