色偷偷偷久久伊人大杳蕉,色爽交视频免费观看,欧美扒开腿做爽爽爽a片,欧美孕交alscan巨交xxx,日日碰狠狠躁久久躁蜜桃

x
x

[資料分享] 悍馬1788USB學(xué)習(xí)筆記

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

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

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

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

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

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

#define CMD_SET_DEV_STAT  0x00FE0500        //FE設(shè)置設(shè)備狀態(tài),05命令

按照上面的命令格式分析。815位是命令段值是0x05說明代表的是命令,1623位是就是命令代碼了值是0xFE,F(xiàn)在看手冊(cè)上說FE命令代表的是啥。

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

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

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

#define DEV_CON  0x01        //連接位表示設(shè)備的當(dāng)前連接狀態(tài)。用于CONNECT輸出

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

到此第一章的知識(shí)講完。結(jié)合代碼和數(shù)據(jù)手冊(cè)可以更好的理解。不足之處還請(qǐng)多多指點(diǎn)。此帖會(huì)不斷更新,以實(shí)現(xiàn)一個(gè)USB HID的整個(gè)過程。附件有實(shí)現(xiàn)本章的代碼!

開發(fā)環(huán)境:集成開發(fā)環(huán)境μVision4 IDE版本4.60.0.0。
主機(jī)系統(tǒng):Microsoft Windows XP。
開發(fā)平臺(tái):旺寶悍馬1788開發(fā)板。
USB例程.rar (6.4 MB)



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

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表