找回密码
 注册
搜索
查看: 1228|回复: 2

uCOS-II在S3C2440上的移植

[复制链接]
发表于 2008-4-27 11:07:48 | 显示全部楼层 |阅读模式
作者:研一http://www.gzweiyan.com/html/embedded/20080427/30.html
1)        下载源代码
下载最新的uCOS-II-V286版和Michael Anburaj基于S3C2410的1.6.1移植版。根据代码用途的,建立app,s3c2440,ucosii三个目录,分别放置应用程序,平台移植文件和uCOS的源代码。如图:

2)        新建ADS工程
加入所有代码,修改ARM Assembler和C Compiler的编译器类型为ARM920T。为方便调试,编译完的二进制文件由U-BOOT下载到0x31000000的内存地址,所以修改链接参数的代码地址RO Base为0x31000000。如图:



3)        修改时钟频率和总线速率
这一部主要是修改CLKDIVN时钟分频比和MPLL总线速率,可在init.S的初始化汇编环境中设置,
        ldr     r0,=CLKDIVN     ; Set ratios 1:3:6 for FCLK:HCLK:PCLK
        ldr     r1,=(7)
        str     r1,[r0]
        [ PLL_ON_START
            ; Configure MPLL
            ldr    r0,=MPLLCON         
            ldr    r1,=((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV)  ; Fin=12MHz,Fout=50MHz
            str    r1,[r0]
        ]
也可在C的入口函数C_vMain中设置
        __vChangeClockDivider(3,1);            // 1:3:6       /* already set at init.S */
        __vChangeMPllValue(184,2,2);            // FCLK=406M

4)        修改内核心跳
Michael Anburaj的移植是使用看门狗作内核心跳,但在S3C2440中,看门狗与AC97控制器共用一个中断,所以需要修改中断跳转和清中断等操作。考虑到看门狗在嵌入式的重要性,这里改用没有输出功能的时钟4作为内核心跳。修改心跳初始化函数FRMWRK_vStartTicker():
void FRMWRK_vStartTicker(U32 wTicksPerSec)
{
                ……
        OS_ENTER_CRITICAL();

                pISR_TIMER4 = (U32)__vTimer4Interrupt;

        tcfg1 &= ~S3C2410_TCFG1_MUX4_MASK;
        tcfg1 |= S3C2410_TCFG1_MUX4_DIV2;

        tcfg0 &= ~S3C2410_TCFG_PRESCALER1_MASK;
        tcfg0 |= ((6 - 1) / 2) << S3C2410_TCFG_PRESCALER1_SHIFT;

        tcnt = (PCLK / 6) / wTicksPerSec;
……
        tcon &= ~(7<<20);
        tcon |= S3C2410_TCON_T4RELOAD;
        tcon |= S3C2410_TCON_T4MANUALUPD;
        rTCON = tcon;
        rTCNTB4 = tcnt;

        tcon |= S3C2410_TCON_T4START;
        tcon &= ~S3C2410_TCON_T4MANUALUPD;
        rTCON = tcon;
   
        BIT_CLR(rINTMSK, BIT_TIMER4);
        OS_EXIT_CRITICAL();
}

5)        修改U-BOOT的中断跳转
利用U-BOOT已有的丰富功能,如烧写,网络,脚本等,可在没有仿真器的情况下大大减少调试的时间。
如果直接下载ucos,一挑战到0x31000000的内存地址,会出现如下的中断信息:
interrupt request
pc : [<3100ab28>]    lr : [<e7fffff7>]
sp : 7fbfdfb7  ip : ffffdd7e  fp : 33d78a49
r10: 33d78931  r9 : 51000000  r8 : 80000013
r7 : 00000200  r6 : 00000000  r5 : 00500000  r4 : 0000dc7e
r3 : fefefeff  r2 : 00000000  r1 : ffffbfff  r0 : 80000013
Flags: Nzcv  IRQs on  FIQs on  Mode SVC_32
Resetting CPU ...
原因是U-BOOT的初始化代码接管了中断管理,看U-BOOT的反汇编:
.globl _start
_start: b       start_code
33f80000:       ea000014        b       33f80058 <start_code>
        ldr     pc, _undefined_instruction
