這幾天研究了一下LPC55S69開發(fā)板的tf讀寫,以及圖片文件的讀出顯示在lcd功能。tf卡工程直接從官方SDK的示例代碼里面挖出來的,使用的keil工程。重新排版了文件,編譯測試過程過程很順利。由于使用keil的pack包里面的CMSIS功能,所以項(xiàng)目內(nèi)SDK的cmsis文件就不需要添加了。如果不去掉SDK內(nèi)關(guān)于CMSIS的文件,編譯會出現(xiàn)重定義錯(cuò)誤。
初始SDK內(nèi)測試tf卡例子跑成功后,后面準(zhǔn)備添加LCD驅(qū)動。lcd使用的是并口8位數(shù)據(jù)接口屏,直接插在arduino接口上的。主要添加LCD屏的io初始化部分。在pin_mux.c中的void BOARD_InitPins(void)里面添加lcd的使用IO的初始化。LCD用的IO比較多,幸好tf卡用的IO和LCD用的IO沒有重復(fù),要不然就麻煩些了。LCD的驅(qū)動是寫好的,直接拿過來用上就行。
添加LCD驅(qū)動后,然后再測試LCD屏是否正常。屏幕正常后,下一步準(zhǔn)備添加jpg的解碼庫。這個(gè)jpg解碼庫使用的是tjpgd解碼庫。這個(gè)解碼庫是從RT-Thread的軟件包里面找來的。
TJpgDec(Tiny JPEG Decompressor)是針對嵌入式系統(tǒng)高度優(yōu)化的輕量級通用 JPEG 圖像解碼器,具有易于使用、資源占用小、方便移植等優(yōu)點(diǎn),廣泛應(yīng)用在各種資源受限的微處理器上,本軟件包是 TJpgDec 的 RTT 移植版本。
解碼庫地址:https://github.com/RT-Thread-packages/TJpgDec
本次用的jpg解碼庫也相應(yīng)做了些修改來適配。主要在tjpgd_port.c中。因?yàn)槭褂昧薽alloc和free內(nèi)存操作,所以需要設(shè)置堆和棧內(nèi)存空間的。
中間也出現(xiàn)了一些問題,不過幸好都解決了。主要開始設(shè)置的堆??臻g不夠,導(dǎo)致程序HardFaults了。開始不知道是出現(xiàn)啥問題了,老是顯示圖片突然死機(jī)了。單步調(diào)試后,后面才發(fā)現(xiàn)是進(jìn)入HardFault了。
HardFaults一般主要是內(nèi)存越界,堆棧溢出,內(nèi)存非對齊訪問問題。所以重點(diǎn)檢查了堆棧設(shè)置。
開始就是沒注意有2個(gè)地方設(shè)置了??臻g,加大了??臻g后就正常了,堆空間和??臻g都加大了,防止空間不夠。TJpgDec解碼最少需要3K多的堆空間用于內(nèi)部內(nèi)存分配。
最終實(shí)現(xiàn)了jpg圖片文件的顯示。后面準(zhǔn)備BMP圖片文件解碼的,bmp解碼還未完善。
原圖:
顯示效果圖:
最后是整個(gè)工程代碼:
lpc55s69_sd_fatfs_lcd.rar (5.6 MB)