Есть проект с LCD, SDRAM. Ранее вся графика для экрана находилась во внутреннем флеше. Все работало замечательно. Сейчас перенес графику во внешний флеш и сразу начались глюки в виде какого-то мерцания экрана. Если я выключаю отрисовку и просто вхожу в бесконечный цикл мерцание прекращается.
Т.е. вроде очевидно что FIFO экрана время от времени не успевает получать данные. Ок. В даташите нашел регистр MATRIXARB, в котором написано, что чтобы отдать приоритет дисплею надо туда записать 0x00000c09. Записал, в этом случае все довольно быстро виснет.
Дефолтное значение регистра по даташиту - 0x0000000D
Попробовал записать его - все равно виснет
Посмотрел, что там было до моей записи - 0x00010004
Это странно, т.к. до сегодняшнего дня регистр matrixarb не был определен в LPC177x_8x.h там было RESERVED на его месте.
Вторая странность, что вот этот 16ый бит по даташиту должен быть всегда нулем:
Код
Table 27. Matrix Arbitration register (MATRIXARB- 0x400F C188) bit description
11:10 PRI_LCD LCD DMA priority. 0
13:12 PRI_USB USB DMA priority. 0
15:14 - Reserved. Read value is undefined, only zero should be written. NA
16 ROM_LAT ROM latency select. Should always be 0. 0
31:17 - Reserved. Read value is undefined, only zero should be written. NA
11:10 PRI_LCD LCD DMA priority. 0
13:12 PRI_USB USB DMA priority. 0
15:14 - Reserved. Read value is undefined, only zero should be written. NA
16 ROM_LAT ROM latency select. Should always be 0. 0
31:17 - Reserved. Read value is undefined, only zero should be written. NA
Возникает подозрение, может я не туда пишу?
Код
xprintf("& LPC_SC->MATRIXARB %x\n", &(LPC_SC->MATRIXARB) );
xprintf(" LPC_SC->MATRIXARB %x\n", LPC_SC->MATRIXARB );
xprintf(" LPC_SC->MATRIXARB %x\n", LPC_SC->MATRIXARB );
и на выходе:
Код
& LPC_SC->MATRIXARB 400fc188
LPC_SC->MATRIXARB 10004
LPC_SC->MATRIXARB 10004
У кого-то есть идеи, что происходит?
Поставил breakpoint на ResetISR, значение этого регистра такое же, 0х10004
Записал туда 0x10C09, никакого эффекта