前言
恩智浦“FRDM-MCXN947”評(píng)測(cè)活動(dòng)由安富利和與非網(wǎng)協(xié)同舉辦。本篇內(nèi)容由與非網(wǎng)用戶(hù)發(fā)布,已獲轉(zhuǎn)載許可。原文可在與非網(wǎng)(eefocus)工程師社區(qū)查看。
觸摸屏介紹
觸摸屏介紹參見(jiàn):【用戶(hù)測(cè)評(píng)(六):NXP FRDM-MCXN947 FLEXIO_SPI驅(qū)動(dòng)TFT LCD】
它的主要幾個(gè)參數(shù)如下:

01與MCXN947連接關(guān)系
觸摸屏信號(hào)包含通信信號(hào)和復(fù)位信號(hào)。這里4個(gè)管腳全部配置為GPIO,用GPIO模擬IIC。

移植觸摸接口
這里選擇GPIO模擬IIC的通信方式,簡(jiǎn)單,易于移植。
參考:【用戶(hù)測(cè)評(píng)(六):NXP FRDM-MCXN947 FLEXIO_SPI驅(qū)動(dòng)TFT LCD】
01管腳配置
使用MCUXpresso Config Tools大大方便管腳配置工作。


保存配置生成代碼,最終生成兩個(gè)函數(shù)TFT_Touch_Init(),TFT_Touch_Deinit()其中TFT_Touch_Init()函數(shù)定義如下,會(huì)被BOARD_InitBootPins()調(diào)用,無(wú)需我們手動(dòng)調(diào)用。
voidTFT_Touch_Init(void) { /* Enables the clock for GPIO0: Enables clock */ CLOCK_EnableClock(kCLOCK_Gpio0); /* Enables the clock for GPIO4: Enables clock */ CLOCK_EnableClock(kCLOCK_Gpio4); /* Enables the clock for PORT0 controller: Enables clock */ CLOCK_EnableClock(kCLOCK_Port0); /* Enables the clock for PORT4: Enables clock */ CLOCK_EnableClock(kCLOCK_Port4); gpio_pin_config_tCTP_SCL_config= { .pinDirection = kGPIO_DigitalOutput, .outputLogic =0U }; /* Initialize GPIO functionality on pin PIO0_14 (pin E11) */ GPIO_PinInit(TFT_TOUCH_INIT_CTP_SCL_GPIO, TFT_TOUCH_INIT_CTP_SCL_PIN, &CTP_SCL_config); gpio_pin_config_tCTP_SDA_config= { .pinDirection = kGPIO_DigitalOutput, .outputLogic =0U }; /* Initialize GPIO functionality on pin PIO0_15 (pin G13) */ GPIO_PinInit(TFT_TOUCH_INIT_CTP_SDA_GPIO, TFT_TOUCH_INIT_CTP_SDA_PIN, &CTP_SDA_config); gpio_pin_config_tCTP_RST_config= { .pinDirection = kGPIO_DigitalOutput, .outputLogic =0U }; /* Initialize GPIO functionality on pin PIO0_22 (pin B8) */ GPIO_PinInit(TFT_TOUCH_INIT_CTP_RST_GPIO, TFT_TOUCH_INIT_CTP_RST_PIN, &CTP_RST_config); gpio_pin_config_tCTP_INT_config= { .pinDirection = kGPIO_DigitalInput, .outputLogic =0U }; /* Initialize GPIO functionality on pin PIO4_16 (pin R8) */ GPIO_PinInit(TFT_TOUCH_INIT_CTP_INT_GPIO, TFT_TOUCH_INIT_CTP_INT_PIN, &CTP_INT_config); /* PORT0_14 (pin E11) is configured as PIO0_14 */ PORT_SetPinMux(TFT_TOUCH_INIT_CTP_SCL_PORT, TFT_TOUCH_INIT_CTP_SCL_PIN, kPORT_MuxAlt0); PORT0->PCR[14] = ((PORT0->PCR[14] & /* Mask bits to zero which are setting */ (~(PORT_PCR_IBE_MASK))) /* Input Buffer Enable: Enables. */ |PORT_PCR_IBE(PCR_IBE_ibe1)); /* PORT0_15 (pin G13) is configured as PIO0_15 */ PORT_SetPinMux(TFT_TOUCH_INIT_CTP_SDA_PORT, TFT_TOUCH_INIT_CTP_SDA_PIN, kPORT_MuxAlt0); PORT0->PCR[15] = ((PORT0->PCR[15] & /* Mask bits to zero which are setting */ (~(PORT_PCR_IBE_MASK))) /* Input Buffer Enable: Enables. */ |PORT_PCR_IBE(PCR_IBE_ibe1)); /* PORT0_22 (pin B8) is configured as PIO0_22 */ PORT_SetPinMux(TFT_TOUCH_INIT_CTP_RST_PORT, TFT_TOUCH_INIT_CTP_RST_PIN, kPORT_MuxAlt0); PORT0->PCR[22] = ((PORT0->PCR[22] & /* Mask bits to zero which are setting */ (~(PORT_PCR_IBE_MASK))) /* Input Buffer Enable: Enables. */ |PORT_PCR_IBE(PCR_IBE_ibe1)); /* PORT4_16 (pin R8) is configured as PIO4_16 */ PORT_SetPinMux(TFT_TOUCH_INIT_CTP_INT_PORT, TFT_TOUCH_INIT_CTP_INT_PIN, kPORT_MuxAlt0); PORT4->PCR[16] = ((PORT4->PCR[16] & /* Mask bits to zero which are setting */ (~(PORT_PCR_IBE_MASK))) /* Input Buffer Enable: Enables. */ |PORT_PCR_IBE(PCR_IBE_ibe1)); }
02觸摸接口文件說(shuō)明
此屏幕廠商給的觸摸屏相關(guān)的文件如下:
touch.h是觸摸屏對(duì)外的接口文件,聲明TP_Init()函數(shù)和一個(gè)全局變量extern _m_tp_dev tp_dev表示觸摸狀態(tài)信息;
touch.c是觸摸屏接口實(shí)現(xiàn)文件,實(shí)現(xiàn)TP_init()函數(shù)并初始化全局變量tp_dev;
ctpiic.h是IIC接口的聲明,這里以GPIO模擬IIC,所以需要提供IIC各種基礎(chǔ)信號(hào)的聲明,如發(fā)出起始信號(hào)、停止信號(hào)、發(fā)送一個(gè)字節(jié)、讀取一個(gè)字節(jié)、發(fā)送ACK、接收ACK等基礎(chǔ)信號(hào)的聲明;
ctpiic.c是IIC接口的實(shí)現(xiàn),以GPIO模擬IIC的實(shí)現(xiàn);
ft6336.h是這顆FT6336觸摸IC的驅(qū)動(dòng)文件,包含寄存器定義和寄存器讀寫(xiě)函數(shù)、獲取觸摸狀態(tài)信息的函數(shù)的聲明;
ft6336.c是這顆FT6336觸摸IC驅(qū)動(dòng)的實(shí)現(xiàn)文件,包含寄存器讀寫(xiě)函數(shù)的實(shí)現(xiàn)、掃描觸摸屏獲取狀態(tài)的函數(shù)的實(shí)現(xiàn);
03觸摸接口移植適配
主要適配工作是GPIO模擬IIC功能的實(shí)現(xiàn),即修改ctpiic.c和ctpiic.h文件。
在頭文件中需要提供幾個(gè)宏定義,如下所示,因?yàn)槭荊PIO模擬IIC,所以需要實(shí)現(xiàn)如下的API:
CTP_IIC_Init()初始化IIC兩個(gè)管腳,初始配置為輸出模式,高電平;
CTP_IIC_Start()IIC作為Master發(fā)起起始信號(hào);
CTP_IIC_Stop()IIC作為Master發(fā)起結(jié)束信號(hào);
CTP_IIC_Send_Byte()IIC以GPIO模擬的方式,移位以MSB的方式發(fā)送一個(gè)字節(jié);
CTP_IIC_Read_Byte()IIC切換SDA為輸入方向,讀取一個(gè)字節(jié);
CTP_IIC_Wait_Ack()IIC作為Master等待ACK信號(hào);
CTP_IIC_Ack()IIC發(fā)送一個(gè)ACK信號(hào);
CTP_IIC_Nack()IIC發(fā)送一個(gè)NAK信號(hào);
雖說(shuō)有這么多的接口需要實(shí)現(xiàn),但實(shí)際上我只需要實(shí)現(xiàn)CTP_IIC_Init()初始化SCL/SDA對(duì)應(yīng)的兩個(gè)管腳,然后實(shí)現(xiàn)下面的幾個(gè)宏定義即可,如下代碼所示:
CTP_SDA_IN()切換SDA管腳為輸入方向,每種MCU的驅(qū)動(dòng)調(diào)用不同,這里調(diào)用NXP的API也同時(shí)以寄存器的訪問(wèn)方式相結(jié)合,實(shí)現(xiàn)SDA管腳切換為輸入方式;
CTP_SDA_OUT()切換為SDA管腳為輸出方向,原理同上;
CTP_IIC_SCL(n)實(shí)現(xiàn)SCL管腳輸出高低電平;
CTP_IIC_SDA(n)實(shí)現(xiàn)SDA管腳輸出高低電平;
CTP_READ_SDA實(shí)現(xiàn)讀取SDA管腳輸入電平,這幾個(gè)宏定義直接調(diào)用NXP的庫(kù)函數(shù)即可;
#ifndef__CTPIIC_H #define__CTPIIC_H #include#include"pin_mux.h" #include"fsl_gpio.h" //IIC IO方向設(shè)置 #defineCTP_SDA_IN() do { GPIO_PortInputEnable(TFT_TOUCH_INIT_CTP_SDA_GPIO, TFT_TOUCH_INIT_CTP_SDA_GPIO_PIN_MASK); TFT_TOUCH_INIT_CTP_SDA_GPIO->PDDR&=GPIO_FIT_REG(~(1UL < PDDR|=GPIO_FIT_REG(1UL <
后面的幾個(gè)API都依賴(lài)于上面的宏定義,我們無(wú)需過(guò)多關(guān)心。下面給出其中一個(gè)函數(shù)的實(shí)現(xiàn),可以看出都依賴(lài)于上面的宏定義。
voidCTP_IIC_Send_Byte(uint8_t txd) { uint8_t t; CTP_SDA_OUT(); CTP_IIC_SCL(0);//拉低時(shí)鐘開(kāi)始數(shù)據(jù)傳輸 for(t =0;t <8;t++) ? { CTP_IIC_SDA((txd &0x80) >>7); txd <<=1; CTP_IIC_SCL(1); CTP_Delay(); CTP_IIC_SCL(0); CTP_Delay(); ? } }
運(yùn)行效果
先運(yùn)行廠商提供的觸摸屏測(cè)試程序,發(fā)現(xiàn)很卡,屏幕刷新很卡,觸摸屏也不靈敏。這個(gè)是由原因的,模組廠商的刷屏函數(shù)是一個(gè)一個(gè)打點(diǎn),沒(méi)有發(fā)揮 FLEXIO_SPI_EDMA的優(yōu)勢(shì),所以刷屏很卡,繼而影響觸摸效果。
關(guān)于安富利
安富利是全球領(lǐng)先的技術(shù)分銷(xiāo)商和解決方案提供商,在過(guò)去一個(gè)多世紀(jì)里一直秉持初心,致力于滿(mǎn)足客戶(hù)不斷變化的需求。通過(guò)遍布全球的專(zhuān)業(yè)化和區(qū)域化業(yè)務(wù)覆蓋,安富利可在產(chǎn)品生命周期的每個(gè)階段為客戶(hù)和供應(yīng)商提供支持。安富利能夠幫助各種類(lèi)型的公司適應(yīng)不斷變化的市場(chǎng)環(huán)境,在產(chǎn)品開(kāi)發(fā)過(guò)程中加快設(shè)計(jì)和供應(yīng)速度。安富利在整個(gè)技術(shù)價(jià)值鏈中處于中心位置,這種獨(dú)特的地位和視角讓其成為了值得信賴(lài)的合作伙伴,能夠幫助客戶(hù)解決復(fù)雜的設(shè)計(jì)和供應(yīng)鏈難題,從而更快地實(shí)現(xiàn)營(yíng)收。
-
恩智浦
+關(guān)注
關(guān)注
14文章
6095瀏覽量
147531 -
觸摸屏
+關(guān)注
關(guān)注
42文章
2460瀏覽量
121996 -
移植
+關(guān)注
關(guān)注
1文章
414瀏覽量
29414 -
GPIO
+關(guān)注
關(guān)注
16文章
1328瀏覽量
56231
原文標(biāo)題:用戶(hù)測(cè)評(píng)(九):NXP FRDM-MCXN947 移植觸摸屏
文章出處:【微信號(hào):AvnetAsia,微信公眾號(hào):安富利】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
TFT適配LVGL實(shí)踐分享
恩智浦MCX N23的官方評(píng)估板FRDM-MCXN236詳解
在恩智浦FRDM-MCXN947開(kāi)發(fā)板部署DeepSeek大語(yǔ)言模型
使用恩智浦FRDM-MCXN947開(kāi)發(fā)板LVGL移植觸摸屏
FRDM-MCXN947的純Linux命令行環(huán)境搭建
關(guān)于將Flash寫(xiě)入FRDM-MCXN947的問(wèn)題求解
FRDM-MCXN947在初始化lpI2C時(shí), I2C無(wú)法正常工作怎么解決?
富昌電子推薦兩款恩智浦的MCX A和MCX N系列微控制器
《恩智浦FRDM-MCXN947開(kāi)發(fā)實(shí)踐指南》上線啦
使用VSCode調(diào)試FRDM MCXN947開(kāi)發(fā)板
基于Label CIFAR10 image on FRDM-MCXN947例程實(shí)現(xiàn)鞋和帽子的識(shí)別
使用NXP MCX-N板卡搭建環(huán)境及點(diǎn)燈
恩智浦推出FRDM i.MX 93開(kāi)發(fā)板
《恩智浦FRDM-MCXA156開(kāi)發(fā)實(shí)踐指南》上線啦
使用恩智浦FRDM-MCXN947開(kāi)發(fā)板移植觸摸屏
評(píng)論