搜索
bottom↓
回复: 0

S3C2440A的定时器 出问题,请教牛人指点

[复制链接]

出0入0汤圆

发表于 2010-11-27 23:32:12 | 显示全部楼层 |阅读模式
先贴定时器源码 :
void TimeN_Init()
{
        char i=0,j=0;
        rTCON=0;
        rTCFG0=0;
        rTCFG1=0;
        rTCNTB0=0;
        rTCMPB0=0;
        rTCNTB1=0;
        rTCMPB1=0;
        rTCNTB2=0;
        rTCMPB2=0;
        rTCNTB3=0;
        rTCMPB3=0;
        rTCNTB4=0;

        rTCFG0=0xf9f9;  // 对两个定时器的预分频值 都为249

        for(i=0;i<4;i++)
        {
                for(j=0;j<4;j++)
                {
                        if(((Div_Val>>j)&0x01)==1) //Div_Val=0x2 选择1/8 分割
                        {
                                rTCFG1|=1<<((i*4)+j);
                        }
                        else
                        {
                                rTCFG1&=~(1<<((i*4)+j));
                        }
                }
        }
        rTCON|=1<<4;
}

void TimeN_Install(U8 Time_No,long SetTime_us)
{
        char i=0,ipos1=0,ipos2=0;
        switch(Time_No)
        {
                case 0:
                                {
                                  rTCNTB0=SetTime_us/40;
                                  rTCMPB0=SetTime_us/80;
                                }
                                break;
                case 1:
                                {
                                  rTCNTB1=SetTime_us/40;
                                  rTCMPB1=SetTime_us/80;
                                }
                                break;
                case 2:
                                {
                                  rTCNTB2=SetTime_us/40;
                                  rTCMPB2=SetTime_us/80;
                                }
                                break;
                case 3:
                                {
                                  rTCNTB3=SetTime_us/40;
                                  rTCMPB3=SetTime_us/80;
                                }
                                break;
                case 4:
                                {
                                  
                                  rTCNTB4=SetTime_us/40;
                                }
                                break;

        }

        if(Time_No>0)
        {
                ipos1=8;
                ipos2=1;
        }
        else
        {
                ipos1=0;
                ipos2=0;
        }
        if(Time_No==4)
        {
                rTCON |=1<<21;
        }
        else
        for(i=0;i<4;i++)
        {
                if(((rTCON_TN_VAL>>i)&0x1)==1)    //设置初始TCON  rTCON_TN_VAL=0X6
                {
                        rTCON|=1<<((Time_No-ipos2)*4+i+ipos1);
                }
                else
                {
                        rTCON&=~(1<<((Time_No-ipos2)*4+i+ipos1));
                }
        }
         
                //rTCON=0;
}

void TimeN_Start(U8 Time_No)
{

        if(Time_No>0)
        {
                if(Time_No==4)
                {
                        rTCON |=1<<((Time_No-1)*4+8+2); //设置定时器4 的自动重装
                }
                else
                {
                        rTCON |=1<<((Time_No-1)*4+8+3);//设置定时器1——3的自动重装
                }
                rTCON |=1<<((Time_No-1)*4+8+0);         //开启定时器1——4
                        }
        else
        {
            rTCON |=1<<((Time_No-0)*4+3); //设置定时器0的自动重装

                rTCON |=1<<((Time_No-0)*4+0);//开启定时器0
                               
        }



}
现在的问题是 我用这种方式启动一个定时器中断,可以运行,但是用这个TimeN_Start函数启动所有定时器中断 往往只有两个可以运行,当我不用TimeN_Start() 时 直接对rTCON=0X599919时 启动所有定时器 可以启动,但是定时器进入中断的先后顺序 的时间差太大了,当只有定时器1、2、3同时启动时,3个进入中断几乎是同时,我就不明白了这个定时器是不是设置错了。请牛人解答。

我的MPLL的设置是 M_DIV=92,P_DIV=1,S_DIV=1,外部晶振12M  则FCLK=400M,分频为1:4:8  PCLK=50M

我所有的中断分频都是 50/(249+1)/8 M=0.025Mhz

请前辈们指点下,我的中断程序没问题,可以进入执行,主要就是定时器的操作上不是很明白。

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

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

本版积分规则

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

GMT+8, 2024-5-19 13:06

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

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