历史上的今天
返回首页

历史上的今天

今天是:2024年09月05日(星期四)

正在发生

2019年09月05日 | RTEMS在S3C2440上的移植-(4)

2019-09-05 来源:eefocus

    有了前一篇文章的铺垫,基本上移植的工作就成功了一大半了,接下来要做的就是针对2410和2440的不同及不同开发板模块、接口的差异对2410的BSP进行修改工作。由于2410的寄存器基本吻合,所以头文件不改也没问题,这里我主要还是参考了Etual大牛的博客做了一下工作:


    1.修改了时钟(PLL设置)。

    libcpuarms3c24xxclocksupport.c
    修改get_FCLK
    由于2440 的PLL计算公式不同,在原来的基础上乘以2 就行了。修改为
    return((BSP_OSC_FREQ * m * 2) / (p << s));

    2.对启动代码进行修改。libbsparmsbc2440startstart.S

    删除 GamePark magic sequence
    修改启动代码,我是用GDB的话,则会根据ELF文件自动下载的,RTEMS 的运行地址是 0x30000100 添加初始化
    (1)关闭看门狗,关闭所有中断,SVC模式
    (2)设置PLL,将 FCLK : HCLK : PCLK 设置为 200 : 100 : 50 MHZ
    (3)清除 .bss 段的内容。
    (4)接着做RTEMS 原来的初始化

    添加到内容如下
        /*
         * Etual add
         */
#define WTCON        0x53000000
#define INTMSK         0x4A000008
#define INTSUBMSK     0x4A00001C

        /*
         * watching dog off
         */
        ldr     r0, =WTCON
        mov     r1, # 0x0
        str     r1, [r0]

        /*
         * mask all IRQs by setting all bits in the INTMR - default
         */
        mov     r1, # 0xffffffff
        ldr     r0, =INTMSK
        str     r1, [r0]

        ldr     r1, =0x7ff
        ldr     r0, =INTSUBMSK
        str     r1, [r0]

        /*
         * FCLK:HCLK:PCLK = 1:2:4
         * default OSC = 12MHZ
         * FCLK : HCLK : PCLK = 200 : 100 : 50 MHZ
         */
        mov     r1, # 0x4C000000
        adr     r2, pll_cfg_val
        add     r3, r1, # 7*4
1:
        ldr     r4, [r2], #4
        str     r4, [r1], #4
        cmp     r1, r3
        bne     1b

        mrc     p15, 0, r1, c1, c0, 0
        orr     r1, r1, #0xc0000000
        mcr     p15, 0, r1, c1, c0, 0

        b       clear_bss

pll_cfg_val:
        .long   0xFFFFFFFF              @LOCKTIME 0x4C000000
        .long   0x0005C012              @MPLLCON
        .long   0x00038021              @UPLLCON
        .long   0x001FFFF0              @CLKCON
        .long   0x00000004              @CLKSLOW
        .long   0x00000003              @CLKDIVN
        .long   0x00000000              @CAMDIVN

        /*
         * clear .bss
         */
clear_bss:
        ldr     r0, =_axf_bss_start
        ldr     r1, =_axf_bss_end
        mov     r2, #0x00000000
        b       clbss_2
clbss_l:
        str     r2, [r0]
        add     r0, r0, #4
clbss_2:
        cmp     r0, r1
        bne     clbss_l

    3.修改串口相关的代码

static ssize_t uart_write(int minor, const char *buf, size_t len)
    函数下修改这里:
            while(!(rUTRSTAT0 & 0x4)) //原来这里为0x2

{

...

                }



    初始化函数不使用FIFO直接使用死循环模式。
