s3c44b0x dma 功能及应用

100
1 S3C44B0X DMA 功功功功功 SA06011137 功功 SA06011132 功功

Upload: xiu

Post on 22-Jan-2016

153 views

Category:

Documents


5 download

DESCRIPTION

S3C44B0X DMA 功能及应用. SA06011137 盛伟 SA06011132 刘毅. 内容提要. S3C44B0X DMA 概述 S3C44B0X ZDMA/BDMA 操作 S3C44B0X DMA 特殊功能寄存器 S3C44B0X DMA 应用编程. S3C44B0X DMA 概述. ZDMA 概述. ZDMA 可从存储器到存储器、存储器到 I/O 设备(固定的目的地址)和 I/O 设备到存储器传送数据 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: S3C44B0X DMA 功能及应用

1

S3C44B0X DMA 功能及应用

SA06011137 盛伟 SA06011132 刘毅

Page 2: S3C44B0X DMA 功能及应用

2

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

Page 3: S3C44B0X DMA 功能及应用

3

S3C44B0X DMA 概述DMA 数量 描述 备注

ZDMA 2 连接于 SSB 普通 DMA

BDMA 2在桥内,桥是 SSB 和 SPB 之间的接口层

桥 DMA

Page 4: S3C44B0X DMA 功能及应用

4

ZDMA 概述 ZDMA 可从存储器到存储器、存储器到 I

/O 设备(固定的目的地址)和 I/O 设备到存储器传送数据

ZDMA 最重要的特征是 on-the-fly 模式,这种模式可减少需求 DMA 的周期数( BDMA 无 on-the-fly 模式)

在 on-the-fly 模式下操作,源和目的总线宽度要匹配

Page 5: S3C44B0X DMA 功能及应用

5

on-the-fly 模式概述 通常, DMA 传送包括两个独立的周期:

一个是从源存储器或 I/O 设备读,另一个是向存储器或 I/O 设备写。执行这些操作,存储控制器先从数据总线上读出数据,再把这个数据写到数据线上

on-the-fly 模式有不可分的读 / 写周期。也就是说,存储控制器为源和目的设备读 / 写数据线上的数据产生应答信号,同时它为存储器的存取产生与读 / 写相关的控制信号

Page 6: S3C44B0X DMA 功能及应用

6

BDMA 概述 BDMA 控制器只能从存储器到 I/O 设备

和 I/O 设备到存储器传送数据,在这种情况下, I/O 设备意味着外围设备,像 SIO 、 IIS 和 UART 一样连接到 SPB

ZDMA 和 BDMA 的操作由 S/W 或来自内部设备或外部请求引脚( nXDREQ0/1 )的请求来启动

Page 7: S3C44B0X DMA 功能及应用
Page 8: S3C44B0X DMA 功能及应用

8

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

Page 9: S3C44B0X DMA 功能及应用

9

术语解释 周期窃取( cycle stealing ): DMA 窃

取若干周期,每个周期传送一个字节( I/O 带宽比总线带宽小)

突发模式( burst mode ): DMA 控制器通知设备获得总线,发起一连串的传送,然后释放总线( I/O 带宽与总线带宽匹配)

Page 10: S3C44B0X DMA 功能及应用

10

ZDMA ZDMA 可在外部存储器之间传送数据 DMA 操作由 S/W 或外部 DMA 请求信

号来启动 S3C44B0X 有一个 4 字 FIFO 类型的缓

冲器来支持 4 字突发模式的 DMA 传送。例如,在存储器之间的 DMA 操作中,4 字突发写发生在 4 字突发读之后

Page 11: S3C44B0X DMA 功能及应用

11

ZDMA 控制器框图

Page 12: S3C44B0X DMA 功能及应用

12

BDMA 定时器可在任何时候请求 DMA 操作,

这有利于 ADC 块的自动操作 主要作用是在连接于 SPB 的片内外围设

备(如 UART 、 IIS 和 SIO 等)和外部存储器之间传送数据

Page 13: S3C44B0X DMA 功能及应用

13

BDMA (续) 不支持 4 字突发 DMA 操作(块传送模

式),因为没有暂时缓冲器,而且连接于的 SPB 的外围设备速度太慢

能够支持从外部存储器到外部存储器的数据传送,但是外部存储器之间的数据传送一般还是用 ZDMA 来实现

如果需要更多的 DMA 通道用于外部存储器之间( ZDMA 应用最多有两个通道)的数据传送 ,则可以用 BDMA

Page 14: S3C44B0X DMA 功能及应用

14

BDMA 控制器框图

Page 15: S3C44B0X DMA 功能及应用

15

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

Page 16: S3C44B0X DMA 功能及应用

16

