Silicon C8051F340之GPIO口配置與使用


一、背景:
        很久前用過C8051,現在有相關需求需要重新使用C8051,然后發現一年前開發的相關經驗都忘得
    基本上差不多了。連最基本的GPIO口配置還得重新來看手冊,所以有此文,做個記錄,以備下次快速
    開發。

二、正文:
        首先是GPIO口的配置步驟:
        1. 用端口輸入方式寄存器(PnMDIN)選擇所有端口引腳的輸入方式(模擬或數字)。
        2. 用端口輸出方式寄存器(PnMDOUT)選擇所有端口引腳的輸出方式(漏極開路或推挽)。
        3. 用端口跳過寄存器(PnSKIP)選擇應被交叉開關跳過的那些引腳。
        4. 將引腳分配給要使用的外設(XBR0、XBR1、XBR2)。
        5. 使能交叉開關(XBARE = 1)。    
        先着重說明下,什么是"優先交叉開關譯碼器(Priority Crossbar Decoder)":
        這玩意兒的這個名稱,我暫時只在Silicon的單片機上見過,也許是因為只有該類型MCU用這種IO
    口分配機制吧。我們平時使用的MCU,其IIC,UART,SPI等等這些外設接口已經被廠商配置成某個或者某
    幾個IO上,若是需要要用這些功能,直接將該引腳配置成相應規定好的第二功能即可,若是該IO口引腳
    不得以被使用,還可以使用重映射功能,將該功能映射到廠商規定的第二個備用IO口。但是Slicon卻不
    然,它提供的MCU原理圖上,光光的,什么都沒有,也就是說,基本上這些第二功能接口幾乎可被配置
    在任意一個IO口上。也就是交叉開關會將這些外設功能按照下圖外設功能分配優先級,從高到低分配給
不同的外設引腳,外設功能的優先級如下圖:

    從優先權最高的UART0開始,這個被固定配置在"P0.4","P0.5",接着在"XBR0"內,SPI配置為啟用,
    且P0SKIP的第"0""1""2""3"位未被選擇為跳過,則對應SPI引腳被配置到"P0.0","P0.1","P0.2",
    "P0.3"上;若是SPI配置為禁用,IIC啟用,且P0SKIP的第"0""1"位未被選擇為跳過,則IIC的"SDA",
    "SCL"被配置在"P0.0","P0.1"上。
    即若是該引腳已經被配置,或者在端口跳過寄存器中被設置,則交叉開關會跳過這些引腳,然后分
    配到接下來空閑的引腳上,該配置選項即對應於GPIO口配置步驟的3、45。Uart口的分配是固定的
    原因在於下載引導程序內,需要固定此IO口。
        說到這,那就一步步詳解GPIO口配置步驟吧。
        "1"步驟:
            決定引腳輸入模式,要么是模擬輸入,要么是數字輸入,數字輸入為復位后的默認配置。
            寄存器:"PnMDIN""n"為對應的port口:
            --> "0",配置為模擬輸入;
            --> "1",配置為數字輸入。
        "2"步驟:
            配置引腳輸出方式:
            寄存器:"PnMDOUT""n"為對應的port口:
            --> "0",漏極開路;配合外部上拉電阻,通常用來檢測輸入。
            --> "1",推挽輸出。
        "3"步驟:
            對應的引腳是否被交叉開關分配為第二功能:
            寄存器:"PnSKIP""n"為對應的port口:
            --> "0",對應的引腳不被交叉開關跳過;
            --> "1",對應的引腳被交叉開關跳過。
            此步驟注意:若是引腳已被規定了特殊的使用,譬如VREF,XTAL1/2等IO口,或者被配置為
                        模擬輸入的引腳,對應位在該寄存器內必須被配置為"1""4"步驟:
            對應外設功能是否被分配到IO口引腳:
            寄存器:"XBR0""XBR1"--> "0",不需要分配IO口引腳;
            --> "1",需要分配IO口引腳。
            對於給定的XBRn設置,可以使用優先權譯碼表確定I/O引腳分配;另一種方法是使用
            Silicon Labs IDE 軟件的配置向導功能來確定基於XBRn寄存器設置的端口I/O引腳分配。    
        "5"步驟
            使能交叉開關,在使能交叉開關未被打開前,外部引腳保持標准端口I/O方式(輸入)。

        配置完畢后,未被交叉開關選擇到的IO口,均可當做通用IO口使用,通過對應的端口數據寄存器
    訪問端口P3-0,這些寄存器既可以按位尋址也可以按字節尋址。端口P4(僅C8051F340/1/4/5)使用的
    SFR只能按字節尋址。向端口寫入時,數據被鎖存到端口數據寄存器中,以保持引腳上的輸出數據值不
    變。讀端口數據寄存器將總是返回端口輸入引腳的邏輯狀態,而與XBRn的設置值無關(即使在引腳被
    交叉開關分配給其它信號時,端口寄存器總是讀其對應的端口I/O引腳)。但在對端口SFR執行下面的
    讀-修改-寫指令(ANL、ORL、XRL、JBC、CPL、INC、DEC、DJNZ)和對端口SFR中的某一位執行MOV、
    CLR、SETB期間例外。這些指令讀端口寄存器(而不是引腳)的值,修改后再寫回端口SFR。

三、參考文獻
    詳細解說開漏輸出和推挽輸出
        http://blog.sina.com.cn/s/blog_14e0394720102vewa.html

    至此,記錄完畢。

記錄時間:2016-11-25
記錄地點:深圳WZ

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM