2440裸机学习心得(上)
难点是如何将其写存入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写的一个实现,通过这个我们可以向CODEC发出各种命令进行配置,由于TQ2440将这三个管脚和GPIO相连,所以我们按照严格的地址模式和数据传输模式时序来编写总线操作函数
注意小技巧,宏定义:#defineL3M (1<<2) //GPB2 L3MODE
#defineL3D (1<<3) //GPB3 L3DATA
#defineL3C(1<<4) //GPB4 L3CLOCK
地址模式UDA1341TS的地址是000101。
数据位0到1指向随后传送数据的类型
数据传输模式各总线数据的赋值,就像赋给寄存器一样
轮询FIFO法具体使用步骤:
1、初始化底层硬件:配置rGPBCON,rGPECON,设波特和主频:rMPLLCON和rUBRDIV0
2、配置UDA1341 :STATUS,DATA0和扩展地址
3、配置s3c2440的IIS寄存器:rIISPSR,rIISCON,rIISMOD,rIISFCON
4、输入或输出数据 :注意FIFO中的数据为16位,深度为32
if((rIISCON & (1<<6))==0) //检查输入FIFO是否为满
temp=(*IISFIFO); //录音读取
(*IISFIFO)=music; //放音写入
5、结束恢复:rGPBCON,rGPECON,设波特和主频:rMPLLCON和rUBRDIV0
DMA通道法的使用:
DMA的一些基本概念:
DMA的优势是它在传输数据的时候不需要CPU的干预。
DMA一大堆寄存器要配置:
思路:描述源的地址和控制方式;描述目地的地址和控制方式;描述DMA控制方式;打开DMA操作。
难度最大的基本也就是DMA的控制方式配置。DMA控制方式的设置主要是这么几个方面:选择DMA传输控制方式;选择DMA是否开启中断;选择DMA服务的对象;DMA服务方式。
DMA通道法的使用步骤:(基本和轮询法差不多,再补一些不同的)
1、初始化底层硬件 +中断部分初始化
2、配置UDA1341
3、配置s3c2440的IIS寄存器将FIFO改为DMA模式
4、配置DMA中寄存器 (输出要用DMA通道2,输入用通道1)
5、中断处理利用商和余数,判断每次传0xfffff*2后还剩多少数据量
6、结束还原,关DMA,关中断
几个要注意的小地方:
每次中断的最大传输量:字节大小为:DSZ×TSZ×TC=半字*单元传输*寄存器DCONn的低20位存放的数据=(0xfffff<<1)= 2 * 1 * DCONn中的值
MP3模式处理函数(静音,音量增减,停止,暂停、开始)
用FZB的串口控制台命令来编写
//输入以下东西实现功能:
//1、"mute"静音在DATA0中MT位置置一
//2、"++""--"音量增减通过对volume变量赋值,然后通过L3写进(0x14,1)中
//3、"stop"停止关DMA2,即关rDMASKTRIG中的stop位
//4、"pause"暂停/开始关开rIISCON
DMA的播放/录音实现和轮询实现的区别
在于,轮询需要自己编写数据输出/读取代码,但是DMA方式下不用,只需要指明源地址和目标地址以及数据大小就可以由硬件自动传输数据了,只是要注意的是S3C2440下的DMA使用时候数据大小是有限制的,一次最多可以传输的字节大小为:DSZ×TSZ×TC
关键词:
2440裸机学
评论