55
第 5 第 S3C44B0X 第第第第第第第第第 前前前前 S3C44B0X 前前前前前前前前前前前 前前前前前前前前前前前前前 前前前前前 一, S3C44B0X 前前前前前 前前前前前前前前 EV 44B0II 前前前前前前前前前前

第 5 章 S3C44B0X 接口电路设计与编程

  • Upload
    tausiq

  • View
    127

  • Download
    10

Embed Size (px)

DESCRIPTION

第 5 章 S3C44B0X 接口电路设计与编程. 前面了解 S3C44B0X 的硬件结构,这里我们研究一下它的电路设计及编程方法,更深入地解析 S3C44B0X 的内部结构,同时也了解了基于 EV44B0II 开发板的设计开发思想。. 本章主要介绍:. ⑴ EV44B0II 开发板的存储和 I/O 地址空间分布 ⑵ Boot loader 在存储地址空间的分布情况。 - PowerPoint PPT Presentation

Citation preview

Page 1: 第  5  章 S3C44B0X 接口电路设计与编程

第 5 章 S3C44B0X 接口电路设计与编程 前面了解 S3C44B0X 的硬件结构,这里我们研究一下它的电路设计及编程方法,更深入地解析 S3C4

4B0X 的内部结构,同时也了解了基于 EV44B0II 开发板的设计开发思想。

Page 2: 第  5  章 S3C44B0X 接口电路设计与编程

本章主要介绍: ⑴ EV44B0II 开发板的存储和 I/O 地址空间分布 ⑵ Boot loader 在存储地址空间的分布情况。

⑶ 电源时钟复位电路、 Boot FLASH 接口电路、SDRAM 接口电路、网络 USB 及 IIS 接口电路、键盘数码管接口电路、 LCD 接口电路、触摸屏接口电路、串行口接口电路、 IIC 接口电路和 A/D 等接口电路等的设计及编程等。

Page 3: 第  5  章 S3C44B0X 接口电路设计与编程

5.1 MICETEK EV44B0II 开发板简介 EV44B0II 是一个适用用于手持设备和一般应用的 S3C44B0X 处理器的开发平台。 它包括 S3C44B0X 处理器、 8 位 LCD 连接器和触摸屏接口、 10MHz 外部时钟、 1M×16 位的 Flas

h 、 4M×16 位的 SDRAM 、 2 个 RS232 串行口、 1个 JTAG 接口、 1 个并行调试接口、 1 个 RTC 、 1个 IIC EEPROM 、一个 10/100MB 网络接口、一个USB 接口、一个具有扬声器和麦克的音频接口、一位 8 段码显示器、 1 个 4×4 键盘、特殊功能引脚和总线扩展接口。如图5-1所示

Page 4: 第  5  章 S3C44B0X 接口电路设计与编程

5.1.1 存储地址空间分配 EV44B0II 有 6 个 ROM/SRAM bank 和

2 个 ROM/SRAM/SDRAM bank , S3C44B0X 可以控制总线宽度和存取时间,存取时间由 BANKCON0~7 ,总线宽度由 BWSCON 配置。 bank0 作为 boot ROM 启动存储器,它的总线宽度由 OM[1:0] 控制,存储器大小端控制由 ENDIAN 控制,如图5-2所示。存储地址空间分布如图 5-3 所示。

Page 5: 第  5  章 S3C44B0X 接口电路设计与编程

5.1.1 存储地址空间分配 EV44B0II 有 6 个 ROM/SRAM bank 和

2 个 ROM/SRAM/SDRAM bank , S3C44B0X 可以控制总线宽度和存取时间,存取时间由 BANKCON0~7 ,总线宽度由 BWSCON 配置。

bank0 作为 boot ROM 启动存储器,它的总线宽度由 OM[1:0] 控制,存储器大小端控制由 ENDIAN 控制,如图5-2所示。存储地址空间分布如图5-3所示。

Page 6: 第  5  章 S3C44B0X 接口电路设计与编程

配置程序如下:LDR r0, =SMRDATALDMIA r0, {r1-r13}LDR r0, =0x01c80000 ; BWSCON AddressSTMIA r0, {r1-r13}......SMRDATA:.word 0x11110092 @ BWSCON.word 0x00000600 @ GCS0, boot ROM.word 0x00007FFC @ GCS1, Ethernet.word 0x00007FFC @ GCS2, USB.word 0x00007FFC @ GCS3, 8-SEG

