钻石会员
主题
帖子
积分10261
阅读权限50
注册时间2012-5-17
最后登录1970-1-1
在线时间 小时
|
这几天无聊翻出以前的无控制器单色320240,用STM32驱动着玩玩!之前的帖子https://www.yleee.com.cn/thread-17775-1-1.html
最近买了个逻辑分析仪,并优化了刷屏的代码!因为这种屏是无控制器的四位数据接口!所以使用GPIO模拟时序驱动!发现在使用同样的程序在使用库开发和寄存器开发效率相差近3倍
while(1)
{
GPIOA->BSRR=0X00000100; //帧起始信号=1
GPIOA->BSRR=0X00000004; //行锁存=1
GPIOA->BSRR=0X00040000; //行锁存=0
GPIOA->BSRR=0X01000000; //帧起始信号=0
if(GPIOA->ODR&0x0008) GPIOA->BSRR=0X00080000; //驱动波形的极性转换=0
else GPIOA->BSRR=0X00000008;//驱动波形的极性转换=1
for(ua2=0;ua2<240;ua2++)
{
uc1=ua2*40;
for(ua1=0;ua1<40;ua1++)
{
GPIOA->BSRR=0X00000800; //移位时钟==1
GPIOC->ODR=display[uc1+ua1]; //八位显示数据四位并行输出的低四位
GPIOA->BSRR=0X08000000; //移位时钟==0
GPIOA->BSRR=0X00000800; //移位时钟==1
GPIOC->ODR=display[uc1+ua1]>>4; //八位显示数据四位并行输出的高四位
GPIOA->BSRR=0X08000000; //移位时钟==0
}
GPIOA->BSRR=0X00000004; //行锁存=1
GPIOA->BSRR=0X00040000; //行锁存=0
}
}
编译后 Program Size: Code=944 RO-data=336 RW-data=9608 ZI-data=1024
上面这个是使用操作寄存器写代码!CPU 72M全速 刷屏速度:165.44764帧/秒
while(1)
{
GPIO_SetBits(LCD_DATA_A,LCD_FLM); //帧起始信号=1
GPIO_SetBits(LCD_DATA_A,LCD_LOCLK); //行锁存=1
GPIO_ResetBits(LCD_DATA_A,LCD_LOCLK); //行锁存=0
GPIO_ResetBits(LCD_DATA_A,LCD_FLM); //帧起始信号=0
if(GPIO_ReadOutputDataBit(LCD_DATA_A,LCD_M)) GPIO_ResetBits(LCD_DATA_A,LCD_M); //驱动波形的极性转换=0
else GPIO_SetBits(LCD_DATA_A,LCD_M);//驱动波形的极性转换=1
for(ua2=0;ua2<240;ua2++)
{
uc1=ua2*40;
for(ua1=0;ua1<40;ua1++)
{
GPIO_SetBits(LCD_DATA_A,LCD_SHCLK); //移位时钟==1
GPIO_Write(LCD_DATA_C,display[uc1+ua1]); //八位显示数据四位并行输出的低四位
GPIO_ResetBits(LCD_DATA_A,LCD_SHCLK); //移位时钟==0
GPIO_SetBits(LCD_DATA_A,LCD_SHCLK); //移位时钟==1
GPIO_Write(LCD_DATA_C,display[uc1+ua1]>>4); //八位显示数据四位并行输出的高四位
GPIO_ResetBits(LCD_DATA_A,LCD_SHCLK); //移位时钟==0
}
GPIO_SetBits(LCD_DATA_A,LCD_LOCLK); //行锁存=1
GPIO_ResetBits(LCD_DATA_A,LCD_LOCLK); //行锁存=0
}
}
编译后:Program Size: Code=884 RO-data=336 RW-data=9608 ZI-data=1024
以上这个是使用的库操作 CPU 72M全速 刷屏速度:59.754856帧/秒
一模一样的程序!只是数据的操作一个使用库一个直接操作寄存器!结果差了近3倍!结果太令人失望了!真不明白库操作除了方便使用简单还有啥好处!特别是一些高速应用的场合极其不适用太慢了在要不然考虑DMA,后面考虑使用DMA刷屏,空出时间做别的
有兴趣的可以看看源程序
320240.txt
(52.38 KB, 下载次数: 4, 售价: 1 人民币)
|
|