2440裸机学习心得(上)
主要配置:外部时钟源→通过寄存器MPLLCON得到FCLK→再通过寄存器CLKdivN得到HCLK和PCLK-> buf[0] = ((char)(number >> SDA->GPE15 , SCL-> iic_buffer[0]=(unsigned char)((coef&0xFF000000)>> iic_buffer[1]=(unsigned char)((coef&0x00FF0000)>> iic_buffer[2]=(unsigned char)((coef&0x0000FF00)>> C发出各种命令进行配置,由于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 由于是用DMA的方式,因此在播放的过程中不占用系统资源,我们可以很容易的实现声音的各种操作而丝毫不影响播放的效果,如音量的提高和降低、静音、暂停等
2440裸机学 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)