Page 7: 第  5  章 S3C44B0X 接口电路设计与编程

.word 0x00007FFC @ GCS4, not use

.word 0x00007FFC @ GCS5, not use

.word 0x00018000 @ GCS6 SDRAM(Trcd=2,SCAN=8)

.word 0x00018000 @ GCS7 SDRAM(Trcd=2,SCAN=8)

.word 0x00820591 @ Refresh(REFEN=1,TREFMD=0, @ Trp=3.5(D)or4(SD), Trc=5(S), Tchr=3(D), Ref CNT).word 0x16 @ Bank size, 32MB/32MB.word 0x20 @ MRSR 6(CL=2).word 0x20 @ MRSR 7(CL=2)

Page 8: 第  5  章 S3C44B0X 接口电路设计与编程

参数说明如表 5-1 所示 寄存器 地址 值 描述

BWSCON 0x1C80000 0x11110090Bank0=OM[1:0], Bank1~Bank7=16 位 ,

bank2,3=8 位 ;

BANKCON0 0x1C80004 0x00000600 Tacc=10 时钟周期 ;

BANKCON1 0x1C80008 0x00007FFC

Tacs=4 时钟周期 ;Tcos=4 时钟周期 ;Tacc=14 时钟周期 ;Toch=4 时钟周期

;Tacp=4 时钟周期

BANKCON2 0x1C8000C 0x00007FFC

Tacs=4 时钟周期 ;Tcos=4 时钟周期 ;Tacc=14 时钟周期 ;Toch=4 时钟周期

;Tacp=4 时钟周期

BANKCON3 0x1C80010 0x00007FFC

Tacs=4 时钟周期 ;Tcos=4 时钟周期 ;Tacc=14 时钟周期 ;Toch=4 时钟周期

;Tacp=4 时钟周期

Page 9: 第  5  章 S3C44B0X 接口电路设计与编程

寄存器 地址 值 描述BANKCON

4 0x1C80014 0x00007FFC

Tacs=4 时钟周期 ;Tcos=4 时钟周期 ;Tacc=14 时钟周期 ;Toch=4 时钟周期

;Tacp=4 时钟周期

BANKCON5 0x1C80018 0x00007FFC

Tacs=4 时钟周期 ;Tcos=4 时钟周期 ;Tacc=14 时钟周期 ;Toch=4 时钟周期

;Tacp=4 时钟周期

BANKCON6 0x1C8001C 0x00018000 GCS6 SDRAM(Trcd=2,SCAN=8)

BANKCON7 0x1C80020 0x00018000 GCS7 SDRAM(Trcd=2,SCAN=8)

REFRESH 0x1C80024 0x00820591 DRAM/SDRAM 刷新控制寄存器

Page 10: 第  5  章 S3C44B0X 接口电路设计与编程

寄存器 地址 值 描述BANKSIZ

E 0x1C80028 0x16 SCLK 允许 ;BANK6/7 是 8MB/8MB

MRSRB6 0x1C8002C 0x20 MRSR6 CL=2 时钟周期

MRSRB7 0x1C80030 0x20 MRSR7 CL=2 时钟周期

Page 11: 第  5  章 S3C44B0X 接口电路设计与编程

5.1.2 I/O 口配置 PA~PG 端口引脚配置如表 5-2 所示,其中 TP 表示触摸屏, key 表示键盘

Page 12: 第  5  章 S3C44B0X 接口电路设计与编程

Port A(rPCONA=0x1FF) Port A 功能引脚 Port A 功能引脚 Port A 功能引脚PA0 ADDR0 PA4 ADDR19 PA8 ADDR23PA1 ADDR16 PA5 ADDR20 PA9 OUTPUT(II

S)PA2 ADDR17 PA6 ADDR21PA3 ADDR18 PA7 ADDR22Port B(rPCONB=0x1CF)Port B 功能引脚 Port B 功能引脚 Port B 功能引脚PB0 SCKE PB4 OUTPUT(II

S)PB8 nGCS3

PB1 SCLK PB5 OUTPUT(IIS)

PB9 OUTPUT(NC)

PB2 nSCAS PB6 nGCS1 PB10 OUTPUT(NC)

PB3 nSRAS PB7 nGCS2

Page 13: 第  5  章 S3C44B0X 接口电路设计与编程

