<dfn id="is4kg"></dfn>
  • <ul id="is4kg"></ul>
  • <abbr id="is4kg"></abbr>
  • <ul id="is4kg"></ul>
    <bdo id="is4kg"></bdo>
    以文本方式查看主題

    -  曙海教育集團論壇  (http://www.hufushizhe.com/bbs/index.asp)
    --  WinCE系統定制與驅動開發  (http://www.hufushizhe.com/bbs/list.asp?boardid=36)
    ----  OMAP3530 WINCE GPIO驅動開發過程  (http://www.hufushizhe.com/bbs/dispbbs.asp?boardid=36&id=1820)

    --  作者:wangxinxin
    --  發布時間:2010-11-26 10:58:35
    --  OMAP3530 WINCE GPIO驅動開發過程
    一開始上來整TI的OMAP3530,直接碰的就是系統移植和GPIO驅動。看了TI的DATASHEET和產品的性能介紹,說實話真的是一分錢一分貨,與曾經的三星的相比,三星產品的本地化(中國)做得比較好,首先價格較同類便宜,第二由于第一點造就了用的人多,人多英文的變成中文的手冊多,例子多,書多,源碼多。天下源碼一大抄嗎,所以一般而言,三星的就更受歡迎了,但是回過頭來,TI的產品真讓你心服口服。他的支持之多,超過了三星,只是多是英文的,起點高,所以。。。
        言歸正傳,OMAP3530的GPIO(General-purpose Interface)按照分組的原則,共有6組,每組的控制類寄存器是32bit的,代表了32個GPIO,所以總共有192個GPIO,這些是屬于MPU控制的,超過192編號的GPIO是屬于IVA2.2(DSP)控制的。結構框圖如下: OMAP3530的GPIO具有以下功能:
    1)數據輸入(捕獲)/輸出(驅動)
    2) 帶有防抖功能的鍵盤接口
    3)外部事件檢測(電平中斷、邊沿中斷)
    4) 在空閑模式下通過外部事件的睡眠喚醒功能
    相關的配置需要仔細參照技術手冊
        接下來是WINCE下的GPIO驅動,跳過流驅動的標準框架以及MDD層框架和PDD層的與硬件相關的寄存器設置。這些和三星ARM的GPIO驅動大同小異。
        著重介紹可能遇到的問題,忽略的地方:
    我在編寫完OMAP3530的GPIO驅動后,發現有的GPIO能夠控制輸入輸出,有的則不能。經過同學提醒,重新看了技術手冊,原來在技術手冊的第7章System Control Module(SCM)中明確介紹了core modul(內核模塊)和wake-up module(喚醒模塊)。
        SCM主要負責以下功能
    1)I/O端口功能復用、多工選擇
    2) Pad塊配置(端口上拉/下拉)
    3) 設備狀態
    4) MPU和DSP(IVA2.2)的外圍擴展設備特性
    5) 靜態設備配置
    6)調試和觀測功能IO復用
    7) 存儲pad塊的配置
    pad塊配置寄存器如下:
    其中pad塊的配置中有一項就是端口的MODE(3bits),由于一個GPIO可能有多個功能,他們是互斥的,只能選擇一個,就涉及到端口功能的選擇,總共有MODE0到MODE7八個模式,默認是MODE0,MODE7是安全模式。比如GPIO143總共有實實在在的5個模式:mcbsp3_fsx/uart2_rx/gpio143/hsusb3_till_data7/safemode。所以在配置GPIO的時候需要選擇成GPIO模式,不然操作GPIO就沒有效果,這是問題1.
       另外,上面的配置只能解決端口的輸出控制,當端口配置成輸入時,就不一定能讀取端口電平。問題出在哪里呢,繼續仔細參照技術手冊的SCM模塊。pad塊中還有兩項是GPIO的上拉/下拉選項、輸入使能選項。針對當GPIO端口配置為輸入時不能讀取正確的引腳電平的問題,主要原因是由于GPIO端口的輸入使能被關閉了。
       輸入使能(INPUTENABLE)(1bits)的描述如下:
    1)INPUTENABLE = 0,關閉引腳輸入,引腳只能夠作為輸出。
    2) INPUTENABLE = 1,使能引腳輸入,引腳具有雙向端口功能,即輸入/輸出。
    所以我們應該使能SCM中,pad塊的這項功能。
       具體到相關的WINCE文件有
    GPIO驅動:
       1) $\\WINCE600\\PLATFORM\\TI_EVM_3530\\SRC\\DRIVERS\\GPIO\\gpio.cpp
       2)$\\WINCE600\\PLATFORM\\COMMON\\SRC\\SOC\\OMAP35XX_TPS659XX_TI_V1\\omap35xx\\GPIO\\omap35xx_gpio.cpp
    啟動時安裝配置成GPIO的文件:
       1)$\\WINCE600\\PLATFORM\\TI_EVM_3530\\SRC\\BOOT\\XLDR\\platform.c
    比如:
       VOID GpioSetup()函數下的GPIO模式和端口方向定制:
     OUTREG16(&pConfig->CONTROL_PADCONF_SDRC_D0, (INPUT_ENABLE | PULL_INACTIVE | MUX_MODE_0));  
        OUTREG16(&pConfig->CONTROL_PADCONF_SDRC_D1, (INPUT_ENABLE | PULL_INACTIVE | MUX_MODE_0));  
        OUTREG16(&pConfig->CONTROL_PADCONF_SDRC_D2, (INPUT_ENABLE | PULL_INACTIVE | MUX_MODE_0));  
        OUTREG16(&pConfig->CONTROL_PADCONF_SDRC_D3, (INPUT_ENABLE | PULL_INACTIVE | MUX_MODE_0));  
        OUTREG16(&pConfig->CONTROL_PADCONF_SDRC_D4, (INPUT_ENABLE | PULL_INACTIVE | MUX_MODE_0));  
        OUTREG16(&pConfig->CONTROL_PADCONF_SDRC_D5, (INPUT_ENABLE | PULL_INACTIVE | MUX_MODE_0));  
        OUTREG16(&pConfig->CONTROL_PADCONF_SDRC_D6, (INPUT_ENABLE | PULL_INACTIVE | MUX_MODE_0));  
        OUTREG16(&pConfig->CONTROL_PADCONF_SDRC_D7, (INPUT_ENABLE | PULL_INACTIVE | MUX_MODE_0));  
        OUTREG16(&pConfig->CONTROL_PADCONF_SDRC_D8, (INPUT_ENABLE | PULL_INACTIVE | MUX_MODE_0));  
     
       綜上所述:SCM模塊決定了端口的功能,而GPIO模塊控制了端口的GPIO功能;GPIO只是端口功能的一個子集。

    主站蜘蛛池模板: 波多野结衣中文在线播放| 亚洲日韩中文字幕| 一二三四社区在线视频社区 | 九九热视频精品在线| 污视频网站观看| 国产v亚洲v天堂a无码| 一人上面一个吃我电影| 日本三浦理惠子中文字幕| 免费无码AV一区二区| 苍井空亚洲精品AA片在线播放| 国产精品综合视频| 一道本免费视频| 日日碰狠狠添天天爽超碰97 | 女人疯狂喷水爽视频| 久久亚洲精品无码VA大香大香| 波多野结衣丝袜诱惑| 国产69精品久久久久777| 高h视频在线观看| 国产精品林美惠子在线观看| 一本一本久久aa综合精品| 成年性羞羞视频免费观看无限| 亚洲精品国产第1页| 被夫上司连续侵犯七天终于| 天海翼大乱欲在线观看| 亚洲另类激情综合偷自拍图| 波多野结衣xxxxx在线播放| 可知子与野鸟君日文| 色妞色视频一区二区三区四区| 国产粗话肉麻对白在线播放| 亚州无吗黄瓜视频有直播的不| 稚嫩娇小哭叫粗大撑破h| 国产精品嫩草影院免费| 一区二区三区中文字幕| 成年人在线视频网站| 久久精品美女视频| 最近中文字幕的在线mv视频| 亚洲熟妇无码久久精品| 波多野たの结衣老人绝伦| 午夜体验试看120秒| 网友自拍区一区二区三区| 国产精品蜜芽tv在线观看|