来源:百问网_嵌入式linux wiki_jz2440 新1期视频维基教程 (视频文字版)
作者:韦东山
本文字数:2725,阅读时长:3.5分钟
第018课 ADC和触摸屏 第006节_触摸屏编程_ADC中断
这节课我们加上ADC中断把触点的xy坐标读出来
查看touchscreen.c
写出这个自动测量的函数
void enter_auto_measure_mode(void)
{
//现在是自动测量,我们没有机会分别设置这些开关
设置AUTO_PST =1
XY_PST = 00
ADCTSC = AUTO_PST | NO_OPR_MODE;
}
现在是自动测量,我们没有机会分别设置这些开关
进入中断处理函数
void AdcTsIntHandle(int irq)
{
if (SUBSRCPND & (1<<TC_INT_BIT)) /* 如果是触摸屏中断 */
Isr_Tc();
if (SUBSRCPND & (1<<ADC_INT_BIT)) /* ADC中断,则会进入Adc中断处理函数 */
Isr_Adc();
SUBSRCPND = (1<<TC_INT_BIT) | (1<<ADC_INT_BIT);
}
进入触摸屏中断处理函数
void Isr_Tc(void)
{
//printf("ADCUPDN = 0x%x, ADCDAT0 = 0x%x, ADCDAT1 = 0x%x, ADCTSC = 0x%xnr", ADCUPDN, ADCDAT0, ADCDAT1, ADCTSC);
if (ADCDAT0 & (1<<15))
{
//printf("pen upnr");
enter_wait_pen_down_mode();
}
else
{
/* 进入"自动测量"模式 */
enter_auto_measure_mode();
/* 启动ADC */
ENABLE_START = 1就可以了
ADCCON |= (1<<0);
}
}
启动ADC
Adc中断处理函数
void Isr_Adc(void)
{
进入adc中断后,等待触摸笔松开
int x = ADCDAT0 & 0x3ff;
int y = ADCDAT1 & 0x3ff;
printf("x = %08d, y = %08dnr", x, y);
//等待触摸笔松开模式
enter_wait_pen_up_mode();
}
烧写
实验发现打印一堆乱码
应该是printf函数出了问题打开my_printf.c文件,找到printf函数应该是处理第二个数据的时候,没有设置初始值
/*reference : int vprintf(const char *format, va_list ap); */
static int my_vprintf(const char *fmt, va_list ap)
{
char lead=' ';
int maxwidth=0;
for(; *fmt != '