本帖最后由 walnutcy 于 2011-7-12 13:50 编辑
简单介绍下安装, 下载ecos-install.tcl,然后用SHELL执行安装,选ARM工具链及源码即可.
安装ecos3.0源码后,在目录ecos-3.0\packages\hal\cortexm\stm32\下能找到EVAL的开发板,
这块开发板有外扩的RAM及NORFlash,手边没有相应的板子,所以这里要修改.
板子是105RC的,所以复制stm3210e_eval目录为stm32f105_tcu,并修改其中的CDL及源码、LDI等文件,包括文件名及内容。
CDL根据板子修改如下:文件名,
修改串口号,
# implements CYGINT_HAL_STM32_UART0
# implements CYGINT_HAL_STM32_UART1
# walnutcy 2011.07.08
implements CYGINT_HAL_STM32_UART3
implements CYGINT_HAL_STM32_UART4
修改启动方式:
cdl_component CYG_HAL_STARTUP {
display "Startup type"
flavor data
default_value {"ROM"}
legal_values {"ROM"}
修改内存布局:
cdl_component CYGHWR_MEMORY_LAYOUT {
display "Memory layout"
flavor data
no_define
calculated { "cortexm_stm32f105_tcu_rom" }
include/pkgconf下只留两个文件:
mlt_cortexm_stm32f105_tcu_rom.ldi, mlt_cortexm_stm32f105_tcu_rom.h
H文件修改后如下:
#define CYGMEM_REGION_sram (0x20000000)
#define CYGMEM_REGION_sram_SIZE (0x00010000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE)
#define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
#define CYGMEM_REGION_flash (0x08000000)
#define CYGMEM_REGION_flash_SIZE (0x00080000)
#define CYGMEM_REGION_flash_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
// walnutcy 2011.07.07
#define CYGMEM_REGION_ram
CYGMEM_REGION_sram
#define CYGMEM_REGION_ram_SIZE
CYGMEM_REGION_sram_SIZE
//#define CYGMEM_REGION_ram (0x68000000)
//#define CYGMEM_REGION_ram_SIZE (0x00100000)
//#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
//#define CYGMEM_REGION_rom (0x64000000)
//#define CYGMEM_REGION_rom_SIZE (0x01000000)
//#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R)
LDI文件修改后如下:
MEMORY
{
sram: ORIGIN = 0x20000000, LENGTH = 0x00010000-CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE
flash : ORIGIN = 0x08000000, LENGTH = 0x00080000
}
SECTIONS
{
SECTIONS_BEGIN
SECTION_rom_vectors (flash, 0x08000000, LMA_EQ_VMA)
SECTION_RELOCS (flash, ALIGN (0x8), LMA_EQ_VMA)
SECTION_text (flash, ALIGN (0x8), LMA_EQ_VMA)
SECTION_fini (flash, ALIGN (0x8), LMA_EQ_VMA)
SECTION_rodata (flash, ALIGN (0x8), LMA_EQ_VMA)
SECTION_rodata1 (flash, ALIGN (0x8), LMA_EQ_VMA)
SECTION_fixup (flash, ALIGN (0x8), LMA_EQ_VMA)
SECTION_gcc_except_table (flash, ALIGN (0x8), LMA_EQ_VMA)
SECTION_eh_frame (flash, ALIGN (0x8), LMA_EQ_VMA)
SECTION_got (flash, ALIGN (0x8), LMA_EQ_VMA)
SECTION_sram (sram, 0x20000400, FOLLOWING (.got))
SECTION_data (sram, ALIGN (0x8), FOLLOWING (.sram))
SECTION_bss (sram, ALIGN (0x8), LMA_EQ_VMA)
CYG_LABEL_DEFN(__heap1) = ALIGN (0x8);
SECTIONS_END
}
其他代码修改部分:
stm32f105_tcu_misc.c修改,
hal_system_init函数中注释掉部分,如下:
// Set up GPIO lines for external bus
//base = CYGHWR_HAL_STM32_GPIOD;
//HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_CRL, 0x44bb44bb );
//HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_CRH, 0xbbbbbbbb );
//base = CYGHWR_HAL_STM32_GPIOE;
//HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_CRL, 0xbbbbb4bb );
//HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_CRH, 0xbbbbbbbb );
//base = CYGHWR_HAL_STM32_GPIOF;
//HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_CRL, 0x44bbbbbb );
//HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_CRH, 0xbbbb4444 );
//base = CYGHWR_HAL_STM32_GPIOG;
//HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_CRL, 0x44bbbbbb );
//HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_GPIO_CRH, 0x44444bb4 );
//---walnutcy 2011.07.07
// Set up FSMC NOR/SRAM bank 2 for NOR Flash
//base = CYGHWR_HAL_STM32_FSMC;
//HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FSMC_BCR2, 0x00001059 );
//HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FSMC_BTR2, 0x10000705 );
// Set up FSMC NOR/SRAM bank 3 for SRAM
//HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FSMC_BCR3, 0x00001011 );
//HAL_WRITE_UINT32( base+CYGHWR_HAL_STM32_FSMC_BTR3, 0x00000200 );
stm32f105_tcu_flash.c中修改如下:
删除AMD NorFlash相关函数,修改后如下:
cyg_stm32_flash_dev hal_stm32_flash_priv;
CYG_FLASH_DRIVER(hal_stm32_flash,
&cyg_stm32_flash_funs,
0,
0x08000000,
0,
0,
0,
&hal_stm32_flash_priv
);
最后是修改ecos.db,在文件的最后添加:
package CYGPKG_HAL_CORTEXM_STM32_STM32F105_TCU {
alias { "ST STM32F105 TCU HAL" hal_cortexm_stm32f105_tcu }
directory hal/cortexm/stm32/stm32f105_tcu
script hal_cortexm_stm32_stm32f105_tcu.cdl
hardware
description "
The stm32f105_tcu HAL package provides the support needed to run
eCos on the ST STM32F105 TCU board."
}
target stm32f105_tcu {
alias { "ST STM32F105 TCU board" stm32f105 }
packages { CYGPKG_HAL_CORTEXM
CYGPKG_HAL_CORTEXM_STM32
CYGPKG_HAL_CORTEXM_STM32_STM32F105_TCU
CYGPKG_DEVS_FLASH_STM32
CYGPKG_DEVS_FLASH_SPI_M25PXX
CYGPKG_IO_SERIAL_CORTEXM_STM32
CYGPKG_DEVS_WALLCLOCK_STM32
CYGPKG_IO_SPI
CYGPKG_DEVS_SPI_CORTEXM_STM32
}
description "The stm32f105_tcu target provides the packages needed
to run eCos on the STM32F105 TCU board."
}
完成后,启动ecos configuration tool, 即可在Build/templates中找到STM32F105 TCU board,选择redboot编译即可,
在install目录会生成redboot.bin,不修改编译参数的情况下,大小约为40K。
redboot.elf 是用于调试的。可以在keil下仿真运行,从serial window查看redboot启动。
注serialwindow目前只能较好地支持STM32的uart1,uart2. |
|