4927|7

36

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

RT-Thread在富士通Cortex M3 Easy Kit开发板上的移植(二) [复制链接]


RT-Thread在富士通Cortex M3 Easy Kit开发板上的移植(一)见
https://bbs.eeworld.com.cn/thread-330952-1-1.html

完成《RT-Thread在富士通Cortex M3 Easy Kit开发板上的移植(一)》后,大家全速运行的时候会发现 显示有些不正常,是移植得的有问题吗?

       经过检查和调试,我终于发现问题所在:原来的代码是针对MB9B500,而我们的板子上是MB9B506R。仔细查看两者差别,其中MB9B500是10位ADC,而MB9B506R是12位ADC.再仔细查看相关代码和寄存器定义,发现有两个地方。

1)代码中,ADC需要使能,但没有相关代码。所以在ADC.C中rt_adc_init()函数中增加下面代码。

static rt_err_t rt_adc_init(rt_device_t dev)
{
    RT_ASSERT(dev != RT_NULL);

    if(!(dev->flag & RT_DEVICE_FLAG_ACTIVATED))
    {
        /* I/O setting AN08 - P18 */
        FM3_GPIO->ADE |= 0x100;
        FM3_GPIO->PFR1 = 0x100;
        FM3_ADC0->ADCEN |= 0x01;
        /* A/DC setting */
        FM3_ADC0->SCIS1 = 0x01;
        FM3_ADC0->ADSS1 = 0x00;                /* sampling timming ADST0 */
        FM3_ADC0->ADST0 = 0x43;
        FM3_ADC0->ADCT  = 0x02;
        FM3_ADC0->SCCR  = 0x10;                /* FIFO clear,single mode */
        FM3_ADC0->CMPCR = 0x00;                /* disable comparator */
   
        /* starting A/DC */
        FM3_ADC0->SCCR |= 0x01;                /* A/DC start */
       
        dev->flag |= RT_DEVICE_FLAG_ACTIVATED;
    }
    return RT_EOK;
}

2)MB9B500是10位ADC,而MB9B506R是12位ADC.仔细看ADC相关寄存器,发现 SCFD在MB9B500是16位寄存器,而在MB9B506R中是32位寄存器。并且,ADC转换的值都从最高位开始,所以,原来代码中,娶ADC转换值时 SCFD 要右移6位,而我们板子上的代码需要右移20位。所以在ADC.C中rt_adc_initrt_adc_control()函数中修改下面代码:

static rt_err_t rt_adc_control(rt_device_t dev, rt_uint8_t cmd, void *args)
{
    RT_ASSERT(dev != RT_NULL);

    switch (cmd)
    {
        case RT_DEVICE_CTRL_ADC_START:
            FM3_ADC0->SCCR |= 0x1;
        break;
       
        case RT_DEVICE_CTRL_ADC_RESULT:
            while(FM3_ADC0->ADSR & 0x1)
                ;
            *((rt_uint16_t*)args) = FM3_ADC0->SCFD >> 20;
            *((rt_uint16_t*)args) = *((rt_uint16_t*)args);
            *((rt_uint16_t*)args) = (*((rt_uint16_t*)args)); /* get ad value */
        break;
    }
    return RT_EOK;
}

OK.保存所有文件,REBUILD ALL.下载程序,全速运行。试试吧!
(提醒:下载完成后,不要仿真(速度很馒),重新上电运行才能看到真正的运行情况)




最新回复

RT-Thread bsp中就有506的移植,你为啥会去用500的?bsp里506的移植都已经有企业在使用了  详情 回复 发表于 2012-8-7 10:24
点赞 关注
 

回复
举报

6107

帖子

4

TA的资源

版主

沙发
 
好,支持,辛苦了。到时试一下。
 
 

回复

1246

帖子

18

TA的资源

五彩晶圆(初级)

板凳
 
到时候好好弄一下!!
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

4
 
好经验
 
 
 

回复

36

帖子

0

TA的资源

一粒金砂(高级)

5
 
大家没遇到这个问题吗?
 
 
 

回复

916

帖子

2

TA的资源

五彩晶圆(初级)

6
 
楼主厉害,赞一个
 
 
 

回复

117

帖子

0

TA的资源

一粒金砂(高级)

7
 
RT-Thread bsp中就有506的移植,你为啥会去用500的?bsp里506的移植都已经有企业在使用了
个人签名RT-Thread:启动下一代RTOS演化
 
 
 

回复

36

帖子

0

TA的资源

一粒金砂(高级)

8
 
506里面没有ADC/LCD.   SPI模块是我自己在弄。 上次说的enc28j60 在RT-THread中是基于STM32的,和STM32紧耦合。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表