加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

【LPC845月饼板】+测试SPIFLASH的keil下载算法(二)

05/20 20:12
1629
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
电路板图(3)
相关方案
  • 方案介绍
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

上一篇搞定了下载算法,下面就测试一下下载算法是否有效。

打开之前的例子工程。先添加一个图片bin数据到程序。这是个图片数据,等下就测试将这个数据下载到spiflash中,然后程序读flash数据,将图片显示到llcd屏上。

然后修改链接文件,添加flash映射的地址,这个地址在上篇下载算法里面设置的,地址在0X30000000位置,16MByte空间。实际存储到flash的地址要减去这个0X30000000偏移量,因为flash存储地址从0开始的。

然后添加测试代码并编译下程序。

可以看到map文件定位数据正好在0x30000000地址开始处了。

下一步设置添加下载算法了。

下载效果,可以看到左下角在下载数据了。

运行程序。显示图片了,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灯
        }
}

好了,测试OK。后面再也不用 担心图片字体把LPC845的64Kflash撑爆了。spiflash虽然不能做运行代码区,但是储存各种资源数据还是足够了。

LPC845-MoonCake_test.rar (16.1 MB)

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
KSZ8851SNLI 1 Microchip Technology Inc DATACOM, ETHERNET TRANSCEIVER, PQCC32
$5.06 查看
AFBR-5905AZ 1 Agilent Technologies Inc Transceiver, Through Hole Mount,
$639.2 查看
SN74LVC125APWR 1 Texas Instruments 4-ch, 1.65-V to 3.6-V buffers with 3-state outputs 14-TSSOP -40 to 125

ECAD模型

下载ECAD模型
$0.51 查看

相关推荐

电子产业图谱