握手模式 一次 DMA 操作表示在 DMA 操作中的

一对或不可分的读和写周期 在 DMA 操作(一对或不可分的读和写

周期)中,总线控制器不能把总线的使用权分配给其他总线控制者

由 nXDREQ 产生的请求引起一个字节、一个半字或一个字被传送出去

每一个数据的传送都需要 DMA 请求

Page 17: S3C44B0X DMA 功能及应用

17

握手模式时序图

Page 18: S3C44B0X DMA 功能及应用

18

单步模式 一次 DMA 操作包括可分开的读或写周期 通常用于测试或调试 在 nXDACK 的非有效区,总线控制器将

再次评估总线优先级,以决定新的总线控制权

单步模式下的数据传输将慢于握手模式下的数据传输

Page 19: S3C44B0X DMA 功能及应用

19

单步模式(续) 当 DMA 请求信号变低时,如果没有高优先级

的总线请求,则总线通过降低 DMA 应答信号来表明对 DMA 操作的总线分配

在应答信号的第一个低电平段,将有一个 DMA 的读周期

在 DMA 读周期后,应答信号将有一个上升沿来表示 DMA 读周期的结束;同时,如果在 DMA 应答信号上升时 DMA 请求信号一直为高电平,则 DMA 写周期将会延迟到新的 DMA 请求信号被激活

Page 20: S3C44B0X DMA 功能及应用

20

单步模式时序图 1

Page 21: S3C44B0X DMA 功能及应用

21

单步模式时序图 2

Page 22: S3C44B0X DMA 功能及应用

22

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

nXDACK 信号一直有效,直到整个 DMA 操作结束

Page 23: S3C44B0X DMA 功能及应用

23

完整服务模式(续) 每传送完一个单元,将释放总线控制权 可提供最佳的总线共享,防止总线控制权被垄断

如果其他控制者截取了总线控制权,则在完成该服务后将继续执行剩余的操作,且不需要再次激活 nXDREQ

Page 24: S3C44B0X DMA 功能及应用

24

完整服务模式时序图 1

Page 25: S3C44B0X DMA 功能及应用

25

完整服务模式时序图 2

Page 26: S3C44B0X DMA 功能及应用

26

需求模式 与完整服务模式不同,需求模式不允许将总线控制权交给高优先级的总线控制者

在需求模式下进行 DMA 操作要特别小心,因为这种垄断模式可能对最佳总线共享的其他控制者产生意料不到的故障

Page 27: S3C44B0X DMA 功能及应用

27

需求模式时序图

Page 28: S3C44B0X DMA 功能及应用

28

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

Page 29: S3C44B0X DMA 功能及应用

29

DMA 传送方式下的读 / 写

DMA 传送方式 读 / 写

单元( unit )传送 1 个单元读,然后 1 个单元写

块( block)传送 4 个单元突发模式读,然后 4 个单元突发模式写

on-the-fly 传送 1 个单元读或一个单元写(读与写分开)

Page 30: S3C44B0X DMA 功能及应用

30

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

Page 31: S3C44B0X DMA 功能及应用

31

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

Page 32: S3C44B0X DMA 功能及应用

32

块( block)传送方式 块( 4 个字)传送方式表示在连续 4 个

字的写周期前有连续 4 个字的 DMA 读周期,即 4 个字突发读,然后 4 个字突发写,因此传输的数据个数应是 16 字节的倍数

在块传送方式下,遇到 16 字节对齐的情况时, ADDR[3:0] 应置为 0

Page 33: S3C44B0X DMA 功能及应用

33

块( block)传送方式—举例 假设传送 100 字节(即 DMA 计数值为

100 ),则 6×16=96 字节能够被传送,但剩余的 4 字节将不能被传送,因为在传送了 96 字节之后, DMA 操作就会停止

Page 34: S3C44B0X DMA 功能及应用

34

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

Page 35: S3C44B0X DMA 功能及应用

35

on-the-fly 传送方式 当 DMA 读 / 写数据时,具有固定地址的

外部设备通过 DMA 应答信号 (nXDACK0/1)来写 / 读这个数据

DMA 在写数据前要先读数据

Page 36: S3C44B0X DMA 功能及应用

36

on-the-fly 传送方式(续) 读和写操作同时进行。 DMA 应答信号通

知外部设备去读或写。同时,存储控制器将产生与读 / 写相关的控制信号给外部存储器 。如果外部存储器能够支持 on-the-fly 方式 ( 即能由 DMA 应答信号来读 / 写数据 ),则数据的传送率将加倍

在传送周期内,数据总线处于高阻状态

Page 37: S3C44B0X DMA 功能及应用

37

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

Page 38: S3C44B0X DMA 功能及应用

