tag 标签: 图形驱动库

相关博文
  • 热度 17
    2013-10-31 00:04
    2421 次阅读|
    0 个评论
    Stellaris 图形库分成了三层,分别是: (1)  显示驱动层  (Display Driver Layer)   (2)  基本图形层  (Graphics Primitives Layer) (3)  控件层  (Widget Layer)   下面我们根据TI  的 demo  来说明 怎么使用 int main(void) {     //     // Set the system clock to run at 50MHz from the PLL     //     ROM_SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |                        SYSCTL_XTAL_16MHZ);     //     // Set the device pinout appropriately for this board.     //     PinoutSet();     //     // Enable Interrupts     //     ROM_IntMasterEnable();     //     // Initialize the display driver.     //     Kitronix320x240x16_SSD2119Init();     //     // Initialize the touch screen driver.     //     TouchScreenInit();     //     // Set the touch screen event handler.     //     TouchScreenCallbackSet(WidgetPointerMessage);     //     // Add the compile-time defined widgets to the widget tree.     //     WidgetAdd(WIDGET_ROOT, (tWidget *)g_sBackground);     //     // Paint the widget tree to make sure they all appear on the display.     //     WidgetPaint(WIDGET_ROOT);     //     // Loop forever, processing widget messages.     //     while(1)     {         //         // Process any messages from or for the widgets.         //         WidgetMessageQueueProcess();     } } 这个是主函数,做了几件事件 1 :初始化时钟 设置为 50M  这个不难理解 2 :端口初始化 这个是根据板子的端口来设置的,如果你跳入到子函数中,你会看见使能端口,和判断有没有 FPAG 是通过 IIC 协议来判断有没有链接判断是否有其它设备的,这个方法很好,在很多地方可以使用。   if(g_eDaughterType == DAUGHTER_FPGA) 也就是这句话,由于没有 FPAG 所以程序是进不进去的。 3 :使能总中断,这个也不难理解。 4 :   //     // Initialize the display driver.     // Kitronix320x240x16_SSD2119Init(); 初始化液晶。这个地方很重要, 这个地方做的就是底层驱动,如果想要移植的话,只需要懂这个地方的驱动,就可以了。 这里面我们需要关注下这个结构体 const tDisplay g_sKitronix320x240x16_SSD2119 = {     sizeof(tDisplay),     0, #if defined(PORTRAIT) || defined(PORTRAIT_FLIP)     240,     320, #else     320,     240, #endif     Kitronix320x240x16_SSD2119PixelDraw,     Kitronix320x240x16_SSD2119PixelDrawMultiple,     Kitronix320x240x16_SSD2119LineDrawH,     Kitronix320x240x16_SSD2119LineDrawV,     Kitronix320x240x16_SSD2119RectFill,     Kitronix320x240x16_SSD2119ColorTranslate,     Kitronix320x240x16_SSD2119Flush }; 这个就是最为重要的底层驱动,画线,矩形,填充颜色,颜色转换,等等之内的,这个地方最为重要,如果想要移植TI 的图形驱动库,只需要该写这几个函数,就可以了。 4 :触控的初始化,这里面需要用 ADC 的转换,所以在 void TouchScreenInit(void) 初始话了一些参数,如果有什么不理解的可以好好看看这个函数。 5 : TouchScreenCallbackSet(WidgetPointerMessage); 这个地方我理解为回调函数,也就是你在触摸之后 需要指向哪里,这个地方可以先默认不动。 6 : WidgetAdd(WIDGET_ROOT, (tWidget *)g_sBackground); 这个地方为把 g_sBackground 加入控件树。 7 : WidgetPaint(WIDGET_ROOT); 这个地方意思为画控件树。 8 :最后就是 while  循环  WidgetMessageQueueProcess(); 处理队列。 大体说了下这些函数的意思。 也能有很多同学不明白为什么这么,这个没有关系。 底下解释下控件树: 通常来说,一个界面中会有很多控件对象。为了方便管理, StellarisWare 图形库将众多控件以树状的形式管理,这样做有很多好处:每个控件 ( 树 ) 都可以动态加入戒者秱出被渲染的控件列表树,以决定屏幕要显示的内容;同时当需要部分更新屏幕内容时,可以只从某个节点开始渲染,这样就只绘制其及子节点以节约资源。 图形库中有一个虚拟的 WIDGET_ROOT 控件,总是作为最顶层的控件,其它控件都作为它的子节点戒者更下层的子节点。丌同控件在树状列表中的地位没有区别。 为了描述一个树状结构,每个控件都有三个属性,分别是: 父控件  (Parent)  下一个控件  (Next)  子控件  (Child) 这些属性各自指向了自己周围的节点。下图就是一个典型的控件树:     到这边应该能够理解控件树了,但是有控件树不能解决问题,那他是怎么画控件的呢? 这里应该用到Canvas 所以在程序的最开始的时候,做了一件这样的事件 1 : Canvas(g_sHeading, g_sBackground, 0, g_sPushBtn,        g_sKitronix320x240x16_SSD2119, 0, 0, 320, 23,        (CANVAS_STYLE_FILL | CANVAS_STYLE_OUTLINE | CANVAS_STYLE_TEXT),        ClrDarkBlue, ClrWhite, ClrWhite, g_sFontCm20, "hello-widget", 0, 0); 画head 名字叫 hello-widget 大小 风格 字体 位置 等等。 2 : Canvas(g_sBackground, WIDGET_ROOT, 0, g_sHeading,        g_sKitronix320x240x16_SSD2119, 0, 23, 320, (240 - 23),        CANVAS_STYLE_FILL, ClrBlack, 0, 0, 0, 0, 0, 0);    显示的背景 3 : RectangularButton(g_sPushBtn, g_sHeading, 0, 0,                   g_sKitronix320x240x16_SSD2119, 60, 60, 200, 40,                   (PB_STYLE_OUTLINE | PB_STYLE_TEXT_OPAQUE | PB_STYLE_TEXT |                    PB_STYLE_FILL | PB_STYLE_RELEASE_NOTIFY),                    ClrDarkBlue, ClrBlue, ClrWhite, ClrWhite,                    g_sFontCmss22b, "Show Welcome", 0, 0, 0, 0, OnButtonPress); 画矩形框,大小颜色字体风格以及触控反应。 也就是OnButtonPress  这个函数;这函数 我就不去解释了,大体看下就明白了,按下显示  hide welcome  再按下 就显示 show welcome  很简单,关于为什么能显示,这个就涉及到很多底层的东西,就是通过 ADC 来判断的。 Canvas(g_sHello, g_sPushBtn, 0, 0,        g_sKitronix320x240x16_SSD2119, 0, 150, 320, 40,        (CANVAS_STYLE_FILL | CANVAS_STYLE_TEXT),        ClrBlack, 0, ClrWhite, g_sFontCm40, "Hello World!", 0, 0); 显示HELLO WOTLD  大小,字体,颜色等等。 当我们有了这么控件之后,把这些控件添加到控件树上,就能显示了图形了。 TI 的这个例子很好的解释了TI的图形驱动库是怎么用的,觉得还是很好的,很方便移植,如果有什么地方写的不对的,还请大家指正,谢谢。 参考:TI图形驱动库,TI USER GUIDE