导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[salonydeny]KEIL+ULINKII+LPC2378



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 ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:31毫秒 最大:2859毫秒 查询6次