有了前一篇文章的铺垫,基本上移植的工作就成功了一大半了,接下来要做的就是针对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 安装


关键字:RTEMS  S3C2440  移植 引用地址:RTEMS在S3C2440上的移植-(4)

上一篇:RTEMS在S3C2440上的移植-(3)
下一篇:ARM9 SWI软件中断

推荐阅读

    近日国际半导体产业协会SEMI公布了最新的中国集成电路产业生态系统报告,报告显示,中国前端晶圆厂产能今年将增长至全球半导体晶圆厂产能的16%,到2020年,这一份额将增加到20%。受跨国公司和国内公司存储和代工项目的推动,中国将在2020年的晶圆厂投资将以超过200亿美元的支出,超越世界其他地区,占据首位。2014年中国成立大基金以来,促进了...
据外媒报道,新智能系统处理器制造商Kalray发布了新一代处理器MPPA3 aka Coolidge™。该处理器采用TSMC 16nm FinFET工艺技术,是其第三代专利MPPA®(大规模并行处理器阵列)处理器系列产品。作为新一代智能处理器,Kalray MPPA®处理器具有动态分析能力,能够智能分析大量信息,制定决策,并与外界实时交互。Coolidge处理器可广泛用于高性能应用程序...
彭博引述知情人士消息称,荷兰政府极有可能不会给予ASML向中国出货EUV光刻机的许可证。一年前的许可证到期后,在美国施加压力下,ASML没有获得续签,因而本该在2018年就“到货”的EUV光刻机无法完成交付给中芯国际。近日中国外交部长王毅在欧洲五国进行访问,来到第二站荷兰后,ASML EUV光刻机是否能出口至美国的问题备受关注。彭博表示,中美关系日渐紧...
快充从字面的意思上来看,指的电池在馈电的状态下面,能够快速地达到补电的效果,快充应用最多的就是手机,快充技术的诞生在一定的程度上面缓解了电量不够的焦虑感带来的体验不佳,随着电动汽车的诞生,续航的焦虑问题再度被提起,补能焦虑也成了很多新能源汽车车主的痛,为了解决这一情况,一些车企把手机上面的快充搬到汽车上,更有甚者宣称充电5分钟续...

史海拾趣

问答坊 | AI 解惑

DSP产品应用

DSP产品应用创易电子整理出品,创易更懂电子, http://52edk.taobao.com/ 全系列阻容感一本全掌控。 在即将告别20世纪、步入21世纪的世纪之交的时刻,让我们首先回顾一下国际上电子工业最近30年来发展的历程:70年代的电子工业以消费电子为主,代 ...…

查看全部问答∨

c#serialport读不到ReadLine值(串口通信)

using System; using System.Linq; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO.Ports; using System.T ...…

查看全部问答∨

问下可以通过串口来解码红外遥控么?

一个红外一体头直接接串口,要怎么对红外遥控信号 进行解码?…

查看全部问答∨

热电阻热电偶线路能用避雷器吗?

一套PLC系统输入端是 热电阻热电偶,请问要如何对它进行防雷?热电阻热电偶线路能用避雷器吗?如果不能,那该如何采取防雷措施?谢谢…

查看全部问答∨

stm32f103cx的IO数?

                                 stm32f103cx的IO数到底是32还是33?PC13也是IO啊…

查看全部问答∨

程序进入等待模式运行时出现死机!

                                 为什么程序进入等待模式运行时会出现死机现象,在程序中注释掉等待模式,一切正常了。配置wait mode, Low power wa ...…

查看全部问答∨

关于DIY数控电源机壳面板布置

鉴于成本控制的原因。初步打算选用成品机壳。找了几家机壳厂,初步选择了一家,大家看看。机壳与面板都是铝合金的。 我按照厂家淘宝上面的简单尺寸图画了一下三维效果图,面板布置也是我自己的一厢情愿。不一定合理。大家多提提意见和建议。 晚上 ...…

查看全部问答∨

MP4底层开发文件

最近在做研发用MP4触摸屏来做操作界面,如果自己开发系统又费时费力,怎么才能得到MP4的底层开发文件,有哪些公司是对客户开放开发平台的呢?…

查看全部问答∨

求助SATA的IP核,最好是Synopsys SATA IP(愿付重金)

在学校做毕业设计,被老板要求在Xilinx的FPGA上完成SATA的操作,急需SATA的HOST与DEVICE的IP核。由于可以使用部分项目经费,所以重金求购SATA IP核。在网上查了一下,有"Synopsys Sata IP",“DesignWare IP SATA Complete Solution”等等均可 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved