0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文詳解TI的grlib圖形庫移植到Atmel SAM4套件

電子工程師 ? 作者:工程師陳翠 ? 2018-06-18 12:59 ? 次閱讀

圖形庫其實(shí)都是都是由底層的畫點(diǎn),畫線等這些基本函數(shù)組成。大家以前上數(shù)學(xué)都有學(xué)過點(diǎn)成線,線成面這些的,而圖形庫也是基于此的。

TI的圖形庫分3層,如下圖:

一文詳解TI的grlib圖形庫移植到Atmel SAM4套件

我們只需要修改顯示驅(qū)動層即可。上面兩層都是在調(diào)用最低層的驅(qū)動層。

顯示驅(qū)動層函數(shù)要我們重寫,不是很多,就只有幾個(gè)函數(shù)而已:

如下截圖:

一文詳解TI的grlib圖形庫移植到Atmel SAM4套件

分別是:

畫點(diǎn)函數(shù):void PixelDraw(void *pvDisplayData, long x, long y, unsigned longcolor);

畫多點(diǎn)的函數(shù):void PixelDrawMultiple(void *pvDisplayData,

longx,

longy,

longx0,

longlCount,

longBPP,

constunsigned char *pucData,

constunsigned char *pucPalette

{

畫橫線的函數(shù):void LineDrawH (void *pvDisplayData,long x1,long x2, long y,unsigned long color);

畫豎線的函數(shù):void LineDrawH (void *pvDisplayData,long x1,long x2, long y,unsigned long color);

矩形填充函數(shù):void RectFill (void *pvDisplayData, const tRectangle *pRect,unsigned long ulValue);

以下是我重寫的源代碼,我用的屏幕是2.4寸的TFT屏,主控是ILI9341,SPI通信的。

畫點(diǎn)函數(shù):

void PixelDraw(void *pvDisplayData, long x,long y, unsigned long color)

{

TFT_setXY(x,y);

TFT_sendData16(color);

}

畫線橫線的函數(shù):

void LineDrawH (void *pvDisplayData,longx1,long x2, long y, unsigned long color)

{

int32_ti = 0;

int32_tlength = x2 - x1;

TFT_setCol(x1,x2);

TFT_setPage(y,y);

TFT_sendCMD(0x2c);

TFT_DC_HIGH;

//TFT_CS_LOW;

for(; i 《 length; i++)

{

SPI_transfer8(color》》 8);

SPI_transfer8(color& 0xff);

}

//TFT_CS_HIGH;

}

畫豎線的函數(shù):

void LineDrawV (void *pvDisplayData,longx,long y1, long y2, unsigned long color)

{

int32_t i = 0;

int32_tlength = y2 - y1;

TFT_setCol(x,x);

TFT_setPage(y1,y2);

TFT_sendCMD(0x2c);

TFT_DC_HIGH;

//TFT_CS_LOW;

for(; i 《 length; i++)

{

SPI_transfer8(color》》 8);

SPI_transfer8(color& 0xff);

}

//TFT_CS_HIGH;

}

填充矩形的函數(shù):

void RectFill (void *pvDisplayData, consttRectangle *pRect, unsigned long ulValue)

{

uint32_tuY;

for(uY = pRect-》sYMin; uY 《= pRect-》sYMax; uY++)

{

LineDrawH(0,pRect-》sXMin, pRect-》sXMax, uY, ulValue);

}

}

最后的函數(shù)有些長的畫多點(diǎn)的函數(shù):

void PixelDrawMultiple(void *pvDisplayData,

longx,

longy,

longx0,

longlCount,

longBPP,

constunsigned char *pucData,

constunsigned char *pucPalette)

{

uint32_tulPixel = 0;

uint32_tulColor = 0;

TFT_setCol(x,DISPLAY_WIDTH);

TFT_setPage(y,DISPLAY_HEIGHT);

TFT_sendCMD(0x2c);

if(BPP == 1)

{

//1 bit per pixel in pucData

//lX0 is the index of the bit processed within a byte

//pucPalette holds the pre-translated 32bit display color

while(lCount)

{

ulPixel= *pucData++;

while(lCount && x0 《 8) // whilethere are pixels in this byte

{

ulColor= ((uint32_t *) pucPalette)[ulPixel & 1];// retrieve already translatedcolor

TFT_sendData16(ulColor);

lCount--; // processed another pixel

x0++; // done with this bit

ulPixel》》= 1; // prepare next bit

}

x0= 0; // process next byte, reset bitcounter

}

}

elseif (BPP == 4)

{

//4 bits per pixel in pucData

//lX0 holds 0/1 to indicate 4-bit nibble within byte

//pucPalette holds untranslated 24 bit color

while(lCount)

{

if(x0 == 0) // read first nibble

{

ulPixel= *pucData 》》 4;

x0= 1; // set index to second nibble

}

else

{ // readsecond nibble

ulPixel= *pucData & 0x0f;

pucData++;//increase byte pointer as we‘re done reading this byte

x0= 0; // set index to first nibble

}

ulColor= *(uint32_t *) (pucPalette + (ulPixel * 3)) & 0x00ffffff;// retrieve 24bit color

TFT_sendData16(COLOR24TO16BIT(ulColor));//translate and write to display

lCount--; // processed another pixel

}

}

elseif (BPP == 8)

{

//8 bits per pixel in pucData

//pucPalette holds untranslated 24 bit color

while(lCount)

{

ulPixel= *pucData++; // read pixel

ulColor= *(uint32_t *) (pucPalette + (ulPixel * 3)) & 0x00ffffff;// retrieve 24bit color

TFT_sendData16(COLOR24TO16BIT(ulColor));//translate and write to display

lCount--; // processed another pixel

}

}

elseif (BPP == 16)

{

//16 bits per pixel

//Pixel is in 16bit color, 5R 6G 5B format

//No color translation needed for this display

while(lCount)

{

ulPixel= *((uint16_t *) pucData);

TFT_sendData16(ulPixel);

pucData+= 2;

lCount--;

}

}

}

如果你的屏幕是控制芯片是其他的,可以拿廠家提供的底層驅(qū)動文件整合到TI的圖形庫的底層驅(qū)動中。

這次使用了TI圖形庫的庫文件grlib.a,我加上grlib.h的頭文件即可。工程結(jié)構(gòu)如下圖:

一文詳解TI的grlib圖形庫移植到Atmel SAM4套件

ti的圖像庫可以支持多種文件格式的輸出到屏幕顯示,還有畫圖像的函數(shù)。我也是參考壇友的帖子進(jìn)行操作的。TI的圖形庫有個(gè)工具可以把圖像轉(zhuǎn)換成c的代碼。只不過只支持pnm后綴的圖片格式。我們可以用圖像編輯軟件轉(zhuǎn)換格式。我使用了GIMP的軟件進(jìn)行轉(zhuǎn)換。

具體在目錄是StellarisWare oolsin;

首先我們打開GMIP軟件,然后可以直接把圖片拖到編輯區(qū),然后設(shè)置導(dǎo)出的參數(shù),步奏如下:

一文詳解TI的grlib圖形庫移植到Atmel SAM4套件

一文詳解TI的grlib圖形庫移植到Atmel SAM4套件

一文詳解TI的grlib圖形庫移植到Atmel SAM4套件

一文詳解TI的grlib圖形庫移植到Atmel SAM4套件

一文詳解TI的grlib圖形庫移植到Atmel SAM4套件

軟件默認(rèn)轉(zhuǎn)化后的文件放值得位置是在圖片所在的目錄:

一文詳解TI的grlib圖形庫移植到Atmel SAM4套件

軟件默認(rèn)是第一個(gè)選項(xiàng),但這樣生成的圖片數(shù)據(jù)太大,轉(zhuǎn)換軟件會爆出:顏色太多的信息而導(dǎo)致轉(zhuǎn)換失敗。所以我就選擇了網(wǎng)頁優(yōu)化版。

我們啟動cmd,把目錄切換到我們工具所在的位置,這些windows的命令自行百度去。我這里就不多說了,都是常用的命令。

一文詳解TI的grlib圖形庫移植到Atmel SAM4套件

一文詳解TI的grlib圖形庫移植到Atmel SAM4套件

然后打上pnmtoc -c image.pnm 》 image.c,image是你圖片的文件名,回車后就會生成一個(gè)c的文本。

一文詳解TI的grlib圖形庫移植到Atmel SAM4套件

以下是我的測試圖片:

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • ti
    ti
    +關(guān)注

    關(guān)注

    112

    文章

    7948

    瀏覽量

    211910
  • Atmel
    +關(guān)注

    關(guān)注

    17

    文章

    311

    瀏覽量

    107056
收藏 人收藏

    評論

    相關(guān)推薦

    STM32移植U8g2圖形的方法 實(shí)現(xiàn)OLED圖形顯示

    本篇介紹了如何將U8g2圖形移植STM32中。
    的頭像 發(fā)表于 06-07 08:29 ?1.2w次閱讀
    STM32<b class='flag-5'>移植</b>U8g2<b class='flag-5'>圖形</b><b class='flag-5'>庫</b>的方法 實(shí)現(xiàn)OLED<b class='flag-5'>圖形</b>顯示

    新手求助 Atmel SAM4S

    Atmel家的單片機(jī)我從來沒接觸過,以前用過STM32。因?yàn)樽罱芯?Atmel SAM4S,但是網(wǎng)上基本找不到相關(guān)的中文講義或者教程{:4_106:}。關(guān)于AVR的倒是鋪天蓋地的,
    發(fā)表于 05-21 20:12

    【AT91SAM9261申請】基于AT91SAM9261評估套件的物聯(lián)網(wǎng)系統(tǒng)

    申請理由:1、對ATMEL芯片有定的使用能力;2、使用過Atmel Studio集成開發(fā)環(huán)境;3、希望能夠使用AT91SAM9261評估套件
    發(fā)表于 05-23 15:49

    圖書推薦:《ARM Cortex-M4微控制器原理與應(yīng)用:基于Atmel SAM4系列》

    《ARM Cortex-M4微控制器原理與應(yīng)用:基于Atmel SAM4系列》以具有ARM Cortex—M4內(nèi)核的Atmel公司
    發(fā)表于 06-12 13:32

    基于Atmel SAM4系列配套源代碼

    《ARM Cortex-M4微控制器原理與應(yīng)用:基于Atmel SAM4系列》配套源代碼,包括簡單IO,按鍵中斷響應(yīng),UART,SPI,CAN,SysTick,ADC,PWM,DSP以及綜合實(shí)例,供大家參考
    發(fā)表于 06-19 08:30

    SMART SAM4C微控制器有哪些應(yīng)用?

    PWM定時(shí)器,2個(gè)3通道通用16位定時(shí)器、校準(zhǔn)低功耗RTC(備份域運(yùn)行,0.5μA)和個(gè)50×6分段LCD控制器?! ?b class='flag-5'>SAM4C系列是個(gè)可擴(kuò)展的平臺,具有愛特梅爾公司業(yè)界的SAM4
    發(fā)表于 11-23 12:19

    IHM001套件和IHM002套件有什么區(qū)別?

    P-NUCLEO-IHM001套件這是個(gè)什么東西?IHM001套件和IHM002套件有什么區(qū)別?
    發(fā)表于 07-21 09:02

    Atmel宣布推出SAM3U-EK評測工具套件

    Atmel宣布推出SAM3U-EK評測工具套件 愛特梅爾公司(Atmel Corporation)宣布推出SAM3U-EK評測工具
    發(fā)表于 07-28 07:50 ?1527次閱讀

    Atmel SAM4L應(yīng)用指南

    The Atmel SAM4L Xplained Pro evaluation kit is hardware platform to evaluate the ATSAM4LC4C microcontroller.
    發(fā)表于 09-12 17:52 ?10次下載

    Atmel SAM4S應(yīng)用指南

      The Atmel SAM4S Xplained Pro evaluation kit is a hardware platform to evaluate the ATSAM4SD32C microcontroller.
    發(fā)表于 09-12 18:47 ?16次下載

    關(guān)于Atmel SAM4L方案設(shè)計(jì)的介紹講解

    Atmel - SAM4L方案設(shè)計(jì)
    的頭像 發(fā)表于 07-10 01:15 ?2296次閱讀

    關(guān)于Atmel推出的 SAM4L工具包的特點(diǎn)及應(yīng)用介紹

    Atmel SAM4L工具包
    的頭像 發(fā)表于 07-08 00:18 ?2743次閱讀

    Atmel SAME70-Xplained評估套件功能作用詳解

    Atmel SAME70-Xplained評估套件面向?qū)で?b class='flag-5'>SAM4E微控制器升級或者轉(zhuǎn)移的工程師用戶。該評估套件能夠助力工程師針對工業(yè)控制、消費(fèi)電子或計(jì)算機(jī)外設(shè)應(yīng)用進(jìn)行嵌入式系統(tǒng)設(shè)計(jì)。
    的頭像 發(fā)表于 08-04 11:03 ?4973次閱讀

    TI StellarisWare圖形的使用指南詳細(xì)說明

    StellarisWare 軟件包的部分,StellarisWare 圖形Grlib)提供了一套比較完整的 MCU
    發(fā)表于 05-18 08:00 ?1次下載
    <b class='flag-5'>TI</b> StellarisWare<b class='flag-5'>圖形</b><b class='flag-5'>庫</b>的使用指南詳細(xì)說明

    SAM9x5移植SAM9X60

    本應(yīng)用筆記介紹將基于 SAM9x5 的設(shè)計(jì)移植 SAM9X60 器件需進(jìn)行的硬件和軟件更改。SAM9X60 器件的性能優(yōu)于
    發(fā)表于 03-30 16:26 ?3次下載
    從<b class='flag-5'>SAM</b>9x5<b class='flag-5'>移植</b><b class='flag-5'>到</b><b class='flag-5'>SAM</b>9X60