SemiDrive E3_Port_Dio 總結文檔

一、概述

本篇文章主要描述了 E3 的 GPIO 口作為 input/output 時的具體設置。

 

二、 HandsOn 1

       選取一個 port,配置為 DO,在測試程序中實現拉高,拉低,反轉。在 jlink 仿真時使用 IAR 單步執行,並打開 memory 顯示窗口,輸入 port 對應的輸出值地址,觀察對應Bit 位的變化。

選取的 port 為 GPIO_B10 ,使用 example 示例程序中的 dio_example.c 實現( E3110 ):

1、在 EB 項目下,在 E3_ref_getway 下打開 port 組別,在 port 欄下選擇“PortContainer”標籤,

添加 GPIO_B 的 PortContainer ;

 PortNumberOfPortPins 是顯示使用了多少個 IO 口;

 PortNumberOfPortPins 表示該組 GPIO 中實際配置的 PortPin數目。

         

         2、進入 GPIO_B 內,選擇 PortPin 標籤,添加命名為 Naib_out 的 PortPin ,其中PortPinId 列需從 1 開始,而非 0。

         3、進入 PortPin 設置 Port 參數,其中 PinID 選擇使用的 GPIO 口 GPIO_B10 ,Mux 復用功能選擇 GPIO。



       4、配置 Dio ,因為使用的 GPIO_B10 ,根據 SD tool ,其 ChannelID 為 55,屬於 port1,所以加入到已存在的 DioPort_1 內,如其他組別的 GPIO ,則使用加號,添加對應的組別,並設 DioPortId為對應組別數字。





       5、配置完成後,保存,並檢查和生成代碼。



       6、完成後,可以在輸出的代碼中查看配置的參數, output/src/Port_Cfg.c 文件末尾, 可以看到新配置的 GPIO_B10  參數。

 

宏定義 DioConf_DioChannel_Naib_Ch ,在 EB 生成 C 文件時產生,在項目文件\MCAL_release\Mcal_Cfg\E3_ref_gateway\output\include\Dio_Cfg.h 文件內。

        7、使用 IAR 打開項目文件  \MCAL_release\iar\iar_v850\E3_ref_176_E3110  下的工程文件,使用 test_suite/dio_example 示例程序,實現拉高、拉低和反轉。

Dio_WriteChannel(ChannelId, level) 函數為對應 ChannelId 的 GPIO 口輸出電平。

Dio_FlipChannel(ChannelId) 函數為反轉對應 ChannelIdId 的 GPIO 口輸出電平。

        ①設置斷點,檢查編譯並下載 debug 程序,點擊運行。點擊菜單欄 View – Memory ,添加Memory 1 窗口。

        ②在串口軟體中發送 dio test ,則會進入 dio_test() 函數,停在斷點處。

        GPIO_B10 的地址計算:

        GPIO_B10 的ChannelId為55,屬於 Port1,為 GPIO_SAFETY ,起始地址為 0xF074_0000;

        Port1 的偏移地址 offset 為 0x680+(1*0x10)=0x690 ;兩個地址相加: 0xF074_0690



 

三、HandsOn 2

       選取一個 port,配置為 DI ,並使能中斷模式,編寫測試代碼,在中斷處理函數中列印對應的 port ID。運行後給對該 port 輸入配的的中斷觸發信號,在終端能夠觀察到列印信息。

       1、因為需要使用中斷功能,所以需將 Port 的 PortSetPinINTDetect 功能打開。

       2、添加命名為 DI 的 PortPin ,配置引腳上電默認輸出電壓為高電平,中斷觸發方式為下降沿觸發。

 

      3、在 IAR 項目內,打開 dio_example.c 文件,添加頭文件 Dio_Irq.h ,和 irq_test() 函數,並在 dio_test() 函數內加入 irq_test() 函數。

       ①添加的 irq_test() 函數為關聯中斷標誌和中斷函數,因為 GPIO_B10 屬於 GPIO_SAFETY port1,所以使用 GPIO_SF_SYNC_GRP_1_INTR_NUM;

       ②因為中斷函數 GPIO_Irq4Handler 內 id 會自減 1 ,所以使用 2 ;中斷函數 GPIO_Irq2Handler 定義在 Dio_Irq.h ,所以添加頭文件 Dio_Irq.h;

③使能 GPIO_SF_SYNC_GRP_1_INTR_NUM。



4、進入中斷後:

        在 Dio_IP.C 文件內一層一層調用函數, GPIO_Irq4Handler() -> Dio_Ip_IrqHandler()->

        Dio_UserCallouts(),進入 Dio_UserCallouts.c 文件。

        在文件內添加頭文件 Dio_Cfg.h 和 debug.h ,和 switch case 並列印傳參對應的ChannelId 的程序。

        Dio_Cfg.h 是 GPIO_B10 的宏定義 DioConf_DioChannel_DO_IN 文件, debug.h 是函數 PRINT() 文件。

 
    5、編譯並燒錄程序後,通過串口軟體寫入 dio test ,再使用杜邦線將地和 GPIO_B10 引腳短接後鬆開,串口軟體中會列印對應的串口數據。

              

四、Reference:

[1] E3系列MCAL_Example_Description_

        [2] SemiDrive_E3_MCAL_User_Guide_Rev02.00



歡迎在博文下方留言評論,我們會及時回復您的問題。如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com

作者:Naib Zhou / 周甜甜


★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論