S3C44B0X DMA功能及应用 SA06011137 盛伟 SA06011132 刘毅.

Slides:



Advertisements
Similar presentations
7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
Advertisements

阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
NAT与ICMP交互.
实验四 利用中规模芯片设计时序电路(二).
5.4 顺序脉冲发生器、 三态逻辑和微机总线接口 顺序脉冲发生器 顺序脉冲 计数型 分类 移位型.
第10章 FPGA硬件设计 <EDA技术与应用> 课程讲义
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
第四章 S3C44B0X 硬件结构及功能.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
AVR单片机软硬件设计教程-入门篇 ——学单片机就要学AVR!
嵌入式系统课程简介 宋健建 南京大学软件学院 2004/02/10.
第三章 微机基本系统的设计 第一章 8086程序设计 第二章 MCS-51程序设计 第四章 存贮器与接口 第五章 并行接口
Roy Wan PCI MS/s 14-bit 高速数字化仪 Roy Wan
SOA – Experiment 3: Web Services Composition Challenge
网络常用常用命令 课件制作人:谢希仁.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月20日.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
逆向工程-汇编语言
DMA与DMA控制器 DMA(Direct Memory Access)的概念 DMA方式不用处理器干预完成M与I/O间数据传送。
《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:
CPU结构和功能.
应用实例 识别Ps & Pt ADTS 压力通道并校验 CPD8000 New MENSOR‘s ADTS: CPA8001.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:
得技通电子 问题 1.0 、选择题:本大题共15个小题,每小题1分,共15分,在每小题给出的四个选项中,只有一项符合题目要求,把所选项前的字母填在括号内。
第四章 MCS-51定时器/计数器 一、定时器结构 1.定时器结构框图
K60入门课程 02 首都师范大学物理系 王甜.
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
VisComposer 2019/4/17.
实验四、TinyOS执行机制实验 一、实验目的 1、了解tinyos执行机制,实现程序异步处理的方法。
Cassandra应用及高性能客户端 董亚军 来自Newegg-NESC.
姚金宇 MIT SCHEME 使用说明 姚金宇
(Random Access Memory)
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
实验七 安全FTP服务器实验 2019/4/28.
微机原理与接口技术 西安邮电大学计算机学院 杨锐.
第三章 MCS 51的硬件结构.
第二章 补充知识 2.1 总线和三态门 一、总线(BUS) 三总线结构 数据总线DB(Data Bus)
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
信号量(Semaphore).
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
JSP实用教程 清华大学出版社 第2章 JSP运行环境和开发环境 教学目标 教学重点 教学过程 2019年5月7日.
长春理工大学 电工电子实验教学中心 数字电路实验 数字电路实验室.
实验二 带进位控制8位算术逻辑运算实验 带进位控制8位算术逻辑运算: ① 带进位运算 ② 保存运算后产生进位
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第八章 总线技术 8.1 概述 8.2 局部总线 8.3 系统总线 8.4 通信总线.
数据报分片.
HSC高速输出例程 HORNER APG.
临界区问题的硬件指令解决方案 (Synchronization Hardware)
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
阻塞式模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
汽车单片机应用技术 学习情景1: 汽车空调系统的单片机控制 主讲:向楠.
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
上节复习(11.14) 1、方式2、方式0的特点? 2、定时/计数器的编程要点? 3、实验5方案优化问题.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
上节复习(11.7) 1、定时/计数器的基本原理? 2、定时/计数器的结构组成? 3、定时/计数器的控制关系?
反应显微谱仪的飞行时间测量 暨数据获取系统的研究
工业机器人入门使用教程 ESTUN机器人 主讲人:李老师
考察点:switch\while\for System.in\Scanner char vs int
质量控制(QC)模式 BrookFIELD.
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
DSP技术与应用 电子与信息技术系.
学习目标 1、什么是列类型 2、列类型之数值类型.
一个实时嵌入式操作系统移植问题研究 报告人:荣峰华.
百万行、千万行数据查询教程 老黄牛.
Presentation transcript:

S3C44B0X DMA功能及应用 SA06011137 盛伟 SA06011132 刘毅

内容提要 S3C44B0X DMA 概述 S3C44B0X ZDMA/BDMA 操作 S3C44B0X DMA 特殊功能寄存器

