我们的逻辑还没有实现除法算法,因此先写一个确定值。
//int clkval = (double)HCLK/plcdparams->time_seq.vclk/2-1+0.5;
int clkval = 5;
这节就完成除法的实现
一、实现除法
韦老师的错误:
因为我的lib1funcs.S和老师不一样:
lcd/s3c2440_lcd_controller.o: In function `s3c2440_lcd_controller_init':
s3c2440_lcd_controller.c:(.text+0xb8): undefined reference to `__aeabi_i2f'
s3c2440_lcd_controller.c:(.text+0xcc): undefined reference to `__aeabi_fdiv'
s3c2440_lcd_controller.c:(.text+0xe0): undefined reference to `__aeabi_fdiv'
s3c2440_lcd_controller.c:(.text+0xf4): undefined reference to `__aeabi_fsub'
s3c2440_lcd_controller.c:(.text+0x100): undefined reference to `__aeabi_f2d'
s3c2440_lcd_controller.c:(.text+0x128): undefined reference to `__aeabi_dadd'
s3c2440_lcd_controller.c:(.text+0x13c): undefined reference to `__aeabi_d2iz'
Makefile:13: recipe for target 'all' failed
make: *** [all] Error 1
对于“undefined reference to” 的解决思路:
https://editor.youkuaiyun.com/md?articleId=105837021
我们在内核中没有找到,所以去库函数<math.h>查找
echo $PATH
/work/tools/gcc-3.4.5-glibc-2.3.6
找.a文件(静态链接库)
二、调色板
struct lcd_controller s3c2440_lcd_controller = {
.name = "s3c2440",
.init = s3c2440_lcd_controller_init,
.enable = s3c2440_lcd_controller_enalbe,
.disable = s3c2440_lcd_controller_disable,
.init_palette = s3c2440_lcd_controller_init_palette,
};
在s3c2440芯片手册上搜索“palette”:
NOTES:1. 0x4D000400 is Palette start address.
Palette Read/Write
When the user performs Read/Write operation on the palette, HSTATUS and VSTATUS of LCDCON5 register must be checked, for Read/Write operation is prohibited during the ACTIVE status of HSTATUS and VSTATUS.
设置调色板之前要先关闭LCD控制器
void s3c2440_lcd_controller_init_palette(void)
{
volatile unsigned int *palette_base = (volatile unsigned int *)0x4D000400;
int i;
int bit = LCDCON1 & (1<<0);
/* LCDCON1'BIT 0 : 设置LCD控制器是否输出信号 */
if (bit)
LCDCON1 &= ~(1<<0);
for (i = 0; i < 256; i++)
{
/* 低16位 : rgb565 */
*palette_base++ = i; //因为没有找到规范的256gg 颜色的数组
}
if (bit)
LCDCON1 |= (1<<0);
}