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.****.net/etual/article/details/18003067)
相关文章
- 想要气场强大,在气势上压倒对方,如此重要的4条,不用就亏大了
- u-boot-2014_04在TQ2440上的移植
- YouTube在消费电子展上展示vp9编解码的4k视频
- Marin说PCB之国产电源芯片方案 ---STC2620Q-手册上的Layout Guideline要求: 意思就是说我们RT/CLK端子对噪声敏感,因此RT电阻器应尽可能靠近IC,并且走线尽量短一些。尽量也是放置在和芯片同一面。 目前的做法是和电源芯片正反贴放置了,如下图所示: 4,BOOT电路上的RC的位置,BST电路一般用来给上MOS管驱动供电。故BST与SW一样,也是一个电压高速跳变的点,会辐射出较强的噪音。自举电容也要放置在尽可能靠近BST和SW的位置,避免对其他信号的影响,布线时宽度一般在20mil即可。尽量也是放置在和芯片同一面。
- TinyMaix在x210开发板上的移植
- FreeRtos+emwin在STM32F103ZET6上的移植笔记一(FreeRtos移植)
- wifi驱动 && wpa_supplicant在Linux PC上的移植
- 嵌入式实时操作系统μC/OS-Ⅱ 在DSP芯片上的移植与测试
- LittleVGL v7.5.0在STM32F103x上的移植
- EC20 4G LTE模块在FriendlyElec友善电子的R2S软路由(运行FriendlyWrt)上的应用演示