[讨论] uCOS-II在S3C2440上的移植

songbo   2008-7-25 09:54 楼主
1)
下载源代码 http://www.armforum.cn
下载最新的uCOS-II-V286版和Michael Anburaj基于S3C24101.6.1移植版。根据代码用途的,建立apps3c2440ucosii三个目录,分别放置应用程序,平台移植文件和uCOS的源代码。如图: ARM

M开发论坛
字串4

2)
新建ADS工程 http://www.armforum.cn

加入所有代码,修改ARM AssemblerC Compiler的编译器类型为ARM920T。为方便调试,编译完的二进制文件由U-BOOT下载到0x31000000的内存地址,所以修改链接参数的代码地址RO Base0x31000000。如图: 字串8
字串8
   http://www.armforum.cn

回复评论 (9)

uCOS-II在S3C2440上的移植

3)
修改时钟频率和总线速率 M开发论坛

这一部主要是修改CLKDIVN时钟分频比和MPLL总线速率,可在init.S的初始化汇编环境中设置, ARM


ldr
r0,=CLKDIVN
; Set ratios 1:3:6 for FCLK:HCLK:PCLK
http://www.armforum.cn


ldr
r1,=(7)
ARM

str
r1,[r0]
字串4

[ PLL_ON_START
http://www.armforum.cn



; Configure MPLL
ARM开发论坛

ldr
r0,=MPLLCON
http://www.armforum.cn


ldr
r1,=((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV)
; Fin=12MHz,Fout=50MHz
http://www.armforum.cn

str
r1,[r0]
http://www.armforum.cn


]
ARM
也可在C的入口函数C_vMain中设置 字串8


__vChangeClockDivider(3,1);
// 1:3:6
/* already set at init.S */
ARM开发论坛


__vChangeMPllValue(184,2,2);
// FCLK=406M
ARM开发论坛
M开发论坛
4)
修改内核心跳 ARM开发论坛

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

{ ARM


……
ARM开发论坛

OS_ENTER_CRITICAL();
ARM开发论坛

ARM


pISR_TIMER4 = (U32)__vTimer4Interrupt;
字串8

字串8

tcfg1 &= ~S3C2410_TCFG1_MUX4_MASK;
字串4

tcfg1 |= S3C2410_TCFG1_MUX4_DIV2;
字串4

M开发论坛

tcfg0 &= ~S3C2410_TCFG_PRESCALER1_MASK;
字串8


tcfg0 |= ((6 - 1) / 2) << S3C2410_TCFG_PRESCALER1_SHIFT;
字串4

ARM


tcnt = (PCLK / 6) / wTicksPerSec;
字串5
…… M开发论坛

tcon &= ~(7<<20);
ARM

tcon |= S3C2410_TCON_T4RELOAD;
字串8


tcon |= S3C2410_TCON_T4MANUALUPD;
http://www.armforum.cn

rTCON = tcon;
ARM

rTCNTB4 = tcnt;
ARM
ARM

tcon |= S3C2410_TCON_T4START;
字串8

tcon &= ~S3C2410_TCON_T4MANUALUPD;
字串5

rTCON = tcon;
M开发论坛

    ARM


BIT_CLR(rINTMSK, BIT_TIMER4);
字串8


OS_EXIT_CRITICAL();
ARM
} ARM
点赞  2008-7-25 09:55

uCOS-II在S3C2440上的移植

5)
修改U-BOOT的中断跳转 字串5
利用U-BOOT已有的丰富功能,如烧写,网络,脚本等,可在没有仿真器的情况下大大减少调试的时间。 字串5
如果直接下载ucos,一挑战到0x31000000的内存地址,会出现如下的中断信息: 字串8
interrupt request M开发论坛

pc : [<3100ab28>]
lr : []
ARM

sp : 7fbfdfb7
ip : ffffdd7e
fp : 33d78a49
http://www.armforum.cn

r10: 33d78931
r9 : 51000000
r8 : 80000013
http://www.armforum.cn

r7 : 00000200
r6 : 00000000
r5 : 00500000
r4 : 0000dc7e
字串8

r3 : fefefeff
r2 : 00000000
r1 : ffffbfff
r0 : 80000013
http://www.armforum.cn
Flags: Nzcv
IRQs on
FIQs on
Mode SVC_32
http://www.armforum.cn

Resetting CPU ... M开发论坛
原因是U-BOOT的初始化代码接管了中断管理,看U-BOOT的反汇编: 字串5

.globl _start ARM开发论坛

_start: b
start_code
字串5

