《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 業(yè)界動(dòng)態(tài) > S1D13506顯示控制器與AT91RM9200處理器的接口設(shè)計(jì)和應(yīng)用

S1D13506顯示控制器與AT91RM9200處理器的接口設(shè)計(jì)和應(yīng)用

2008-06-18
作者:劉和平, 常 猛

  摘 要: 介紹了AT91RM9200處理器和S1D13506顯示控制器" title="顯示控制器">顯示控制器的接口設(shè)計(jì)" title="的接口設(shè)計(jì)">的接口設(shè)計(jì),在此基礎(chǔ)上詳細(xì)闡述了μC/GUI" title="C/GUI">C/GUI移植到AT91RM9200的過(guò)程,并給出一個(gè)應(yīng)用實(shí)例。
  關(guān)鍵詞: S1D13506 AT91RM9200 μC/GUI 移植


1 S1D13506和AT91RM9200介紹
  AT91RM9200是一款基于ARM920T內(nèi)核的高性?xún)r(jià)比、低功耗、32位的ARM芯片,時(shí)鐘頻率為180MHz,運(yùn)算速度可以達(dá)到200MIPS。AT91RM9200具有存儲(chǔ)器管理單元(MMU)、16KB的SRAM和128KB的ROM以及外部總線接口(EBI),支持SDRAM、靜態(tài)存儲(chǔ)器、Burst Flash、CompactFals、SmartMedia以及NAND Flash,還集成了USB控制器、以太網(wǎng)控制器、RTC、SPI、I2C等豐富的外圍設(shè)備。AT91RM9200處理器內(nèi)部沒(méi)有集成LCD控制器,因而需要配備專(zhuān)用的顯示控制器,才能實(shí)現(xiàn)LCD顯示。
  S1D13506是EPSON大規(guī)模顯示控制器家族中較新的一款,是以SED1354控制器為基礎(chǔ)發(fā)展起來(lái)的具有更多功能的LCD顯示控制器。它可以靈活地對(duì)各種不同的顯示方式進(jìn)行設(shè)置,功能非常強(qiáng)大,可以和目前市場(chǎng)上流行的多種CPU總線兼容。
2 AT91RM9200與S1D13506的接口設(shè)計(jì)
2.1 AT91RM9200的EBI總線接口

  AT91RMR9200的EBI總線接口用以確保多個(gè)外設(shè)與基于ARM器件的內(nèi)置控制存儲(chǔ)器之間實(shí)現(xiàn)正確數(shù)據(jù)傳輸。靜態(tài)存儲(chǔ)器、SDRAM及Burst Flash控制器均可作為EBI 上的外部存儲(chǔ)控制器。EBI擁有8個(gè)片選信號(hào)(NCS[7:0]),可處理多達(dá)8 個(gè)外設(shè)的數(shù)據(jù)傳輸;數(shù)據(jù)通過(guò)8位或16位數(shù)據(jù)總線進(jìn)行傳輸(SMC_CSR中的DBW 位控制相應(yīng)的數(shù)據(jù)總線寬度);地址總線高達(dá)26 位。在16位數(shù)據(jù)總線寬度下,EBI與顯示控制器相關(guān)的總線接口信號(hào)定義如表1所示。


2.2 S1D13506的PC卡總線接口
  S1D13506的PC卡總線接口可以很方便地與AT91RM9200相連,其總線接口信號(hào)定義如表2所示。


2.3 接口分析及實(shí)現(xiàn)
  從上述接口信號(hào)的定義分析得出,AT91RM9200 的AB[1:20]、DB[0:15] 、NRST、NCS2、NWR1、NWR0、信號(hào)引腳和S1D13506的A[1:20]、D[0:15]、R E S E T、CS 、WE1、W E 0信號(hào)引腳可以分別進(jìn)行連接,而S1D13506的RD/WR和RD則短接以后和AT91RM9200的NRD信號(hào)相連。S1D13506與AT91RM9200的總線連接如圖1所示。S1D13506的輸出可以驅(qū)動(dòng)VGA顯示器或者最大為800×600點(diǎn)陣的 LCD顯示屏。


