본문 바로가기

Software/embedded

Olimex E2294 Startup 부분

반응형


execUserPreload()
{

    __message "*** setup.mac *** Setup default value in VIC\n";
    // Disable all IRQ in VIC
    __writeMemory32(0xFFFFFFFF, 0xFFFFF014, "Memory"); // VICIntEnClear=0xFFFFFFFF
    // Reset all IRQ Addr in VIC
    __writeMemory32(0x00000000, 0xFFFFF034,"Memory");  // VICDefVectAddr,
    __writeMemory32(0x00000000, 0xFFFFF100,"Memory");  // VICVectAddr0,
    __writeMemory32(0x00000000, 0xFFFFF104,"Memory");  // VICVectAddr1,
    __writeMemory32(0x00000000, 0xFFFFF108,"Memory");  // VICVectAddr2,
    __writeMemory32(0x00000000, 0xFFFFF10C,"Memory");  // VICVectAddr3,
    __writeMemory32(0x00000000, 0xFFFFF110,"Memory");  // VICVectAddr4,
    __writeMemory32(0x00000000, 0xFFFFF114,"Memory");  // VICVectAddr5,
    __writeMemory32(0x00000000, 0xFFFFF118,"Memory");  // VICVectAddr6,
    __writeMemory32(0x00000000, 0xFFFFF11C,"Memory");  // VICVectAddr7,
    __writeMemory32(0x00000000, 0xFFFFF120,"Memory");  // VICVectAddr8,
    __writeMemory32(0x00000000, 0xFFFFF124,"Memory");  // VICVectAddr9,
    __writeMemory32(0x00000000, 0xFFFFF128,"Memory");  // VICVectAddr10,
    __writeMemory32(0x00000000, 0xFFFFF12C,"Memory");  // VICVectAddr11,
    __writeMemory32(0x00000000, 0xFFFFF130,"Memory");  // VICVectAddr12,
    __writeMemory32(0x00000000, 0xFFFFF134,"Memory");  // VICVectAddr13,
    __writeMemory32(0x00000000, 0xFFFFF138,"Memory");  // VICVectAddr14,
    __writeMemory32(0x00000000, 0xFFFFF13C,"Memory");  // VICVectAddr15,
    // Reset all IRQ Cntl in VIC
    __writeMemory32(0x00000000, 0xFFFFF200,"Memory"); // VICVectCntl0,
    __writeMemory32(0x00000000, 0xFFFFF204,"Memory"); // VICVectCntl1,
    __writeMemory32(0x00000000, 0xFFFFF208,"Memory"); // VICVectCntl2,
    __writeMemory32(0x00000000, 0xFFFFF20C,"Memory"); // VICVectCntl3,
    __writeMemory32(0x00000000, 0xFFFFF210,"Memory"); // VICVectCntl4,
    __writeMemory32(0x00000000, 0xFFFFF214,"Memory"); // VICVectCntl5,
    __writeMemory32(0x00000000, 0xFFFFF218,"Memory"); // VICVectCntl6,
    __writeMemory32(0x00000000, 0xFFFFF21C,"Memory"); // VICVectCntl7,
    __writeMemory32(0x00000000, 0xFFFFF220,"Memory"); // VICVectCntl8,
    __writeMemory32(0x00000000, 0xFFFFF224,"Memory"); // VICVectCntl9,
    __writeMemory32(0x00000000, 0xFFFFF228,"Memory"); // VICVectCntl10,
    __writeMemory32(0x00000000, 0xFFFFF22C,"Memory"); // VICVectCntl11,
    __writeMemory32(0x00000000, 0xFFFFF230,"Memory"); // VICVectCntl12,
    __writeMemory32(0x00000000, 0xFFFFF234,"Memory"); // VICVectCntl13,
    __writeMemory32(0x00000000, 0xFFFFF238,"Memory"); // VICVectCntl14,
    __writeMemory32(0x00000000, 0xFFFFF23C,"Memory"); // VICVectCntl15,

    __message "*** setup.mac *** Setup EMC, do external RAM config\n";
    // SRAM 32bit; IDCY = 0; WST1 = 0; RBLE = 1; WST2 = 0
    __writeMemory32(0x20000400, 0xFFE00004, "Memory"); // BCFG1=0x20000400

    // P1.26 : P1.31  - JTAG
    // P2.0 : P2.31   - Data bus
    // P3.1 : P3.22   - Address bus
    // P1.0           - CS0 (Flash)
    // P3.26          - CS1 (RAM)
    // P3.31          - BLS0
    // P3.30          - BLS1
    // P3.29          - BLS2
    // P3.28          - BLS3
    // P3.26          - WE
    // P1.1           - OE
    //PINSEL2 = 0000 1111 0000 0000 0000 1001 0010 0100
    __writeMemory32(0x0F000924, 0xE002C014, "Memory"); // PINSEL2 = 0x0F000924;

    __message "*** setup.mac *** Do ISR vectors remap to internal RAM 0x40000000 \n";
    __writeMemory32(0x00000002, 0xE01FC040, "Memory"); // MEMMAP = 2
}


Olimex 관련 포스트는 눈을 씻고 찾아보려고 해도 도저히 찾아볼 수가  없습니다.  물론 전제는 국내 사이트 이지요....

 

E2294 보드엔 1M sram 2M Flash 가 내장되어 있습니다.

 

물론 MCU 내부에 128k, 64k의 sram, flash가 존재하지만... 쓰다보면 욕심이 생기게 됩니다..... 달아논거 쓰고 싶다라고 느끼죠....

 

Address Mapping이 되어있어. ( LPC2000 시리즈의 Address Map 참고하길 ) CS1,CS2 세팅만 해주면 외부 플래시, 램을 사용가능 합니다.

 

물론 코드내도 가능하고,  초기 부터도 사용가능 합니다.

 

위의 코드는 초기 Startup 부분으로서 초기에 사용가능 하도록 만들어 주는 코드 입니다. ( EWARM 기준입니다. )

 

각각의 보드마다, 컴파일러 마다 상이하기 때문에, 커스터마이징이 필요함 ( 그건 엔지니어의 역량 )



반응형