LCD驱动其实对TinyCLR并无必要,特别是在EM-STM3210E开发板上,因为该开发板上的内存太小了,片内64K,片外扩展了128K,加起来也不过172K,而我们知道针对320*240的显示大小,16bit的位图所占的大小就是150K,很显然.Net Micro Framework所提供的图形库如不加修改是很难正常运行的,不过对我们来说在LCD屏幕上显示文字信息也是值得期待的,如果修改一下图形库,在LCD 上画个线、画个圆和显示个位图也绝不成问题。
和我们以前开发的驱动相比,LCD的驱动开发还是比较繁琐一些的,因为LCD的驱动代码分散在三个目录中(题外话,我觉得针对.Net Micro Framework来说,最难的驱动是网卡驱动(特别是wifi驱动)、其次是USB驱动,和它们相比,LCD驱动就是小菜了)。
和其它驱动类似,在具体写LCD驱动之前,我们先在CortexM3.h头文件里,写一个和LCD寄存器相关的结构体,以便以于操作LCD寄存器,这种做法其实也是.Net Micro Framework驱动代码的一种风格。
struct CortexM3_LCD
{
//LCD /CS is CE4 - Bank 4 of NOR/SRAM Bank 1~4
static const UINT32 c_Base = 0x6C000000;
/****/ volatile UINT16 REG;
/****/ volatile UINT16 RAM;
void WriteReg(UINT8 Reg,UINT16 Value)
{
REG = Reg;
RAM = Value;
}
UINT16 ReadReg(UINT8 Reg)
{
REG = Reg;
return RAM;
}
void SetCursor(UINT16 x,UINT16 y)
{
WriteReg(32,x);
WriteReg(33,y);
}
void SetPixel(UINT16 x,UINT16 y,UINT16 c)
{
WriteReg(32,x);
WriteReg(33,y);
WriteReg(34,c);
}
void WriteRAM_Prepare()
{
REG = 34;
}
};