打印
[ZLG-ARM]

为什么串口无法接收数据

[复制链接]
2142|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gwsino|  楼主 | 2008-3-25 16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是最近才开始学习ARM的,许多知识还不是很明白,今天简单测试一下ARM的UART端口的功能,结果是发送能正常发送,接收却不能正常接收,接收数据时根本就进不了中断处理程序,不知道为什么,这是我写的测试代码,有点乱,但还是希望各位兄弟能给个解决的方法,谢谢
#include "config.h"
#include "stdlib.h"
#include "string.h"

unsigned char Size(void)
{
//    return sizeof(HEAPNODE);
return 0;
}
unsigned char Free[1000];
extern void UartHandler(void);
//复位FIFO操作使用的宏
#define OSRxFIFOReset(X)  if(X)U1FCR |= (1<<1);
                          else
                          U0FCR |=(1<<1); 
#define OSTxFIFOReset(X)  if(X)U1FCR |= (1<<2);
                          else
                          U0FCR |=(1<<2); 
#define OSUartDisable(X)
#define OSUartEnable(X) 
#define OSUartIOConfig(X) if(X) PINSEL0 = (PINSEL0&0xFFF0FFFF)&0x00050000;
                          else
                          PINSEL0 = (PINSEL0&0xFFFFFFF0)&0x00000005;

char *Name="gwsino@landwind.com.cn thank you for your going home!";
void UartSendNBytes(unsigned char *nBytes,unsigned char size);
unsigned char idx = 0;
void RxComplete(void)
{
    unsigned char Rec[8];
    unsigned char *read = Rec;
    unsigned char IIR;
    switch(U0IIR & 0x0F)
    {
    case 0x02:
        
        
        if(idx > strlen(Name))
          break;
        U0THR = Name[idx++];
        //idx++;
        break;
    case 0x04:
    case 0x0c:
    Rec[1] = U0RBR;
    break;
    }
    VICVectAddr = 0;
}
void UartSendByte(unsigned char nbyte)
{
    U0THR = nbyte;
    while((U0LSR & 0x40)==0)
        continue;
}
void UartSendNBytes(unsigned char *nBytes,unsigned char size)
{
    while(size--)
    {
        U0THR = *nBytes++;
        while((U0LSR & 0x40) == 0)
           continue;
    }
}

int main (void)
{// add user source code 
    volatile unsigned int size;
    unsigned int value;
    unsigned short int fdiv;
    //{21,23,43,53,54,65,76,67,78,34,34,34,34,54,45,32,31,0,0,0,0,5,23,34,0,0,0,0,0,0,0,255};
   // strcpy((char*)Name,"gwsino@landwind.com.cn thank you for your going home!");
    fdiv = (Fpclk / 16)/9600;
    U0LCR = 0X83;
    U0DLM =(unsigned char)( fdiv / 256);
    U0DLL = (unsigned char)(fdiv % 256);
    U0LCR = 0X03;

    PINSEL0 = (PINSEL0&0xFFFFFFF0)|0x00000005;
    
    U0FCR = 0X07;
    U0FCR |= 0xC0;
    VICIntSelect = 0x0000000;
    VICIntEnable |= (1<<6);
    VICVectCntl0 = 0x26;
    VICVectAddr0 = (int) UartHandler;
    U0IER = 0X07;
    U0THR = 0x00;
    
    //UartSendNBytes((unsigned char*)Name,(unsigned char)strlen((char*)Name));
   // OSRxFIFOReset(1);
    size = Size();
    if(size != 0)
    {
      value = value+size;
    }
    while(1)
    {
    }
    return value;
}

相关帖子

沙发
zlgarm| | 2008-3-25 17:46 | 只看该作者

to gwsino

gwsino,您好!
    我们仅对光盘里的例程提供技术支持。而用户自己写的程序并非我们的产品,限于精力,我们不会对用户自己写的程序进行技术支持。请您谅解!

    请您将问题转化为和具体代码无关的形式,或者请您大幅度精简您的代码。

                          on duty:zlgarm_wuzhijian

使用特权

评论回复
板凳
armecos| | 2008-3-25 19:05 | 只看该作者

这样写太不规范了,

建议看下ecos的串口和中断程序写法,绝对一流专家的手笔,先模仿再自己写吧。

ecos中断、ecos串口驱动文档

使用特权

评论回复
地板
gwsino|  楼主 | 2008-3-26 10:13 | 只看该作者

谢谢 
   我也知道这样写不规范,这只是我写的一个测试程序,其实的真正的意图不在这里。不过还是谢谢各位的关心谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

73

帖子

1

粉丝