上一篇搞定了下載算法,下面就測(cè)試一下下載算法是否有效。
打開之前的例子工程。先添加一個(gè)圖片bin數(shù)據(jù)到程序。這是個(gè)圖片數(shù)據(jù),等下就測(cè)試將這個(gè)數(shù)據(jù)下載到spiflash中,然后程序讀flash數(shù)據(jù),將圖片顯示到llcd屏上。
然后修改鏈接文件,添加flash映射的地址,這個(gè)地址在上篇下載算法里面設(shè)置的,地址在0X30000000位置,16MByte空間。實(shí)際存儲(chǔ)到flash的地址要減去這個(gè)0X30000000偏移量,因?yàn)閒lash存儲(chǔ)地址從0開始的。
然后添加測(cè)試代碼并編譯下程序。
可以看到map文件定位數(shù)據(jù)正好在0x30000000地址開始處了。
下一步設(shè)置添加下載算法了。
下載效果,可以看到左下角在下載數(shù)據(jù)了。
運(yùn)行程序。顯示圖片了,240*240.
uint8_t bmpBuffer[240*4];
extern const unsigned char gImage_1[];
extern const uint16_t c_bmp_clock_RGB565[];
/*!
* @brief Main function
*/
int main(void)
{
uint32_t addr;
BOARD_InitBootClocks();
SysTick_Config(SystemCoreClock / 1000U);
init_cycle_counter(true);
BOARD_InitBootPins();
drv_gpio_init();
BOARD_InitDebugConsole();
drv_spi_gpio_init();
drv_i2c_gpio_init();
DbgConsole_Printf("LPC845 Mooncake Board Test!rn");
spilcd_init();
WS2812_Init();
W25QXX_Init();
__cycleof__("lcd_fresh_time(n/30000=X ms):")
{
spilcd_fill(0,0,240,240,LCD_RED);
}
delay_ms(100);
__cycleof__("lcd_fresh_time(n/30000=X ms):")
{
spilcd_fill(0,0,240,240,LCD_GREEN);
}
delay_ms(100);
__cycleof__("lcd_fresh_time(n/30000=X ms):")
{
spilcd_fill(0,0,240,240,LCD_BLUE);
}
delay_ms(100);
DbgConsole_Printf("0x%0X rn",c_bmp_clock_RGB565);
addr=c_bmp_clock_RGB565;
__cycleof__("show 240*240 picture time:")
{
for (int i = 0; i < 120; i++)//(c_bmp_clock_RGB565-0x30000000)
{
W25QXX_Read((addr & 0x0FFFFFFF )+ i*240*4 ,bmpBuffer,240*4);
spilcd_draw_bitmap(0,i*2,240,2,bmpBuffer);
}
}
delay_ms(100);
// DbgConsole_Printf("%0X rn",gImage_1);
// addr=gImage_1;
// __cycleof__("show 40*40 picture time:")
// {
// for (int i = 0; i < 4; i++)
// {
// W25QXX_Read((addr & 0x0FFFFFFF ) + i*800 ,bmpBuffer,800);
// spilcd_draw_bitmap(100,100+i*10,40,10,bmpBuffer);
// }
// }
// delay_ms(100);
// for (int i = 0; i < BUFFER_SIZE; i++)
// {
// txBuffer[i] = i % 256;
// rxBuffer[i] = 0U;
// }
// DbgConsole_Printf("W25QXX Erase Chip.rn");
// W25QXX_EraseChip();
// DbgConsole_Printf("W25QXX Read Data.rn");
// W25QXX_Read(0,rxBuffer,64);
// for (int i = 0; i < BUFFER_SIZE; i++)
// {
// DbgConsole_Printf("%02X ",rxBuffer[i]);
// }
// DbgConsole_Printf("W25QXX Write Data.rn");
// W25QXX_Write_NoCheck(0,txBuffer,BUFFER_SIZE);
// DbgConsole_Printf("W25QXX Read Data to Check.rn");
// for (int j = 0; j < BUFFER_SIZE; j++)
// {
// W25QXX_Read(0 + j*BUFFER_SIZE,rxBuffer,64);
// for (int i = 0; i < BUFFER_SIZE; i++)
// {
// DbgConsole_Printf("%02X ",rxBuffer[i]);
// }
// DbgConsole_Printf("n");
// }
rgb_light = 0;
while(1)
{
keyscan_fsm(&pt_key_scan);
// ws2812rgb_clock_fsm(&pt_ws2812_rgb); //效果1
ws2812rgb_demo_fsm(&pt_ws2812_rgb); //效果2
GPIO_PortToggle(GPIO, 0, 1u << 0); //led燈
}
}
好了,測(cè)試OK。后面再也不用 擔(dān)心圖片字體把LPC845的64Kflash撐爆了。spiflash雖然不能做運(yùn)行代碼區(qū),但是儲(chǔ)存各種資源數(shù)據(jù)還是足夠了。
LPC845-MoonCake_test.rar (16.1 MB)