3242|4

90

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

OALPAtoVA出问题吗?寄存器不听使唤了?? [复制链接]

我想利用2450的GPB3口的TOUT3功能发出PWM波。
在Kernel/Oal/init.c下的OEMInit()中添加代码。下面是我的代码:
    volatile S3C2450_IOPORT_REG *s2450IOP = (S3C2450_IOPORT_REG *)OALPAtoVA(S3C2450_BASE_REG_PA_IOPORT, FALSE);
    volatile S3C2450_PWM_REG *s2450PWM = (S3C2450_PWM_REG *)OALPAtoVA(S3C2450_BASE_REG_PA_PWM, FALSE);
//////OALPAtoVA函数PWM和GPIO相关寄存器地址映射

        s2450IOP->GPBCON  &= ~(0x000000c0);
           s2450IOP->GPBCON  |=  (2<<6);
//////////// GPB3 设为 TOUT3 功能

           RETAILMSG(1,(TEXT(" s2450IOP->GPBCON is %x \r\n", s2450IOP->GPBCON)));
///////////这里添加一个打印信息看GPB功能状态寄存器
                  
        s2450PWM->TCFG1 &= ~(0xf<<12);
        s2450PWM->TCFG1 |=  (2<<12);
///////////设定定时器3的divider=8

        s2450PWM->TCNTB3 = 0;
        s2450PWM->TCMPB3 = 0;
///////////双缓冲初始化

        RETAILMSG(1,(TEXT("before given, s2450PWM->TCNTB3 is %d \r\n",s2450PWM->TCNTB3)));
        RETAILMSG(1,(TEXT("before given, s2450PWM->TCMPB3 is %d \r\n",s2450PWM->TCMPB3)));
        //这里添加一个打印信息看双缓冲的值       
       
        s2450PWM->TCNTB3 = 100;
        s2450PWM->TCMPB3 = 30;
///////////设定周期和占空比               
               
        RETAILMSG(1,(TEXT("after given, s2450PWM->TCNTB3 is %d \r\n",s2450PWM->TCNTB3)));
        RETAILMSG(1,(TEXT("after given, s2450PWM->TCMPB3 is %d \r\n",s2450PWM->TCMPB3)));
///////////添加一个打印信息看赋值后的双缓冲的值

        s2450PWM->TCON &= ~( (1<<19)|(1<<18)|(1<<17)|(1<<16) );
        s2450PWM->TCON |= ( (1<<19)|(0<<18)|(1<<17)|(0<<16) );
         //auto reload,Inverter off,Update TCNTB3 & TCMPB3

        RETAILMSG(1,(TEXT("s2450PWM->TCON is %x \r\n",s2450PWM->TCON)));
///////////查看TCON的值

        RETAILMSG(1,(TEXT("s2450PWM->TCNTO3 is %d \r\n",s2450PWM->TCNTO3)));
/////////计数器更新后,查看计数器的值

        s2450PWM->TCON &= ~(1<<17);//clear Update manual

        s2450PWM->TCON |= (1<<16);
//////////timer3开始计时

但TOUT3口没出方波,从查看GPB功能状态寄存器的打印信息显示“s2450IOP->GPBCON is 0 ”,说明GPBCON的值没赋上。
before given, s2450PWM->TCNTB3 is -2131466966 --------该寄存器我赋值为0
before given, s2450PWM->TCMPB3 is -2131466930 --------该寄存器我赋值为0
after given, s2450PWM->TCNTB3 is -2131466930 ---------该寄存器我赋值为100
after given, s2450PWM->TCMPB3 is -2131466932 ---------该寄存器我赋值为30
s2450PWM->TCNTO3 is -2131466932 ----------------------该寄存器的值也不对
s2450PWM->TCON is 80f46532 ---------------------------该寄存器的16-19位的值跟我设的不一样



为什么会这样呢????寄存器的值根本就和我设定的不一样呢???谢谢

最新回复

打印信息写错了,比如: RETAILMSG(1,(TEXT("before given, s2450PWM->TCNTB3 is %d \r\n",s2450PWM->TCNTB3))); 应该是: RETAILMSG(1,(TEXT("before given, s2450PWM->TCNTB3 is %d \r\n"),s2450PWM->TCNTB3)); 我再试试看。。。。。。。。。   详情 回复 发表于 2009-8-7 10:01
点赞 关注

回复
举报

2

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
写得太长了,写短一点就是:

我想利用2450的GPB3口的TOUT3功能发出PWM波。

因此要进行地址映射后对相关寄存器进行设定。

但我设置完相关的寄存器后,通过打印信息显示,寄存器的值跟我设定的不一样。

我怀疑是不是因为地址映射有问题没设置上??谢谢
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
查一下g_oalAddressTable在oemaddrtab_cfg.inc
另外可以试试MmMapIoSpace
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
地址映射有问题,谁做的,找他去
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
打印信息写错了,比如:
RETAILMSG(1,(TEXT("before given, s2450PWM->TCNTB3 is %d \r\n",s2450PWM->TCNTB3)));

应该是:
RETAILMSG(1,(TEXT("before given, s2450PWM->TCNTB3 is %d \r\n"),s2450PWM->TCNTB3));

我再试试看。。。。。。。。。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播:当AI遇见仿真,会有什么样的电子行业革新之路?
首场直播:Simcenter AI 赋能电子行业研发创新
直播时间:04月15日14:00-14:50

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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

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

北京市海淀区中关村大街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
快速回复 返回顶部 返回列表