微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 2440裸机学习心得(上)

2440裸机学习心得(上)

时间:11-29 来源:互联网 点击:

主要配置:外部时钟源→通过寄存器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

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

网站地图

Top