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腳位圖 和 一般應用圖