社区导航

 

搜索
查看: 532|回复: 0
打印 上一主题 下一主题

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

[复制链接]

1117

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

跳转到指定楼层
楼主
发表于 2019-7-31 14:25 | 只看该作者 |只看大图 |倒序浏览 |阅读模式
本帖最后由 yang_alex 于 2019-7-31 14:25 编辑

【CH549评测】第3篇 底层驱动软件对比评测-SPI接口LCD驱动 
 
        关于软件开发环境和相关设置,我在之前的帖子“【CH554评测】第2篇 编译,软件开发环境评测http://bbs.1900222.com/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,不过不能直接寻址,要用的话还需做些设置。

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

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

       再编译就可以发现:

        

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

         此时,把字库空间定义到程序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*/
。。。。。。。。。。
};

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

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

  

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

白色底:

黑色底:

极速赛车手机官网 实际效果感觉黑色更好一些。

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

 

来源:EEWorld 单片机板块,转载请附上链接

评分

1

查看全部评分



您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /2 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( )

GMT+8, 2019-8-24 08:16 , Processed in 0.117888 second(s), 18 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表
极速赛车手机版下载 极速赛车APP下载 极速赛车APP 极速赛车双面盘 极速赛车手机版下载 极速赛车双面盘 极速赛车手机官网 极速赛车APP 极速赛车APP 极速赛车APP