33f80000:
ea000014
b
33f80058
M开发论坛


ldr
pc, _undefined_instruction
字串5
33f80004:
e59ff014
ldr
pc, [pc, #20]
; 33f80020 <_undefined_instruction>
http://www.armforum.cn

ldr
pc, _software_interrupt
http://www.armforum.cn

33f80008:
e59ff014
ldr
pc, [pc, #20]
; 33f80024 <_software_interrupt>
字串5

……. 字串8


ldr
pc, _irq
字串8
33f80018:
e59ff014
ldr
pc, [pc, #20]
; 33f80034 <_irq>
字串4
……. 字串8

33f80020 <_undefined_instruction>: ARM
33f80020:
33f80240
mvnccs
r0, #4
; 0x4
字串4
33f80024 <_software_interrupt>: http://www.armforum.cn

33f80024:
33f802a0
mvnccs
r0, #10 ; 0xa
ARM开发论坛

……. 字串8

33f80034 <_irq>: ARM开发论坛

33f80034:
33f80420
mvnccs
r0, #536870912
; 0x20000000
ARM开发论坛
IRQ的中断入口为偏移0x3433f80420OK,在C_vMain入口处加一句: ARM开发论坛

(*(unsigned *)(0x34)) =
(U32)UCOS_IRQHandler;
字串8

ARM
6)
系统测试 ARM

添加一个应用程序ex3.c,建立两个子任务,分别不停的打印01。主任务每隔1秒打印系统的使用率。运行情况如下: ARM

UCOS_FRAMEWORK Ver 1.15 for S3C2440 (ARM920T from Samsung) :05/03/05 http://www.armforum.cn
Built using ADS on Apr 26 2008 <10:31:35> http://www.armforum.cn

Endian: LITTLE ARM
Processor operating state: ARM ARM
Task start state: ARM 字串4

CONSOL: COM0, 115200bps, 8Bit, NP 字串5
CPU Clk: 406MHz
MMU: ON
Cache: ON
Write Buf: ON
ARM

FLASH_SADDR:00000000h SRAM_SADDR:40000000h SRAM_EADDR:40000fffh http://www.armforum.cn
SDRAM_SADDR:30000000h SFR_BADDR :48000000h ISR_BADDR :33ffff00h ARM开发论坛

Free RAM: 3100edd8h ~ 33ffa7ffh 字串5
Developed by Michael Anburaj, http://geocities.com/michaelanburaj/ ARM

ARM

Ported by WEIYAN TECHNOLOGY, http://www.gzweiyan.com/ http://www.armforum.cn

Ver 0.1 08/04/26 ARM
字串5
timer tcon=00500000, tcnt dc7e, tcfg 00000200,00000000 ARM开发论坛

uC/OS-II, The Real-Time Kernel ARM Ported version ARM

Jean J. Labrosse/ (Ported by) Michael Anburaj ARM开发论坛

WEIYAN TECHNOLOGY http://www.gzweiyan.com ARM
Task1 #1 ARM

<-PRESS 'ESC' TO QUIT-> ARM开发论坛

5 0 5
//
正在运行的的任务数         当前的cpu使用率              每秒任务切换的次数
http://www.armforum.cn

01010101010101010101010101010101010101010101010101010101010101010101010101010101 5 1 141 M开发论坛
01010101010101010101010101010101010101010101010101010101010101010101010101010101 5 1 141 字串8

01010101010101010101010101010101010101010101010101010101010101010101010101010101 5 1 141 字串4

01010101010101010101010101010101010101010101010101010101010101010101010101010101 5 1 141 ARM

ARM
7)
移植小结 字串4

这次移植的难点在U-BOOT的中断接管,修改完内核心跳后,内核一运行就自动重启。后来细看输出信息interrupt request才发现这不是ucos输出的,IRQ中断仍由U-BOOT管理。找到问题的原因,解决方法就好办了。可以直接在U-BOOT里通过mw来修改,也可以由ucos来修改。 ARM
点赞  2008-7-25 09:56
不错,改天有空好好研究下。
点赞  2008-7-25 17:07
原来这帖子埋金的,哈哈!意外的收获
点赞  2009-11-3 19:41
很好的帖子,谢谢!
点赞  2011-9-20 13:22
好贴,谢谢了
点赞  2011-10-4 20:27

uCOS-II在S3C2440上的移植

自己在s3c2440上正移植实验,希望能有所帮助。
点赞  2011-11-7 16:22
很好,找机会上板试试
点赞  2011-11-18 10:10
有图有真相
点赞  2014-3-9 22:52
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复