SAM4E单片机之旅——15、触屏输入与SPI通信
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);
}
}
- SAM4E单片机之旅——24、使用DSP库求向量数量积(05-08)
- SAM4E单片机之旅——23、在AS6(GCC)中使用FPU(05-02)
- SAM4E单片机之旅——22、GMAC和PHY的介绍与初始化(04-28)
- SAM4E单片机之旅——19、CAN间通信(04-19)
- SAM4E单片机之旅——20、DMAC之使用Multi-buffer进行内存拷贝(04-24)
- SAM4E单片机之旅——18、通过AFEC(ADC)获取输入的电压(04-17)