[原创] 【CH549评测】第3篇 底层驱动软件对比评测-SPI接口LCD驱动

yang_alex   2019-7-31 14:25 楼主

【CH549评测】第3篇 底层驱动软件对比评测-SPI接口LCD驱动 
 
        关于软件开发环境和相关设置,我在之前的帖子“【CH554评测】第2篇 编译,软件开发环境评测https://bbs.eeworld.com.cn/thread-567677-1-1.html”中说的很详细,感兴趣的网友可以看看。

        在这里我想详细的对比一下CH554和CH549的底层驱动软件,以及相关调试。

        因为后续会用到LCD显示,所以这一贴就先说说后续准备用到的SPI接口的LCD的驱动调试。

        沁恒的SPI接口底层驱动程序写的还是不错的,我这次用的的SPI接口的LCD之前已经在其他芯片上驱动过了,已经有比较完善的驱动程序,只需把SPI接口的驱动程序移植一下就好。实际结果也是这样的。只是重新封装了一下SPI接口的写函数就可以了。

       原来的SPI写函数:

static void SPIx_Write(uint16_t Value)
{
    *(__IO uint8_t*)&SPI1 -> DR = (uint8_t)Value;
    while(SPI1 -> SR & SPI_SR_BSY);
}

       CH549上的SPI写函数:

unsigned char SPI_RW(unsigned char byte)
{
    CH549SPIMasterWrite(byte);
    return byte;
}

        原来的SPI片选和指令和数据选择宏定义:

/* Chip Select macro definition */
#define LCD_CS_LOW()       GPIOA -> BSRR = GPIO_BSRR_BR_0
#define LCD_CS_HIGH()      GPIOA -> BSRR = GPIO_BSRR_BS_0

/* Set WRX High to send data */
#define LCD_CD_LOW()      GPIOA -> BSRR = GPIO_BSRR_BR_1
#define LCD_CD_HIGH()     GPIOA -> BSRR = GPIO_BSRR_BS_1

       CH549上的SPI片选和指令和数据选择宏定义:

sbit	LCD_CD     =P1^3;
sbit	LCD_CS     =P1^4; 

       主程序部分,注意做好SPI接口模式和时钟设置:

    // 配置SPI //	
    SPIMasterModeSet(3);     //SPI主机模式设置,模式3
    SPI_CK_SET(2);           //试2分频

       再调用LCD的初始化函数LCD_Init()(这个都不需要修改);

	LCD_Init();

       移植完成。

       整个过程下来,感觉沁恒CH549的SPI底层驱动写得很好,移植起来很方便。只是以前芯片是ARM Cortex-M3内核,现在改为增强51内核,有些小细节需要注意一下。

       首先,CH549虽然是增强51内核,但毕竟还是51内核。直接可用(直接寻址)的RAM只有128字节,不像许多ARM Cortex-M3内核的MCU,最少也有个4K字节 RAM。好在CH549毕竟是增强51内核,RAM也扩展了2K字节片内 xRAM,不过不能直接寻址,要用的话还需做些设置。

0101.JPG        上图提示地址空间溢出。仔细看可以发现 data = 190.5,而xdata = 0。

        在Keil的项目设置中如下图选择使用扩展的2K字节片内 xRAM:

0103.JPG        再编译就可以发现:

0105.JPG         

        此外就是当LCD显示用的字库太大时,也会出现下面错误报警:

0104.JPG          此时,把字库空间定义到程序FLASHRAM中就好了,毕竟有64K不是!

          原来的代码:

const unsigned char asc2_1206[95][12]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
。。。。。。
}; 

加关键字 code 

code const unsigned char asc2_1206[95][12]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
。。。。。。。。。。
};

这样,移植就顺利地完成了。看一下效果吧:  

spi_lcd0.JPG 这里还要注意一下,不同的MCU配合LCD时,提取字模的顺序可能不同。在CH549上配合ILI9341驱动的LCD,顺序如下图:

0106.JPG   

接下来显示一下我做的初步测试界面:

白色底:

spi_lcd2.JPG

黑色底:

spi_lcd.JPG 实际效果感觉黑色更好一些。

感觉整个过程要数字模最花时间了。

 

本帖最后由 yang_alex 于 2019-7-31 14:25 编辑

回复评论 (2)

干货收藏!

点赞  2019-8-26 14:19

感谢分享,学习啦,收藏一下备用

点赞  2019-8-28 09:23
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复