EM9380是英創(chuàng)公司針對(duì)高速實(shí)時(shí)應(yīng)用設(shè)計(jì)的一款雙CPU工控主板,主CPU采用了FreeScale 454MHz ARM9 iMX283, 從CPU采用的是Atmel公司的64MHz Cortex-M3。EM9380預(yù)裝了WinCE6.0操作系統(tǒng),經(jīng)過(guò)我們精心的設(shè)計(jì),EM9380可實(shí)現(xiàn)最小為25uS 的實(shí)時(shí)控制應(yīng)用。
EM9380與英創(chuàng)公司的另一款8串口工控主板EM9280的引出管腳高度兼容,具體可參考《EM9380與EM9280兼容設(shè)計(jì)》一文。 EM9380與EM9280的GPIO對(duì)應(yīng)管腳完全一致,但在其各自復(fù)用的功能和軟件操作方法上有著較大的區(qū)別。下表是EM9380與EM9280 32位GPIO以及各自復(fù)用功能的對(duì)比。
PIN# | 信號(hào)名稱 | EM9280復(fù)用功能 | EM9380復(fù)用功能 |
CN1_27 | GPIO0 | COM2口CTS# | 復(fù)用定時(shí)器功能 |
CN1_28 | GPIO1 | COM2口RTS# | 復(fù)用定時(shí)器功能 |
CN1_29 | GPIO2 | 復(fù)用定時(shí)器功能 | |
CN1_30 | GPIO3 | 復(fù)用定時(shí)器功能 | |
CN1_31 | GPIO4 | PWM3 | |
CN1_32 | GPIO5 | PWM4 | |
CN1_33 | GPIO6 | PWM1 | PWM5 |
CN1_34 | GPIO7 | PWM2 | PWM6 |
CN1_35 | GPIO8 | AD0通道輸入 | |
CN1_36 | GPIO9 | AD1通道輸入 | |
CN2_15 | GPIO10 | COM6口RXD | AD2通道輸入 |
CN2_16 | GPIO11 | COM6口TXD | AD3通道輸入 |
CN2_17 | GPIO12 | AD4通道輸入 | |
CN2_18 | GPIO13 | AD5通道輸入 | |
CN2_19 | GPIO14 | AD6通道輸入 | |
CN2_20 | GPIO15 | AD7通道輸入 | |
CN2_21 | GPIO16 | COM2口CTS# | |
CN2_22 | GPIO17 | COM2口RTS# | |
CN2_23 | GPIO18 | COM6口RXD | |
CN2_24 | GPIO19 | COM6口TXD | |
CN2_25 | GPIO20 | PWM3 | PWM1 |
CN2_26 | GPIO21 | PWM4 | PWM2 |
CN2_27 | GPIO22 | I2C_SDA | I2C_SDA |
CN2_28 | GPIO23 | I2C_SCL | I2C_SCL |
CN2_29 | GPIO24 | IRQ1 | IRQ1 |
CN2_30 | GPIO25 | IRQ2 | IRQ2 |
CN2_31 | GPIO26 | IRQ3 | IRQ3 |
CN2_32 | GPIO27 | IRQ4 | IRQ4 |
CN2_33 | GPIO28 | SPI_MISO | SPI_MISO |
CN2_34 | GPIO29 | SPI_MOSI | SPI_MOSI |
CN2_35 | GPIO30 | SPI_SCLK | SPI_SCLK |
CN2_36 | GPIO31 | SPI_CS0N | SPI_CS0N |
從上表可以看出EM9380與EM9280的GPIO20~GPIO31功能完全一樣。而EM9380的GPIO0~GPIO15是從Cortex-M3從CPU引出、支持實(shí)時(shí)控制應(yīng)用的引腳,可實(shí)現(xiàn)高速AD、高精度PWM、數(shù)字PID、脈沖計(jì)數(shù)等高速實(shí)時(shí)控制,這正是EM9380的特色所在。
在應(yīng)用程序的設(shè)計(jì)上,EM9380的GPIO20~GPIO31使用與EM9280一樣的函數(shù)操作,EM9380的GPIO0~GPIO15則需要一組專門的API函數(shù)用來(lái)操作,這組API定義在mcu_api.h文件中,下面是對(duì)API函數(shù)的一個(gè)簡(jiǎn)要說(shuō)明。
// 打開(kāi)MCU操作單元,獲取MCU的句柄。
HANDLE OpenMCU( int Index );
// 關(guān)閉MCU操作單元
BOOL CloseMCU( HANDLE hMCU );
// 獲取MCU的版本信息。
BOOL MCU_GetVInfo( HANDLE hMCU, PMCU_VER_INFO pMCU_VInfo );
// MCU GPIO操作:設(shè)置相關(guān)的GPIO位為輸出IO。
BOOL MCU_GPIO_OutEnable( HANDLE hMCU, UINT32 dwEnBits );
// MCU GPIO操作:設(shè)置相關(guān)的GPIO位為輸入IO。
BOOL MCU_GPIO_OutDisable(HANDLE hMCU, UINT32 dwDisBits );
// MCU GPIO操作:設(shè)置輸出GPIO位輸出高位。
BOOL MCU_GPIO_OutSet( HANDLE hMCU, UINT32 dwSetBits );
// MCU GPIO操作:設(shè)置輸出GPIO位輸出低位。
BOOL MCU_GPIO_OutClear( HANDLE hMCU, UINT32 dwClearBits );
// MCU GPIO操作:獲取相關(guān)輸入GPIO位狀態(tài)值。
BOOL MCU_GPIO_PinState( HANDLE hMCU, UINT32* pPinState );
// MCU GPIO操作:?jiǎn)?dòng)實(shí)時(shí)監(jiān)控輸入GPIO位狀態(tài)值。
BOOL MCU_GPIO_PinMonitor( HANDLE hMCU, UINT32* pPinState, UINT32 dwPeriod );
// MCU PWM操作:?jiǎn)?dòng)/停止PWM通道, 啟動(dòng)參數(shù)包括頻率、占空比和初始極性
// 輸入?yún)?shù)dwCh: PWM通道號(hào), = 3, 4, 5, 6
// dwFreq: PWM輸出頻率,單位Hz
// dwDuty: PWM輸出占空比,單位.1%, 輸入范圍= 0-1000
// dwPol: PWM初始極性,= 0: 低電平, = 1: 高電平
BOOL MCU_PWM_CHANNEL( HANDLE hMCU, DWORD dwCh, DWORD dwFreq, DWORD dwDuty, DWORD dwPol );
// MCU ADC操作:?jiǎn)?dòng)ADC通道常規(guī)數(shù)據(jù)采集
// 輸入?yún)?shù)dwChMode: AD通道模式= 0: 單端, = 1: 差分
// pBuf: AD數(shù)據(jù)Buffer
// dwBufSize: AD數(shù)據(jù)Buffer的長(zhǎng)度,決定要采集的通道數(shù), WORD長(zhǎng)度對(duì)齊
BOOL MCU_ADC_Generic( HANDLE hMCU, DWORD dwChMode, WORD *pBuf, DWORD dwBufSize );
// MCU 等待實(shí)時(shí)數(shù)據(jù)。
// return TRUE: 接收到實(shí)時(shí)數(shù)據(jù)
// FALSE: no
BOOL WaitForData( HANDLE hMCU, DWORD dwTimeout );
// 功能: 讀取實(shí)時(shí)數(shù)據(jù)命令數(shù)據(jù)
// 返回值:MCU實(shí)時(shí)數(shù)據(jù)類型編號(hào)
// <0: 無(wú)數(shù)據(jù)?
// =1: TYPE_MCU_GPIO_INFO
// =2: TYPE_MCU_ADC_INFO
DWORD MCU_Read( HANDLE hMCU, LPVOID pBuffer, DWORD Count );
“EM9380開(kāi)發(fā)光盤\Sortware\C例程”目錄下的Mcu_TestSDK工程,詳細(xì)展示了上面API函數(shù)的使用方法,在使用這些API函數(shù)前,需要在自己的工程中鏈接對(duì)應(yīng)的庫(kù)文件“mcusdk.lib”。
#pragma comment( lib, 'mcusdk.lib' )
mcusdk.lib實(shí)際上是為了方便用戶使用MCU功能(MCU即EM9380的從CPU)做的二次封裝,在mcusdk.lib庫(kù)內(nèi)部依然調(diào)用的是標(biāo)準(zhǔn)流式驅(qū)動(dòng)接口函數(shù),比如通過(guò)CreateFile打開(kāi)驅(qū)動(dòng)句柄,通過(guò)DeviceIoControl與MCU驅(qū)動(dòng)交互。利用這些標(biāo)準(zhǔn)驅(qū)動(dòng)接口函數(shù),用戶可以使用EM9380從CPU的更多高級(jí)功能,我們已經(jīng)做了一些EM9380在高速實(shí)時(shí)控制方面應(yīng)用的案例,這些例子演示了通過(guò)標(biāo)準(zhǔn)驅(qū)動(dòng)接口函數(shù)操作MCU的方法。
相關(guān)閱讀:
《EM9380多通道AD數(shù)據(jù)采集》
《EM9380多路任意脈沖發(fā)生器及應(yīng)用》
-
嵌入式主板
+關(guān)注
關(guān)注
7文章
6086瀏覽量
35533
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論