since working with RTX, to enable interrupt should be operated by os_enable_isr(), and directly setting bit in IE is no useful......but, the problem is why it failed to call os_enable_isr(4) to enable serial port0 interrupt.......anybody can give me some advice on it. thanks in advance.
I got this working in RTX51. It was pretty straight-forward. 1. Create the interrupt service routine as you would in a standard Keil C51 program. This is the int0 function in the following example. 2. Create some code that enables the interrupt source. The statements EX0 = 1; and IT0 = 1; in the startup task do this. 3. Call the os_enable_isr function and pass the interrupt number. This is also done in the startup task. For example:
#include <rtx51.h> #include <reg51.h> #include <stdio.h> #define STARTUP_TASK 0 //----------------------------------------------- //----------------------------------------------- void int0 (void) interrupt 0 { static unsigned int i; i++; } //----------------------------------------------- //----------------------------------------------- void task0 (void) _task_ STARTUP_TASK { os_set_slice (1000); /* Set for OSC Frequency / 10,000 */ EX0 = 1; /* Enable External Int 0 */ IT0 = 1; /* Edge-triggered */ os_enable_isr (0); /* Enable interrupt #0 */ while (1) { os_wait (K_TMO, 100, NULL); } } //----------------------------------------------- //----------------------------------------------- void main (void) { os_start_system (STARTUP_TASK); }
Thanks very much. I've got it work now.