Port C(rPCONC=0x5F5FFFFF)Port C 功能引脚 Port C 功能引脚 Port C 功能引脚PC0 IISLRCK PC6 VD5 PC12 TXD1PC1 IISD0 PC7 VD4 PC13 RXD1PC2 IISD1 PC8 nXDACK

1PC14 nRTS0

PC3 IISCLK PC9 nXDREQ1

PC15 nCTS0

PC4 VD7 PC10 nRTS1PC5 VD6 PC11 nCTS1Port D(rPCOND=0xAAAA)Port D 功能引脚 Port D 功能引脚 Port D 功能引脚PD0 VD0 PD3 VD3 PD6 VMPD1 VD1 PD4 VCLK PD7 VFRAMEPD2 VD2 PD5 VLINE

Page 14: 第  5  章 S3C44B0X 接口电路设计与编程

Port E(rPCONE=0x2552B)Port E 功能引脚 Port E 功能引脚 Port E 功能引脚PE0 Fpllo PE3 USB PE6 OUTPUT(T

P)PE1 TXD0 PE4 OUTPUT(T

P)PE7 OUTPUT(T

P)PE2 RXD0 PE5 OUTPUT(T

P)PE8 CODECLK

Port F(rPCONF=0x2A)Port F 功能引脚 Port F 功能引脚 Port F 功能引脚PF0 IICSCL PF3 nXBACK0 PF6 INPUT(key

)PF1 IICSDA PF4 nXDREQ0 PF7 INPUT(key

)PF2 nWAIT PF5 INPUT(key

)PF8 INPUT(key

)Port G(rPCONG=0x55FF)Port G 功能引脚 Port G 功能引脚 Port G 功能引脚PG0 EINT0 PG3 EINT3 PG6 OUTPUT(k

ey)PG1 EINT1 PG4 OUTPUT(k

ey)PG7 OUTPUT(k

ey)PG2 EINT2 PG5 OUTPUT(k

ey)

Page 15: 第  5  章 S3C44B0X 接口电路设计与编程

