Перейти к содержанию
    

Alex_rav

Свой
  • Постов

    46
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Alex_rav

  • Звание
    Участник
    Участник
  • День рождения 19.10.1983

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. Размер для стека : #define scmRTOS_IDLE_PROCESS_STACK_SIZE (100 * sizeof(stack_item_t)) Мне тоже кажется что что-то не ладно со стеком. Буду разбираться с скриптами и памятью.
  2. Странно, но в Hardfault падает после перехода в процесс TIdleProc. template<> void TIdleProc::exec() { for(;;) { #if scmRTOS_IDLE_HOOK_ENABLE == 1 idle_process_user_hook(); \\ <------------------заходит сюда и потом падает в HardFault #endif #if scmRTOS_TARGET_IDLE_HOOK_ENABLE == 1 idle_process_target_hook(); #endif } } Прерывания системного таймера происходят, вижу это в отладчике. Чувствую что где-то что-то просто пропустил при переносе, но не пойму пока что.
  3. Доброго времени суток. Давно используем ScmRTOS в своих проектах. До этого работали на LPC2148/2368/2387. В новом проекте используем LPC4330, да к тому же переходим на новую среду разработки (был IAR, а стал Eclipse+CodeSourcery). В данный момент перенес порт для Cortex-M4 в готовый, работающий проект для LPC4330. Прерывания от системного таймера и PendSV приходят, но ось раз за разом падает в HardFault. Причем падает после отработки по разу всех процессов, т.е. когда все процессы перешли в sleep. падает на строках void TKernel::sched() { uint_fast8_t NextPrty = highest_priority(ReadyProcessMap); if(NextPrty != CurProcPriority) { SchedProcPriority = NextPrty; raise_context_switch(); do // <--------------------------- вот здесь { enable_context_switch(); DUMMY_INSTR(); disable_context_switch(); } while(CurProcPriority != SchedProcPriority); // until context switch done } } Я использую стартап и ld-скрипт от библиотеки CMSIS. С стартапом понятно, там переделал названия прерываний и все, а подскажите пожалуйста с ld-скриптом. Сейчас он выглядит вот так: OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") ENTRY(_start) SEARCH_DIR(.) GROUP(-lgcc -lc -lcs3 -lcs3unhosted -lcs3micro) MEMORY { rom (rx) : ORIGIN = 0x10000000, LENGTH = 128K ram (rwx) : ORIGIN = 0x10008000, LENGTH = 32K } /* These force the linker to search for particular symbols from * the start of the link process and thus ensure the user's * overrides are picked up */ EXTERN(__cs3_reset_cortex_m) EXTERN(__cs3_interrupt_vector_cortex_m) EXTERN(__cs3_start_c main __cs3_stack __cs3_stack_size __cs3_heap_end) PROVIDE(__cs3_stack = __cs3_region_start_ram + __cs3_region_size_ram); PROVIDE(__cs3_stack_size = __cs3_region_start_ram + __cs3_region_size_ram - _end); PROVIDE(__cs3_heap_start = _end); PROVIDE(__cs3_heap_end = __cs3_region_start_ram + __cs3_region_size_ram); SECTIONS { .text : { CREATE_OBJECT_SYMBOLS __cs3_region_start_rom = .; *(.cs3.region-head.rom) __cs3_interrupt_vector = __cs3_interrupt_vector_cortex_m; *(.cs3.interrupt_vector) /* Make sure we pulled in an interrupt vector. */ ASSERT (. != __cs3_interrupt_vector_cortex_m, "No interrupt vector"); *(.rom) *(.rom.B) __cs3_reset = __cs3_reset_cortex_m; *(.cs3.reset) /* Make sure we pulled in some reset code. */ ASSERT (. != __cs3_reset, "No reset code"); *(.text .text.* .gnu.linkonce.t.*) *(.plt) *(.gnu.warning) *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.rodata .rodata.* .gnu.linkonce.r.*) *(.ARM.extab* .gnu.linkonce.armextab.*) *(.gcc_except_table) *(.eh_frame_hdr) *(.eh_frame) . = ALIGN(4); KEEP(*(.init)) . = ALIGN(4); __preinit_array_start = .; KEEP (*(.preinit_array)) __preinit_array_end = .; . = ALIGN(4); __init_array_start = .; KEEP (*(SORT(.init_array.*))) KEEP (*(.init_array)) __init_array_end = .; . = ALIGN(0x4); KEEP (*crtbegin.o(.ctors)) KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*crtend.o(.ctors)) . = ALIGN(4); KEEP(*(.fini)) . = ALIGN(4); __fini_array_start = .; KEEP (*(.fini_array)) KEEP (*(SORT(.fini_array.*))) __fini_array_end = .; KEEP (*crtbegin.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*crtend.o(.dtors)) . = ALIGN(4); __cs3_regions = .; LONG (0) LONG (__cs3_region_init_ram) LONG (__cs3_region_start_ram) LONG (__cs3_region_init_size_ram) LONG (__cs3_region_zero_size_ram) } /* .ARM.exidx is sorted, so has to go in its own output section. */ __exidx_start = .; .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >rom __exidx_end = .; .text.align : { . = ALIGN(8); _etext = .; } >rom __cs3_region_size_rom = LENGTH(rom); __cs3_region_num = 1; .data : { __cs3_region_start_ram = .; *(.cs3.region-head.ram) KEEP(*(.jcr)) *(.got.plt) *(.got) *(.shdata) *(.data .data.* .gnu.linkonce.d.*) *(.ram) . = ALIGN (8); _edata = .; } >ram AT>rom .bss : { __bss_start__ = .; *(.shbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) *(.ram.B) . = ALIGN (8); _end = .; __end = .; __bss_end__ = .; } >ram AT>rom .heap : { *(.heap) } >ram .stack (__cs3_stack - __cs3_stack_size) : { *(.stack) } >ram __cs3_region_init_ram = LOADADDR (.data); __cs3_region_init_size_ram = _edata - __cs3_region_start_ram; __cs3_region_zero_size_ram = _end - _edata; __cs3_region_size_ram = LENGTH(ram); __cs3_region_num = 1; .stab 0 (NOLOAD) : { *(.stab) } .stabstr 0 (NOLOAD) : { *(.stabstr) } /* DWARF debug sections. * Symbols in the DWARF debugging sections are relative to the beginning * of the section so we begin them at 0. */ /* DWARF 1 */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2 */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2 */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) } .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) } .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) } /DISCARD/ : { *(.note.GNU-stack) } }
  4. Приветствую. Не в том дело, что нет примера инициализации SDRAM, а в том чтобы прошить ее сначала в МК в виде прошивки, потом чтобы она тормознулась после удачной инициализации. После этого прошить уже по адресам внешней памяти рабочую прошивку и отлаживать. Пробую как-то так: monitor reset halt file "D:\\Program\\Eclipse_IDE_for_ARM\\Project\\p1\\p1\\InitSDRAM.elf" load thbreak 135 c file "D:\\Program\\Eclipse_IDE_for_ARM\\Project\\p1\\p1\\Debug\\p1.elf" Файл InitSDRAM.elf заливается,но не тормозится и готовая прошивка не заливается. Если вручную запускать сначала отладку проекта с инициализацией памяти, потом тормозить ее, а потом запускать отладку рабочей прошивки опять же все ручками, то отладка запускается нормально. Но хочется как-то автоматизироваться.
  5. Доброго времени суток. Использую связку Eclipse+CodeSourcery+JLinkGDBServer для программирования и отладки LPC4330. Не могу настроить Jlink на работу с ядром М0. Нашел ветку на форуме Seggera (http://forum.segger.com/index.php?page=Thread&threadID=156), попробовал также, но в логах сервера для M0 вижу (выдержки): -----GDB Server start settings----- 03-00000000-00-00000001-0027: GDBInit file: .\M0.gdb 03-00000000-00-00000001-0023: GDB Server Listening port: 2345 03-00000000-00-00000001-0023: SWO raw output listening port: 2332 03-00000000-00-00000001-0023: Terminal I/O port: 2333 03-00000000-00-00000001-002D: Accept remote connection: localhost only 03-00000000-00-00000001-0021: Generate logfile: on 03-00000000-00-00000001-0022: Verify download: off 03-00000000-00-00000001-0021: Init regs on start: on 03-00000000-00-00000001-0022: Silent mode: off 03-00000000-00-00000001-0022: Single run mode: off 03-00000000-00-00000001-0023: ------J-Link related settings------ 03-00000000-00-00000001-0023: J-Link script: none 03-00000000-00-00000001-0023: Target interface: JTAG 03-00000000-00-00000001-0022: Host interface: USB 03-00000000-00-00000001-0025: Target endian: little 03-00000000-00-00000001-0026: Target interface speed: 1000kHz 03-00000000-00-00000001-0017: Connecting to J-Link... .................................................. Listening on TCP/IP port 2345 03-00000000-00-00000319-0017: Connecting to target... 02-00000000-00-00000319-0035: T164C 000:319 JLINK_ClrError() (0000ms, 0318ms total) 02-00000000-00-00000320-0049: T164C 000:319 JLINK_GetHWStatus(...) returns 0x00 (0001ms, 0319ms total) 02-00000000-00-00000320-0056: T164C 000:320 JLINK_TIF_Select(JLINKARM_TIF_JTAG) returns 0x00 (0000ms, 0319ms total) 02-00000000-00-00000321-0039: T164C 000:320 JLINK_SetSpeed(1000) (0001ms, 0320ms total) 02-00000000-00-00000321-0044: T164C 000:321 JLINK_GetSpeed() returns 0x3E8 (0000ms, 0320ms total) 02-00000000-00-00000321-0077: T164C 000:321 JLINK_SetResetType(JLINKARM_RESET_TYPE_NORMAL) returns JLINKARM_RESET_TYPE_NORMAL (0000ms, 0320ms total) 02-00000000-00-00000321-003B: T164C 000:321 JLINK_SetResetDelay(0) (0000ms, 0320ms total) 02-00000000-00-00000321-0055: T164C 000:321 JLINK_SetEndian(ARM_ENDIAN_LITTLE) returns 0x00 (0000ms, 0320ms total) 03-00000000-00-00000344-0060: WARNING: Identified core does not match configuration. (Found: Cortex-M4, Configured: Cortex-M0) 02-00000000-00-00000350-01EB: T164C 000:321 JLINK_Connect() >0x2F8 JTAG>TotalIRLen = 8, IRPrint = 0x0011 >0x30 JTAG> >0x210 JTAG> >0x70 JTAG> >0x40 JTAG> >0x40 JTAG> >0x40 JTAG> >0x50 JTAG> >0x80 JTAG> >0x40 JTAG> >0x30 JTAG> >0x40 JTAG> >0x40 JTAG> >0x30 JTAG> >0x40 JTAG> >0x50 JTAG>Identified core does not match configuration. (Found: Cortex-M4, Configured: Cortex-M0) -- CPU_WriteMem(4 bytes @ 0xE0002000) -- CPU_ReadMem(4 bytes @ 0xE000EDF0) -- CPU_ReadMem(4 bytes @ 0xE0002000) -- CPU_ReadMem(4 bytes @ 0xE000EDFC) 02-00000000-00-00000355-00DF: -- CPU_ReadMem(4 bytes @ 0xE0001000) -- CPU_WriteMem(4 bytes @ 0xE0001000) -- CPU_ReadMem(4 bytes @ 0xE00FF010) -- CPU_ReadMem(4 bytes @ 0xE00FF014) -- CPU_ReadMem(4 bytes @ 0xE00FF018) returns 0x00 (0034ms, 0354ms total) 02-00000000-00-00000355-008C: T164C 000:355 JLINK_GetIdData(...) ScanLen=8 NumDevices=2 aId[0]=0x4BA00477 aIrRead[0]=0 aScanLen[0]=0 aScanRead[0]=0 (0000ms, 0354ms total) 02-00000000-00-00000355-0048: T164C 000:355 JLINK_GetDeviceFamily() returns 14 (0000ms, 0354ms total) 03-00000000-00-00000355-002C: J-Link found 2 JTAG devices, Total IRLen = 8 03-00000000-00-00000355-001F: JTAG ID: 0x4BA00477 (Cortex-M4) ................................................................................ ................ Connected to 127.0.0.1 03-00000000-00-00019915-0024: Executing script file [.\M0.gdb] ... 02-00000000-00-00019915-004B: T045C 019:915 JLINK_ConfigJTAG(IRPre = 4, DRPre = 1) (0000ms, 0357ms total) 02-00000000-00-00019944-01E8: T045C 019:915 JLINK_GetConfigData(...) >0x2F8 JTAG>TotalIRLen = 8, IRPrint = 0x0011 >0x30 JTAG> >0x210 JTAG> >0x70 JTAG> >0x40 JTAG> >0x40 JTAG> >0x40 JTAG> >0x50 JTAG> >0x80 JTAG> >0x40 JTAG> >0x30 JTAG> >0x40 JTAG> >0x40 JTAG> >0x30 JTAG> >0x40 JTAG> >0x50 JTAG> -- CPU_WriteMem(4 bytes @ 0xE0002000) -- CPU_ReadMem(4 bytes @ 0xE000EDF0) -- CPU_ReadMem(4 bytes @ 0xE0002000) -- CPU_ReadMem(4 bytes @ 0xE000EDFC) -- CPU_ReadMem(4 bytes @ 0xE0001000) -- CPU_WriteMem(4 bytes @ 0xE0001000) 02-00000000-00-00019945-003C: -- CPU_ReadMem(4 bytes @ 0xE00FF018) (0030ms, 0387ms total) 03-00000000-00-00019945-0030: JTAG configuration changed: IRPre = 4, DRPre = 1 03-00000000-00-00019945-0047: WARNING: Unsupported remote command "# Set gdb server to little endian" 02-00000000-00-00019945-0055: T045C 019:945 JLINK_SetEndian(ARM_ENDIAN_LITTLE) returns 0x00 (0000ms, 0387ms total) 03-00000000-00-00019945-0027: Target endianess set to "little endian" 03-00000000-00-00019945-0042: WARNING: Unsupported remote command "# Set JTAG speed to 1000 kHz" 02-00000000-00-00019946-0039: T045C 019:945 JLINK_SetSpeed(2000) (0001ms, 0388ms total) 02-00000000-00-00019946-0044: T045C 019:946 JLINK_GetSpeed() returns 0x7D0 (0000ms, 0388ms total) 03-00000000-00-00019946-0026: Target interface speed set to 2000 kHz 03-00000000-00-00019946-0038: WARNING: Unsupported remote command "# Reset the target" 02-00000000-00-00019946-003E: T045C 019:946 JLINK_ResetPullsRESET(ON) (0000ms, 0388ms total) 02-00000000-00-00019961-01DA: T045C 019:946 JLINK_Reset() -- CPU_WriteMem(4 bytes @ 0xE000EDF0) ................................................................................ .......................................................... 03-00000000-00-00020329-0026: WARNING: CPU did not halt after reset. Запускаю с командами: -x ".\M0.gdb" -log ".\M0.log" -port 2345 -device LPC4330_M0 сам файл M0.gdb: remoteport 2345 jtagconf 4 1 # Set gdb server to little endian endian little # Set JTAG speed to 1000 kHz speed 2000 # Reset the target reset sleep 100 Кто-нибудь делал такое. Если да, то помогите.
  6. Доброго времени суток. С неделю назад начал осваиваться с Eclips-ом. Возник вопрос: Программа располагается во внешней SDRAM, предполагается отлаживаться оттуда же. До этого работал с Iar, там есть готовый и работающий .mac-файл инициализации. Как его прикрутить в вкладку Startup debugg-ера, уж больно не хочется заново создавать файл с голыми регистрами и значениями? Вот здесь: http://electronix.ru/forum/lofiversion/index.php/t38813.html нашел что можно сначала записать готовый elf с инитом контроллера и внешней памяти, но пока не разобрался. Если есть у кого-нибудь пример проекта с инитом внешней памяти то буду очень благодарен.
  7. LPC43xx, LPC18xx Jlink в SDRAM

    Доброго времени суток. Нет ли у кого-нибудь проекта в IAR-е или не только, где программа запускает из SDRAM. Или хотя-бы .mac файла для Jlink. Вторую неделю пытаюсь запустить отладку из SDRAM, никак не получается. Заранее спасибо.
  8. IAR + Jlink + отладка в SDRAM

    Доброго времени суток. Неделю терзаю отладочную плату LPC4357-EVB. Хочу научится исполнятся и отлаживаться из SDRAM MT48LC16M16A2, которая есть на плате. Никто не может поделится *.mac файлом для отладки из SDRAM для Jlink для семейства LPC43xx? Вот мой код, который не работает __var EMCClock; __var FUNC0; __var FUNC1; __var FUNC2; __var FUNC3; __var FUNC4; __var FUNC5; __var FUNC6; __var FUNC7; __var MD_PUP; __var MD_BUK; __var MD_PLN; __var MD_PDN; __var MD_EHS; __var MD_EZI; __var MD_ZI; __var MD_EHD0; __var MD_EHD1; __var MD_EHD2; __var MD_PLN_FAST; EMC_SDRAM_REFRESH(ns) { EMCClock = 108000000; __var tCLK_ns; tCLK_ns = ((double)EMCClock / 16000000000 ); // CCLK period in ns return (int)((double)(ns) * tCLK_ns + 1); // convert ns to CCLKs } NS_2_CLKS(ns) { EMCClock = 108000000; __var tCLK_ns; tCLK_ns = ((double)EMCClock / 1000000000.0 ); // CCLK period in ns return (int)((double)(ns) * tCLK_ns ); // convert ns to CCLKs } __setupEMC(){ __var tmpclk; __var tempReg; __var freq; __var psel; __var pval; EMCClock = 108000000; FUNC0 = 0x0; FUNC1 = 0x1; FUNC2 = 0x2; FUNC3 = 0x3; FUNC4 = 0x4; FUNC5 = 0x5; FUNC6 = 0x6; FUNC7 = 0x7; MD_PUP = (0x0 << 3); MD_BUK = (0x1 << 3); MD_PLN = (0x2 << 3); MD_PDN = (0x3 << 3); MD_EHS = (0x1 << 5); MD_EZI = (0x1 << 6); MD_ZI = (0x1 << 7); MD_EHD0 = (0x1 << 8); MD_EHD1 = (0x1 << 9); MD_EHD2 = (0x3 << 8); MD_PLN_FAST = (MD_PLN | MD_EZI | MD_ZI | MD_EHS); //Setup CGU //CGU_SetXTALOSC(12000000); __writeMemory32(__readMemory32(0x40050018, "Memory") & ~(1<<2) , 0x40050018, "Memory"); // LPC_CGU->XTAL_OSC_CTRL &= ~(1<<2); //CGU_EnableEntity(CGU_CLKSRC_XTAL_OSC, ENABLE); __writeMemory32(__readMemory32(0x40050018, "Memory") & ~(1<<0) , 0x40050018, "Memory"); // LPC_CGU->XTAL_OSC_CTRL &= ~CGU_CTRL_EN_MASK; __delay(100); ///*Delay for stable clock //CGU_EntityConnect(CGU_CLKSRC_XTAL_OSC, CGU_CLKSRC_PLL1); tempReg = __readMemory32(0x40050044, "Memory"); //CGU_ADDRESS32(LPC_CGU->PLL1_CTRL); tempReg &= ~(0xF<<24); tempReg |= (6<<24) | (1<<11); __writeMemory32(tempReg , 0x40050044, "Memory"); //CGU_ADDRESS32(LPC_CGU->PLL1_CTRL) = tempReg; //CGU_SetPLL1(9); freq = 12000000 * 9; tempReg = __readMemory32(0x40050044, "Memory"); //CGU_ADDRESS32(LPC_CGU->PLL1_CTRL); tempReg &= ~((1<<6) | (1<<1) | (1<<7) | (0x03<<8) | (0xFF<<16) | (0x03<<12));// LPC_CGU->PLL1_CTRL &= ~(CGU_PLL1_FBSEL_MASK | //0x06000800 CGU_PLL1_BYPASS_MASK | CGU_PLL1_DIRECT_MASK | (0x03<<8) | (0xFF<<16) | (0x03<<12)); __writeMemory32(tempReg , 0x40050044, "Memory"); pval=1; while(2*(pval)*freq < 156000000) { psel++; pval*=2; } tempReg |= ((9-1)<<16) | (0<<12) | (psel<<8) | (1<<6); //0x06080840 __writeMemory32(tempReg , 0x40050044, "Memory"); //CGU_EnableEntity(CGU_CLKSRC_PLL1, ENABLE); tempReg = __readMemory32(0x40050044, "Memory"); //CGU_ADDRESS32(LPC_CGU->PLL1_CTRL); //PLL1_CTRL &= ~CGU_CTRL_EN_MASK; tempReg &= ~1; __writeMemory32(tempReg , 0x40050044, "Memory"); while((__readMemory32(0x40050040, "Memory")&1) == 0x0); //CGU_EntityConnect(CGU_CLKSRC_PLL1, CGU_BASE_M4); tempReg = __readMemory32(0x4005006C, "Memory"); //CGU_ADDRESS32(LPC_CGU->CGU_BASE_M4); tempReg &= ~(0xF<<24); tempReg |= (9<<24) | (1<<11); __writeMemory32(tempReg , 0x4005006C, "Memory"); //CGU_ADDRESS32(CGU_BASE_M4) = tempReg; //PIN __writeMemory32(0x000000F3, 0x4008609C, "Memory"); // D0 __writeMemory32(0x000000F3, 0x400860A0, "Memory"); // D1 __writeMemory32(0x000000F3, 0x400860A4, "Memory"); // D2 __writeMemory32(0x000000F3, 0x400860A8, "Memory"); // D3 __writeMemory32(0x000000F3, 0x400860AC, "Memory"); // D4 __writeMemory32(0x000000F3, 0x400860B0, "Memory"); // D5 __writeMemory32(0x000000F3, 0x400860B4, "Memory"); // D6 __writeMemory32(0x000000F3, 0x400860B8, "Memory"); // D7 __writeMemory32(0x000000F2, 0x40086290, "Memory"); // D8 __writeMemory32(0x000000F2, 0x40086294, "Memory"); // D9 __writeMemory32(0x000000F2, 0x40086298, "Memory"); // D10 __writeMemory32(0x000000F2, 0x4008629C, "Memory"); // D11 __writeMemory32(0x000000F2, 0x40086280, "Memory"); // D12 __writeMemory32(0x000000F2, 0x40086284, "Memory"); // D13 __writeMemory32(0x000000F2, 0x40086288, "Memory"); // D14 __writeMemory32(0x000000F2, 0x4008628C, "Memory"); // D15 __writeMemory32(0x000000B3, 0x40086124, "Memory"); // A0 __writeMemory32(0x000000B3, 0x40086128, "Memory"); // A1 __writeMemory32(0x000000B3, 0x4008612C, "Memory"); // A2 __writeMemory32(0x000000B3, 0x40086130, "Memory"); // A3 __writeMemory32(0x000000B3, 0x40086134, "Memory"); // A4 __writeMemory32(0x000000B2, 0x40086080, "Memory"); // A5 __writeMemory32(0x000000B2, 0x40086084, "Memory"); // A6 __writeMemory32(0x000000B2, 0x40086088, "Memory"); // A7 __writeMemory32(0x000000B3, 0x40086120, "Memory"); // A8 __writeMemory32(0x000000B3, 0x4008611C, "Memory"); // A9 __writeMemory32(0x000000B2, 0x40086118, "Memory"); // A10 __writeMemory32(0x000000B2, 0x40086108, "Memory"); // A11 __writeMemory32(0x000000B2, 0x40086104, "Memory"); // A12 __writeMemory32(0x000000B2, 0x40086100, "Memory"); // A13 __writeMemory32(0x000000B1, 0x40086320, "Memory"); // A14 __writeMemory32(MD_PLN_FAST+FUNC3, 0x40086324, "Memory"); //DYCS0//scu_pinmux( 6 , 9 , MD_PLN_FAST , 3 );//DYCS0 __writeMemory32(MD_PLN_FAST+FUNC3, 0x40086328, "Memory"); //DQMOUT1//scu_pinmux( 6 , 10 , MD_PLN_FAST , 3 );//DQMOUT1 __writeMemory32(MD_PLN_FAST+FUNC3, 0x4008632C, "Memory"); //CKEOUT0//scu_pinmux( 6 , 11 , MD_PLN_FAST , 3 );//CKEOUT0 __writeMemory32(MD_PLN_FAST+FUNC3, 0x40086330, "Memory"); //DQMOUT0//scu_pinmux( 6 , 12 , MD_PLN_FAST , 3 );//DQMOUT0 __writeMemory32(MD_PLN_FAST+FUNC3, 0x40086098, "Memory"); //scu_pinmux(0x1, 6, (MD_PLN | MD_EZI | MD_ZI | MD_EHS), FUNC3); /* P1_6: WE (function 0) errata */ __writeMemory32(MD_PLN_FAST+FUNC3, 0x40086310, "Memory"); //scu_pinmux(0x6, 4, (MD_PLN | MD_EZI | MD_ZI | MD_EHS), FUNC3); /* P6_4: CAS (function 0) > CAS# errata */ __writeMemory32(MD_PLN_FAST+FUNC3, 0x40086314, "Memory"); //scu_pinmux(0x6, 5, (MD_PLN | MD_EZI | MD_ZI | MD_EHS), FUNC3); /* P6_5: RAS (function 0) > RAS# errata */ __writeMemory32(MD_PLN_FAST+FUNC0, 0x40086C00, "Memory"); //LPC_SCU_CLK(0) = 0 + (MD_PLN | MD_EZI | MD_ZI | MD_EHS); /* SFSCLK0: EXTBUS_CLK0 (function 0, from datasheet) > CLK ds */ //Static setup __writeMemory32(NS_2_CLKS(55), 0x4000524C, "Memory"); // LPC_EMC->STATICWAITRD2 = NS_2_CLKS(55); __writeMemory32(0x81, 0x40005240, "Memory"); // LPC_EMC->STATICCONFIG2 = /*1<<19| */0x81; __writeMemory32(NS_2_CLKS(10), 0x40005248, "Memory"); // LPC_EMC->STATICWAITOEN2 = NS_2_CLKS(10); __writeMemory32(NS_2_CLKS(10), 0x40005244, "Memory"); // LPC_EMC->STATICWAITWEN2 = NS_2_CLKS(10); __writeMemory32(NS_2_CLKS(55), 0x40005250, "Memory"); // LPC_EMC->STATICWAITPAG2 = NS_2_CLKS(55); __writeMemory32(NS_2_CLKS(55), 0x40005254, "Memory"); // LPC_EMC->STATICWAITWR2 = NS_2_CLKS(55); __writeMemory32(NS_2_CLKS(55), 0x40005258, "Memory"); // LPC_EMC->STATICWAITTURN2 = NS_2_CLKS(55); /* Select EMC clock-out */ //Dynamic setup __writeMemory32(0x00000001, 0x40005000, "Memory"); // LPC_EMC->CONTROL = 0x00000001; __writeMemory32(0x00000000, 0x40005008, "Memory"); // LPC_EMC->CONFIG = 0x00000000; __writeMemory32(((0<<14) + (3<<9) + (1<<7)), 0x40005100, "Memory"); // LPC_EMC->DYNAMICCONFIG0 = 0<<14 | 3<<9 | 1<<7; /* 256Mb, 16Mx16, 4 banks, row=13, column=9 */ __writeMemory32(0x00000303, 0x40005104, "Memory"); // LPC_EMC->DYNAMICRASCAS0 = 0x00000303; /* 1 RAS, 3 CAS latency */ __writeMemory32(0x00000001, 0x40005028, "Memory"); // LPC_EMC->DYNAMICREADCONFIG = 0x00000001; /* Command delayed strategy, using EMCCLKDELAY */ __writeMemory32(NS_2_CLKS(20), 0x40005030, "Memory"); // LPC_EMC->DYNAMICRP = NS2CLK(pclk, 20); __writeMemory32(NS_2_CLKS(42), 0x40005034, "Memory"); // LPC_EMC->DYNAMICRAS = NS2CLK(pclk, 42); __writeMemory32(NS_2_CLKS(63), 0x40005038, "Memory"); // LPC_EMC->DYNAMICSREX = NS2CLK(pclk, 63); __writeMemory32(0x00000005, 0x4000503C, "Memory"); // LPC_EMC->DYNAMICAPR = 0x00000005; __writeMemory32(0x00000005, 0x40005040, "Memory"); // LPC_EMC->DYNAMICDAL = 0x00000005; __writeMemory32(0x00000002, 0x40005044, "Memory"); // LPC_EMC->DYNAMICWR = 2; __writeMemory32(NS_2_CLKS(63), 0x40005048, "Memory"); // LPC_EMC->DYNAMICRC = NS2CLK(pclk, 63); __writeMemory32(NS_2_CLKS(63), 0x4000504C, "Memory"); // LPC_EMC->DYNAMICRFC = NS2CLK(pclk, 63); __writeMemory32(NS_2_CLKS(63), 0x40005050, "Memory"); // LPC_EMC->DYNAMICXSR = NS2CLK(pclk, 63); __writeMemory32(NS_2_CLKS(14), 0x40005054, "Memory"); // LPC_EMC->DYNAMICRRD = NS2CLK(pclk, 14); __writeMemory32(0x00000002, 0x40005058, "Memory"); // LPC_EMC->DYNAMICMRD = 0x00000002; __delay(100); __writeMemory32(0x00000183, 0x40005020, "Memory"); //LPC_EMC->DYNAMICCONTROL = 0x00000183; /* Issue NOP command */ __delay(200); __writeMemory32(0x00000103, 0x40005020, "Memory"); // LPC_EMC->DYNAMICCONTROL = 0x00000103; /* Issue PALL command */ __writeMemory32(EMC_SDRAM_REFRESH(70), 0x40005024, "Memory"); // LPC_EMC->DYNAMICREFRESH = EMC_SDRAM_REFRESH(pclk,70); /* ( n * 16 ) -> 32 clock cycles */ __delay(200); tmpclk = 15625*EMCClock/1000000000/16; __writeMemory32(tmpclk, 0x40005024, "Memory"); // LPC_EMC->DYNAMICREFRESH = tmpclk; /* ( n * 16 ) -> 736 clock cycles -> 15.330uS at 48MHz <= 15.625uS ( 64ms / 4096 row ) */EMC_CONTROL __writeMemory32(0x00000083, 0x40005020, "Memory"); // LPC_EMC->DYNAMICCONTROL = 0x00000083; /* Issue MODE command */ tempReg = __readMemory32((0x28000000 | (3<<4| 3)<<11), "Memory"); //temp = *((volatile uint32_t *)(SDRAM_ADDR_BASE | (3<<4| 3)<<11)); /* 4 burst, 3 CAS latency */ __writeMemory32(0x00000000, 0x40005020, "Memory"); //LPC_EMC->DYNAMICCONTROL = 0x00000000; /* Issue NORMAL command */ //[re]enable buffers __writeMemory32(__readMemory32(0x40005100, "Memory") |(1<<19) , 0x40005100, "Memory"); // LPC_EMC->DYNAMICCONFIG0 |= 1<<19; __writeMemory32(0x01020304, 0x28000020, "Memory"); if(__readMemory32(0x28000020, "Memory") != 0x01020304) __message "fail\n"; else __message "not fail\n"; __writeMemory32(0x28000000, 0x40043100, "Memory"); // map SPIFI to shadow area at address 0 } __releaseCoreReset() { __writeMemory32((~(__readMemory32(0x40053154,"Memory"))) & (~(1<<24)),0x40053104,"Memory"); } __loadLoopCode() { __writeMemory32(0x00001F00,0x28080000,"Memory"); /* dummy stack pointer */ __writeMemory32(0x000000D5,0x2880004,"Memory"); /* reset handler */ __writeMemory32(0xE7FEE7FE,0x280800D4,"Memory"); /* jump to itself instruction for M0a */ __writeMemory32(0x28080000,0x40043404,"Memory"); /* M0 shadow pointer. */ } execUserReset() { __message "execUserReset\n"; __setupEMC(); __releaseCoreReset(); __message "execUserReset Finish\n"; } execUserPreload(){ __message "execUserPreload\n"; __setupEMC(); __loadLoopCode(); __releaseCoreReset(); __message "execUserPreload Finish\n"; } IAR выдает: Tue Apr 16, 2013 09:16:42: Loaded macro file: C:\Program Files\IAR Systems\Embedded Workbench 6.5\arm\config\flashloader\NXP\LPC43xx_extRAM.mac Tue Apr 16, 2013 09:16:42: Loaded macro file: C:\Program Files\IAR Systems\Embedded Workbench 6.5\arm\config\debugger\NXP\Trace_LPC18xx_LPC43xx.dmac Tue Apr 16, 2013 09:17:06: Sign on message from : Segger JLink ARM JTAG Tue Apr 16, 2013 09:17:06: execUserPreload Tue Apr 16, 2013 09:17:07: not fail Tue Apr 16, 2013 09:17:07: execUserPreload Finish Tue Apr 16, 2013 09:17:07: 7820 bytes downloaded and verified (16.28 Kbytes/sec) Tue Apr 16, 2013 09:17:07: Warning: Target inconsistency detected in Memory range 0x28000000-0x28000113 Tue Apr 16, 2013 09:17:07: Warning: Target inconsistency detected in Memory range 0x28000140-0x28001EB6 Tue Apr 16, 2013 09:17:08: Warning: There were warnings during download, see Log Window Tue Apr 16, 2013 09:17:08: Loaded debugee: D:\Documents\ÌÊ\LPC43xx\LPC4300-demos\Examples\LCD_ExtSDRAM\EWARM\LPC4350_IntSRAM\Exe\LCD_ExtSDRAM.out Tue Apr 16, 2013 09:17:09: WinRDI CPUread APSR failed [RDI Error: 9] Error message should have been found on target Tue Apr 16, 2013 09:17:09: Target reset Tue Apr 16, 2013 09:17:09: Failed to load debugee: D:\Documents\ÌÊ\LPC43xx\LPC4300-demos\Examples\LCD_ExtSDRAM\EWARM\LPC4350_IntSRAM\Exe\LCD_ExtSDRAM.out
  9. Теперь понятно Спасибо всем ответившим :a14:
  10. 2Палыч: Вообще то задача разместить один указатель не стоит, а стоит задача разместить массив указателей и работать с ним. 2Dog Pawlowa: Спасибо, все заработало, только не понятно почему Иар не кушал предыдущее объявление. Ведь это же то же самое только разделенное на две строчки.
  11. __root const void (*FuncTable)(void) = &Init_LED_WH; ошибка: Error[Pe144]: a value of type "void (*)()" cannot be used to initialize an entity of type "void const (*)()" Компилятор IAR 4.42 Хочется разместить указатель на функцию в встроенном флэше и не зависимо от результатов :a14: :a14: :a14:
  12. А код иницализации SPI можно посмотреть?
  13. чтобы не писать каждый раз vector<short>. Можно было и не переопределять, просто как-то получилось так :) Просто хотел организовать динамический массив. Про ресурсы только что понял.... на три контейнера 2 Кб памяти ушло.... :07: :07: ладно будем искать другие пути.... Спасибо за ответ :)
  14. Сам придумал, у иара нет примеров с этой библиотекой. правильно, я определил тип для динамического массива, чтобы в дальнейшем каждый раз не писать. Выдает ошибку Error[Pe020]: identifier "namespase" is undefined а это и не указатель, просто число такое...шеснадцатиричное. Этто так в документации написано определять(ARM® IAR C/C++ Compiler. стр 89): А почему нельзя с указателями работать? В дальнейшем хотел ввести динамический массив указателей. Не получиться? спасибо за ответ :a14:
  15. Кто-нибудь работал с это библиотекой? Привожу код: ...... #include <vector> //----------------------------------------------------------------------------- #define std typedef vector<short> TVshort; TVshort Adress_Zone; ......... Adress_Zone.push_back(0x55); // вот тут и висит Может его надо еще как-нибудь инициализировать? Причем вылетатет родной LPC2148 в __DebugBreak Заранее спасибо.
×
×
  • Создать...