S3C44B0X DMA 概述 DMA 数量 描述 备注 ZDMA 2 BDMA 连接于 SSB 普通 DMA 在桥内,桥是SSB 和 SPB之间的接口层 桥 DMA

ZDMA概述 ZDMA 可从存储器到存储器、存储器到I/O 设备(固定的目的地址)和 I/O 设备到存储器传送数据 ZDMA 最重要的特征是 on-the-fly 模式,这种模式可减少需求 DMA 的周期数(BDMA无on-the-fly模式) 在 on-the-fly 模式下操作,源和目的总线宽度要匹配

on-the-fly模式概述 通常,DMA 传送包括两个独立的周期:一个是从源存储器或 I/O 设备读,另一个是向存储器或 I/O 设备写。执行这些操作,存储控制器先从数据总线上读出数据,再把这个数据写到数据线上 on-the-fly 模式有不可分的读/写周期。也就是说,存储控制器为源和目的设备读/写数据线上的数据产生应答信号,同时它为存储器的存取产生与读/写相关的控制信号

BDMA概述 BDMA 控制器只能从存储器到 I/O 设备和 I/O 设备到存储器传送数据,在这种情况下,I/O 设备意味着外围设备,像 SIO、IIS 和 UART 一样连接到 SPB ZDMA 和 BDMA 的操作由 S/W 或来自内部设备或外部请求引脚(nXDREQ0/1)的请求来启动

S3C44B0X ZDMA/BDMA 操作 ZDMA BDMA 外部 DMA REQ/ACK 协议 DMA 传送方式 DMA 请求源的选择 自动重装模式

术语解释 周期窃取(cycle stealing):DMA 窃取若干周期,每个周期传送一个字节(I/O 带宽比总线带宽小) 突发模式(burst mode):DMA 控制器通知设备获得总线,发起一连串的传送,然后释放总线(I/O 带宽与总线带宽匹配)

ZDMA ZDMA 可在外部存储器之间传送数据 DMA 操作由 S/W 或外部 DMA 请求信号来启动 S3C44B0X 有一个 4 字 FIFO 类型的缓冲器来支持 4 字突发模式的 DMA 传送。例如,在存储器之间的 DMA 操作中,4 字突发写发生在 4 字突发读之后

ZDMA 控制器框图

BDMA 定时器可在任何时候请求 DMA 操作,这有利于 ADC 块的自动操作 主要作用是在连接于 SPB 的片内外围设备(如 UART、IIS 和 SIO 等)和外部存储器之间传送数据

BDMA(续) 不支持 4 字突发 DMA 操作(块传送模式),因为没有暂时缓冲器,而且连接于的 SPB 的外围设备速度太慢 能够支持从外部存储器到外部存储器的数据传送,但是外部存储器之间的数据传送一般还是用 ZDMA 来实现 如果需要更多的 DMA 通道用于外部存储器之间( ZDMA 应用最多有两个通道)的数据传送 ,则可以用 BDMA

BDMA 控制器框图

外部 DMA REQ/ACK 协议 握手模式 单步模式 完整服务模式 需求模式

握手模式 一次 DMA 操作表示在 DMA 操作中的一对或不可分的读和写周期 由 nXDREQ 产生的请求引起一个字节、一个半字或一个字被传送出去 每一个数据的传送都需要 DMA 请求

握手模式时序图

单步模式 一次 DMA 操作包括可分开的读或写周期 通常用于测试或调试 在 nXDACK 的非有效区,总线控制器将再次评估总线优先级,以决定新的总线控制权 单步模式下的数据传输将慢于握手模式下的数据传输

单步模式(续) 当 DMA 请求信号变低时,如果没有高优先级的总线请求,则总线通过降低 DMA 应答信号来表明对 DMA 操作的总线分配 在 DMA 读周期后,应答信号将有一个上升沿来表示 DMA 读周期的结束;同时,如果在 DMA 应答信号上升时 DMA 请求信号一直为高电平,则 DMA 写周期将会延迟到新的 DMA 请求信号被激活

单步模式时序图1

单步模式时序图2