I/O 端口初始化程序如下:void Port_Init(void){ rPCONA=0x1ff; rPDATA=0x0; rPCONB=0x1Cf; rPDATC=0x8400; rPCONC=0x5F5FFFFF; rPUPC=0x33ff; rPCOND=0xaaaa; rPUPD=0xff; rPCONE=0x2552b;

Page 16: 第  5  章 S3C44B0X 接口电路设计与编程

rPUPE=0x0; rPDATE=0X60; rPCONF=0x2A; rPUPF=0x0; rPDATG=0x0; rPCONG=0x55FF; rPUPG=0x0; rSPUCR=0x7; // 上拉禁止。 rEXTINT=0x22222022; // EINT7 ~ EINT0 下降沿触发。}

Page 17: 第  5  章 S3C44B0X 接口电路设计与编程

5.1.3 电源、时钟及复位电路1. 电源 EV44B0II 系统采用 DC 3.3V( 最少 850mA) 供电,

3.3V 给 MCU 的 I /O 接口供电, 3.3V 经稳压芯片产生一个 2.5V 电压给 ARM 内核供电。2. 时钟 系统时钟源可以由晶体和外部时钟提供,它的选择控制由 OM[3:2]( 在 nRESET 上升沿锁定 ) 来决定。本系统采用 10MHz 晶体作为时钟源, OM[3:2]=00 E

XTCLK=VDD 如图5-4所示。

Page 18: 第  5  章 S3C44B0X 接口电路设计与编程

3. 复位 nRESET 至少保持 5 个时钟的低电平,当 nRESET 为高电平时,处理器进行初始化操作。

Page 19: 第  5  章 S3C44B0X 接口电路设计与编程

5.1.4 MBL(Micetek Boot Loader) 介绍 MBL 是驻留在 EV44B0II 板的一段小程序, 约 80KB 。

它可以打通 EV44B0II 板的通讯端口,如: Ethernet 以太网口、 USB 口和串口,使板可以直接与 PC 机相连,从而达到下载和调试 uClinux或其他应用程序。 它驻留在低 2MB 的 FLASH 中,如图5-5所示。

Page 20: 第  5  章 S3C44B0X 接口电路设计与编程

在上电复位时, Flash 的基址是 0x0 。所以 MBL 就会立刻被启动运行。 在启动后, MBL 把自己的代码拷贝到板子上 SDRAM 中,其他空间 ( 约 7M Bytes)可以用来下载 Linux Image 文件或其他应用程序,这些程序下载到 SDRAM 中的默认地址是 0x0c008000 。如图5-6所示。

Page 21: 第  5  章 S3C44B0X 接口电路设计与编程

5. 2 存储器电路设计及编程 EV44B0II 存储系统包括一片 1M×16 位的 FLASH(29LV160TE) 和一片 4M×16 位的

SDRAM(KM416S4020B) 。

Page 22: 第  5  章 S3C44B0X 接口电路设计与编程

5.2.1 BOOT FLASH 电路及编程1. 电路 FLASH 连接电路如图 5-7 所示,处理器

通过片选 nGCS0 与片外 FLASH 芯片连接。 由于是 16 位的 FLASH ,所以用 CPU 的地址线 A1 ~ A20 来分别与 FLASH 的地址线

A0 ~ A19 连接。 Flash 的地址空间为 0x00000000 ~ 0x0

0200000 。

Page 23: 第  5  章 S3C44B0X 接口电路设计与编程

HY29LV160 是 HYUNDAI 公司生产的 Flash 存储器,其主要特点有:

⑴ 3 V 单电源供电,可使内部产生高电压进行编程和擦除操作; ⑵ 支持 JEDEC 单电源 Flash 存储器标准和

CFMI ( Common Flash Memory Interface )特性; ⑶ 只需向其命令寄存器写入标准的微处理器指令,具体编程、擦除操作由内部嵌入的算法实现,并且可以通过查询特定的引脚或数据线监控操作是否完成; ⑷ 可以对任一扇区进行读、写或擦除操作,而不影响其它部分的数据。

Page 24: 第  5  章 S3C44B0X 接口电路设计与编程

HY29LV160 操作编程命令包括读、擦除、编程和复位等命令,如表 5-3 所示。

Page 25: 第  5  章 S3C44B0X 接口电路设计与编程

命令序列总步数

第 1步 第 2步 第 3步 第 4步 第 5步 第 6步

地址 数据 地址 数据 地址 数据 地址 数据 地址 数据 地址 数据

读 /复位字

1 XXXH F0H - - - - - - - - - -字节

读 /复位字

3

555H

AAH

2AAH

55H

555H

F0H RA RD - -

字节 AAAH 555H AAAH

Page 26: 第  5  章 S3C44B0X 接口电路设计与编程

命令序列总步数

第 1步 第 2步 第 3步 第 4步 第 5步 第 6步地址 数据 地址 数据 地址 数据 地址 数据 地址 数据 地址 数据

自动选择字

3

555H

AAH

2AAH

55H

555H

90H - - - -字节 AAAH 555H AAAH

编程字

4

555H

AAH

2AAH

55H

555HA0

H RA PD - -字节 AAAH 555H AAAH

Page 27: 第  5  章 S3C44B0X 接口电路设计与编程

命令序列总步数

第 1步 第 2步 第 3步 第 4步 第 5步 第 6步

地址 数据 地址 数据 地址 数据 地 数据 地址 数据 地址 数据

片擦除

字6

555H AAH 2AAH

55H

555H

80H.

555H

AAH

2AAH

55H

555H

10H字节 AAAH AAH 555H AAAH AAAH 555H AAAH

扇区擦除

6

555H AAH 2AAH

55H

555H

80H

555H

AAH

2AAH

55H

555H

30H字节 AAAH AAH 555H AAAH AAAH 555H AAAH

Page 28: 第  5  章 S3C44B0X 接口电路设计与编程

2. 29LV160TE 芯片擦除 29LV160TE 芯片具有 3种擦除方式 : 整片擦除、扇区擦除和快擦除。主要来看进行扇区擦除。 参考表 5-3扇区擦除的操作流程,由此我们得到扇区擦除子程序的主体如下:

Page 29: 第  5  章 S3C44B0X 接口电路设计与编程

void F29LV160_EraseSector(int targetAddr){ Uart_Printf("Sector Erase is started!\n"); _RESET( ); // 芯片复位 _WR(0x555,0xaa); _WR(0x2aa,0x55); _WR(0x555,0x80); _WR(0x555,0xaa); _WR(0x2aa,0x55); _WR(BADDR2WADDR(targetAddr),0x30); _WAIT( ); // 等待擦除结束 _RESET( ); // 芯片复位}

Page 30: 第  5  章 S3C44B0X 接口电路设计与编程

其中 _WR(addr,data) 是写入一个字函数。addr 为写入数据的目标地址,由于 data 为 16 位字而不是字节, addr 也是字地址。对处理器而言地址是以字节为单位的,因此, addr 必须加以调整,左移 1 位。

_ WR(addr,data) 函数: #define _WR(addr,data)*((U16 *)(addr<<1))=(U16)data #define BADDAZWADDR(Addr)>>1)

Page 31: 第  5  章 S3C44B0X 接口电路设计与编程

3. 编程写入 整片擦除之后,就能够在 flash 的任意地址中进行写入操作了。参考表 5-3 ,得到字写入子程序的主体如下:

Page 32: 第  5  章 S3C44B0X 接口电路设计与编程

int F29LV160_ProgFlash(U32 realAddr,U16 data){ volatile U16 *tempPt;

int temp,count=0;tempPt=(volatile U16 *)realAddr;_WR(0x555,0xaa);_WR(0x2aa,0x55);_WR(0x555,0xa0);*tempPt=data;return _WAIT( );

}

Page 33: 第  5  章 S3C44B0X 接口电路设计与编程

在写入操作的最后,有一个判断写入是否完成的 _WAIT() 的过程。 在这里我们采用 Toggle bit (翻转位)的方法检测 DQ6 脚的输出,若翻转停止则表示写入完成:

Page 34: 第  5  章 S3C44B0X 接口电路设计与编程

int _WAIT(void) //检测 DQ6输出是否停止翻转{ volatile U16 flashStatus,old; old=*((volatile U16 *)0x0); while(1) {

flashStatus=*((volatile U16 *)0x0);if( (old&0x40) == (flashStatus&0x40))

break;

Page 35: 第  5  章 S3C44B0X 接口电路设计与编程

if( flashStatus&0x20 ) //测试超时标志位 DQ5{ old=*((volatile U16 *)0x0); flashStatus=*((volatile U16 *)0x0); if( (old&0x40) == (flashStatus&0x40) )return 1; //无翻转 else return 0; //翻转}old=flashStatus;

} return 1;}详细程序参见EV44B0II实验程序。

