国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

[資料分享] 悍馬1788USB學習筆記

發布時間:2016-12-22 10:54    發布者:旺寶科技測試丘
關鍵詞: 悍馬 , 1788USB , 學習筆記
LPC1788—USB學習 第一章;開發板和PC實現連接 第一篇:了解硬件 本開發板是基于NXP的LPC1788FBD208基礎上研發的一款開發板。LPC1788內部集成ARM Cortex-M3微控制器,是NXP 半導體針對各種高級通訊,高質量圖像顯示等應用場合而設計的一款具有高集成度的SOC。居然是針對各種高級通訊,那么學習USB那就是可以的。 USB電路圖如下圖

圖(111
如果想要開發USB Device需要把J19J20兩個撥碼開關的“1”和“2”接通,使USBD2-D2+連接到J16USB Device接口。下面的J17USB主機的,有人就會問現在學USB DeviceUSB Host電路圖貼出來干嘛啊!不急等下我們就會說到,現在先不用管它。
第二篇:USB基礎知識
當我們每次用到帶有USB接口的設備感覺就是兩個字“方便”。拿到USB數據線兩頭一插就OK。現在我們就從把數據線插入電腦的那一瞬間開始說起。那些什么同步啊拓撲結構啊啥的先拋開,嫩得我們費腦子胡思亂想,到后來想了半天不知道干嘛。
有細心的朋友可能都看到圖(11)電路圖,USB DeviceUSB Host兩個電路的不同,在USB Device電路中D2+的線上連接了一個1.5K電阻經過了一個三級管Q13.3V(高電平),而在USB Host電路中D2-D2+上各經過了一個10K的電阻到地(低電平)。我們電腦上的USB接口就是USB Host,內部電路就和上圖的USB Host類似。當我們把USB Device插入到電腦時,電腦上的USB接口就會有一個5V電壓給我們的USB DeviceUSB Device內部硬件初始化,而內部的硬件就會從USB_CONNECT2輸出一個信號給三極管Q1讓三極管導通把USB DeviceD2+拉為高電平,這時電腦上USB HostD2+由原來的低電平也變為高電平。這時在電腦上就會檢測到發現新硬件,而且是一個無法正常運行的設備,如圖121。這設備管理器中的通用串行總線控制器會出現一個未知設備,如圖122
圖(121
圖(122
這個過程當中主機檢測到有設備插入就會向設備發送一些數據,而這些數據是設備剛插入主機時主機所要設備描述符的控制傳輸。現在我們的設備沒有任何驅動程序來響應“組織的號召”,所以我們的“中央”就不知道如何來加載主機驅動來管理我們的設備,“中央”就會把它拉入黑名單說,硬件安裝出現問題,設備不能正常運行,所以在設備管理器中就冒出了一個未知設備。在未知設備上點右鍵屬性,在詳細信息選項卡中會看到VIDPID都是0。如圖23a,圖23b是枚舉成功的大容量存儲設備。
                          圖(123a                                                                                                  圖(123b
第三篇:軟件配置
我們來看一下程序在悍馬1788是如何實現連接的。工程創建不講述。
/**********************************************************************
函數功能;主函數
函 數 名;main
函數參數;無
函數返回;無
***********************************************************************/
int main (void)
{
        debug_frmwrk_init();                /*串口調試初始化,
用于打印調試信息
和主機發給開發板
的數據還有開發板
發給主機的數據。*/
        print_menu();                                        //打印字符串。
        USB_Init();                              // 初始化USB
        USB_SetDevCondition(DEV_CON);        // 鏈接USB                     
        while (1)
        {      
                ;
        }
}
看起來好像很簡單,main函數里面關于USB的代碼就兩行。現在我們就來看下USB_Init();
/**********************************************************************
函數功能;初始化USB函數
函 數 名;USB_Init
函數參數;無
函數返回;無
***********************************************************************/
void USB_Init (void)
{      
        PINSEL_ConfigPin ( 0, 31, 1);                        //P0.31管腳設置為USB_D2+的功能
        PINSEL_ConfigPin ( 0, 14, 3);                        //P0.14管腳設置為USB_CONNECT2功能
        CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUSB, ENABLE);        //配置USB時鐘/電源
          LPC_USB->USBClkCtrl = 0x1A;        /*USB時鐘控制寄存器,
它控制了AHB、端口選
擇寄存器、設備時鐘,
這些時鐘的使能和失能。*/
          while ((LPC_USB->USBClkSt & 0x1A) != 0x1A);                /*USBClkSt 寄存器是
時鐘狀態寄存器,檢查
是否設置為0x1A*/
          LPC_USB->StCtrl = 0x3;                             //端口選擇寄存器我們用的USB2所以是就是0x3
}
在初始化函數里面就只有USB_D2+USB_CONNECT2引腳被配置了,而USB_D2-VBUS沒有配置。我們來看下LPC1788Data Sheet里對USB Device的管腳描述。
VBUS引腳描述的大概意思是,VBUS是一個輸入狀態,在沒有IOCON寄存器,它的內部是上拉的。反正大概意思就是這樣。如果是上拉那么它就可以觸發內部的硬件。為了程序的簡單我們就不對它進行配置。VBUS可以不管那USB_D2-咋不配置呢?現在來看一下原理圖,如圖24
圖(124
這個管腳是默認為USB_D2-,可以不用配置。LED管腳也不用配置,應為我們沒有用到LED燈。
接下來就是USB基本配置用庫函數的CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCUSB, ENABLE);來使能時鐘和電源,下一行是USBClkCtrl寄存器配置,這個寄存器是USB時鐘控制寄存器,它控制了AHB、端口選擇寄存器、設備時鐘,這些時鐘的使能和失能,下面就是USBClkSt寄存器,這個寄存器是時鐘狀態寄存器,只是用來檢測USBClkCtrl寄存器是否成功配置,還有一個是StCtrl寄存器,它是用來選擇是用那一個USB端口,我們用的USB2看下數據手冊,從寄存器里看設置為3是對的。
實現簡單的連接功能,初始化這些就可以搞定。現在分析USB_SetDevCondition(DEV_CON)函數;
/**********************************************************************
函數功能;設置USB設備狀態
函 數 名;USB_SetDevCondition
函數參數;conDEV_CON      0x01連接位表示設備的當前連接狀態。用于CONNECT輸出
DEV_CON_CH  0x02連接發生改變
  DEV_SUS      0x04掛起位表示當前的掛起狀態
                          DEV_SUS_CH  0x08掛起位(DEV_SUS)的變化指示,
                                                                  設備進入掛起狀態、設備斷開連接、                                                                                                  設備在其上行端口上接收到恢復信號,                                                                                                  會發生翻轉
                           DEV_RST      0x10總線復位位
函數返回;無
***********************************************************************/
void USB_SetDevCondition(uint32_t con)
{
  WrCmdDat(CMD_SET_DEV_STAT, DAT_WR_BYTE(con));
}
我們看到USB_SetDevCondition(DEV_CON);函數里面還調用了WrCmdDat(CMD_SET_DEV_STAT, DAT_WR_BYTE(con));函數這個函數是一個寫命令數據函數。
/**********************************************************************
函數功能;寫命令數據函數
函 數 名;WrCmdDat
函數參數;cmd;命令
                  val: 數據
函數返回;無
***********************************************************************/
void WrCmdDat (uint32_t cmd, uint32_t val)
{
  LPC_USB->DevIntClr = 1<<4;                /*DevIntClr寄存器是設備中斷清除寄存器
                                                                        寫相應的位就會清除DevIntSt設備中斷狀態
                                                                寄存器相應位,應為我們要寫命令,所以我
                                                                們要把命令代碼寄存器為空中斷標志位清除*/

  LPC_USB->CmdCode = cmd;                /*寫入命令*/

  while ((LPC_USB->DevIntSt & 1<<4) == 0);        /*等待命令代碼寄存器
為空中斷標志位置位*/

  LPC_USB->DevIntClr = 1<<4;                                /*清除中斷*/                                               
  LPC_USB->CmdCode = val;                                /*寫入數據*/      
  while ((LPC_USB->DevIntSt & 1<<4) == 0);        /*清除中斷*/
}
在寫命令數據函數里DevIntClr 寄存器有很詳細的注釋,關鍵要看的就是CmdCode寄存器,下面就是CmdCode寄存器的描述。
/*命令格式
低八位保留。
8--15位是命令段,
0x02代表讀、0x01代表寫、0x05代表命令。
16--23位是多用途字段,
當命令階段為0x05命令或0x02讀時,該域包含著命令代碼,
當命令階段為0x01寫狀態時,該域包含著命令寫數據。*/

現在來看第一次給CmdCode寄存器賦值,后面的注釋是說,/*寫入命令*/而我們的命令是這樣定義的,如下代碼。

#define CMD_SET_DEV_STAT  0x00FE0500        //FE設置設備狀態,05命令

按照上面的命令格式分析。815位是命令段值是0x05說明代表的是命令,1623位是就是命令代碼了值是0xFE。現在看手冊上說FE命令代表的是啥。

再看描述的時候一定要注意,上面寫的Command: 0xFE, Data: write 1 byte
意思是,命令0xFE,數據寫入一個字節,而寫入的一個字節是下一次向CmdCode寄存器執行寫數據時就可以操作0xFE命令所提供的功能,注釋/*寫入數據*/的那一行代碼。就是我們要實現的連接功能,現在來看下定義的數據是多少!

#define DAT_WR_BYTE(x)   (0x00000100 | ((x) << 16))        //x為要寫入的數據,01寫。

用前面說的命令格式分析就知道這條命令是寫命令。在main函數中調用的USB_SetDevCondition(DEV_CON);函數的參數DEV_CON的定義是;

#define DEV_CON  0x01        //連接位表示設備的當前連接狀態。用于CONNECT輸出

這說明寫入0xFE命令所提供功能的數據是0x01,對照前面0xFE提供的功能可以知道這就是讓CONNECT輸出低電平。這樣就實現了D2+拉高了。

到此第一章的知識講完。結合代碼和數據手冊可以更好的理解。不足之處還請多多指點。此帖會不斷更新,以實現一個USB HID的整個過程。附件有實現本章的代碼!

開發環境:集成開發環境μVision4 IDE版本4.60.0.0。
主機系統:Microsoft Windows XP
開發平臺:旺寶悍馬1788開發板。
USB例程.rar (6.4 MB)



本文地址:http://m.qingdxww.cn/thread-182339-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产呦精品一区二区三区下载 | 亚洲理论片在线中文字幕| 最近中文字幕2018MV高清在线| 玩50岁四川熟女大白屁股直播| 亚洲欧美日韩一级特黄在线| 日产免费线路一区二区三区| 人妖vk| 三级黄色片在线播放| 亚洲欧美在线精品一区二区| 小鸟酱在线看| 1024人成网站色www下载| 寂寞夜晚在线视频观看| 同桌上课把奶露出来给我玩| 四虎影视精品永久免费| 日本欧美视频在线| 亚洲第一网站免费视频| 亚洲ss| 97在线视频免费观看97| 精品一产品大全| 亚州免费一级毛片| 日韩免费高清视频网站| 青青视频免费看| 色啪啪888.com| 一色屋精品免费视频 视频| 久久er国产精品免费观看2| 女人麻豆国产香蕉久久精品| 中文字幕在线观看亚洲日韩| 奇米米奇| 亚洲精品色| 在线观看福利片| 精品视频中文字幕| 最近中文字幕2019免费版日本 | 亚洲第二色| 亚洲综合免费视频| 国产精品人妻无码免费A片导航| 青柠高清在线观看完整版| 三级黄片毛片| 欧美一区视频在线| 视频在线网站| 中文字幕在线日韩| 美女议员被泄裸照|