完整服务模式 一次 DMA 请求将产生连续的 DMA 传输,直到规定的 DMA 传输数据传输完,也就是基于传送计数的 DMA 操作将由单一 DMA 请求信号激活来启动,不需要进一步的 DMA 请求信号也可继续执行下去 nXDACK 信号一直有效,直到整个 DMA 操作结束

完整服务模式(续) 每传送完一个单元,将释放总线控制权 可提供最佳的总线共享,防止总线控制权被垄断 如果其他控制者截取了总线控制权,则在完成该服务后将继续执行剩余的操作,且不需要再次激活 nXDREQ

完整服务模式时序图1

完整服务模式时序图2

需求模式 与完整服务模式不同,需求模式不允许将总线控制权交给高优先级的总线控制者 在需求模式下进行 DMA 操作要特别小心,因为这种垄断模式可能对最佳总线共享的其他控制者产生意料不到的故障

需求模式时序图

DMA 传送方式 单元 (unit) 传送方式 块 (block) 传送方式 on-the-fly 传送方式

DMA 传送方式下的读/写 DMA 传送方式 读/写 单元(unit)传送 块(block)传送 on-the-fly 传送 1个单元读,然后1个单元写 块(block)传送 4个单元突发模式读,然后4个单元突发模式写 on-the-fly 传送 1个单元读或一个单元写(读与写分开)

单元(unit)传送方式 每个请求对应一个读/写周期,即一个单位读,然后一个单位写

用握手模式进行单元传送时序图

块(block)传送方式 块(4个字)传送方式表示在连续 4 个字的写周期前有连续 4 个字的 DMA 读周期,即 4 个字突发读,然后 4 个字突发写,因此传输的数据个数应是 16 字节的倍数 在块传送方式下,遇到 16 字节对齐的情况时,ADDR[3:0] 应置为 0

块(block)传送方式—举例 假设传送 100 字节(即 DMA 计数值为100),则 6×16=96 字节能够被传送,但剩余的 4 字节将不能被传送,因为在传送了 96 字节之后,DMA 操作就会停止

用单步模式进行块传送时序图

on-the-fly 传送方式 当 DMA 读/写数据时,具有固定地址的外部设备通过 DMA 应答信号 (nXDACK0/1)来写/读这个数据 DMA 在写数据前要先读数据

on-the-fly 传送方式(续) 读和写操作同时进行。DMA 应答信号通知外部设备去读或写。同时,存储控制器将产生与读/写相关的控制信号给外部存储器 。如果外部存储器能够支持 on-the-fly 方式(即能由 DMA 应答信号来读/写数据),则数据的传送率将加倍 在传送周期内,数据总线处于高阻状态

用完整模式进行on-the-fly传送时序图

DMA 请求源的选择 ZDMA BDMA

ZDMA DMA 请求源:S/W 或 H/W 产生 nXDREQ信号(外部 DMA 请求信号) S/W 的触发可通过写 01 到 ZDCON0/1 寄存器的域来完成

ZDMA(续) 在 S/W 触发下,只要突发控制权分配给了 DMA 控制者,操作就将继续进行。只要 DMA 传送计数值或 TC(终端计数值)达到零,则表示 DMA 操作完成。如果高优先级的总线控制者得到总线控制权,则在高优先级的服务程序结束后,DMA操作将继续进行。

ZDMA (续) 如果 DMA 配置为外部触发模式,即通过写 1 到 ZDCON0/1 寄存器的 QDS 位来使能外部 DMA 请求,那么操作也可由nXDREQ (外部 DMA 请求信号)和S/W来初始化

BDMA 有6个硬件请求源:UART0、UART1、SIO、Timer 和 IIS等。 与 ZDMA 一样可由软件初始化 通过向 BDICNT 寄存器的 QSC 区域写入数值来选择这些请求源

自动重装模式 当 DMA 计数值减小到 0 时,Z(B)DISRCn、 Z(B)DIDESn 和 Z(B)DICNTn 的寄存器内容将被重新装入 Z(B)DCSRCn、 Z(B)DCDESn和 Z(B)DCCNTn 寄存器中 参量的这种自动重装不能保证在当前DMA操作之后,DMA 能自动重载运行,它是否重新运行取决于 Z(B)DCONn 中的 CMD 区域被重新写入或外部 DMA 请求出现