Page 36: 第  5  章 S3C44B0X 接口电路设计与编程

5.2.2 SDRAM 电路设计及编程

Page 37: 第  5  章 S3C44B0X 接口电路设计与编程

1. 电路 SDRAM 连接电路如图5-8所示, SDRAM 分成4 个 Bank ,每个 Bank 的容量为 1M×l6 位。 Bank 的地址由 BAl 、 BAO 决定,00对应 Bank0 , 01对应 Bankl , 10对应 Bank2 , 11对应 Bank3 。

在每个 Bank 中,分别用行地址脉冲选通 RAS 和列地址脉冲选通 CAS 进行寻址。

SDRAM 由 MCU专用 SDRAM 片选信号 nSCS0 选通,地址空间为 0x0C000000 ~ 0x0C800000 。

Page 38: 第  5  章 S3C44B0X 接口电路设计与编程

2. 编程 对特定地址的写入和读出操作: #define _WR(addr,data)*((U16 *)(addr<<1))=(U16)data #define _RD(addr)( *((U16 *)(addr<<1)) )

Page 39: 第  5  章 S3C44B0X 接口电路设计与编程

5.3网络、 USB 和 IIS 电路设计及编程

Page 40: 第  5  章 S3C44B0X 接口电路设计与编程

5.3.1 网络接口 SMSC9113 同时具备 MAC 层和 PHY 物理接口功能芯片,它使用中断通知 S3C44B0X 数据的发送和接收。 S3C44b0X 是使用 nGCS1 和数据地址线访问 SMSC9113 的内部寄存器和缓冲区。 TS6121 是隔离变压器 , 板上的 LEDA 和 LED

B指示灯分别表示 100M链路正常和网络接收发送, EV44B0II 以太网部分的逻辑如图5-9所示。

Page 41: 第  5  章 S3C44B0X 接口电路设计与编程

5.3.2 USB 电路 USB 接口电路如图5-10所示。

Page 42: 第  5  章 S3C44B0X 接口电路设计与编程

5.3.3 IIS 电路设计及编程

