YV8002 V0.1
1. 概述
YV8002为 8位单片机语音 IC,只须外卦一个 I2C / SPI Flash.
SPI Flash 可以为 NOR-SPI-Flash(4Mbit-128Mbit) 或 NAND-SPI-FLASH(512Mbit 以上)
2. 功能
a. VDD : 2.4V - 6.0V
b. Main Clock : 12。288MHz(+-1.5%); 指令周期 : 3.072M
c. Current :Normal: ~600uA(no loading); Sleep : <1.0uA
d. Play Speed : 4KHz - 12KHz
e. 3个PORT(PA,PB,PC) 共24个 IO. 另加6个IO 作为接 SPI 和 跳点.
1. 24个IO 都一样, 可定义为 输入/输出, 上拉(20Kohm)/下拉(20Kohm)
2. 每个PORT 都可定义为碳膜输入(最少300Kohm)
3. 每个IO 都能做 wakeup 和产生中断
4. 输出/输入电流(15mA), 有限流电阻, 可直接推动LED, 不须外接电阻.
5. 另加6个IO为接SPI和跳点之用, 请看应用图.
f. 1个类比输入为录音输入
g. 4个16位可程序定时器, 每个都能产生中断
h. 可程序化 12位PWM. 直接 SPP/SPN 输出. 可推功0.5W喇叭.
i. 可输出MIDI.
j. 程序RROM+ROM : 3K*15可写入RROM + 1K*15 bootROM.
k. 资料RAM : 220*8
l. 内置 上电复位, 底电压复位(~1.8V)电路
m. 上电延迟 : 约30ms
n. MCU 共有52个指令, 每个指令用1~2个指令周期
3. 指令表 和 指令码
3. MEMORY MAP
01. FS00 和 FS04 (READ / WRITE) : 直接地址, 切定值FS04后, 读写FS00的地址为FS04的值.
02. FS01 (READ) : PC高位地址 只读
03. FS02 (READ / WRITE) : PC底位地址 可读写
04. FS03 (READ / WRITE) : STATUS REGISTOR 可读写
* C : CARRY FLAG. 上电后 切定为 “0”
* Z : ZERO FLAG. 上电后 切定为 “0”
* P : 上电后 或 WAKEUP, 切定为 “1”
* T : 上电后 切定为 “1”
* IOPAEN / IOPBEN / IOPCEN : PA / PB / PC为碳膜(最少500Kohm)输入. 上电后 切定为 “0”
05. FS05 (READ / WRITE) : PWM CTRL 可读写
*上电后: 都切定为 “0”
*上电后: 读SPP & SPN, 如同为0. 进入烧录MODE. 如同为1, 正常开始
*PWMEN : ENABLE PWM
*PWMUP : “0” : 上拉(20Kohm) SPP & SPN
*SPEN : “0” : SPP & SPN 为输入. “1” : SPP & SPN 为输出
*OSCOUT : “1” : SPP = MAIN CLOCK
06. FS06 (WRITE) : PWM DATA 只可写
*PWM中断为每4个DATA1次中断。每次写4个DATA, 每个DATA 为12bit
07. FS07 (WRITE) : PWM WIDHT 只可写
*切定 PLAY SPEED
08. FS08 (WRITE) : COUNTERA DATA(16BIT) 只可写
09. FS09 (WRITE) : COUNTERA DATA(16BIT) 只可写
10. FS0A (WRITE) : COUNTERA DATA(16BIT) 只可写
11. FS0B (WRITE) : COUNTERA DATA(16BIT) 只可写
12. FS0C (READ / WRITE) (PROGRAM=0) : INT VECTOR FLAG & INT VECTOR ENABLE 可读写
*上电后: 都切定为 “0”
*INTAB : COUNTERA INT FLAG, “0” : INT.
*INTBB : COUNTERB INT FLAG, “0” : INT.
*INTCB : COUNTERC INT FLAG, “0” : INT.
*INTDB : COUNTERD INT FLAG, “0” : INT.
*PINTOA : PORTA INT FLAG, “0” : INT.
*PINTOB : PORTB INT FLAG, “0” : INT.
*PINTOC : PORTC INT FLAG, “0” : INT.
*PWMINTB : PWM INT FLAG, “0” : INT.
*CNTENA : Enable COUNTERA
*CNTENB : Enable COUNTERB
*CNTENC : Enable COUNTERC
*CNTEND : Enable COUNTERD
13. FS0D (READ/WRITE) : INT VECTOR FLAG CLEAR 可读写
*上电后: 都切定为 “0”
*清除中断旗标, 只须写”1”.
e.g. 清除 COUNTERA 中断旗标: BS 0,@0x0D <-清除 COUNTERA 中断旗标
14. FS0E (READ/WRITE) : TABLE HIGH BYTE 可读写
*TBRD 0x00(or 0x01) 指令后 : 读 LOW-BYTE(or HIGH-BYTE){ROM[0x0E,0x0F]} -> W
15. FS0F (READ/WRITE) : TABLE LOW BYTE 可读写
*TBRD 0x00(or 0x01) 指令后 : 读 LOW-BYTE(or HIGH-BYTE){ROM[0x0E,0x0F]} -> W
16. FS10 (READ/WRITE) (PROGRAM=0) : PORT A 可读写
(PROGRAM=1) : PORTA SINK(OD) (WRITE) 只可写
*上电后: 都切定为 “0”. “1”: SINK(OD) ONLY
17. FS11 (WRITE) : PORTA CTRL IO 只可写
*上电后: 都切定为 “0”: 输入. “1”: 输出
(PROGRAM=1) : PORTA PULL-HIGH (WRITE) 只可写
*上电后: 都切定为 “0”. “1”: PULL HIGH (20Kohm)
18. FS12 (PROGRAM=0): PORTA PIN INT FLAG(READ) ; PORTA PIN INT ENABLE(WRITE) 可读写
*上电后: 都切定为 “0”: INT DISABLE. “1”: INT ENABLE
(PROGRAM=1) : PORTA PULL-LOW(WRITE) 只可写
*上电后: 都切定为 “0”. “1”: PULL LOW(20Kohm)
19. FS13 (PROGRAM=0): PORTA WAKEUP ENABLE 只可写
*上电后: 都切定为 “0”: DISABLE WAKEUP.
(PROGRAM=1) : PORTA RES(50Kohm) SW 只可写
*上电后: 都切定为 “0”. “1”: 接两个PIN的50Kohm 电阻. 用於触键.
20. FS14 (READ/WRITE) : PORT B 可读写
(PROGRAM=1) : PORTB SINK(OD) (WRITE) 只可写
*上电后: 都切定为 “0”. “1”: SINK(OD) ONLY
21. FS15 (WRITE) : PORTB CTRL IO 只可写
*上电后: 都切定为 “0”: 输入. “1”: 输出
(PROGRAM=1) : PORTB PULL-HIGH (WRITE) 只可写
*上电后: 都切定为 “0”. “1”: PULL HIGH (20Kohm)
22. FS16 (PROGRAM=0): PORTB PIN INT FLAG(READ) ; PORTB PIN INT ENABLE(WRITE) 可读写
*上电后: 都切定为 “0”: INT DISABLE. “1”: INT ENABLE
(PROGRAM=1) : PORTB PULL-LOW(WRITE) 只可写
*上电后: 都切定为 “0”: DISABLE PULL LOW(20Kohm). 写”1”, ENABLE PULL LOW.
23. FS17 (PROGRAM=0): PORTB WAKEUP ENABLE 只可写
*上电后: 都切定为 “0”: DISABLE WAKEUP.
(PROGRAM=1) : PORTB RES(50Kohm) SW 只可写
*上电后: 都切定为 “0” . “1”: 接两个PIN的50Kohm 电阻. 用於触键.
24. FS18 (READ/WRITE) : PORT C 可读写
(PROGRAM=1) : PORTC SINK(OD) (WRITE) 只可写
*上电后: 都切定为 “0”. “1”: SINK(OD) ONLY
25. FS19 (WRITE) : PORTC CTRL IO 只可写
*上电后: 都切定为 “0”: 输入. “1”: 输出
(PROGRAM=1) : PORTC PULL-HIGH (WRITE) 只可写
*上电后: 都切定为 “0”. “1”: PULL HIGH (20Kohm)
26. FS1A (PROGRAM=0): PORTC PIN INT FLAG(READ) ; PORTC PIN INT ENABLE(WRITE) 可读写
*上电后: 都切定为 “0”: INT DISABLE. “1”: INT ENABLE
(PROGRAM=1) : PORTC PULL-LOW(WRITE) 只可写
*上电后: 都切定为 “0”: DISABLE PULL LOW(20Kohm). 写”1”, ENABLE PULL LOW.
27. FS1B (PROGRAM=0): PORTC WAKEUP ENABLE 只可写
*上电后: 都切定为 “0”: DISABLE WAKEUP.
(PROGRAM=1) : PORTC RES(50Kohm) SW 只可写
*上电后: 都切定为 “0” . “1”: 接两个PIN的50Kohm 电阻. 用於触键.
28. FS1C (READ/WRITE) : PORT D 可读写
(PROGRAM=1) : PORTD SINK(OD) (WRITE) 只可写
*上电后: 都切定为 “0”. “1”: SINK(OD) ONLY
29. FS1D (WRITE) : PORTD CTRL IO 只可写
*上电后: 都切定为 “0”: 输入. “1”: 输出
(PROGRAM=1) : PORTC PULL-HIGH (WRITE) 只可写
*上电后: 都切定为 “0”. “1”: PULL HIGH (20Kohm)
30. FS1E (READ/WRITE) : ENABLE LDO & PROGRAM MODE 可读写
*上电后: 都切定为 “0”.
*PAGE=”0” : FILE SYSTEM = PAGE0. PAGE=”1” : FILE SYSTEM = PAGE1.
*LDOEN2/1/0=”000-111” : ENABLE LDO(1.2V-3.3V).
*PROGRAM=”1” : 可写入RROM.
*LOCKEN=0 : DISABLE WRITE : PAGE, LDOEN0, LDOEN1, LVRBEN.
*LVRBEN=”0” : ENABLE 底电压复位(当VCC底议1.8V, IC复位).
31. FS1F : (READ/WRITE) RECORDER 只可写
*上电后: RECD7-DECD0为 “00”, DISABLE RECODER
31. FS20 (WRITE) : RROMD7 – RROMD0 for PROGRAM WRITING 只可写
32. FS21 (WRITE) : RROMD14 – RROMD8 for PROGRAM WRITING 只可写
33. FS22 (READ/WRITE) : CTRL + RROMA11 – RROMA8 for PROGRAM WRITING 可读写
*上电后: RROMCEB,RROMWEB,RROMOEB,RROMRB=”1111”, RROMA11-RROMA0=0.
*RROMRB : RESET RROMA7-RROMA0
*写入RROM的例子: BS 4,0x1E <- 切定为写入RROM mode (PROGRAM=1)
MOV A,@0x60 <- 清除RROMA[7:0]=0x00 & 切定RROMA[11:8]=0x0
MOV 0x22,A <- & RROMCEB+RROMWEB+RROMOEB=011
TBRD 0 <- A <- LOW-BYTE DATA在ROM[0x0E]
MOV 0x20,A <- 写入 RROMD[7:0]
TBRD 1 <- A <- HIGH-BYTE DATA在ROM[0x0F]
MOV 0X21,A <- 写入 RROMD[14:8]
BC 6,0x22 <- WRITE RROM[0x0000]=0x1234 & RROMA[7:0]++
4. IC脚位图 和 一般应用图