新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > SAM4E單片機之旅——14、LCD之SMC的配置

        SAM4E單片機之旅——14、LCD之SMC的配置

        作者: 時間:2017-04-05 來源:網絡 收藏

          在上個例子中,已經在ASF添加了ILI93xx模塊,并做好了相關的聲明。這次就做好SMC的配置,然后使用ASF提供的API在屏幕上打印出”Hello World!”字樣。

        本文引用地址:http://www.104case.com/article/201704/346201.htm

          一、 電路圖

            

        wps_clip_image-15037

         

          開發板的連接器的接線如圖所示。這些連線均按照SMC相應引腳的功能進行了連接,這樣的意圖很明顯就是要讓SMC來和進行交互。

          有兩個引腳需要注意:

          PD18引腳的外設A是NCS1,即讓連接至SMC的片選設備1中。

          RS線表示“寄存器選擇”,根據該引腳的不同電平,會選擇訪問不同的寄存器。而PC19引腳的外設A是地址線A1,這樣連接的影響在后面會說明。

          二、 SMC與LCD控制器的交互

          在與一些存儲設備進行交互時,會有一個比較復雜的時序。比如寫入該LCD控制器的寄存器時:

            

        wps_clip_image-19158

         

          而且,引腳間電平改變的時間差也是有一定的規定的。

          若使用SMC的話,做好相應的配置后,就會自動地完成這些時序的控制。并且,芯片會對一段地址進行映射,當訪問相應區間的地址時,就會交由SMC來完成實際的訪問工作:

            

        wps_clip_image-7292

         

          而LCD控制器為SMC的片選設備1,所以在訪問地址在區間 [0x6100 0000, 0x61FF FFFF] 時,會實際訪問到LCD控制器。而RS接的是數據線A1,所以根據訪問地址的第1位(從0數起)的不同,會影響RS引腳電平的高低。如在訪問地址0x6100 0000時RS為低電平,而訪問0x6100 0002時其為高電平。

          三、 SMC的時序設置

          可以在LCD控制器的芯片手冊上找到相應的時序:

            

        wps_clip_image-20330

         

          MCK為96 MHz時,設置如下:

          #define ILI93XX_LCD_CS 1

          #define SMC_CS SMC->SMC_CS_NUMBER[ILI93XX_LCD_CS]

          /* 如果使用ASF的PMC模塊,調用這個即可使能外設的時鐘*/

          pmc_enable_periph_clk(ID_SMC);

          SMC_CS.SMC_SETUP =

          SMC_SETUP_NWE_SETUP(1)

          | SMC_SETUP_NCS_WR_SETUP(1)

          | SMC_SETUP_NRD_SETUP(1)

          | SMC_SETUP_NCS_RD_SETUP(1);

          SMC_CS.SMC_PULSE =

          SMC_PULSE_NWE_PULSE(5)

          | SMC_PULSE_NCS_WR_PULSE(5)

          | SMC_PULSE_NRD_PULSE(15)

          | SMC_PULSE_NCS_RD_PULSE(15);

          SMC_CS.SMC_CYCLE =

          SMC_CYCLE_NWE_CYCLE(10)

          | SMC_CYCLE_NRD_CYCLE(300);

          /* 由NRD或NWE信號控制讀寫 */

          SMC_CS.SMC_MODE =

          SMC_MODE_READ_MODE

          | SMC_MODE_WRITE_MODE;

          這個設置不用太嚴格,如ASF示例代碼中的設置就和這有點差距,但是都能夠成功運行。另外,ASF中的示例代碼也是很好的學習材料。在Atmel Studio的Start Page中可以打開示例項目:

            

        wps_clip_image-30188

         

          四、 LCD模塊的使用

          在conf_board.h中,可以看到有兩個配置項。一般情況下,這兩個配置已經在開發板支持模塊中做好定義了。但是,看完上一小節的話,也應該知道它做出如此配置的原因。

          由于這個LCD控制器的使用略為復雜(它的芯片手冊有100多頁),而ASF也實現了相關的模塊,所以這次就繼續使用ASF了。

          ILI93xx中,實現了許多控制與繪圖模塊,也包含了一個英文字庫,可以很方便的進行基本圖形和英文的繪制。

          LCD的初時化。

          struct ili93xx_opt_t lcd_init_opt;

          lcd_init_opt.ul_width = ILI93XX_LCD_WIDTH;

          lcd_init_opt.ul_height = ILI93XX_LCD_HEIGHT;

          lcd_init_opt.foreground_color = COLOR_BLACK;

          lcd_init_opt.background_color = COLOR_WHITE;

          /* 初始化 LCD */

          ili93xx_init(&lcd_init_opt);

          /* 啟動LCD */

          ili93xx_display_on();

          將屏幕填充為天藍色。

          /* 像素格式為aRGB-888 */

          const uint32_t sky_blue_rgb = 0x87CEEB;

          ili93xx_set_foreground_color(sky_blue_rgb);

          ili93xx_draw_filled_rectangle(0, 0, ILI93XX_LCD_WIDTH, ILI93XX_LCD_HEIGHT);

          繪制文字。

          /* 繪制文字 */

          ili93xx_set_foreground_color(COLOR_BLACK);

          ili93xx_draw_string(50, 150, (uint8_t *)"Hello World!");

          還有許多其他的API,比如控制顯示方向等等,可以查看API文檔或者相應的頭文件。



        關鍵詞: SAM4E LCD

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 常熟市| 丰县| 当涂县| 南召县| 周宁县| 陇西县| 祁门县| 岑溪市| 博湖县| 交城县| 奉化市| 辉县市| 崇义县| 济宁市| 正安县| 和平县| 新津县| 胶州市| 盐城市| 桦甸市| 昌乐县| 阿拉善左旗| 韶关市| 长汀县| 维西| 益阳市| 东至县| 舟曲县| 偃师市| 天水市| 喜德县| 苏尼特左旗| 扶沟县| 贺兰县| 寻乌县| 监利县| 汶川县| 永靖县| 班玛县| 玛曲县| 皮山县|