#include <stdlib.h>
#include <stdio.h>
#include <rtems.h>
#include <bsp/irq.h>
#include <bsp/irq-generic.h>
#define LED_ON() GPBDAT &=~ (1<<5)
#define LED_OFF() GPBDAT |= 1<<5
static rtems_id led1;
static rtems_id led2;
rtems_isr EINT0_handler (rtems_vector_number vector)
{
//rtems_event_send (taskid, RTEMS_EVENT_1);
GPBDAT ^= 1<<7;
SRCPND = 1<<vector;
INTPND = 1<<vector;
}
rtems_task led_task1(rtems_task_argument unused)
{
rtems_status_code status;
rtems_event_set event;
printf("led_task1 Start!\n");
while (1) {
status = rtems_event_receive(
RTEMS_EVENT_1,
RTEMS_EVENT_ALL,
RTEMS_NO_TIMEOUT,
&event);
//printf("led1 event_receive return : %x\n", status);
GPBDAT ^= 1<<5;
}
}
rtems_task led_task2(rtems_task_argument unused)
{
rtems_status_code status;
rtems_event_set event;
printf("led_task2 Start!\n");
while (1) {
status = rtems_event_receive(
RTEMS_EVENT_2,
RTEMS_EVENT_ALL,
RTEMS_NO_TIMEOUT,
&event);
//printf("led2 event_receive return : %x\n", status);
GPBDAT ^= 1<<6;
}
}
rtems_task Init(rtems_task_argument argument)
{
rtems_status_code status;
// rtems_isr_entry old_handler;
int count;
printf("RTEMS 4.10.2 Start!\n");
// port init
GPBCON = (1<<(5*2)) | (1<<(6*2)) | (1<<(7*2));
GPFCON = 0X02;
INTMSK &= ~(1<<0);
//
status = rtems_interrupt_handler_install(
BSP_EINT0,
"EINT0",
RTEMS_INTERRUPT_UNIQUE,
(rtems_interrupt_handler) EINT0_handler,
NULL
);
printf("Install EINT0 handler return : %x\n", status);
// create task
status = rtems_task_create(
rtems_build_name('L', 'E','D','1'),
11,
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
&led1);
status = rtems_task_start(led1, led_task1, 1);
status = rtems_task_create(
rtems_build_name('L', 'E','D','2'),
12,
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
&led2);
status = rtems_task_start(led2, led_task2, 1);
printf("RTEMS Init end\n");
count = 0;
while (1) {
rtems_task_wake_after(10);
count++;
if (count > 10) {
count = 0;
rtems_event_send(led1, RTEMS_EVENT_1);
}
rtems_event_send(led2, RTEMS_EVENT_2);
}
}
/* configuration information */
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_MAXIMUM_TASKS 10
#define CONFIGURE_INIT
#include <rtems/confdefs.h>
RTEMS 的 EVENT 和 中断的使用例子
最新推荐文章于 2020-09-14 13:31:59 发布