微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > SAM4E单片机之旅——15、触屏输入与SPI通信

SAM4E单片机之旅——15、触屏输入与SPI通信

时间:04-10 来源:互联网 点击:

96 MHz)

/* PMC */

PMC->PMC_PCER0 = (1 << ID_SPI);

const uint32_t RT_SPI_CS = 0; // 片选设备0

SPI->SPI_MR = SPI_MR_MSTR // Master 模式

| SPI_MR_MODFDIS // 关闭模式检测

| SPI_MR_PCS(~(1<<RT_SPI_CS)) 外设选择< p> 

| (SPI_MR_PS & 0) // 选择固定外设

;

SPI->SPI_CSR[RT_SPI_CS] =

SPI_CSR_BITS_8_BIT // 每次传输8比特数据

| (SPI_CSR_CPOL & 0) // 时钟无效时为低电平

| SPI_CSR_NCPHA // 在时钟的首边沿进行数据采集

| SPI_CSR_CSAAT // 传输完成后保持片选

| SPI_CSR_SCBR(96) // 波特率为对MCK进行96分频

;

SPI->SPI_CR = SPI_CR_SPIEN; // 使能SPI

使能ADS7843中断

1RTouchSendCmd(RT_CMD_ENABLE_PENIRQ);

  五、 具体功能实现

需要实现的功能在有触摸输入时,将ADS7843的输出绘制在LCD上。有了前面的基础,而且功能不复杂,所以实现起来也较为简单,直接看代码即可。

#include 

int pos_x, pos_y;

char print_buf[64];

const ili93xx_color_t bg_color = COLOR_WHITE;

const ili93xx_color_t fg_color = COLOR_BLACK;

ili93xx_fill(bg_color);

while (1)

{

/* 判断是否有触摸输入 */

if ((PIOA->PIO_PDSR & RT_IRQ_PIN) == 0)

{

/* 获取坐标 */

pos_x = RTouchSendCmd(RT_CMD_X_POS);

pos_y = RTouchSendCmd(RT_CMD_Y_POS);

/* 清屏 */

ili93xx_fill(bg_color);

/* 将坐标绘制在屏幕上 */

ili93xx_set_foreground_color(fg_color);

sprintf(print_buf, "X: %x", pos_x);

ili93xx_draw_string(100,100, print_buf);

sprintf(print_buf, "Y: %x", pos_y);

ili93xx_draw_string(100,150, print_buf);

/* 等待 */

for (volatile int i = 0; i < 500000; ++i)

;

/* 在获取输入坐标时停用了中断,需要重新启用*/

RTouchSendCmd(RT_CMD_ENABLE_PENIRQ);

}

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top