3 μC/GUI的移植
  μC/GUI是Micrium公司開(kāi)發(fā)的通用的嵌入式用戶(hù)圖形界面軟件。它為任何使用圖形LCD的應(yīng)用程序提供獨(dú)立于處理器和LCD控制器的有效圖形用戶(hù)接口??梢詰?yīng)用于單一任務(wù)環(huán)境中,也可以應(yīng)用于多任務(wù)環(huán)境中。μC/GUI能夠應(yīng)用于任何LCD控制器和CPU的任何尺寸的物理顯示或者模擬顯示中。
  本接口電路的底層測(cè)試軟件均用C語(yǔ)言編程實(shí)現(xiàn)。由于源程序太長(zhǎng),在本文中不便列出。該程序可以在www.atmel.com上找到。
  在S1D13506顯示控制器硬件驅(qū)動(dòng)程序正常的情況下,μC/GUI移植的主要工作就是修改LCD_Conf.h、GUICONF.h和GUI_X.C三個(gè)配置文件。GUICONF.h、GUI_X.C的移植比較簡(jiǎn)單,下面主要介紹LCD_Conf.h的移植。
  #define LCD_XSIZE (640) /*定義液晶的參數(shù),640x480*/
  #define LCD_YSIZE (480)
  #define LCD_FIXEDPALETTE (565) /*RGB 565格式*/
  #define LCD_SWAP_BYTE_ORDER (1)  //16bit數(shù)據(jù)總線時(shí)需要交換
  #define LCD_CONTROLLER 1356 //定義控制器的型號(hào)
  #define S1D13806_BASE1 ( (unsigned char *) 0x30000000 )//該地址由片選NCS2決定
  #define S1D13806_DISP_MEM_BASE1( ( (int)S1D13806_BASE1) + ((int) 0x200000) ) //控制器的顯示緩沖區(qū)開(kāi)始地址
  #define LCD_READ_MEM(Off)
  *((U16*) (S1D13806_DISP_MEM_BASE1+(((U32)(Off))<<1)))  //定義讀函數(shù)
  #define LCD_WRITE_MEM(Off,data)
  *((U16*)(S1D13806_DISP_MEM_BASE1+(((U32)(Off))<<1)))=data   //定義寫(xiě)函數(shù)
  #define LCD_READ_REG(Off) 0     //在本次移植中沒(méi)用,定義為空,避免做大改動(dòng)
  #define LCD_WRITE_REG(Off,data)    //在本次移植中沒(méi)用,定義為空,避免做大改動(dòng)
  #define LCD_INIT_CONTROLLER() AT91RM9200_LCD_Init ()  // 初始化 LCD 控制器,該段程序可以在www.atmel.com上找到
  另外,μC/GUI中還有一些跟時(shí)間相關(guān)的調(diào)用,如GUI_X_Delay()等。這些函數(shù)需用到系統(tǒng)時(shí)間變量OS_TimeMS,該變量可用μC/OS" title="C/OS">C/OS 操作系統(tǒng)維護(hù)更新,或者通過(guò)以下方式解決。
  void GUI_X_Delay(int ms) {
  // int tEnd = OS_TimeMS + ms;
  // while ((tEnd - OS_TimeMS) > 0); //該變量可由μC/
  OS 操作系統(tǒng)來(lái)維護(hù)更新
  extern void Delay(int time); //用戶(hù)的延時(shí)函數(shù)
  Delay(150*ms);
  }
  LCD_Conf.h、GUICONF.h和GUI_X.C三個(gè)配置文件修改完以后,μC/GUI的移植基本完成。
4 μC/GUI的一個(gè)應(yīng)用實(shí)例
  首先通過(guò)和AT91RM9200相連的MAX1320芯片把電網(wǎng)三相電壓采集進(jìn)來(lái),然后在液晶上把三相電壓波形顯示出來(lái)。顯示效果如圖2所示。


