2440裸机学习心得(上)
主要配置:外部时钟源→通过寄存器MPLLCON得到FCLK→再通过寄存器CLKdivN得到HCLK和PCLK-> buf[0] = ((char)(number >> SDA->GPE15 , SCL-> 。触摸屏控制器依次转换被触摸点的X坐标和Y坐标。在触摸控制器写X测量数据到ADCDAT0和Y测量数据到ADCDAT1过后,触摸屏接口产生中断到中断控制器在自动坐标转换模式中。 等待中断模式 触摸屏控制器产生中断信号(INT_TC)当触摸笔按下的时候。等待中断模式设置值是ADCTSC=0xd3(X_PU、XP_Dis、XM_Dis、YP_Dis、YM_En)。 一般来说,触摸屏的响应过程是:等待中断(触摸笔按下)模式→中断发生后进入自动(连续)X/Y轴转换→等待中断(触摸笔抬起)模式。 这三种模式的初始化分别为: 1等待中断(触摸笔按下): rADCTSC=0; rADCTSC=0xd3; 2(连续)X/Y轴转换: rADCTSC=0; rADCTSC=0x04; 3等待中断(触摸笔抬起): rADCTSC=0; rADCTSC=0xd3; rADCTSC |=(1<8); 晕,看回以前的写字板程序,都是错,没有区分清楚两个不同的中断 只有一个中断触发函数pISR_ADC但是对应着不同的两个中断, 要通过在中断中判断if(SUBSRCPND&(1<9))和elseif(SUBSRCPND&(1<10)) 等待检测 AD处理中断 注意:在等待检测中,又分为按下中断和抬起中断 用if(ADCDAT0&0x8000)和 else来区分 抬起按下 拖曳功能的实现: Y 按下——》xy自动模式转换——》收集数据,画点——》检测是否松手 N X通过标志flagTC来判断是否松手,若松手,flagTC在松手中断中置1 上面那种标志的方法会与 void TC_interrupt()//等待模式中断,判断是按下还是松手 有矛盾 故还是直接采取在拖曳函数中test_down_still()直接判断 wait_up_init(); if(!(rADCDAT0&0x8000)) 每次画点要延时一段时间,即控制好采样时间 校正: 利用三个坐标点通过公式计算出待定系数A,B,C,D,E,F,K,表示出触摸屏和LCD关系 公式:LCD上每个点PD的坐标为[XD,YD],触摸屏上每个点PT的坐标为[XT,YT]。 XD=A×XT+B×YT+C YD=D×XT+E×YT+F K=(XT0-XT2)×(YT1-YT2)-(XT1-XT2)×(YT0-YT2) A=[(XD0-XD2)×(YT1-YT2)-(XD1-XD2)×(YT0-YT2)] / K B=[(XT0-XT2)×(XD1-XD2)-(XD0-XD2)×(XT1-XT2)] / K C=[YT0×(XT2×XD1-XT1×XD2)+YT1×(XT0×XD2-XT2×XD0)+YT2×(XT1×XD0-XT0×XD1)] / K D=[(YD0-YD2)×(YT1-YT2)-(YD1-YD2)×(YT0-YT2)] / K E=[(XT0-XT2)×(YD1-YD2)-(YD0-YD2)×(XT1-XT2)] / K F=[YT0×(XT2×YD1-XT1×YD2)+YT1×(XT0×YD2-XT2×YD0)+YT2×(XT1×YD0-XT0×YD1)] / K 利用EEPROM来保存这几个参数,即A,B,C,D,E,F,K分别保存在以0x20,0x30,0x40,0x50,0x60,0x70,0x80为首地址内存的连续4个字节空间内,另外内存地址0x1F保存一个标识信息,当为0x6A时,表示这几个参数已计算并保存好了,只需从上述内存地址中读取参数就行,而当为其他值时,就需要进行校正。 难点是如何将其写存入E2PROM,不用每次都重新校正: 注意两个函数:因为E2PROM的每个地址单位是以1字节(8位的) //把一个32位整型转换为4个8位字节型,并写入EEPROM中 iic_buffer[0]=(unsigned char)((coef&0xFF000000)>>24); iic_buffer[1]=(unsigned char)((coef&0x00FF0000)>>16); iic_buffer[2]=(unsigned char)((coef&0x0000FF00)>>8); iic_buffer[3]=(unsigned char)(coef&0x000000FF); //读取EEPROM中的4个8位字节,并把它们组合成一个32位的整型。 temp=(iic_buffer[0]<24)|(iic_buffer[1]<16)|(iic_buffer[2]<8)|(iic_buffer[3]); 感觉都不知道否IIC读写函数有问题?怎么下面一个读函数读不出值? rdat24c02a(0x1F,iic_buffer,1);读0x1f的位置的值 if(iic_buffer[0]!=0x6A)判断是否值等,即校正过的 9、IIS音频 一些基本概念: 扩展了IIS的应用,要外扩CODEC才行。因为接口的数据传出和接收的只是数字采样信号而已,要通过CODEC进行DA转换或者AD转换才行。 一个wav文件作为例子(采样频率44.1KHz、声道数2、数据位数16)。该文件的声音要得到还原,那么数据必须以44.1KHz的速率传输 IISSCLK=采样频率×采样位数×通道数,采样频率记为fs。于是IISSCLK为32fs 轮询FIFO法的使用: 寄存器配置好预分频器和音频数据的数据位、主时钟、数据时钟以及FIFO后便可以读或者写FIFO来实现上述功能 UDA1341TS的配置,只有配置了它(CODEC)模拟信号才能正确的转换为IIS接口的数据或者将IIS接口的数据转换为模拟信号输出。这部分的配置是通过一个叫做“L3”总线接口来实现 UDA1341TS的L3微控制器部分说明(当AD和DA用) L3写的一个实现,通过这个我们可以向CODE
2440裸机学 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)