自动重装模式(续) 为了支持自动重装模式,DMA 设置了两个寄存器组 寄存器 Z(B)DISRCn、 Z(B)DIDESn 和 Z(B)DICNTn 包含 DMA 操作的初始化配置 寄存器 Z(B)DCSRCn、 Z(B)DCDESn 和 Z(B)DCCNTn 包含反映当前 DMA 操作的配置

自动重装的产生条件 自动重装(AR)等于 1 和 DMA 计数值达到 0 向 Z(B)DISRC0、 Z(B)DIDES0 和Z(B)DICNT0 写入新的配置 若 DMA 被激活,即寄存器中的 EN 位由 0 变为 1 S/W 命令被取消,当在 ZDCON0/1 中的CMD 域写入11时

S3C44B0X DMA 特殊功能寄存器 ZDMA控制寄存器(ZDCONn) ZDMA0/1初始源/目的地址和计数寄存器及ZDMA0/1当前源/目的地址和计数寄存器 ZDMAn初始/当前源地址寄存器(ZDISRC、ZDCSRC) ZDMAn初始/当前目的地址寄存器(ZDIDES、ZDCDES) ZDMAn初始/当前目的计数寄存器(ZDICNT、ZDCCNT) BDMAn控制寄存器(BDCON) ZDMAn初始/当前源地址寄存器(BDISRC、BDCSRC) ZDMAn初始/当前目的地址寄存器(BDIDES、BDCDES) ZDMAn初始/当前目的计数寄存器(BDICNT、BDCCNT)

ZDMAn控制寄存器

ZDMAn控制寄存器(续)

ZDMA0初始/当前源/目的地址和计数寄存器

ZDMA1初始/当前源/目的地址和计数寄存器

ZDMAn初始/当前源地址寄存器

ZDMAn初始/当前目的地址寄存器

ZDMAn初始/当前计数寄存器

ZDMAn初始/当前计数寄存器(续)

ZDMAn初始/当前计数寄存器(续)

ZDMAn初始/当前计数寄存器(续)

BDMAn控制寄存器

BDMAn控制寄存器(续)

BDMA0初始/当前源/目的地址和计数寄存器

BDMA1初始/当前源/目的地址和计数寄存器

BDMAn初始/当前源地址寄存器

BDMAn初始/当前目的地址寄存器

BDMA0初始/当前计数寄存器

BDMA0初始/当前计数寄存器(续)

BDMA1初始/当前计数寄存器

BDMA1初始/当前计数寄存器(续)

S3C44B0X DMA 应用编程 ZDMA BDMA

ZDMA 本实验通过 DMA 方式实现存储器到存储器的数据传送,并将其与常规的内存拷贝操作进行比较(实验来源文献[4])

包含文件 #include "44b.h" #include "44blib.h" #include "rtc.h" typedef (*ISR_ROUTINE_ENTRY)(void); #define Printf Uart_Printf void Zdma0(int srcAddr, int dstAddr, int length); void Zdma0Done(void); void Test_Zdma0(void); void isr_dma0(void); volatile int zdma0Done; void IsrIRQ() _attribute_ ((interrupt("IRQ")));

DMA 测试程序主函数 int Main(void) { Uart_Select(0); Uart_Init(MCLK, 115200); Uart_Printf("DMA TEST PROGRAM\n"); rINTCON = 0x7; init_interrupt_handler((unsigned int)IsrIRQ); install_isr_handler(HandleZDMA0, (void *)isr_dma0); / ****设置所有中断为IRQ模式**** / rINTMOD = 0x0; / ***** *使能TICK模式**** ** / rINTMSK = (0x07FFFFFF&~(BIT_GLOBAL|BIT_ZDMA0)); / *****打开IRQ模式的中断***** / rINTCON = 0x5; Test_Zdma0(); while(1); }

Test_Zdma0 void Test_Zdma0(void) { unsigned char *src,*dst; int i; unsigned int memSum; Uart_Printf("[ZDMA0 MEM2MEM Test]\n"); dst=(unsigned char*)malloc(0x80000); src=(unsigned char*)malloc(0x80000); / ***将区域设置为非Cacheable区域,关闭Cache ***/ rNCACHBE1=(((((unsigned)dst+0x100000)>>12)+1)<<16)| ((unsigned)dst>>12); Uart_Printf("dst=%x,src=%x\n",(int)dst,(int)src); Zdma0((int)src,(int)dst,0x80000); free(src); free(dst); }

