博客專欄

        EEPW首頁 > 博客 > 嵌入式 ARM 平臺 libsoc 開發示例

        嵌入式 ARM 平臺 libsoc 開發示例

        發布人:toradex 時間:2019-05-14 來源:工程師 發布文章

        By Toradex秦海

        1). 簡介

        在之前的一篇文章中已經介紹過如何基于嵌入式Linux部署libsoc支持, 本文就繼續基于NXP IMX6平臺演示基于libsoc分別對GPIO,I2CPWM以及SPI進行開發示例。

         

        本文所演示的ARM平臺同樣來自于Toradex 基于NXP iMX6 ARM處理器的Apalis iMX6 ARM嵌入式平臺。  

         

        2. 準備

        a). Apalis iMX6Q ARM核心版配合Apalis Evaluation Board載板,連接調試串口UART1(載板X29)到開發主機方便調試。更多關于Apalis iMX6配合Apalis Evaluation Board載板的說明請參考Datasheet開發上手指南。

         

        b). Apalis iMX6Q ARM核心版配合Ixora載板,連接調試串口UART1(載板X22)到開發主機方便調試。 更多關于Apalis iMX6配合Ixora載板的說明請參考Datasheet開發上手指南。

         

        c). Apalis iMX6Q 安裝Toradex Linux BSP V2.8b5,系統中已經默認包含了本文測試所需要的libsoc相關庫支持,詳細安裝方法請參考這里,編譯libsoc相關demo所需要的SDK配置請參考簡介中提到的之前文章說明,本文不再贅述。

         

         

        3). GPIO 測試示例

        a). 基于Apalis Evaluation Board測試,硬件連接配置如下,基于C代碼的GPIO測試請參考這里,本文是基于libsoc來重新測試。

        X4 GPIO05 <-> X34 SW5

        X4 GPIO06 <-> X34 LED1

         

        b). 源代碼請參考如下,實現功能就是按鍵交替點亮和關閉LED燈。

        https://github.com/simonqin09/libsoc-examples/blob/master/gpiotest/gpiointtest.c

         

        c). Makefile 請參考如下,直接下載的libsoc官方示例里面包含的Makefile需要進行一些修改,這里也將修改的patch附上。

        ./ Makefile

        https://github.com/simonqin09/libsoc-examples/blob/master/gpiotest/Makefile

        ./ Patch file

        https://github.com/simonqin09/libsoc-examples/blob/master/gpiotest/libsoc-examples_Makefile.patch

         

        d). 測試運行結果如下:

        -----------------------

        root@apalis-imx6:~# ./gpiointtest

        Waiting for interrupt. Press 'q' and 'Enter' at any time to exit

        LED turns on

        Interrupt occurred 1 times

        LED turns off

        Interrupt occurred 2 times

        -----------------------

         

         

        4). PWM 測試示例

        a). 基于Apalis Evaluation Board測試,硬件連接配置如下, 基于C代碼的PWM測試請參考這里,本文是基于libsoc來重新測試。

        X4 GPIO05 <-> X34 SW5

        X4 PWM1 <-> X34 LED1

         

        b). 源代碼和Makefile請參考如下,實現功能就是程序運行后,PWM50%占空比輸出,通過按鍵讓PWM輸出占空比按照50%,75%,25% 交替調整。

        https://github.com/simonqin09/libsoc-examples/blob/master/pwmtest/pwmtest.c

        https://github.com/simonqin09/libsoc-examples/blob/master/pwmtest/Makefile

         

        PWM2PWM3也都可以測試,只是PWM3默認被ov5640_mipi驅動占用,需要修改device tree釋放。

         

        d). 測試運行結果如下:

        -----------------------

        root@apalis-imx6:~# ./pwmtest

        Waiting for interrupt. Press 'q' and 'Enter' at any time to exit

        Interrupt occurred 1 times

        PWM Duty set to 75%

        Interrupt occurred 2 times

        PWM Duty set to 25%

        Interrupt occurred 3 times

        PWM Duty set to 50%

        Interrupt occurred 4 times

        PWM Duty set to 75%

        -----------------------

         

         

        5). I2C 測試示例

        a). 基于 Ixora 載板測試,針對載板上面連接到i2c-1的總線上面的EEPROM進行讀寫,基于C代碼的詳細測試文檔可以參考這里,本文重新基于libsoc代碼進行測試。

         

        b). 源代碼和Makefile請參考如下,實現功能就是程序運行后,針對指定的page號碼寫入數據,然后再讀取后驗證是否讀寫一致。

        I2ctest.c - https://github.com/simonqin09/libsoc-examples/blob/master/i2ctest/i2ctest.c

        eeprom.c - https://github.com/simonqin09/libsoc-examples/blob/master/i2ctest/eeprom.c

        eeprom.h - https://github.com/simonqin09/libsoc-examples/blob/master/i2ctest/eeprom.h

        Makefile - https://github.com/simonqin09/libsoc-examples/blob/master/i2ctest/Makefile

         

        d). 測試運行結果如下:

        -----------------------

        root@apalis-imx6:~# ./i2ctest 15

        Writing to page starting at byte address: 0xf0

        Waiting for data to be written

        libsoc-i2c-debug: No such device or address

        Waiting...

        libsoc-i2c-debug: No such device or address

        Waiting...

        libsoc-i2c-debug: No such device or address

        Waiting...

        libsoc-i2c-debug: No such device or address

        Waiting...

        Data sucessfully written!

        Reading page starting at byte address: 0xf0

        data_write[0] = 0xf0 : data_read[0] = 0xf0 : Correct

        data_write[1] = 0xf1 : data_read[1] = 0xf1 : Correct

        data_write[2] = 0xf2 : data_read[2] = 0xf2 : Correct

        data_write[3] = 0xf3 : data_read[3] = 0xf3 : Correct

        data_write[4] = 0xf4 : data_read[4] = 0xf4 : Correct

        data_write[5] = 0xf5 : data_read[5] = 0xf5 : Correct

        data_write[6] = 0xf6 : data_read[6] = 0xf6 : Correct

        data_write[7] = 0xf7 : data_read[7] = 0xf7 : Correct

        data_write[8] = 0xf8 : data_read[8] = 0xf8 : Correct

        data_write[9] = 0xf9 : data_read[9] = 0xf9 : Correct

        data_write[10] = 0xfa : data_read[10] = 0xfa : Correct

        data_write[11] = 0xfb : data_read[11] = 0xfb : Correct

        data_write[12] = 0xfc : data_read[12] = 0xfc : Correct

        data_write[13] = 0xfd : data_read[13] = 0xfd : Correct

        data_write[14] = 0xfe : data_read[14] = 0xfe : Correct

        data_write[15] = 0xff : data_read[15] = 0xff : Correct

        -----------------------

         

        6). SPI Master 測試示例

        a). 基于Apalis Evaluation Board測試,需要配合Toradex另外一個基于NXP iMX7的平臺作為SPI slave進行共同測試,關于硬件連接和SPI slave的配制和相關代碼請參考下面文章,本文是基于libsoc來測試 SPI Master 端。

        https://www.toradex.com/zh-cn/blog/nxp-imx7-m4-he-xin-spi-slave-ce-shi

         

        b). 源代碼和Makefile請參考如下,實現功能就是程序運行后,通過Apalis iMX6 SPI0.0 SPI slave寫入一組隨機數據,然后再次通訊讀出剛才寫入的數據后確認讀寫是否一致。

        spitest.c - https://github.com/simonqin09/libsoc-examples/blob/master/spitest/spitest.c

        Makefile - https://github.com/simonqin09/libsoc-examples/blob/master/spitest/Makefile

         

        d). 測試運行結果如下:

        -----------------------

        root@apalis-imx6:~# ./spitest

        Start to transfer!

        data_send[0] = 0xca : data_read[0] = 0xca : Correct

        data_send[1] = 0x03 : data_read[1] = 0x03 : Correct

        data_send[2] = 0x01 : data_read[2] = 0x01 : Correct

        data_send[3] = 0x56 : data_read[3] = 0x56 : Correct

        data_send[4] = 0xb2 : data_read[4] = 0xb2 : Correct

        data_send[5] = 0x64 : data_read[5] = 0x64 : Correct

        data_send[6] = 0xf9 : data_read[6] = 0xf9 : Correct

        data_send[7] = 0x34 : data_read[7] = 0x34 : Correct

        data_send[8] = 0x91 : data_read[8] = 0x91 : Correct

        data_send[9] = 0x84 : data_read[9] = 0x84 : Correct

        data_send[10] = 0x19 : data_read[10] = 0x19 : Correct

        data_send[11] = 0x0c : data_read[11] = 0x0c : Correct

        data_send[12] = 0xb1 : data_read[12] = 0xb1 : Correct

        data_send[13] = 0xd3 : data_read[13] = 0xd3 : Correct

        data_send[14] = 0x1f : data_read[14] = 0x1f : Correct

        data_send[15] = 0xf4 : data_read[15] = 0xf4 : Correct

        -----------------------

         

         

        7). 總結

        如上述示例,通過基于iMX6測試了GPIO,I2C,PWMSPI接口,對比C代碼,libsoc使用和配置起來更方便簡潔。

        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。

        電路圖符號相關文章:電路圖符號大全




        關鍵詞:

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 札达县| 双桥区| 奉新县| 孝义市| 福州市| 积石山| 张家港市| 周口市| 邯郸市| 海盐县| 蕉岭县| 南召县| 汉源县| 阳东县| 大渡口区| 比如县| 筠连县| 平舆县| 全椒县| 太和县| 阿拉尔市| 青铜峡市| 宁明县| 济南市| 静海县| 和政县| 梁平县| 桦甸市| 科技| 泾阳县| 临猗县| 平乐县| 延安市| 宣化县| 鲁甸县| 秀山| 邳州市| 保靖县| 旬阳县| 新疆| 六安市|