Emcraft Linux and Emwin on custom board

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Emcraft Linux and Emwin on custom board

926 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by Ildar on Fri Jul 13 07:41:15 MST 2012
We have custom board based on LPC1788. We have ported linux on it. And we trying use NXP_emWin516_libraries from this site. But emwin crahed in GUI_Init() function!
There is dump of registers:


SIGNAL: 11 (SIGSEGV)

BACKTRACE:
error_code: 0x0  fault_address: 0x0  pc: 0xa180a640  cpsr: 0x21000000  lr: 0xa180b311  sp: 0xa1a39de0
ip: 0xfffffb00  fp: 0x0  trap_no: 0x0  oldmask: 0x0  r0: 0xf0  r1: 0x4ab00  r2: 0x0
r3: 0x4ab00  r4: 0x130  r5: 0x0  r6: 0x0  r7: 0xf0  r8: 0x140  r9: 0x140  r10: 0xa182c2ed

The error occurs in function _FillRect and call from LCD_FillRect. Program try write to address 0! Why? In LCD_X_DisplayDriver in LCDConf.c I write:

case LCD_X_SETVRAMADDR: {
//
// Required for setting the address of the video RAM for drivers
// with memory mapped video RAM which is passed in the 'pVRAM' element of p
//

LCD_X_SETVRAMADDR_INFO * p;
p = (LCD_X_SETVRAMADDR_INFO *)pData;


int fd;
unsigned int* fbp;
long int screensize = 320 * 240 * 2;
/*
* Open the framebuffer device file
*/
fd = open("/dev/fb0", O_RDWR);
if (fd == -1) {
perror("Error: cannot open framebuffer device");
exit(1);
}

/*
* Map the device to memory
*/
fbp = (unsigned int *)mmap(
0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if ((int)fbp == -1) {
perror("Error: failed to map framebuffer device to memory");
exit(5);
}

//p->pVRAM = malloc((1024 * 1024) * 2);
p->pVRAM = fbp;

printf("\np = 0x%x  pData = 0x%x   p->pVRAM = 0x%x\n", p, pData, p->pVRAM);
//...
return 0;
}

So virtual address is not null! What am I doing wrong?


0000a484 <_FillRect>:
    a484:e92d 43f7 stmdbsp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr}
    a488:6884      ldrr4, [r0, #8]
    a48a:460d      movr5, r1
    a48c:6b27      ldrr7, [r4, #48]; 0x30
    a48e:4616      movr6, r2
    a490:f8dd 8028 ldr.wr8, [sp, #40]; 0x28
    a494:b147      cbzr7, a4a8 <_FillRect+0x24>
    a496:4c44      ldrr4, [pc, #272]; (a5a8 <_FillRect+0x124>)
    a498:f8cd 8000 str.wr8, [sp]
    a49c:6824      ldrr4, [r4, #0]
    a49e:6824      ldrr4, [r4, #0]
    a4a0:9401      strr4, [sp, #4]
    a4a2:6980      ldrr0, [r0, #24]
    a4a4:47b8      blxr7
    a4a6:e07d      b.na5a4 <_FillRect+0x120>
    a4a8:f1c1 0901 rsbr9, r1, #1
    a4ac:4499      addr9, r3
    a4ae:4b3f      ldrr3, [pc, #252]; (a5ac <_FillRect+0x128>)
    a4b0:f1c2 0701 rsbr7, r2, #1
    a4b4:7c1b      ldrbr3, [r3, #16]
    a4b6:4447      addr7, r8
    a4b8:f013 0f01 tst.wr3, #1
    a4bc:f8d4 801c ldr.wr8, [r4, #28]
    a4c0:d020      beq.na504 <_FillRect+0x80>
    a4c2:6903      ldrr3, [r0, #16]
    a4c4:689b      ldrr3, [r3, #8]
    a4c6:4798      blxr3
    a4c8:69e3      ldrr3, [r4, #28]
    a4ca:fb03 5506 mlar5, r3, r6, r5
    a4ce:f1b9 0f00 cmp.wr9, #0
    a4d2:d067      beq.na5a4 <_FillRect+0x120>
    a4d4:1e7e      subsr6, r7, #1
    a4d6:ea4f 0c88 mov.wip, r8, lsl #2
    a4da:fb08 5806 mlar8, r8, r6, r5
    a4de:f1cc 0c00 rsbip, ip, #0
    a4e2:ea4f 0888 mov.wr8, r8, lsl #2
    a4e6:e00a      b.na4fe <_FillRect+0x7a>
    a4e8:3f01      subsr7, #1
    a4ea:4643      movr3, r8
    a4ec:464a      movr2, r9
    a4ee:6821      ldrr1, [r4, #0]
    a4f0:585d      ldrr5, [r3, r1]
    a4f2:4045      eorsr5, r0
    a4f4:505d      strr5, [r3, r1]
    a4f6:3304      addsr3, #4
    a4f8:3a01      subsr2, #1
    a4fa:d1f8      bne.na4ee <_FillRect+0x6a>
    a4fc:44e0      addr8, ip
    a4fe:2f00      cmpr7, #0
    a500:d1f2      bne.na4e8 <_FillRect+0x64>
    a502:e04f      b.na5a4 <_FillRect+0x120>
    a504:fb08 1502 mlar5, r8, r2, r1
    a508:6823      ldrr3, [r4, #0]
    a50a:f1b9 0f0f cmp.wr9, #15
    a50e:eb03 0585 add.wr5, r3, r5, lsl #2
    a512:4b25      ldrr3, [pc, #148]; (a5a8 <_FillRect+0x124>)
    a514:681b      ldrr3, [r3, #0]
    a516:681a      ldrr2, [r3, #0]
    a518:d92d      bls.na576 <_FillRect+0xf2>
    a51a:f107 4380 add.wr3, r7, #1073741824; 0x40000000
    a51e:ea4f 0188 mov.wr1, r8, lsl #2
    a522:3b01      subsr3, #1
    a524:f1c1 0c00 rsbip, r1, #0
    a528:4638      movr0, r7
    a52a:fb01 5103 mlar1, r1, r3, r5
    a52e:2500      movsr5, #0
    a530:e01d      b.na56e <_FillRect+0xea>
    a532:464c      movr4, r9
    a534:460b      movr3, r1
    a536:3c10      subsr4, #16

****************************************************************
    THIS ADDRESS (a538) is PC (0xa180a640) We try write to 0 and crash (SEGMENTATION FAULT)!
    a538:601a      strr2, [r3, #0]
****************************************************************

    a53a:605a      strr2, [r3, #4]
    a53c:609a      strr2, [r3, #8]
    a53e:60da      strr2, [r3, #12]
    a540:611a      strr2, [r3, #16]
    a542:615a      strr2, [r3, #20]
    a544:619a      strr2, [r3, #24]
    a546:61da      strr2, [r3, #28]
    a548:621a      strr2, [r3, #32]
    a54a:625a      strr2, [r3, #36]; 0x24
    a54c:629a      strr2, [r3, #40]; 0x28
    a54e:62da      strr2, [r3, #44]; 0x2c
    a550:631a      strr2, [r3, #48]; 0x30
    a552:635a      strr2, [r3, #52]; 0x34
    a554:639a      strr2, [r3, #56]; 0x38
    a556:63da      strr2, [r3, #60]; 0x3c
    a558:3340      addsr3, #64; 0x40
    a55a:2c0f      cmpr4, #15
    a55c:d8eb      bhi.na536 <_FillRect+0xb2>
    a55e:f1a9 0510 sub.wr5, r9, #16
    a562:092d      lsrsr5, r5, #4
    a564:3501      addsr5, #1
    a566:01ad      lslsr5, r5, #6
    a568:194d      addsr5, r1, r5
    a56a:3801      subsr0, #1
    a56c:4461      addr1, ip
    a56e:2800      cmpr0, #0
    a570:d1df      bne.na532 <_FillRect+0xae>
    a572:f009 090f and.wr9, r9, #15
    a576:f1b9 0f00 cmp.wr9, #0
    a57a:d013      beq.na5a4 <_FillRect+0x120>
    a57c:f107 4380 add.wr3, r7, #1073741824; 0x40000000
    a580:ea4f 0888 mov.wr8, r8, lsl #2
    a584:3b01      subsr3, #1
    a586:f1c8 0000 rsbr0, r8, #0
    a58a:fb08 5503 mlar5, r8, r3, r5
    a58e:e007      b.na5a0 <_FillRect+0x11c>
    a590:4629      movr1, r5
    a592:464b      movr3, r9
    a594:3b01      subsr3, #1
    a596:f841 2b04 str.wr2, [r1], #4
    a59a:d1fb      bne.na594 <_FillRect+0x110>
    a59c:3f01      subsr7, #1
    a59e:182d      addsr5, r5, r0
    a5a0:2f00      cmpr7, #0
    a5a2:d1f5      bne.na590 <_FillRect+0x10c>
    a5a4:e8bd 83fe ldmia.wsp!, {r1, r2, r3, r4, r5, r6, r7, r8, r9, pc}
    a5a8:000345ac .word0x000345ac
    a5ac:00238490 .word0x00238490




0000b1c0 <LCD_FillRect>:
    b1c0:b573      push{r0, r1, r4, r5, r6, lr}
    b1c2:4e12      ldrr6, [pc, #72]; (b20c <LCD_FillRect+0x4c>)
    b1c4:460c      movr4, r1
    b1c6:f9b6 500c ldrsh.wr5, [r6, #12]
    b1ca:f9b6 1008 ldrsh.wr1, [r6, #8]
    b1ce:42aa      cmpr2, r5
    b1d0:bfb8      itlt
    b1d2:4615      movltr5, r2
    b1d4:4288      cmpr0, r1
    b1d6:bfa8      itge
    b1d8:4601      movger1, r0
    b1da:428d      cmpr5, r1
    b1dc:db14      blt.nb208 <LCD_FillRect+0x48>
    b1de:f9b6 200a ldrsh.wr2, [r6, #10]
    b1e2:f9b6 000e ldrsh.wr0, [r6, #14]
    b1e6:4294      cmpr4, r2
    b1e8:bfa8      itge
    b1ea:4622      movger2, r4
    b1ec:4283      cmpr3, r0
    b1ee:bfa8      itge
    b1f0:4603      movger3, r0
    b1f2:4293      cmpr3, r2
    b1f4:db08      blt.nb208 <LCD_FillRect+0x48>
    b1f6:7c70      ldrbr0, [r6, #17]
    b1f8:eb06 0680 add.wr6, r6, r0, lsl #2
    b1fc:6cf0      ldrr0, [r6, #76]; 0x4c
    b1fe:68c4      ldrr4, [r0, #12]
    b200:9300      strr3, [sp, #0]
    b202:6924      ldrr4, [r4, #16]
    b204:462b      movr3, r5
    b206:47a0      blxr4


********************************************************************
    THIS ADDRESS (b208) is LR (0xa180b311)
    b208:bd7c      pop{r2, r3, r4, r5, r6, pc}
********************************************************************

    b20a:bf00      nop
    b20c:00238490 .word0x00238490
Labels (1)
0 Kudos
2 Replies

756 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by shreyz on Thu Sep 20 06:06:52 MST 2012
you can also try emGTX on LPC1788 combination of uClinux + .netmf + sqlLite + GUI

here is the video channel demonstrating GUI

https://www.youtube.com/user/eclipzeli?feature=mhee
0 Kudos

756 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by Ildar on Mon Jul 16 22:32:14 MST 2012
Solved. Set vram address in LCD_X_Config() (LCD_SetVRAMAddrEx(0, (void *)VRAM_ADDR);), not in LCD_X_DisplayDriver().
0 Kudos