您的位置:首页 > 其它

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

2011-09-28 22:20 253 查看
//这是事件发生,将要调用的服务函数

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,¶meter,

sizeof(parameter),0,0);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: