200 likes | 352 Views
NET+OS 6.1 Training. BSP. NET+OS 6.1 BSP. Initialization Memory map New features Debugging Porting Issues. Overall view of the BSP. Identify and process Reset types: hardware reset, power-up reset, software reset, software restart, wakeup reset from sleep mode
E N D
NET+OS 6.1 BSP • Initialization • Memory map • New features • Debugging • Porting Issues
Overall view of the BSP • Identify and process Reset types: • hardware reset, • power-up reset, • software reset, • software restart, • wakeup reset from sleep mode • Perform Memory test. • Load LED and Simple Serial driver for debugging before the kernel and other device drivers are loaded. • Set C library startup from GreenHills and GNU. • Load the device drivers; Ethernet, DMA, PCI, I2C, USB, LCD).
BSP Source Code • Initialization code is in NETOS\src\bsp\arm9init directory. • Platform code is in NETOS\src\bsp\platforms\ns9750_a. • Common code is in NETOS\src\bsp\common (shared with different platforms). • Device drivers are in NETOS\src\bsp\devices directory. • Bootloader code is in NETOS\src\bsp\bootloader directory. • Profiler code is in NETOS\src\bsp\profiler directory. • Include files are in NETOS\h\arm9, NETOS\src\bsp\h, NETOS\h, and NETOS\src\bsp\platforms\ns9750_a directories. • Register definitions are in NETOS\h\arm9 directory. • Configurable parameters are defined in netos\src\ \bsp\platforms\ns9750_a \bsp.h.
Linker Script Directives • Linker scripts determine memory layout • image.ldr, rom.ldr (GNU) image.lx rom.lx (GHS) • customize.lx and customize.ldr (in platforms directory), adjust values for your application • Sections added for ttb table and non-cache region • NON_CACHE_MALLOC_SIZE
Building the BSP • Build from netos/src/bsp directory • In GNU platform specified in command line to make file • make PLATFORM=platform • In GNU Warnings are now treated as errors and stricter warning checking is enabled (-Wall) • In GHS platform open netCentral.bld, select standard_bsp.bld
Reminder to …. • Modify defines in bsp.h to enable drivers • We now have four serial ports, two are UART and one is SPI and one is not connected. • The boards default to support USB host • Only big endian is supported • There is no EEPROM support for NVRAM
Initialization and Start up • Hardware initialization • Software initialization • Memory map • Device driver initialization • Exception and interrupt handler setup • Interfacing with higher level modules: RTOS, TCP/IP, ACE, and Application Code
Initialization Flow Start tx_kernel_enter Reset.s tx_application_ define Init.s ncc_init.c netosStartup root.c [applicationStart()] main() Your application code
Hardware Initialization • Reset_Handler: First routine to be executed • Identify and process reset types (hardware reset, power-up reset, software reset, software restart, and wakeup reset from sleep mode). • Initializes SDRAM on CS4 using the values from settings.s (RAS/CAS) • USB configuration and Bbus rest • Calls nccInit using a small stack on CS4 • Jumps to C library Reset_Handler.doc
Initialization: nccInit • Check to see if we are in the debugger or if a software restart occurred. • Call setupSimpleSerial • Call customizeSetupGPIO • Call customizeReadPowerOnButtons • Call customizeMemoryTest • Programs chip selects (Base and Mask)
Initialization: (cont) • nccInit: Check to see if the application will fit into RAM (linker directives) ncc_init.doc
SDRAM Memory settings • Settings.s contains the memory controller register settings for SDRAM. (not in debugger) • If you use different memory parts you must modify this file (PC133). • RAS and CAS Delay Registers • Dynamic memory configuration registers
SRAM (flash) • Table defined in bsp.c defines the register settings for SRAM parts • SRAM memory configuration registers, specifies 16 bit or 32-bit. • Static memory Read Delay registers
Initialization : Main() • execute POST • SetupVector Table • Enable MMU (data cache) • DDI First Level Initialization • Start threadX main.doc
Initialization: Loading RTOS • Set up FIQ and IRQ stack. • Create threadx (system) timer thread (stack size 1024, priority is 0). • Call BSP routine to set up system timer clock and timer 2 and to create root thread (stack size and priority are configurable in appconf.h file) and start it. • Start RTOS scheduler. threadx_init.doc
Root Thread: netosStartup() • Load device drivers • Read parameters from NVRAM and configure dialog. • Call netosstartTCP() to initialize and start TCP/IP stack and ACE. • Set up real time source and install time zone. • Start up application. root_thread.doc