static void uart_init(int minor)
{
    int i;
    unsigned int reg = 0;

    rGPHCON  |= 0xa0;
    rGPHUP   = 0x0c;

    /* enable UART0 */
    rCLKCON|= (1<<10);

    /* value is calculated so : (int)(PCLK/16./baudrate) -1 */
    reg = get_PCLK() / (16 * 115200) - 1;

    /* FIFO enable, Tx/Rx FIFO clear */
    rUFCON0 = 0x0;
    rUMCON0 = 0x0;
    /* Normal,No parity,1 stop,8 bit */
    rULCON0 = 0x3;
    /*
     * tx=level,rx=edge,disable timeout int.,enable rx error int.,
     * normal,interrupt or polling
     */
    rUCON0 = 0x05;
    rUBRDIV0 = reg;

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

    主要修改UART0口的初始化就行了,不用FIFO,主要发送的时候判断。

    4.sbc2440/startup/bspstart.c 屏蔽掉设置时钟频率,设置SDRAM控制器到代码,因为时钟已经在 start.S 中做了。而内存控制器在gdb的启动脚本中做,在debug开发不许要设置。

bsp_start_default 函数中
  /* setup clocks */
//  rCLKDIVN = M_CLKDIVN;
//  rMPLLCON = ((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV);
  /* setup rREFRESH
   * period = 15.6 us, HCLK=66Mhz, (2048+1-15.6*66)
   */
//  REFCNT   = 2048+1-(15.6*get_HCLK()/1000000);
//  rREFRESH = ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT);

    5.完成之后 make install 安装


推荐阅读

史海拾趣

南晶电子(DGNJDZ)公司的发展小趣事

在产品质量和技术水平得到认可后,南晶电子开始积极拓展市场。公司参加了多场国内外电子展会,与众多客户建立了合作关系。同时,南晶电子还加大了营销力度,通过线上线下相结合的方式,提高了品牌知名度和市场占有率。在短短几年内,公司实现了从国内市场到国际市场的跨越式发展。

Essentra Components公司的发展小趣事

面对日益激烈的市场竞争,Essentra Components公司决定实施全球化战略,以拓展更广阔的市场。公司先后在亚洲、欧洲、美洲等多个地区设立了生产基地和销售服务点,实现了产品的全球覆盖。同时,公司还积极与当地企业合作,共同开发适合当地市场需求的产品,进一步巩固了其在全球市场的地位。

GSI Technology公司的发展小趣事

从财务表现来看,GSI Technology在过去几年中取得了不俗的成绩。尽管在某些季度受到宏观经济环境和市场需求波动的影响,但公司整体营收和净利润均保持了稳定增长。特别是在2023年Q3财报中,尽管营收略低于市场预期,但公司依然展现出了强劲的发展潜力和市场竞争力。展望未来,GSI Technology将继续秉承创新、务实、高效的发展理念,不断推出更多高性能、高品质的存储器产品,为全球电子行业的发展贡献自己的力量。

协顺电子(Finecables)公司的发展小趣事

随着公司业务的不断拓展,协顺电子逐渐意识到品质和创新的重要性。公司投入大量资金引进先进的生产设备和技术人才,同时加强内部管理和质量控制。此外,协顺电子还积极与国内外知名企业和研究机构合作,共同研发新产品和新技术。这些举措使得公司的产品质量和技术水平得到了显著提升,也赢得了客户的广泛赞誉。

Bud Industries公司的发展小趣事

近年来,随着电子行业技术的不断革新和市场环境的变化,协顺电子也面临着前所未有的挑战。为了应对这些挑战,公司开始进行转型升级。一方面,公司加大研发投入,推动产品创新和技术升级;另一方面,公司也积极探索新的业务领域和市场机会。同时,协顺电子还加强了与供应商和客户的合作关系,共同应对市场变化和挑战。这些努力使得公司在激烈的市场竞争中保持了良好的发展态势。

方向电子公司的发展小趣事

近年来,随着电子行业技术的不断革新和市场环境的变化,协顺电子也面临着前所未有的挑战。为了应对这些挑战,公司开始进行转型升级。一方面,公司加大研发投入,推动产品创新和技术升级;另一方面,公司也积极探索新的业务领域和市场机会。同时,协顺电子还加强了与供应商和客户的合作关系,共同应对市场变化和挑战。这些努力使得公司在激烈的市场竞争中保持了良好的发展态势。

问答坊 | AI 解惑

求助 帮忙分析该电路图的原理

该电路图的目的是分析对输入信号进行分类,然后输出,对输出脉冲进行计数的功能。 此电路图只对信号分类。 可是我还不能很理解。 请求给予帮住。 [ 本帖最后由 阳光如烟 于 2008-8-25 17:34 编辑 ]…

查看全部问答>

毕业设计之97电子设计大赛直流稳压电源设计

本帖最后由 paulhyde 于 2014-9-15 03:54 编辑 请各位好心的师兄师姐们帮帮小妹了 在此表示不甚感激 谢谢  …

查看全部问答>

请蓝眼狐大人!进来给检查一下!

电子锁画好了PCB图  但不知道是否可行  请蓝眼狐大人给看看  有问题我好立刻改 没问题我就制板了!!!谢谢!!…

查看全部问答>

呵呵,那位坛友手中有多余一套LM3S8962开发板,或者闲着不用的,砸个过来

坛友们,您们谁有多余的或者不用的,有偿转让一下呵呵,本人近期有时间想认真学习一下,谢谢啦嘿嘿 本人的QQ是282574314,嘿嘿或者想学STM32的互换一下。…

查看全部问答>

vxworks6.6

有谁使用过了vxworks6.6及其开发workbench的,一起来分享啊。 我先自己说下自己的使用后的感受吧,vxworks6.6的系统启动代码和5.5区别还是很大,而对与新的平台的使用我用的也不是很爽,之中遇到了很多的问题。 哎~ 又要开始一个新的痛苦的学习过 ...…

查看全部问答>

读取8253计数器的问题?

我打算通过扩展定时器的方法测出多路PWM信号的占空比,利用GATE门控位,当GATE低电平的时候读取外部定时器8253计数器的值。可是我怎么也读不出来值,当我使RD位有效时,读的计数器的值也总是不变是个固定值,大家看看我的程序有什么问题??怎么改 ...…

查看全部问答>

51开发时,关于AD转换芯片7135的转换结果的问题

用51板做东西的时候,AD转换芯片用的是ICL7135(双积分AD转换芯片)。我看见一些资料上面写着 用计数器对积分阶段进行计数,最后得到的计数减去1001就是AD的转换结果。     我有一点不明白:计数器的结果-1001就直接是AD 转换的数字结果 ...…

查看全部问答>

用CubeSuite+下载程序下载不进去???

使用78K0R的78f1213_44脚  图如下…

查看全部问答>

【TI首届低功耗设计大赛】+@fxyc87+CCS编译环境初识+第一课 点亮LED

【TI首届低功耗设计大赛】+@fxyc87+CCS编译环境初识+第一课 点亮LED在论坛搜索 【TI首届低功耗设计大赛】+@fxyc87+ 上一次发布了开发板的秀,https://bbs.eeworld.com.cn/thread-446740-1-1.html 以及IAR编译环境的使用说明及点亮LED,见贴[url]h ...…

查看全部问答>