打印
[ZLG-ARM]

为什么我的程序只能发16字节呢?

[复制链接]
1009|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chcoin|  楼主 | 2008-11-6 10:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
se, COM, ui, pi, ni
void Comm_SendByte(uint8 port, uint8 dat)
{
    if (port==0)
    {
        
        while(U0LSR & 0x40==0);
        U0THR=dat;
        
    }

}

void Comm_SendBuf(uint8 port,uint8 *psbuf,uint8 lenth)
{
    uint8 i;
    
    if (port==0)
    {
        for(i=0;i<lenth;i++)
             Comm_SendByte(0, *psbuf++);        
    }
}
int main (void)
{
    COMMMODE set;
    uint8 rbuf[25]={00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00}    
    
    
    set.baud=com0baud;
    set.len  = com0len;
    set.stopb  = com0stopb;
    set.pari = com0pari;
    
    
   
    InitCycQueue(&sq);
    
    
    PINSEL0=0x00005505;
    PINSEL1=0x00000000;

 
    Comm_Init(0,set);
    VIC_Init();
    SPIini();
    
    psbuf=sbuf;
    rcv=1;
    
    IO0DIR=LEDS|SPICS;
    IO0SET=LEDS;
    
   
    
    while(1)
    {
        
        if (rcv==1)
        {
            
                 Comm_SendBuf(0,rbuf,24);
                 rcv=0
        }    
    }
    
    return 0;
    
}

相关帖子

沙发
chcoin|  楼主 | 2008-11-6 11:01 | 只看该作者

请各位老师指点

为什么发送字节间加延时就可以呢?

使用特权

评论回复
板凳
ZLG_Dengz| | 2008-11-7 00:47 | 只看该作者

RE

    发送了第16个字节后,程序是死了还是怎么了?看看U0LSR、U0IIR的值是多少?最好通过示波器看看TXD引脚的状态。
    请贴出你的UART初始化代码和UART中断函数的代码,以供分析。

使用特权

评论回复
地板
chcoin|  楼主 | 2008-11-7 16:55 | 只看该作者

上面那个程序只能接收到16字节

int8 Comm_Init(uint8 commport,COMMMODE comset )
{    
    uint32 temp;
    
    if (commport>2) return (1);//返回1,无效端口号
    if (comset.baud>115200) return (2);
    if (comset.len<5 || comset.len>8) return (3);
    if (comset.stopb==0 || comset.stopb>2) return (4);
    if (comset.pari>even ) return (5);
    
    if (commport==0)
    {
        U0LCR=0x80;//允许访问除数寄存器
        temp=(Fpclk>>4)/comset.baud;
        U0DLM=temp>>8;              
        U0DLL=temp&0xFF;
        U0LCR=0x00;
        temp=comset.len-5;
        if (comset.stopb==2)   temp|=0x04;
        if (comset.pari!=none) temp|=0x08;
        if (comset.pari==even) temp|=0x10;
        
        U0LCR=temp;
        
        U0FCR=0x81;
        U0IER=0x05;

    
    }
    return (0);
}
我是用串口调试助手调试的,单步执行仿真是可以都传过来,而且发送字节间加延时也可以,上面那个程序只能接收到16字节

使用特权

评论回复
5
chcoin|  楼主 | 2008-11-7 16:57 | 只看该作者

程序没有死机,可以正常运行

使用特权

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

本版积分规则

3

主题

6

帖子

1

粉丝