Page 43: 第  5  章 S3C44B0X 接口电路设计与编程

1. 电路接口 IIS即音频数据接口,它是 SONY 、 PHI

LIPS 等电子巨头共同推出的接口标准。 IIS 接口电路如图5-11所示。

Page 44: 第  5  章 S3C44B0X 接口电路设计与编程

该系统把 IIS 接口与 PHILIPS 公司的 UDAl341TS 音频数字信号编译码器相连接,得到 MICROPHONE 音频输入通道和 SPEAKER 音频输出通道。

UDAl341TS 可把立体声模拟信号转化为数字信号,同样也能把数字信号转换成模拟信号,并可用 PGA( 可编程增益控制 ) 、 AGC( 自动增益控制 )对模拟信号进行处理。 对于数字信号,该芯片提供了 DSP 数字音频处理功能。在实际中, UDAl341TS 可广泛应用于 MD 、 CD 、 Note—Book 、 PC 和数码摄像机等。

Page 45: 第  5  章 S3C44B0X 接口电路设计与编程

S3C44B0X 的 IIS 接口可与 UDAl341TS 的 BCK 、 WS 、 DATAI 、 DATAO 和 SYSCLK 相连。

对于 UDAl341TS 的 L3 总线,它是该芯片工作于微控制器输入模式时使用的,它包括 L3DATA 、L3MODE 和 L3CLOCK 共 3 根接线,它们分别表示为微处理器接口数据线、微处理器接口模式线和微处理器接口时钟线。

通过这个接口,微处理器能够对 UDAl341TS中的数字音频处理参数和系统控制参数进行配置。但是 S3C44B0X 中没有设该专用接口,可通过通用 I/O 口进行扩展。

Page 46: 第  5  章 S3C44B0X 接口电路设计与编程

2. 编程 IISInit( ) 是初始化 IIS 接口函数, Playwave( ) 是播放 wav 文件函数。 分别介绍如下:

Page 47: 第  5  章 S3C44B0X 接口电路设计与编程

(1) 初始化 IIS 接口void IISInit(void){ rPCONE=(rPCONE&0xffff)+(<<16);

// 设置 I/O 口 PE8输出 CODECLK信号 Init341(); // 初始化 UDA1341 芯片}

Page 48: 第  5  章 S3C44B0X 接口电路设计与编程

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

Page 49: 第  5  章 S3C44B0X 接口电路设计与编程

_WrL3Addr(0x14+2); //写状态地址 000101x=10_WrL3Data(0x60,0); //0,1,10,000,0 复位, 256fs,无 直流滤波器, IIS_WrL3Addr(ox14+2); //写状态地址 000101xx+10_WrL3Data(0x20,0); //0,0,10,000,0无复位, 256f

s, 无直流滤波器, IIS_WrL3Addr(0x14+2); //写状态地址 000101xx+10_WrL3Data(0x81,0); //1,0,0,0,0,0,11 OGS=0,IG

S=0,ADC_NI //DAC_NI,sngl speed,AonDon

_WrL3Addr(0x14+0); //写 DATA0 地址 000101xx+10

_WrL3Data(0x0A,0);}

Page 50: 第  5  章 S3C44B0X 接口电路设计与编程

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

Page 51: 第  5  章 S3C44B0X 接口电路设计与编程

(3) 播放 wav 声音文件函数 Playwave( ) 程序运行前须将 wav 文件下载到指定 RAM区域,地址为 0xC030000 。

Page 52: 第  5  章 S3C44B0X 接口电路设计与编程

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

Page 53: 第  5  章 S3C44B0X 接口电路设计与编程

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

sound_len;rBDCON0=0X0<<2;

Page 54: 第  5  章 S3C44B0X 接口电路设计与编程

//IIS 初始化 rIISCON=0x22;// 使能发送 DMA, 接收空闲,使能分频 rIISMOD=0xC9;// 主模式,发送,发送模式,左通道 低电平, IIS格式, 16 位 // 数据, 256fs,32fs rIISPSR=0x22;// 分频因子 rIISFCON=0xF00;// 接收、发送 DMA模式,使能 FIF

O rIISCON|=0x1;// 使能 IIS while(iDMADone==0);// 等待直到 DMA传送结束 rIISCON=0x0;// 禁止 IIS }}

Page 55: 第  5  章 S3C44B0X 接口电路设计与编程

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