Zdma0 void Zdma0(int srcAddr,int dstAddr,int length) { int time; / ***将目标地址设置为非Cache区****/ rNCACHBE1=(((((unsigned)dstAddr+0x100000)>>12)+1)<<16)| ((unsigned)dstAddr>>12); / **启动定时器,精度128μs,用于计时**/ Timer_start(3); for(time=0;time<length;time++) *(unsigned char*)(dstAddr+time)=*(unsigned char*)(srcAddr+time); } time=Timer_Stop(); Uart_Printf("Copy Bytes:time=%f\n",time*128E-6);

Zdma0(续) / *****测试半字方式的拷贝时间**** / Timer_start(3); for(time=0;time<length;time+=2) { *(unsigned short*)(dstAddr+time)=*(unsigned short*)(srcAddr+time); } time=Timer_Stop(); Uart_Printf("Copy short words:time=%f\n",time*128E-6); / *****测试字方式的拷贝时间***** / for(time=0;time<length;time+=4) *(unsigned long*)(dstAddr+time)=*(unsigned long*)(srcAddr+time); Uart_Printf("Copy Words:time=%f\n",time*128E-6);

Zdma0(续) / *****清除传输完毕标志*****/ zdma0Done = 0; /***设置传输的起止地址和长度***/ rZDISRC0=srcAddr|(2<<30)|(1<<28); rZDIDES0=dstAddr|(2<<30)|(1<<28); rZDICNT0=length|(2<<28)|(1<<26)|(3<<22)|(1<<20); / ******启动DMA传输***** / rZDCON0 = 0x1; Timer_Start(3);    / *****等待传输完成******/ while(zdma0Done==0); time=Timer_Stop(); Uart_Printf("ZDMA0:time=%f\n",time*128E-6); rINTMSK=BIT_GLOBAL; }

ZDMA0 中断处理函数 void isr_dma0(void) { /**清除DMA中断标志**/ rI_ISPC=BIT_ZDMA0;  /**设置传输完毕标志**/ zdma0Done=1; }

输出结果 DMA TEST PROGRAM [ZDMA0 MEM2MEM TEST] Dst = c00a400,src = c08a408 Copy Bytes : time = 0.445952 Copy short words : time = 0.222976 Copy words : time = 0.113792 ZDMA0 : time = 0.081152

BDMA 编写程序播放一段由 wav 文件保存的录音(实验来源文献[2] )

IIS IIS 是一种串行总线设计技术,是 SONY 和 PHILIPS 等公司共同推出的接口标准,主要针对数字音频处理技术和设备 在实验中,IIS 总线接口由处理器S3C44B0X 的 IIS 模块和音频芯片UDA1341 硬件来实现

UDA1341TS 电路中使用的音频芯片是 PHILIPS 公司的 UDA1341TS 音频数字信号编译码器 UDA1341TS 可将立体声模拟信号转化为数字信号,同样也能把数字信号转换成模拟信号,并可用 PGA(可编程增益控制)和 AGC(自动增益控制)对模拟信号进行处理。 对于数字信号,该芯片提供了DSP(数字音频处理)功能。

IIS 接口电路

IIS 总线框图

IIS 总线和 MSB-Justified格式数据接口格式

编解码时钟

可用的串行位时钟频率

S3C44B0X IIS 接口工作模式 单独发送或接收模式 发送和接收模式(同时)

单独发送或接收模式 正常传输模式 DMA 传输模式

正常传输模式 如果发送队列非空,当队列发送数据准备就绪时,就绪标志位被置 1;如果发送队列为空,就绪标志位被置 0 如果接收队列未满,就绪标志位被置 1;如果接收队列为满,就绪标志位被置 0 这些标志位决定了 CPU 读或写队列的时间

DMA 传输模式 发送或接收队列的访问是由 DMA 控制器来完成的 在发送或接收模式中, DMA 服务请求由队列的就绪标志位自动给出

