#define BAR 0xfff000 #define VCP(X) (*(volatile unsigned char *)(X)) #define VSP(X) (*(volatile unsigned short *)(X)) #define VLP(X) (*(volatile unsigned long *)(X)) #define I_VEC VLP(0x134) #define TXBD VSP(0xfff440) #define TXBDL VSP(0xfff442) #define RXBD VSP(0xfff400) #define RXBDL VSP(0xfff402) #define RBD VCP(0xfff487) #define SCCE1 VCP(0xfff888) #define SCM1 VSP(0xfff884) #define ISR VSP(0xfff818) #define IPR VSP(0xfff814) extern void isr_serial(void); extern void int_serial(void); char input = 'a'; char flag = 0; char *rxbf = (char *)0xfff180; char *txbf = (char *)0xfff000; void start(void) { int i; SCM1 = 0x01b1; RXBD = 0xb000; RXBDL = 0x0001; RBD = 0; I_VEC = (volatile unsigned long *)int_serial; SCM1 = 0x01bd; flag = 0; while(1) { if(flag == 0) continue; flag = 0; if((TXBD & 0x8000) != 0) continue; if(input == 0x0d) { TXBDL = 2; *txbf = 0x0a; *(txbf + 1) = 0x0d; } else { TXBDL = 1; *txbf = input; } TXBD |= 0x8000; } } void isr_serial(void) { unsigned char scce; scce = SCCE1; SCCE1 = 0xff; if((scce & 0x01) != 0) { /* receive */ input = *rxbf; RXBD |= 0x8000; flag = 1; } if((scce & 0x02) != 0) { /* transmit */ } ISR = 0x2000; IPR = 0x2000; }