TQ2440硬件平台的RTEMS系统BSP的移植--下
有了前一篇文章的铺垫,基本上移植的工作就成功了一大半了,接下来要做的就是针对2410和2440的不同及不同开发板模块、接口的差异对2410的BSP进行修改工作。由于2410的寄存器基本吻合,所以头文件不改也没问题,这里我主要还是参考了Etual大牛的博客做了一下工作:
1.修改了时钟(PLL设置)。
libcpu\arm\s3c24xx\clock\support.c
修改get_FCLK
由于2440 的PLL计算公式不同,在原来的基础上乘以2 就行了。修改为
return((BSP_OSC_FREQ * m * 2) / (p << s));
2.对启动代码进行修改。libbsp\arm\sbc2440\start\start.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 安装
(本文对原作进行了少量的修改!原文:http://blog.csdn.net/etual/article/details/18003067)
相关文章
- 【230310-4】已知圆心在x轴上的圆C与直线l:x+2倍根号2-10=0切于点E(m,2倍根号2),圆P:x2+(a+2)x+y2-ay+a+1=0 求: 1)c的方程 2)已知a>1,圆P与x轴
- U-Boot移植(4)增加对S3C2440的支持 (修改编译错误)
- 解决使用mp4v2封装的mp4文件在Wowza的hls上无法播放问题
- 无法从Objective-C访问Swift 4类:“在类型对象上未找到的属性”
- 【230108-4】如图3,正方形ABCD的边长为10+5倍根号2,点E在边CB上,EF垂直DE,与AC的延长线交于F,若CE=CF,则CE的值为()?
- 在4个表上使用JOIN和GROUP BY进行复杂的SQL查询
- UBOOT-1.1.6在S3C2410上的移植(基于GEC2410)
- FFmpeg在Android上的移植之第一步
- U-Boot在S3C2410上的移植分析
- 10.15有一个班4个学生,5门课。(1)求第一门课的平均分;(2)找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;(3)找出平均成绩在90分以上或全部课程成绩在85分以上的学生。分别编3个函数实现上3个要求。