4.1 主程序的編寫(xiě)
  在對(duì)電網(wǎng)一個(gè)周波采樣完成以后,調(diào)用GUI_MEMDEV_Draw函數(shù)在LCD上顯示波形。主程序如下:
  int main()
  {
  BSP_init(); //和AT91RM9200相關(guān)的硬件初始化
  GUI_Init(); //ucGUI初始化程序
  GUI_MEMDEV_Load();
  Lable();
  While(1)
  {
  ADResult(); //讀出AD采樣的結(jié)果
  …………
  if(AD FLAG==1)GUI_MEMDEV_Draw(&Rect, sinwave, &0, 0, 0); //當(dāng)一個(gè)周波采樣完成繪制波形
  }
  }
4.2 回調(diào)" title="回調(diào)">回調(diào)函數(shù)的編寫(xiě)
  回調(diào)函數(shù)是用戶(hù)編寫(xiě)的主要部分,它以參數(shù)的形式被主函數(shù)調(diào)用。在本程序中,回調(diào)函數(shù)的編寫(xiě)流程是:首先對(duì)黑色矩形框進(jìn)行清屏,然后繪制暗灰色網(wǎng)格,最后調(diào)用GUI_DrawGraph()繪制曲線。程序如下:
  static void sinwave(void)
  {
  int i;
  GUI_SetBkColor(GUI_BLUE); //把背景設(shè)置為藍(lán)色
  GUI_SetColor(GUI_BLACK ); //設(shè)置黑色矩形框
  GUI_ClearRect(34, (LCD_YSIZE1 - 20) - YSIZE, (LCD_XSIZE1-2), (LCD_YSIZE1 - 21));
  for (i=0;i<(YSIZE/2);i+=40){ //繪制暗灰色網(wǎng)格
  GUI_DrawHLine((LCD_YSIZE1-20) - (YSIZE / 2) + i, 34,(LCD_XSIZE1 - 2));
  if (i) {
  GUI_DrawHLine((LCD_YSIZE1 - 20) - (YSIZE / 2) - i, 34, (LCD_XSIZE1 - 2));
   }
  }
  for (i = 0; i < (LCD_XSIZE1 - 20); i += 90) {
  GUI_DrawVLine(123 + i, (LCD_YSIZE1 - 20)-YSIZE,(LCD_YSIZE1 - 21));
  }
  GUI_SetColor(GUI_RED); //繪制A相電壓
  GUI_DrawGraph(UA, (LCD_XSIZE1 - 40), 34, (LCD_YSIZE1 - 20) - YSIZE);
  GUI_SetColor(GUI_YELLOW); //繪制B相電壓
  GUI_DrawGraph(UB, (LCD_XSIZE1 - 20), 34, (LCD_YSIZE1 - 20) - YSIZE);
  GUI_SetColor(GUI_GREEN); //繪制C相電壓
  GUI_DrawGraph(UC, (LCD_XSIZE1 - 20), 34, (LCD_YSIZE1 - 20) - YSIZE);
  }
  本文介紹了μC/GUI在AT91RM9200處理器和SID13506顯示控制器的接口電路上移植的過(guò)程,并給出了一個(gè)應(yīng)用實(shí)例。實(shí)踐證明,μC/GUI具有完善的圖形函數(shù)接口、占用RAM和ROM的空間小、可移植性好等特點(diǎn)。在后PC機(jī)時(shí)代,μC/GUI將會(huì)有非常廣闊的應(yīng)用前景。
參考文獻(xiàn)
1 μC/GUI在MSG19264液晶上的移植.電子技術(shù)應(yīng)用, 2004;30(8)
2 基于ARM7 S3C44B0X嵌入式系統(tǒng)gui設(shè)計(jì).儀器儀表用戶(hù), 2004;(4)

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。