38

DMA 请求源的选择 ZDMA BDMA

Page 39: S3C44B0X DMA 功能及应用

39

ZDMA DMA 请求源: S/W 或 H/W 产生 nXD

REQ 信号(外部 DMA 请求信号) 在启动之前, DMA 的相关参量如源地址、

目的地址、传送计数值等都应进行配置 S/W 的触发可通过写 01 到 ZDCON0/1

寄存器的域来完成

Page 40: S3C44B0X DMA 功能及应用

40

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

Page 41: S3C44B0X DMA 功能及应用

41

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

Page 42: S3C44B0X DMA 功能及应用

42

BDMA 有 6 个硬件请求源: UART0 、 UART1 、

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

Page 43: S3C44B0X DMA 功能及应用

43

自动重装模式 当 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 请求出现

Page 44: S3C44B0X DMA 功能及应用

44

自动重装模式(续) 为了支持自动重装模式, DMA 设置了两

个寄存器组 寄存器 Z(B)DISRCn 、 Z(B)DIDESn 和

Z(B)DICNTn 包含 DMA 操作的初始化配置

寄存器 Z(B)DCSRCn 、 Z(B)DCDESn 和 Z(B)DCCNTn 包含反映当前 DMA 操作的配置

Page 45: S3C44B0X DMA 功能及应用

45

自动重装的产生条件 自动重装( AR )等于 1 和 DMA 计数值达到 0

向 Z(B)DISRC0 、 Z(B)DIDES0 和 Z(B)DICNT0 写入新的配置

若 DMA 被激活,即寄存器中的 EN 位由 0 变为 1

S/W 命令被取消,当在 ZDCON0/1 中的 CMD 域写入 11 时

Page 46: S3C44B0X DMA 功能及应用

46

S3C44B0X DMA 特殊功能寄存器 ZDMA 控制寄存器( ZDCONn ) ZDMA0/1初始源 / 目的地址和计数寄存器及 ZDMA0/1当前源 / 目的

地址和计数寄存器 ZDMAn初始 /当前源地址寄存器( ZDISRC 、 ZDCSRC ) ZDMAn初始 /当前目的地址寄存器( ZDIDES 、 ZDCDES ) ZDMAn初始 /当前目的计数寄存器( ZDICNT 、 ZDCCNT ) BDMAn 控制寄存器( BDCON) ZDMA0/1初始源 / 目的地址和计数寄存器及 ZDMA0/1当前源 / 目的

地址和计数寄存器 ZDMAn初始 /当前源地址寄存器( BDISRC 、 BDCSRC ) ZDMAn初始 /当前目的地址寄存器( BDIDES 、 BDCDES ) ZDMAn初始 /当前目的计数寄存器( BDICNT 、 BDCCNT )

Page 47: S3C44B0X DMA 功能及应用

47

ZDMAn 控制寄存器

Page 48: S3C44B0X DMA 功能及应用

48

ZDMAn 控制寄存器(续)

Page 49: S3C44B0X DMA 功能及应用

49

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

Page 50: S3C44B0X DMA 功能及应用

50

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

Page 51: S3C44B0X DMA 功能及应用

51

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

Page 52: S3C44B0X DMA 功能及应用

52

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

Page 53: S3C44B0X DMA 功能及应用

53

ZDMAn初始 /当前计数寄存器

Page 54: S3C44B0X DMA 功能及应用

54

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

Page 55: S3C44B0X DMA 功能及应用

55

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

Page 56: S3C44B0X DMA 功能及应用

56

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

Page 57: S3C44B0X DMA 功能及应用

57

BDMAn 控制寄存器

Page 58: S3C44B0X DMA 功能及应用

58

BDMAn 控制寄存器(续)

Page 59: S3C44B0X DMA 功能及应用

59

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

Page 60: S3C44B0X DMA 功能及应用

60

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

Page 61: S3C44B0X DMA 功能及应用

61

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

Page 62: S3C44B0X DMA 功能及应用

62

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

Page 63: S3C44B0X DMA 功能及应用

63

BDMA0初始 /当前计数寄存器

Page 64: S3C44B0X DMA 功能及应用

64

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

Page 65: S3C44B0X DMA 功能及应用

65

BDMA1初始 /当前计数寄存器

Page 66: S3C44B0X DMA 功能及应用

66

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

Page 67: S3C44B0X DMA 功能及应用

67

S3C44B0X DMA 应用编程 ZDMA BDMA

Page 68: S3C44B0X DMA 功能及应用

68

ZDMA 本实验通过 DMA 方式实现存储器到存

储器的数据传送,并将其与常规的内存拷贝操作进行比较(实验来源文献 [4])