33f80004:       e59ff014        ldr     pc, [pc, #20]   ; 33f80020 <_undefined_instruction>
        ldr     pc, _software_interrupt
33f80008:       e59ff014        ldr     pc, [pc, #20]   ; 33f80024 <_software_interrupt>
…….
        ldr     pc, _irq
33f80018:       e59ff014        ldr     pc, [pc, #20]   ; 33f80034 <_irq>
…….
33f80020 <_undefined_instruction>:
33f80020:       33f80240        mvnccs  r0, #4  ; 0x4
33f80024 <_software_interrupt>:
33f80024:       33f802a0        mvnccs  r0, #10 ; 0xa
…….
33f80034 <_irq>:
33f80034:       33f80420        mvnccs  r0, #536870912  ; 0x20000000
IRQ的中断入口为偏移0x34的33f80420。OK,在C_vMain入口处加一句:
(*(unsigned *)(0x34)) =  (U32)UCOS_IRQHandler;

6)        系统测试
添加一个应用程序ex3.c,建立两个子任务,分别不停的打印0和1。主任务每隔1秒打印系统的使用率。运行情况如下:
UCOS_FRAMEWORK Ver 1.15 for S3C2440 (ARM920T from Samsung) :05/03/05
Built using ADS on Apr 26 2008 <10:31:35>
Endian: LITTLE
Processor operating state: ARM
Task start state: ARM
CONSOL: COM0, 115200bps, 8Bit, NP
CPU Clk: 406MHz   MMU: ON   Cache: ON   Write Buf: ON
FLASH_SADDR:00000000h SRAM_SADDR:40000000h SRAM_EADDR:40000fffh
SDRAM_SADDR:30000000h SFR_BADDR :48000000h ISR_BADDR :33ffff00h
Free RAM: 3100edd8h ~ 33ffa7ffh
Developed by Michael Anburaj, http://geocities.com/michaelanburaj/

Ported by WEIYAN TECHNOLOGY, http://www.gzweiyan.com/
Ver 0.1 08/04/26

timer tcon=00500000, tcnt dc7e, tcfg 00000200,00000000
uC/OS-II, The Real-Time Kernel ARM Ported version
Jean J. Labrosse/ (Ported by) Michael Anburaj
WEIYAN TECHNOLOGY http://www.gzweiyan.com
Task1 #1
<-PRESS 'ESC' TO QUIT->
5 0 5        //正在运行的的任务数                当前的cpu使用率                每秒任务切换的次数
01010101010101010101010101010101010101010101010101010101010101010101010101010101 5 1 141
01010101010101010101010101010101010101010101010101010101010101010101010101010101 5 1 141
01010101010101010101010101010101010101010101010101010101010101010101010101010101 5 1 141
01010101010101010101010101010101010101010101010101010101010101010101010101010101 5 1 141

7)        移植小结
这次移植的难点在U-BOOT的中断接管,修改完内核心跳后,内核一运行就自动重启。后来细看输出信息interrupt request才发现这不是ucos输出的,IRQ中断仍由U-BOOT管理。找到问题的原因,解决方法就好办了。可以直接在U-BOOT里通过mw来修改,也可以由ucos来修改。

如果各位朋友在移植过程中遇到什么问题,可联系我们索取该移植包。

伟研科技 专注于Linux系统移植及应用开发
http://www.gzweiyan.com
发表于 2009-1-19 13:32:33 | 显示全部楼层
下不到ucos ii源码啊
点评回复

使用道具 举报

发表于 2009-2-23 10:31:06 | 显示全部楼层

我们公司提供S3C2440、6400、6410,和PXA270等开发板

我们公司提供S3C 2440,6400、6410,PXA270等开发板


SYSTEM-2440开发平台采用核心板+周边底板的模式,核心板为6层板,周边底板为2层板。本平台最新支持的操作系统为:WinCE

5.0与Linux 2.6.
中央处理器CPU:Samsung S3C2440A,核心ARM920T,典型主频400MHz;
SDRAM: 64Mbyte
FLASH:NOR FLASH: 2M 字节,用于存放bootloader
       NAND FLASH:64M 字节(K9F1208,用户可自己更换为16M、32M或128M的NandFlash)



提供源代码和一年的技术支持,还有完善设备驱动和板级支持包

详细信息可查看我公司网站http://www.ces-tech.com/cn/Default.aspx

您若有意向,可以联系我(QQ:516979984;电话:0755-33019701-613;MSN:
xuanyuanminsheng@163.com)
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-5-2 22:31 , Processed in 0.048195 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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