<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AM335x(TQ335x)學(xué)習(xí)筆記——LCD驅(qū)動(dòng)移植

          AM335x(TQ335x)學(xué)習(xí)筆記——LCD驅(qū)動(dòng)移植

          作者: 時(shí)間:2016-11-28 來源:網(wǎng)絡(luò) 收藏

          (3)backlight節(jié)點(diǎn)分析及配置

          本文引用地址:http://www.ex-cimer.com/article/201611/322821.htm

          從backlight節(jié)點(diǎn)中可以獲得如下信息:

          1. 1.匹配內(nèi)核驅(qū)動(dòng)的關(guān)鍵詞是"pwm-backlight"。
          2. 2.使用的ECAP0進(jìn)行PWM輸出。
          3. 3.有8個(gè)亮度等級(jí)。
          4. 4.默認(rèn)的亮度等級(jí)是8,也就是最亮。
          了解以上信息后需要查閱TQ335x手冊(cè),弄清楚backlight控制管腳是如何連接的。通過分析TQ335x的原理圖可知,TQ335x的背光控制也是使用PWM方式控制,且該引腳接到AM335x的ECAP2_IN_PWM2_OUT管腳上,而evm開發(fā)板是接在ECAP0_IN_PWM0_OUT管腳上的,因此,需要修改DTS配置才能正常使用TQ335x的背光功能。思路是將DTS中的背光配置由EACP0改為EACP2,下面是修改的步驟:
          1. Step1.將backlight節(jié)點(diǎn)中&eacp0改為&eacp2。
          2. Step2.將&epwmss0改為&epwmss2,并將該節(jié)點(diǎn)內(nèi)的ecap0:ecap@48304100改成ecap0:ecap@48304100,然后將該節(jié)點(diǎn)中的&ecap0_pins改成&ecap2_pins。
          3. Step3.將ecap0_pins節(jié)點(diǎn)改名為ecap2_pins,然后將pinctrl-single,pins內(nèi)的內(nèi)容改為:0x19cMUX_MODE4。
          最后修改后的DTS相關(guān)部分如下:
          1. backlight{
          2. compatible="pwm-backlight";
          3. pwms=<&ecap20500000>;
          4. brightness-levels=<05153566275101152255>;
          5. default-brightness-level=<8>;
          6. };
          7. &epwmss2{
          8. status="okay";
          9. ecap2:ecap@48304100{
          10. status="okay";
          11. pinctrl-names="default";
          12. pinctrl-0=<&ecap2_pins>;
          13. };
          14. };
          15. ecap2_pins:backlight_pins{
          16. pinctrl-single,pins=<
          17. 0x19cMUX_MODE4/*MCASP0_AHCLKR.eCAP2_in_PWM2_outMODE4*/
          18. >;
          19. };
          這樣就完成了背光功能的DTS配置。
          (4)配置內(nèi)核驅(qū)動(dòng)
          由于evm開發(fā)板的代碼是使用ATAGS方式啟動(dòng)的,沒有配置pwm-backlight和基于TI LCD控制器的通用panel驅(qū)動(dòng),需要通過menuconfig開啟相應(yīng)的配置項(xiàng)。通過DTS中的compatible屬性可以找到pwm-backlight驅(qū)動(dòng)是在drivers/video/backlight/pwm-bl.c中實(shí)現(xiàn)的,而panel驅(qū)動(dòng)則是在drivers/gpu/drm/tilcdc/tilcdc_panel.c中實(shí)現(xiàn)的,閱讀相應(yīng)目錄下的Makefile和Kconfig就可以確定出如何配置menuconfig。Makefile和Kconfig的分析過程很簡(jiǎn)單,我就不多寫了,下面是通過menuconfig開啟相應(yīng)功能的步驟。
          Step1. 執(zhí)行menuconfig指令:
          1. makeARCH=armmenuconfig
          Step2. 開啟通用pwm-backlight驅(qū)動(dòng)和基于TI LCD控制器的通用panel驅(qū)動(dòng),配置內(nèi)容如下:
          1. Graphicssupport--->
          2. [*]Pulse-WidthModulation(PWM)Support--->
          3. <*>ECAPPWMsupport
          4. <*>EHRPWMPWMsupport
          5. -*-Backlight&LCDdevicesupport--->
          6. <*>GenericPWMbasedBacklightDriver
          7. Graphicssupport--->
          8. DirectRenderingManager--->
          9. <*>DirectRenderingManager(XFree864.1.0andhigherDRIsupport)--->
          10. <*>DRMSupportforTILCDCDisplayController
          (5)編譯DTB和內(nèi)核
          執(zhí)行DTB編譯指令:
          1. makeARCH=armCROSS_COMPILE=arm-linux-gnueabi-tq335x.dtb
          執(zhí)行內(nèi)核編譯指令:
          1. makeARCH=armCROSS_COMPILE=arm-linux-gnueabi--j8
          (6)用新內(nèi)核啟動(dòng)開發(fā)板
          將新編譯好的tq335x.dtb和zImage拷貝到SD卡的boot目錄下,然后用SD啟動(dòng)開發(fā)板到u-boot命令行模式,通過u-boot指令啟動(dòng)內(nèi)核(每次都這樣啟動(dòng)會(huì)比較麻煩,可以通過設(shè)置u-boot的bootcmd環(huán)境變量并保存來簡(jiǎn)化此動(dòng)作),啟動(dòng)內(nèi)核的指令與前一篇文章的命令是相同的:
          1. loadmmc00x88000000/boot/tq335x.dtb
          2. loadmmc00x82000000/boot/zImage
          3. loadmmc00x88080000/boot/ramdisk.img
          4. bootz0x820000000x880800000x88000000
          這時(shí),可以看到開發(fā)板正常啟動(dòng)并且能看到熟悉的Linux小企鵝Logo,至此,就完成了am335x的LCD驅(qū)動(dòng)移植,實(shí)際上是不需要我們寫代碼的,但需要了解內(nèi)核的組織方式和DTS配置的方法。

          (7)pinmux配置參數(shù)的確定方法

          相信有些人看完這幾篇文章之后有個(gè)疑問,就是配置pinmux的時(shí)候offset是如何確定的。配置GPIO管腳復(fù)用功能時(shí)經(jīng)常用到pinctrl-single,pins = 屬性,內(nèi)核解析該屬性后根據(jù)offset和function配置對(duì)應(yīng)的寄存器,是GPIO管腳配置為指定的復(fù)用功能。

          講offset的確定方法之前需要指出的是,TI的GPIO控制與三星的芯片不同,三星的芯片管腳復(fù)用功能是放在GPIO寄存器中的,而TI的芯片則有個(gè)專門的控制模塊叫Control Module,該模塊可以控制所有的GPIO管腳功能復(fù)用;另外,與三星芯片的另外一個(gè)不同是TI的芯片分為技術(shù)參考手冊(cè)和數(shù)據(jù)手冊(cè),技術(shù)參考手冊(cè)非常詳細(xì)的講述同family的芯片功能及使用方法,數(shù)據(jù)手冊(cè)則用來講述同family中不同芯片特有的屬性。因此,調(diào)試TI芯片時(shí)需要結(jié)合技術(shù)參考手冊(cè)和數(shù)據(jù)手冊(cè),而配置GPIO則需要閱讀技術(shù)手冊(cè)的GPIO、Control Module兩章和數(shù)據(jù)手冊(cè)中相關(guān)的部分。

          從am33xx.dtsi中可以看到pinmux的基地址是0x44e10800,我們先來看這個(gè)地址是怎么來的。從技術(shù)參考手冊(cè)的內(nèi)存映射表可以確定該地址位于L4_WKUP段內(nèi),如下圖:

          點(diǎn)擊L4_WKUP超鏈接,可以切換到L4_WKUP的地址映射表,從該表中可以確定,該地址位于Control Module,如下圖:

          點(diǎn)擊Control Module的超鏈接,可以切換到Control Module的地址映射表,從該表中可以找到0x44e10800地址,實(shí)際上就是conf_gpmc_ad0控制寄存器的地址,也就是說,pinmux配置時(shí)的offset都基于這個(gè)地址的。

          以PWM背光控制為例。該功能引腳是接在ECAP2_IN_PWM_OUT上的,實(shí)際上就是AM335x的MCASP0_AHCLKR管腳,該管腳的地址也可以在Control Module的地址映射表中找到,該管腳的地址是0x44e1099c(表中是基于Control Module的offset,這個(gè)值是計(jì)算之后的),因此,在pinmux中配置該引腳時(shí)使用的offset應(yīng)該是0x19c,這樣就確定出了offset。
          pinctrl-single,pins的第二項(xiàng)是function,用來指定GPIO管腳是輸入還是輸出,當(dāng)前處于哪種模式。輸入輸出很容易配置,但是AM335x技術(shù)參考手冊(cè)中只提到每個(gè)管腳有8中模式,即MODE0~MODE7,其中,MODE0是主模式,但是沒有具體講每個(gè)引腳的每個(gè)MODE是什么功能,這時(shí),就需要查閱AM335x數(shù)據(jù)手冊(cè)了。在AM335x數(shù)據(jù)手冊(cè)MCASP0_AHCLKR的八種模式的含義,如下圖:
          由于我們使用的是eCAP2_in_PWM2_out功能,故使用MUX_MODE4。這就是backlight的pinmux配置時(shí)使用pinctrl-single,pins = <0x19c MUX_MODE4>的原因。

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();