发送和接收模式(同时) IIS 总线接口能够同时发送和接收数据 因为只有一个 DMA 源,只能是一个通道用正常传输模式,另一个通道用 DMA 传输模式

IIS 功能测试函数 void Test_Iis(void) { //初始化IIS接口 IISInit(); //播放wav文件   Playwave(); }

初始化 IIS 接口 void IISInit(void) { //设置I/O口PE8输出CODECLK信号 rPCONE=(rPCONE&0xffff)+(2<<16); //初始化UDA1341芯片 Init1341(); }

初始化 UDA1341 芯片 void Init1341() { //配置与L3接口相连的I/O口 //设置PA9为输出,PA9连接L3D rPCONA=0x1ff; //设置连接L3M的PB4和连接L3C的PB5端口 rPCONB=0x7CF; //设置起始L3M和L3C输出高电平 rPDATB=L3M | L3C;

初始化 UDA1341 芯片(续) //通过L3总线初始化1341芯片 _WrL3Addr(0x14+2) ; //写状态地址000101xx+10 _WrL3Data(0x60,0); //0,1,10,000,0复位,256fs, //无直流滤波器,IIS _WrL3Addr(ox14+2); //写状态地址000101xx+10 _WrL3Data(0x20,0); //0,0,10,000,0无复位,256fs, _WrL3Addr(0x14+2); //写状态地址000101xx+10 _WrL3Data(0x81,0); //1,0,0,0,0,0,11 OGS=0,IGS=0,ADC_NI //DAC_NI,sngl speed,AonDon _WrL3Addr(0x14+0); //写DATA0地址000101xx+10 _WrL3Data(0x0A,0); }

初始化 UDA1341 芯片(续) _WrL3Addr(U8 data) 是通过 L3 总线接口写控制数据地址 (data) 到 1341 芯片 _WrL3Data(U8 data,int halt) 是通过 L3总线接口写控制数据 (data 和停止操作)到 1341 芯片

播放wav声音文件 void Playwave( ) { int sound_len,i; unsigned short* pWavFile; //wav文件数据首地址 pWavFile=(unsigned short *)0xC030000; rINTMOD=0x0; //使能中断 rINTCON=0x1; pISR_BDMA0=(unsigned)BDMA0_Done; //设置BDMA中断 rINTMSK=~(BIT_GLOBAL|BIT_BDMA0);

播放wav声音文件(续) //循环播放声音文件 for(;;) { //初始化变量 //初始化DMA中断结束标志 iDMADone=0; //设置声音数据长度,未处理文件头 sound_len=155956; //DMA源:16位数据,增长方式,外存储区 rBDISRC0=(1<<30)+(1<<28)+((int)(pWavFile)); //DMA目的:M2IO,内部模块,IISFIF rBDIDES0=(1<<30)+(3<<28)+((int)rIISFIF); //设置DMA请求源为IIS,中断方式,自动重载,使能DMA rBDICNT0=(1<<30)+(1<<26)+(3<<22)+(0<<21)+(1<<20)+sound_len; rBDCON0=0X0<<2;

播放wav声音文件(续) //IIS初始化 //使能发送DMA,接收空闲,使能分频 rIISCON=0x22; //主模式,发送,发送模式,左通道低电平,IIS格式,16位数据,2566fs,32fs rIISMOD=0xC9; //分频因子为6 rIISPSR=0x22; //接收、发送DMA模式,使能FIFO rIISFCON=0xF00; //使能IIS rIISCON|=0x1; //等待直到DMA传送结束 while(iDMADone==0); //禁止IIS rIISCON=0x0; }

BDMA0 中断处理函数 void BDMA0_Done(void) { //清除中断挂起位 rI_ISPC=BIT_BDMA0; //设置中断结束标志 iDMADone=1; }

参考文献 [1] 田泽,嵌入式系统开发与应用教程,北京:北京航空航天大学出版社,2005 [2] 田泽,嵌入式系统开发与应用实验教程,北京:北京航空航天大学出版社,2005 [3] S3C44B0X RISC MICROPROCESSOR [4] 陈赜等,ARM嵌入式技术实验教程,北京:北京航空航天大学出版社,2005

谢谢 Thank you!