No.49832 作者:salonydeny 邮件:salonydeny@126.com ID:113779 登陆:3次 文章数:1篇 最后登陆IP:123.151.32.64 最后登陆:2008/11/3 8:52:03 注册:2008/6/13 16:00:12 财富:107 发帖时间:2008/10/23 12:03:22 发贴者IP:123.151.32.125 标题:salonydeny:KEIL+ULINKII+LPC2378+UCOS 串口调试出问题 摘要:No.49832KEIL+ULINKII+LPC2378+UCOS 串口调试出问题 我用的是LPC2300芯片,在调试外部中断0的时候信号量能够正常工作,我建立两个任务,一个是让LED灯灭,一个是让LED灯亮,LED灯亮前等待外部中断的信号量,如果我在这个任务中不加串口向外发数据OSSemPend(sem,0,&err); FIO2SET|=0x000000FF;就这两句的话,任务能够正常执行。在按一下,灯亮一下,但是我加上这个 OSSemPend(sem,0,&err); FIO2SET|=0x000000FF; UART0Putch(0x55); 这样一来,我第一次按,灯亮,然后灭,串口也能收到'U',再按一键,LED亮,串口收到数据,但不会再灭了,不知道为什么。以下是我的程序,有哪位大哥帮我看下,谢谢啦! #include "config.h" #include "stdlib.h" #define TaskStkLengh 64 OS_STK TaskStk [TaskStkLengh]; //Define the Task0 stack 定义用户任务0的堆栈 OS_STK TaskStk1 [TaskStkLengh]; //Define the Task1 stack 定义用户任务1的堆栈 OS_EVENT *sem; OS_EVENT *Uart0Sem; void Task0(void *pdata); //Task0 任务0 void Task1(void *pdata); //Task1 任务1 extern void UART1_Handler(void); unsigned char temp; void UART1_Exception(void) { uint8 IIR; OS_ENTER_CRITICAL(); while(((IIR = U1IIR) & 0x01) == 0) { /* 有中断未处理完 */ switch (IIR & 0x0e) { case 0x02: /* THRE中断 */ U1THR = temp; U1IER = U1IER & (~0x02) break; case 0x04: /* 接收数据可用 */ OSSemPost(Uart0Sem); /* 通知接收任务 */ U1IER = U1IER & (~0x01); /* 禁止接收及字符超时中断 */ break; case 0x06: /* 接收线状态 */ temp = U1LSR; break; case 0x0c: /* 字符超时指示 */ OSSemPost(Uart0Sem); /* 通知接收任务 */ U1IER = U1IER & (~0x01); /* 禁止接收及字符超时中断 */ break; default : break; } } VICVectAddr = 0; // 通知中断控制器中断结束 OS_EXIT_CRITICAL(); } void UART_Init(void) { PINSEL0 &= ~0xC0000000; PINSEL0 |= 0x40000000; /* Enable TxD1 pin */ PINSEL1 &= ~0x00000003; PINSEL1 |= 0x00000001; /* Enable RxD1 pin */ U1LCR = 0x83; /* 8 bits, no Parity, 1 Stop bit */ U1DLM = 0; U1DLL = 7; /* 115200 Baud Rate @ 12MHz PCLK Clock */ U1FDR = 0x67; /* Fractional Divider */ U1LCR = 0x03; /* DLAB = 0 */ U1IER = 0x03; /* Enable RDA and T ......
>>返回讨论的主题
|