3332|6

78

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

2440串行通信 程序跑飞 [复制链接]

为什么加上rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 );程序就会跑飞?

最新回复

不要只盯着出问题的那句话。 从lz的注释看好像是使能了Tx中断的,不知道你的中断服务程序在哪里? 如果没有安装中断服务程序而使能了中断,这样当中断发生时程序就会飞掉。 供你参考.   详情 回复 发表于 2009-10-7 21:54
点赞 关注

回复
举报

81

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我用的是mini2440的板
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
能说得详细一点不?
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
建议如下
1。分步计算,看看是否正确执行。
   float fX;
   1.1  fx = pclk/16.;
         fx /= baud;
         fx += 0.5;
         fx -= 1;
         rUBRDIV0 = (int)(fx);
2。个人浅见:你的速率设置的不正确,误差太大,造成通信协议无法实现,程序跑飞。仔细审查你计算出来的速率,和标准推荐值比对,看看误差是多少。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

5
 
//***************************[ UART ]******************************
static int whichUart=0;

void Uart_Init(int pclk,int baud)
{
    int i;
    if(pclk == 0)
    pclk    = PCLK;
    rUFCON0 = 0x0;   //UART channel 0 FIFO control register, FIFO disable
    rUFCON1 = 0x0;   //UART channel 1 FIFO control register, FIFO disable
    rUFCON2 = 0x0;   //UART channel 2 FIFO control register, FIFO disable
    rUMCON0 = 0x0;   //UART chaneel 0 MODEM control register, AFC disable
    rUMCON1 = 0x0;   //UART chaneel 1 MODEM control register, AFC disable
//UART0
    rULCON0 = 0x3;   //Line control register : Normal,No parity,1 stop,8 bits
     //    [10]       [9]     [8]        [7]        [6]      [5]         [4]           [3:2]        [1:0]
     // Clock Sel,  Tx Int,  Rx Int, Rx Time Out, Rx err, Loop-back, Send break,  Transmit Mode, Receive Mode
     //     0          1       0    ,     0          1        0           0     ,       01          01
     //   PCLK       Level    Pulse    Disable    Generate  Normal      Normal        Interrupt or Polling
    rUCON0  = 0x245;   // Control register
    rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 );   //Baud rate divisior register 0
//UART1
    rULCON1 = 0x3;
    rUCON1  = 0x245;
    rUBRDIV1=( (int)(pclk/16./baud+0.5) -1 );
//UART2
    rULCON2 = 0x3;
    rUCON2  = 0x245;
    rUBRDIV2=( (int)(pclk/16./baud+0.5) -1 );   

    for(i=0;i<100;i++);
}

//===================================================================
void Uart_Select(int ch)
{
    whichUart = ch;
}

int Main(int argc, char **argv)
{
        int i;
       
        U32 mpll_val=0;
        U16 data;
        U16 data0;
        U16 data1;
        U16 data2;
  
        mpll_val = (92<<12)|(1<<4)|(1);
       
        //init FCLK=400M, so change MPLL first
        ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
        ChangeClockDivider(key, 12);  
        //cal_cpu_bus_clk();  

        //ChangeClockDivider(1,1);    // 1:2:4    FCLK:HCLK:PCLK
    // rCLKDIVN=0x4;    //  1:4:4
    //ChangeMPllValue(82,2,1);     //FCLK=135.0Mhz     
        //ChangeMPllValue(82,1,1);     //FCLK=180.0Mhz     
    //ChangeMPllValue(161,3,1);    //FCLK=202.8Mhz
    //ChangeMPllValue(117,1,1);    //FCLK=250.0Mhz
    //ChangeMPllValue(122,1,1);    //FCLK=260.0Mhz
    //ChangeMPllValue(125,1,1);    //FCLK=266.0Mhz
    //ChangeMPllValue(127,1,1);    //FCLK=270.0Mhz  
   
    //MMU_EnableICache();
    //MMU_EnableDCache();
   
    MMU_DisableICache();
    MMU_DisableDCache();

        KeyScan_Test();
    rGPBCON = 0x155555;
            consoleNum = 0;        // Uart 1 select for debug.
                   Uart_Init( 0,115200 );
                Uart_Select( consoleNum );
                  
   
   data = 0x06;
           data = 0x0;
           while(1)
           {
                   //Key_Scan();
           rGPBDAT = (rGPBDAT&(data1))|(data2);
                   switch(key)
                   {
                   case 1:
                           data+=20;
                           if(data==0x200)
                           data=0x0;
                           data0=~data;
                           data1=((0xffff)&(data0))|(0xfe1f);//取0位
                           data2=((0x0000)|(data0))&(0x1e0);//取1位
                           dely(50);
                           break;
                   case 2:       
                           data*=2;
                           if(data>=0x200)
                           data=0x20;
                           data0=~data;
                           data1=((0xffff)&(data0))|(0xfe1f);//取0位
                           data2=((0x0000)|(data0))&(0x1e0);//取1位
                           dely(20);
                           break;
                   case 3:       
                           data=0x20;
                           data0=~data;
                           data1=((0xffff)&(data0))|(0xfe1f);//取0位
                           data2=((0x0000)|(data0))&(0x1e0);//取1位
                           break;
                   case 4:       
                           data=0x40;
                           data0=~data;
                           data1=((0xffff)&(data0))|(0xfe1f);//取0位
                           data2=((0x0000)|(data0))&(0x1e0);//取1位
                           break;
                   case 5:       
                           data=0x80;
                           data0=~data;
                           data1=((0xffff)&(data0))|(0xfe1f);//取0位
                           data2=((0x0000)|(data0))&(0x1e0);//取1位
                           break;
                   case 6:       
                           data=0x100;
                           data0=~data;
                           data1=((0xffff)&(data0))|(0xfe1f);//取0位
                           data2=((0x0000)|(data0))&(0x1e0);//取1位
                           break;
           }               
        }
   
   return 0;
}
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

6
 
这东西对照自己的数据手册做一般不会出错。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
不要只盯着出问题的那句话。
从lz的注释看好像是使能了Tx中断的,不知道你的中断服务程序在哪里?
如果没有安装中断服务程序而使能了中断,这样当中断发生时程序就会飞掉。
供你参考.
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表