Page 69: S3C44B0X DMA 功能及应用

69

包含文件 #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")));

Page 70: S3C44B0X DMA 功能及应用

70

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); }

Page 71: S3C44B0X DMA 功能及应用

71

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); }

Page 72: S3C44B0X DMA 功能及应用

72

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+tim

e); } time=Timer_Stop(); Uart_Printf("Copy Bytes:time=%f\n",time*128E-6);

Page 73: S3C44B0X DMA 功能及应用

73

Zdma0 (续) / *****测试半字方式的拷贝时间**** / Timer_start(3); for(time=0;time<length;time+=2) { *(unsigned short*)(dstAddr+time)=*(unsigned short*)(srcAddr+tim

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

Page 74: S3C44B0X DMA 功能及应用

74

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; }

Page 75: S3C44B0X DMA 功能及应用

75

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

Page 76: S3C44B0X DMA 功能及应用

76

输出结果 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

Page 77: S3C44B0X DMA 功能及应用

77

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

Page 78: S3C44B0X DMA 功能及应用

78

IIS IIS 是一种串行总线设计技术,是

SONY 和 PHILIPS 等公司共同推出的接口标准,主要针对数字音频处理技术和设备

在实验中, IIS 总线接口由处理器S3C44B0X 的 IIS 模块和音频芯片UDA1341 硬件来实现

Page 79: S3C44B0X DMA 功能及应用

79

UDA1341TS 电路中使用的音频芯片是 PHILIPS 公司

的 UDA1341TS 音频数字信号编译码器 UDA1341TS 可将立体声模拟信号转化

为数字信号,同样也能把数字信号转换成模拟信号,并可用 PGA (可编程增益控制)和 AGC (自动增益控制)对模拟信号进行处理。

对于数字信号,该芯片提供了 DSP (数字音频处理)功能。

Page 80: S3C44B0X DMA 功能及应用

80

IIS 接口电路

Page 81: S3C44B0X DMA 功能及应用

81

IIS 总线框图

Page 82: S3C44B0X DMA 功能及应用

82

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

Page 83: S3C44B0X DMA 功能及应用

83

编解码时钟

Page 84: S3C44B0X DMA 功能及应用

84

可用的串行位时钟频率

Page 85: S3C44B0X DMA 功能及应用

85

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

Page 86: S3C44B0X DMA 功能及应用

86

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

Page 87: S3C44B0X DMA 功能及应用

87

正常传输模式 如果发送队列非空,当队列发送数据准

备就绪时,就绪标志位被置 1;如果发送队列为空,就绪标志位被置 0

如果接收队列未满,就绪标志位被置 1;如果接收队列为满,就绪标志位被置 0

这些标志位决定了 CPU 读或写队列的时间

Page 88: S3C44B0X DMA 功能及应用

88

DMA 传输模式 发送或接收队列的访问是由 DMA 控制

器来完成的 在发送或接收模式中, DMA 服务请求

由队列的就绪标志位自动给出

Page 89: S3C44B0X DMA 功能及应用

89

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

Page 90: S3C44B0X DMA 功能及应用

90

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

Page 91: S3C44B0X DMA 功能及应用

91

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

//初始化UDA1341芯片 Init1341(); }

Page 92: S3C44B0X DMA 功能及应用

92

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

rPCONB=0x7CF; // 设置起始 L3M 和 L3C输出高电平 rPDATB=L3M | L3C;

Page 93: S3C44B0X DMA 功能及应用

93

初始化 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 , // 无直流滤波器, IIS _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); }

Page 94: S3C44B0X DMA 功能及应用

94

初始化 UDA1341 芯片(续) _WrL3Addr(U8 data) 是通过 L3 总线

接口写控制数据地址 (data) 到 1341 芯片

_WrL3Data(U8 data,int halt) 是通过 L3 总线接口写控制数据 (data 和停止操作 )到 1341 芯片

Page 95: S3C44B0X DMA 功能及应用

95

播放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);

Page 96: S3C44B0X DMA 功能及应用

96

播放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;

Page 97: S3C44B0X DMA 功能及应用

97

播放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; } }

Page 98: S3C44B0X DMA 功能及应用

98

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

Page 99: S3C44B0X DMA 功能及应用

99

参考文献 [1] 田泽,嵌入式系统开发与应用教程,北京:北京航空航天大学出版社, 2005

[2] 田泽,嵌入式系统开发与应用实验教程,北京:北京航空航天大学出版社, 2005

[3] S3C44B0X RISC MICROPROCESSOR [4] 陈赜等, ARM嵌入式技术实验教程,北京:北京航空航天大学出版社, 2005

Page 100: S3C44B0X DMA 功能及应用

100

谢谢

Thank you!