搜索
bottom↓
回复: 0

Ucos 串口通信死机

[复制链接]

出0入0汤圆

发表于 2011-3-7 15:18:07 | 显示全部楼层 |阅读模式
/************定时器代码****************/
void Timer2Stop(void)
{
        rTCON &= ~(0x1<<12);
}

void Timer2_Exception(void)
{
        OSIntEnter();
        rI_ISPC  =  BIT_TIMER2;
        ComT15EndHandle();
        Timer2Stop();
        OSIntExit();
}

void Timer2Int(void)
{
        // 定时器的记数单位为1微秒
        rTCFG0  &= ~(0xff<<8);                        //定时器23的预分频位置0
        rTCFG0  |= Timer2Pre<<8;                        //设置预分频值
        rTCFG1 &= ~(0xf<<8);                // TIMER2再取1/2分频,取得100KHz
        pISR_TIMER2=(unsigned)Timer2_Exception;
        rTCNTB2  = MCLK/(Timer2Freq*Timer2Pre*2);        //0xd6d8//定时器4的重装值,公式rTCNBn=MCLK/(1/T)/pre/mux, n为定时器序号, T为定时时间(s), *rTCNBn<=0xffff
        rTCMPB2 = 0x0;             // 定时器4比较缓冲区寄存器的值
        rTCON &= ~(0x1<<15);         // 非重载模式
        rINTMSK &=~BIT_TIMER2;
}

void OpenTimer2(void)
{
        Timer2Stop();
        rTCON |=  0x1<<13;         // 更新TCNTB2, TCMPB2
        rTCON &=  ~(0x1<<13);      // 停止更新TCNTB2, TCMPB2
   
        rTCON |=  0x1<<12;         // 启动定时器2
}

/*************串口接收部分代码**************/
volatile ADU_CONTROL ADUData;
OS_EVENT *ComHandleSem;
U8 ADU_BUFFER[ADU_BUFFER_SIZE];

void Uart0Exception(void)
{
        OSIntEnter();
        rI_ISPC  =  BIT_URXD0;
       
        if(!(rUTRSTAT0 & 0x1)){
                return;
        }

        //Receive data
        ComReceChar(RdURXH0());
       
        OSIntExit();
}

void ComT15EndHandle(void)
{
        OSSemPost(ComHandleSem);       
}
void ComReceChar(U8 ReceChar)
{
        ADUData.FrameOK = FALSE;
        OpenTimer2();                        // 起动T1.5计时

        if(ADUData.ADULength < ADU_BUFFER_SIZE){
                *(ADUData.ADUBuffPtr + ADUData.ADULength) = ReceChar;
                ADUData.ADULength++;
        }
}

U8 ComIdle(void)
{
        U8 err;
        U16 RedundancyCheck;

        // 检验有效帧
        OSSemPend(ComHandleSem, 10, &err);
        if((*ADUData.ADUBuffPtr == ComHeader) &&
                (*(ADUData.ADUBuffPtr + 1) == ComHeader) &&
                (*(ADUData.ADUBuffPtr + 2) == ComHeader)){

                *ADUData.ADUBuffPtr = 0;
               
                if(((*(ADUData.ADUBuffPtr + 3) == WORD_HI(ComBroadcastAddr))&&                // 验证地址是否有效
                   (*(ADUData.ADUBuffPtr + 4) == WORD_LO(ComBroadcastAddr)))  ||
                   ((*(ADUData.ADUBuffPtr + 3) == WORD_HI(ADUData.Address)) &&
                    (*(ADUData.ADUBuffPtr + 4) == WORD_LO(ADUData.Address)))
                ){
                        RedundancyCheck = (*(ADUData.ADUBuffPtr+ADUData.ADULength-2)<<8)|
                                                                          *(ADUData.ADUBuffPtr+ADUData.ADULength-1);
                        if(RedundancyCheck == CheckCRC16(ADUData.ADUBuffPtr + 3, ADUData.ADULength-5))        // CRC校验
                        {
                                ADUData.FrameOK = TRUE;
                                        if(CmdExecutive((*(ADUData.ADUBuffPtr + 5)<<8) | *(ADUData.ADUBuffPtr + 6), ADUData.ADUBuffPtr+7) < 0)
                                                ComReply(*(ADUData.ADUBuffPtr+7), Ack_InvalidData);
                        }
                }
        }
        ADUData.FrameOK = FALSE;
        // 准备收到下一帧

        ADUData.ADULength = 0;
        ADUData.EndT15 = FALSE;       
       
        return COMRECE_SUCC;
}

/***************************************************************/
搞不明白为什么会死机,有时候是出现Undefined中断然后死机,有时候是直接重启,不知道是不是堆栈溢出还是死锁,实在郁闷了,上来问问。
CPU是三星的44B0。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-16 01:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表