新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于ARM平臺(tái)的MEMS輸入設(shè)備的固件設(shè)計(jì)

基于ARM平臺(tái)的MEMS輸入設(shè)備的固件設(shè)計(jì)

作者: 時(shí)間:2009-09-22 來源:網(wǎng)絡(luò) 收藏

  2.遠(yuǎn)端子系統(tǒng)

  遠(yuǎn)端子系統(tǒng)的主要任務(wù)是加速度計(jì)信號(hào)的采集,信號(hào)的放大、濾波等的處理,控制器 對(duì)射頻無線發(fā)送的軟件控制。主要的實(shí)現(xiàn)過程為:使用GPIO 口,并按照一定的采樣頻率將 加速度信號(hào)送入微控制器LPC2214,在LPC2214 內(nèi)部進(jìn)行信號(hào)放大和A/D 轉(zhuǎn)換;并且按照 無線傳輸模塊定義的格式將數(shù)據(jù)進(jìn)行編碼,再通過GPIO 口傳送給無線射頻模塊。 主程序主要實(shí)現(xiàn)各個(gè)器件的初始化和任務(wù)的調(diào)用。

  int main(void)

  {

  TargetInit();

  Init_RF();

  Init_ADC();

  Init_Transmitter();

  TaskMouse();

  return 0;

  }

  在完成各個(gè)模塊的初始化之后,執(zhí)行Taskmouse 函數(shù)。Taskmouse 函數(shù)是主執(zhí)行函數(shù), 包含了GetMousePos()、ModeSelect()、Get_ADCValue_X()和Get_ADCValue_Y()等子函數(shù)。 調(diào)用該函數(shù)就可以執(zhí)行加速度計(jì)信號(hào)采集、鼠標(biāo)位置確定、系統(tǒng)工作模式選擇等程序行。 獲取鼠標(biāo)位置信息的示意程序如下所示:

  void GetMousePos(uint8 *buf, uint8 shift)

  {

  uint8 i;

  uint8 sampf = 50;

  uint32 dpi = 100;

  uint32 sum_x, sum_y;

  sum_x = sum_y = 0;

  for (i = 0; i sampf; ++i) {

  sum_x += Get_ADCValue_X(dpi);

  sum_y += Get_ADCValue_Y(dpi); }

  buf[0] = (sum_x / sampf) >> shift;

  buf[1] = (sum_y / sampf) >> shift;

  }

  3.主機(jī)端子系統(tǒng)

  在主機(jī)端子系統(tǒng)中,NRF2401 接受遠(yuǎn)端子系統(tǒng)的數(shù)據(jù)并從I/O 口進(jìn)入LPC2214,數(shù)據(jù)通 過協(xié)議等處理為鼠標(biāo)格式,最后通過USB 接口發(fā)送給主機(jī)。在該模塊中,我們采用了操作 系統(tǒng)來實(shí)現(xiàn)多任務(wù)處理。



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