|
基本数据
Question 1
PHONE MCU系列依功能区分有何不同?
Answer
PHONE MCU依功能来分类可分成三大类。
- HT95A系列:HT95Axxx - I/O型。
- HT95L系列:HT95Lxxx - LCD型。
- HT95C系列:HT95Cxxx - Caller ID型。
Question 2
PHONE MCU Caller ID型可分成那几种档次?
Answer
PHONE MCU Caller ID型可分成四种档次。
| Part No. |
VDD |
Program Memory |
Data Memory |
General I/O |
Dialer I/O |
LCD |
Timer |
External Interrupt |
Stack |
DTMF Generator |
FSK Receiver |
Package |
HT95C200
HT95C20P |
2.4V~5.5V |
8Kx16 |
1152x8 |
20~28 |
8 |
24x8~ 24x16 |
16-bitx2 |
4 |
8 |
v |
v |
128QFP |
HT95C300
HT95C30P |
2.4V~5.5V |
8Kx16 |
2112x8 |
16~28 |
8 |
36x16~ 48x16 |
16-bitx2 |
4 |
8 |
v |
v |
128QFP |
HT95C400
HT95C40P |
2.4V~5.5V |
16Kx16 |
2880x8 |
28~40 |
8 |
36x16~ 48x16 |
16-bitx2 |
4 |
12 |
v |
v |
128QFP |
注: (1)表列型号最末码是"0"者,为MASK (掩膜)型态。 (2)表列型号最末码是"P"者,为OTP
(一次编成)型态。
Question 3
Phone MCU系列,是否有提供LVR (Low voltage reset)功能?
Answer
没有。但是Phone MCU提供了Low battery detector的功能,请参阅Data Sheet之说明。
Question 4
低电压检测LBD功耗约为多少?
Answer
作检测低电压时,同时也会多耗一些电流,在5伏特下约50µA。
功能说明
Question 1
Phone MCU系列,在系统频率选择上,有那几种操作模式?
Answer
Phone MCU系列有四种操作模式
-
Normal Mode:系统频率3.58MHz动作、32768Hz
OSC动作,MCU工作于3.58MHz。
-
Green Mode:系统频率3.58MHz不动作、32768Hz
OSC动作,MCU工作于32768Hz。
-
Sleep Mode:系统频率3.58MHz不动作、32768Hz
OSC动作,MCU不工作(省电模式)。
-
Idle Mode:系统频率3.58MHz不动作、32768Hz
OSC不动作,MCU不工作(省电模式)。
Question 2
MCU进入Idle Mode省电模式,RTC是否仍会工作?
Answer
不会。
RTC的CLOCK来源由32768Hz提供,进入Idle Mode后,32768 Hz也关闭了,所以不会动作。
Question 3
MCU进入Sleep Mode省电模式,Timer 0与Timer 1的Timer Mode是否仍会工作?
Answer
在Sleep Mode时, 系统频率是停止的, 所以T1( FSYS/4 )也是停止,
但是32768Hz则继续动作。Timer 0的CLOCK来源为T1( FSYS/4 ),
在进入Sleep Mode之后,Timer 0将不会动作;Timer
1的CLOCK来源是32768Hz,在进入Sleep Mode之后,Timer 1依然会动作。
Question 4
MCU进入Idle Mode省电模式,Timer 0与Timer 1的Timer Mode是否仍会工作?
Answer
不会。
在Idle Mode时, 32768Hz是停止的, 所以T1( FSYS/4 )也会停止。
Timer 0与Timer 1的CLOCK来源都停止了,所以都不会动作。
Question 5
Phone MCU什么时候会产生复位?
Answer
Phone MCU复位的时机有三个,Power-on reset、External reset、WDT
overflow。
Question 6
在不同的工作模式下产生复位,对缓存器有何影响?
Answer
依不同的工作模式可区分以下五种不同的复位结果:
-
Power-on reset
-
External reset,在Normal mode高频模式及Green
mode低频模式
-
External reset,在Sleep Mode及Idle
Mode省电模式
-
WDT reset,在Normal mode高频模式及Green
mode低频模式
-
WDT reset,在Sleep Mode及Idle Mode省电模式
Phone MCU提供TO及PDF两个旗标来判断不同的复位来源,不同的复位结果对内部特殊缓存器的影响如下:
| |
TO |
PD |
一般内存 |
堆栈 |
程序计数器 |
特殊缓存器 |
| 1 |
0 |
0 |
unknown |
回到原点 |
回到0000h |
部分unknown,部分initial |
| 2 |
u |
u |
unchanged |
回到原点 |
回到0000h |
部分unchanged,部分initial |
| 3 |
0 |
1 |
unchanged |
回到原点 |
回到0000h |
部分unchanged,部分initial |
| 4 |
1 |
u |
unchanged |
回到原点 |
回到0000h |
部分unchanged,部分initial |
| 5 |
1 |
1 |
unchanged |
回到原点 |
回到0000h |
全部unchanged |
注:表中 u 为unchanged, 更详细的变化情形,请参考Data sheet。
Question 7
Phone MCU有那些中断资源可以使用?
Answer
Phone MCU的中断向量共有六个
| 名 称 |
说 明 |
中断向量 |
| 1 |
External中断 |
当INT
Pin产生Falling-Edge时,所产生的中断 |
04h |
| 2 |
TIMER0中断 |
有三种操作模式(注1),Clock Source = fSYS/4 |
08h |
| 3 |
TIMER1中断 |
有三种操作模式(注1),Clock Source = 32768Hz |
0Ch |
| 4 |
周边中断 |
FSK Receiver(注2)的中断 |
10h |
| 5 |
实时时钟(RTC)中断 |
1Hz的中断,Clock Source 由32768Hz产生 |
14h |
| 6 |
拨号I/O 中断 |
触发、HKS、HDI、HFI Pin
(注3)所产生的中断 |
18h |
注:
-
三种模式分别为Timer Mode、Event Counter
Mode、Pulse Width Measurement Mode。
-
HT95C提供FSK Receiver的中断。
-
当HKS
发生Falling或Rising edge或HFI 发生Rising edge或HDI 发生Falling
edge时产生中断。
Question 8
Phone MCU六个中断的优先级为何?
Answer
如果六个中断同时产生,则产生中断的优先级为「External中断」,「TIMER0中断」,「TIMER1中断」,「周边中断」,「实时时钟(RTC)中断」,「拨号I/O
中断」。
Question 9
16-Bit TMR值如何设定?
Answer
16-Bit Timer/Counter为一向上数之计数器 (Counter),每当Counter数到65535
(0FFFFH)溢位0H时产生中断 (Interrupt),所以若要计数为N (N < 65536);则TMR值要设定成
65536-N,设定好后启动TMR;TMR即从设定值往上数到65535溢出到0
(即65536),故所得值即65536-(65536-N)=N。
Question 10
16-Bit Timer/Counter的设定和读取顺序?
Answer
HT95 Phone MCU内部Data Bus均为8-Bit,对于16-Bit的数据必需两次才能完成,对16-Bit
Timer/Counter的写必需先写Low Byte然后High Byte,而读的顺序必需先读High
Byte然后Low Byte。
Question 11
Timer/Counter之Timer Mode如何设定?
Answer
Timer 0的Clock Source为四分之一系统频率,会随着Normal Mode高频模式和Green
Mode低频模式而有所不同;Timer 1的Clock Source为32768Hz,不会随着Normal
Mode高频模式和Green Mode低频模式而变。
因Timer/Counter有3种模式,即Timer、Event Counter和Pulse
Width等3种。以Timer 0为例,要执行Timer Mode要执行以下动作设定:
-
设定Timer/Counter为Timer Mode
(TM1、TM0=10H)
-
设定计数初始值 (TMR0)
-
假设为Normal Mode, 则Timer 0的Clock
Source为3.58MHz/4 = 895KHz
-
假设需要Timer 0每23ms产生一次中断
-
23ms / (1/895K) = 20585 = 5069h
-
10000H - 5069H = 0AF97h
-
先将97h写入TMR0L, 再将0AFh写入TMR0H。
-
打开相对应中断致能位 (ET0I和EMI)
-
设定 Timer ON (TMR0C.4=1)
当Timer
被打开后,Timer 开始向上计数,若Timer OFF
(TMR0C.4=0),则Timer立即停止。下次Timer再ON,则从上次停留值继续往上数,直到满位溢出产生中断,同时Timer
重新加载初始值。
Question 12
Timer/Counter之Event Counter Mode如何设定?
Answer
因Timer/Counter有3种模式,即Timer、Event Counter和Pulse Width等3种。
以Timer 0为例,要执行Event Counter Mode要执行以下动作:
-
设定Timer/Counter为Event Counter Mode
(TM1、TM0=01H)
-
选择TE; TE=1则Count Falling
Edge,TE=0则Count Rising Edge
-
设定计数初始值 (TMR0)
-
打开相对应中断致能位 (ET0I和EMI)
-
控制Timer ON (TMR0C.4=1)
Question 13
Timer/Counter之Pulse Width Mode如何设定?
Answer
因Timer/Counter有3种模式,即Timer、Event Counter和Pulse Width等3种。
要执行Pulse Width Mode要执行以下动作:
-
设定Timer/Counter为Pulse Width Mode
(TM1、TM0=11H)
-
选择TE; TE=1量High Pulse,TE=0量Low Pulse
-
设定TMR计数初始值 (一般设定=0)
-
打开相对应中断致能位 (ET0I和EMI)
-
打开Timer ON (TMR0C.4)
执行完以上步骤,程序可抽空Check TON值,若TON=0表示Pulse Width量度完成,Timer的值 x 2
n+1即是Pulse时间的宽度。
Question 14
如何设定实时时钟(RTC)中断?
Answer
实时时钟RTC的Clock
Source为32768Hz,所以除了Idle省电模式之外,其它的操作模式都会动作。实时时钟RTC中断设定方法如下:
-
打开中断致能位EMI ([0Bh].0)以及实时时钟中断致能位ERTCI
([1Eh].1), 两者均设为1
-
设定RTCEN ([24h].5)为1以致能实时时钟功能
执行完以上步骤,之后每一秒就会产生中断一次,实时时钟RTC的中断向量为14h。
Question 15
为什么在Data Sheet中的Selection Table中提到External
interrupt有4个来源,但是在Interrupt说明中,关于 external
interrupt却又提到external interrupt is triggered by a high to
low transition on INT/TMR1 pin?
Answer
在Phone MCU所有的各种中断来源中,INT/TMR1, HKS, HFI以及HDI共4根pin是由MCU的外部讯号来trigger,所以在selection
table中描述有4个external interrupt的来源。
Question 16
Phone MCU系列的看门狗时钟(WDT)有那些选择?
Answer
Phone的看门狗时钟(WDT)在掩模选项(Mask Option)中有四种选择:
-
使用WDT OSC,其时钟周期在5伏特时约
78µs,看门狗时钟产生溢位(WDT overflow)的时间为 78µs x 2(WS2WS1WS0)+9,例如:WS2,WS1,WS0=7,则看门狗时钟溢位(WDT
overflow)的时间为78µs x 27+9 = 5.11s。
-
使用T1 (四分之一系统频率),其时钟周期在Normal
Mode高频模式为1.117µs x 29 ,在Green Mode低频模式为122.07µs x
29 , 在Sleep及Idle省电模式下将不会有动作,而看门狗时钟产生溢位(WDT
overflow)的时间为 T1 x 2(WS2WS1WS0)+9。
-
使用32768Hz,其时钟周期在Normal Mode高频模式、Green
Mode低频模式、Sleep省电模式皆为 30.52µs x 29,在Idle省电模式下不会有动作,而看门狗时钟产生溢位(WDT
overflow)的时间为 30.52 x 2(WS2WS1WS0)+9。
-
不使用看门狗时钟 (WDT Disable)。
Question 17
HT95L、HT95C系列的LCD的亮度如何调整?
Answer
在Phone MCU内部
LCD亮度有四段的调整,调整的方式是用程序来改变LCDC缓存器的VCON1及VCON0两个位。(VCON1~VCON0)设定为00、10、01、11分别可得到0.66
x VLCD、0.82 x VLCD、0.93 x VLCD、1.00 x VLCD的LCD
COM/SEG电压准位输出。
Question 18
HT95L、HT95C系列的LCD的扫瞄频率如何调整?
Answer
Phone MCU在液晶显示上提供128Hz及64Hz两种扫瞄频率,调整的方式是用程序来改变内部缓存器FRAM
([2Dh].0),当FRAM=1时,扫瞄频率为128Hz;当FRAM=0时,扫瞄频率为64Hz。Power-on后的初值扫瞄频率为128Hz。
Question 19
LCD的8COM或16COM如何选择?
Answer
允许用软件的方式作8COM或16COM的切换。程序设计上,将VBIAS
([2Dh].1)清成0为16COM输出,VBIAS设成1则为8COM输出;在HT95L2xx、HT95C2xx,当设成8COM时,COM0~COM7将自动转换成PD0~PD7的I/O输出;在HT95L3xx、HT95C3xx设成8COM时,COM0~COM7转换成没有作用的脚位。
Question 20
HT95L与HT95C系列的I/O与LCD 共享的脚位(COM/SEG)与I/O如何切换?
Answer
HT95L与HT95C系列的Phone
MCU允许将部分的LCD的SEG脚位,用软件的方式切换成I/O来使用。LCDIO缓存器有三个控制位,每一个控制位控制四个SEG同时切换成I/O,(HT95L1xx只有一个缓存器控制四个SEG);三个控制位分别是SPE0、SPD0、SPD1。其详细控制方式请参考data
sheet。
Question 21
LCD 液晶显示在Idle Mode省电模式下,是否仍会动作?
Answer
不会。要显示LCD,必须32768 Hz的频率源存在,在Idle Mode下,32768
Hz的频率来源已经关闭,所以,在Idle Mode下LCD不会显示。
Question 22
如何设定PFD?
Answer
要实现PFD Mode要执行以下设定:
-
设定 FPFD ([2Eh].7) 为1选择3.58MHz/4
为PFD时钟来源,或设定FPFD为0 选择32768Hz为PFD时钟来源. 在Green Mode只能选择32768Hz
-
设定prescaler 预除级(PRES1~PRES0)=n,公式为fIN=PFD时钟来源
/ 2n
-
设定PFDEN=1致能PFD
-
设定 PFDD 缓存器PFD除值m (范围0 ~255) ;
PFD输出频率为fPFD = FIN /(2 x (m+1))
执行以上设定后,MUSIC pin 即有PFD输出,若设PFDEN=0则PFD
OFF且PFDD缓存器内容值自动清除为0, MUSIC pin输出低准位。请注意, PFDEN=0即PFD OFF
的情况下, PFDD缓存器是无法写入的。
Question 23
DTMF Generator可以产生那几种的双音复频讯号?
Answer
写入适当的值到DTMFD ([21h])缓存器时,当启动双音复频产生器时,可以产生十六种信号,如下:
| DTMFD |
DTMF Output |
DTMF Code |
DTMFD |
DTMF Output |
DTMF Code |
| 11h |
697+1209 |
1 |
41h |
852+1209 |
7 |
| 12h |
697+1336 |
2 |
42h |
852+1336 |
8 |
| 14h |
697+1477 |
3 |
44h |
852+1477 |
9 |
| 18h |
697+1633 |
A |
48h |
852+1633 |
C |
| 21h |
770+1209 |
4 |
81h |
941+1209 |
* |
| 22h |
770+1336 |
5 |
82h |
941+1336 |
0 |
| 24h |
770+1477 |
6 |
84h |
941+1477 |
# |
| 28h |
770+1633 |
B |
88h |
941+1633 |
D |
详细情形请参考data sheet。
Question 24
间接寻址如何使用?
Answer
首先将要读写之Data Memory的地址先存入地址指针缓存器MP0 或MP1,然后对IAR0或IAR1执行读写
(例如: MOV a, IAR0),即可读到MP0所指到的Data (MP0的内容当地址)。间接寻址功能特别方便于数列
(array) 的处理,一般先将数列地址放入MP0或MP1做运算后再读取所需的数列Data。请注意MP0、IAR0
与MP0、IAR0需配对使用。
Question 25
如何使用间接寻址,将数据写入/读出RAM BANK0以外的BANK?
Answer
先切换Bank Pointer,到将要存/取的RAM
BANK。再将要读写的记亿体位置,存入位置指针缓存器MP1,然后对IAR1进行读写,即可读到/写入MP1指到的数据。
Example:将RAM BANK1,[60h] 的地址写入55h的数据。
| MOV |
A,1 |
|
| MOV |
BP,A |
; 指定Bank Pointer的位置为Bank1 |
| MOV |
A,60H |
; |
| MOV |
MP1,A |
; 将位置指针缓存器MP1指向60H的位置 |
| MOV |
A,55H |
; |
| MOV |
IAR1,A |
; 将55h的值写入Bank Pointer以及位置指针缓存器MP1所指向的位置
|
Question 26
Phone MCU有二个地址指针缓存器MP0及MP1,使用上有何不同?
Answer
指针缓存器MP0/IAR0与指针缓存器MP1/IAR1,必须配对使用,MP0/IAR0只能间接寻址RAM
BANK0的数据,而MP1/IAR1可以寻址任何的RAM BANK。
Question 27
查表指令如何使用,有无特别的注意事项?
Answer
HOLTEK
MCU查表指令有二个,一个是TABRDC指令,一个是TABRDL指令;TABRDC指令是用来读取当时所正在执行时当页的数据;而TABRDL指令是用来读取最后一页的数据。查表时,先要将读取的ROM所在的低位地址填入TBLP缓存器,然后再执行查表指令,读表之后,16
BITS的低位数据将自动存入指定的内存,而高位数据存入TBLH缓存器中。
Question 28
关于HT95168的HFI和HFC的关系,可否通过HFI控制HFC,有无控制时序?
Answer
否。HFC 是一个
I/O pin,此处已经由软件设为 output pin 来控制 HFI 的输入。HFI 为正缘触发,所以 HFC
输出正缘触发才有作用。
Question 29
请问HT95168有无电池低电检测?
Answer
HT95168
为一个阳春档话机,所以没有侦测电池低电的能力。
Question 30
我使用HT-Writer烧录OTP DICE,联机的时候出现"MCU:Cannot
identify"信息会出现在信息窗口中,是打线不好?还是OTP有问题?
Answer
OTP的封装片在出厂前会有一些信息在里面,使用HT-Writer
烧录器时会显示于信息窗口中。如果OTP芯片中没有此等信息,那么烧录程序就会认为无法辨认此ID,会出现这么一个警告信息。而OTP
DICE一般来说,出厂前是不会有这样的信息的,所以烧录器会不认识此颗IC。
如在Option菜单中将Check ID的选择去掉,这样在今后的烧录过程中,烧录程序就不会再去Check
IC里面的ID信息;如果是脱机烧录模式的话,请将HT-Writer背面的DIP开关的DIP1拨为OFF,这样在脱机烧录的时候,就不会去Check
IC里面的ID信息了。
Question 31
请问WDT之功能为何?
Answer
Watchdog Timer(WDT)主要用于监视MCU内部功能(software及hardware)之执行是否正常,
使用者必须适当设计software及运用clear WDT(CLR WDT, CLR WDT1, CLR
WDT2)之指令, 使程序正常执行时, WDT不会overflow, 并且在当系统不正常执行时,
WDT可以overflow造成WDT reset, WDT reset之效能, 主要由software设计所决定。
应用说明
Question 1
MCU外部的CRYSTAL要如何连接?
Answer
-
于X1及X2 Pin之间连接32768Hz的Crystal。
-
再如下图所示连接3nF, 50nF(47nF亦可)的电容与15K的电阻到XC
pin即可。

Question 2
可否将外部CLOCK信号直接输入X1 PIN,以改变MCU之系统频率?
Answer
如果需要由外部输入clock信号, 请自 X2 pin 输入。
注意: DTMF generator 与 FSK receiver 的频率来源为IC内部的3.58MHz。由X2
pin 输入clock信号将有可能造成这两个功能产生错误动作。
Question 3
如何将系统频率切至高频,让MCU在Normal Mode下执行?
Answer
MCU在Power-on (或者是Reset) 时,是处于Green Mode,切换至高频需依照下列步骤:
-
将UPEN ([26h].5)设成 1 以开启高频。
-
延迟20ms(或更长)以等待高频稳定。
-
高频稳定之后,再将MODE1 ([26h].7)设成1。
范例:
| Line 1: |
SET [26h].5 |
; 启动高频 |
| Line 2: |
MOV ACC,40 |
|
| Line 3: |
DEC ACC |
|
| Line 4: |
SNZ Z |
|
| Line 5: |
JMP $-2 |
|
| Line 6: |
SET [26h].7 |
; 切换至高频模式 |
说明:
Line 1: 开启高频之后,此时之系统频率仍为32768Hz,指令周期时间仍 = 122µs,延迟时间预设为
20ms。 此处利用执行指令的时间做为延迟时间的计算。
Line3~Line5一共执行4个指令的时间。20ms/(122µs*4) = 41,
所以Line2中,ACC存入41值
当ACC未递减至0,则程序执行Line3,继续执行递减功能。此递减时间约执行20ms。
当ACC递减为0,程序执行Line6,将系统频率切换至高频模式。
Question 4
如何将系统频率由高频切回至低频,让MCU在Green Mode下执行?
Answer
在Normal Mode高频模式下,切换至低频需依照下列步骤:
-
将MODE1
([26h].7)清成0,以便将系统频率选择为低频,MCU将执行于Green Mode。
-
再将UPEN ([26h].5)清成0,以关闭高频。
Question 5
如果我不在乎MODE0的值, 可不可以直接将[26h]清为0以达到系统频率由高频切回低频的目的?
Answer
不可以。其原因如下:
MODE1([26h].7)决定MCU的系统频率,
UPEN([26h].5)决定3.58MHz的频率是否存在。当这两个值同时被清除为0之后,
有可能发生3.58MHz已经被关掉而MCU系统频率还选择维持在3.58MHz的情况,如此将造成MCU的系统频率消失,
将会发生不可预期的结果。一定要先将系统频率更换为低频,然后才能将高频关闭。
Question 6
如何让MCU进入Sleep Mode省电模式?
Answer
在Normal Mode或Green Mode模式下,切换至Sleep Mode需依照下列步骤:
-
将MODE0 ([26h].6)清成0以设定MCU于HALT
mode时进入Sleep Mode。
-
执行HALT指令。
Question 7
如何让MCU进入Idle Mode省电模式?
Answer
在Normal Mode或Green Mode模式下,切换至Idle Mode需依照下列步骤:
-
将MODE0 ([26h].6)设成1以设定MCU于HALT mode
时进入Idle Mode。
-
执行HALT指令。
Question 8
我的程序依据UPEN(缓存器地址26H的bit5)的状态来决定是否切换MCU的系统频率(32768Hz与3.58MHz的切换),
但是为何有时候在power on之后, 会有非预期的切换行为出现?
Answer
此问题是power on reset不良造成UPEN错误所引起的结果。请注意UPEN不受reset pin所初始化,
如果power on reset不良, UPEN会有错误的值出现。我们建议, 以MODE1(缓存器26H的bit7)
作为切换的依据是较佳的作法。
Question 9
Data Sheet所提供的复位电路,是否可适用各种应用状况?
Answer
Data
Sheet所提供的复位电路可适用于一般的应用,若在特殊情形下,要考虑当时的环境以及噪声影响,设计适当的复位电路。
Question 10
External中断如何使用?
Answer
将EMI ([0Bh].0)旗号设成1,再将EEI ([0Bh].1)旗号也设成1,当 INT
Pin有一个Falling-Edge,就会进入04h向量点的中断服务程序。要特别注意 INT
Pin在实际IC内部并没有Pull-high电阻,在应用上应于外部加上Pull-high电阻。
Question 11
要如何利用Timer 0和Timer 1的Pulse Width Mode来测量外部的信号频率?
Answer
因为Timer 0和Timer 1的Pulse Width Mode必须以一个完整的Pulse来做测量,
所以无法以一个Timer来测量连续的pulse宽度。如果使用两组Timer同时测量相同的外部Pulse来源,
只要将其中一个Timer设为测量High Pulse, 另一个Timer设为测量Low
Pulse就可以测量连续的High/Low Pulse。
Question 12
外围(Peripheral)中断的来源有那些?
Answer
外围(Peripheral)中断的来源为FSK Receiver接到Ring、Carry或者是Packet
data之后所产生的中断。
Question 13
HT95Cxxx的FSK Receiver外围中断的来源有那些?
Answer
FSK Receiver外围中断的来源有三个。当FSK Receiver
检测到响铃、FSK载波或FSK封包数据,即会产生外围中断。
Question 14
如何设定HT95Cxxx的FSK Receiver的响铃检测(Ring Detector)外围中断?
Answer
依照Data Sheet所建议的应用电路, 在适当的pin脚接上电阻与电容。FSK
Receiver的响铃检测(Ring Detector)外围中断设定方法如下:
-
打开中断致能位EMI ([0Bh].0)以及外围中断致能位EPERI
([1Eh].0), 两者均设为1
-
设定RMSK ([29h].3) 为0,致能响铃检测中断
-
当外界有RING信号进来时, RTIMEB
pin上的电阻电容充放电将使得内部讯号R_DET产生Falling edge, 此Falling
edge将会产生中断,同时RDETF ([2Ah].0)会被设成1
由下图可知, RTIMEB pin上的电阻电容值将会决定有多少的RING中断产生,RINGF
([2Ah].6)将会反映出外部RING的频率。
Question 15
如何设定HT95Cxxx的FSK Receiver的载波检测(Carrier Detector)外围中断?
Answer
FSK Receiver的载波检测(Carrier Detector)外围中断设定方法如下:
-
打开中断致能位EMI ([0Bh].0)以及外围中断致能位EPERI
([1Eh].0), 两者均设为1
-
使MCU工作于Normal Mode
-
打开FSK Receiver,将F_PWDN ([29h].0)设定成0
-
设定CMSK ([29h].4) 为0,致能载波检测外围中断
-
当外界有载波讯号进来时,就会产生中断,同时CDETF
([2Ah].1)会被设成1
Question 16
如何设定HT95Cxxx的FSK Receiver的封包数据(packet data)外围中断?
Answer
FSK Receiver的封包数据(packet data)外围中断设定方法如下:
-
打开中断致能位EMI ([0Bh].0)以及外围中断致能位EPERI
([1Eh].0), 两者均设为1
-
让Phone MCU执行于Normal Mode
-
打开FSK Receiver,将F_PWDN ([29h].0)设定成0
-
设定FMSK ([29h].4) 为0,致能FSK封包数据外围中断
当外界讯号有载波讯号的8-Bit数据进来时,就会产生中断,同时FSKF
([2Ah].5)会被设成1,8-Bit封包数据将被放在FSKD ([2Bh])缓存器内。
Question 17
如何设定拨号(Dialer) I/O中断?
Answer
-
打开中断致能旗标EMI ([0Bh].0)以及拨号I/O 中断致能旗标EDRI
([1Eh].2), 两者均设为1。
-
会影响中断的Dialer I/O有三个脚位,HKS、HDI和HFI;当HKS发生Falling或Rising
edge变化时,当HDI发生Falling
edge变化时以及HFI 发生Rising edge变化时,都会产生中断,拨号I/O 中断向量为18h。
-
当 Dialer I/O 的状态处于On-hook & Hold-Line时,
此时的 HDI输入(falling
edge)将不会产生中断。
Question 18
当我使用HFI pin来侦测外部的high pulse,为什么没有中断产生?
Answer
请检查中断致能旗标EMI ([0Bh].0)以及拨号I/O 中断致能旗标EDRI ([1Eh].2),
是为均已设为1。
另外要注意的是HKS,HFI与HDI是设计为接收hooK(HKS)与按键(HFI, HDI)的讯号,
所以它们的反应速度会比较慢。如果没有在这些pin外加debounce电路,我们建议pulse宽度应该大于130us以上。如果加上了debounce电路,
则pulse宽度应该大于debounce的时间。
Question 19
没有Push和POP指令;中断时数据要如何备份?
Answer
虽然没有Push和POP指令,程序员仍可指定专用记忆RAM BYTE (例如:db ACCStack; for ACC
Storage)
储存中断时会被破坏的数据。首先将ACC存入专用内存,然后利用ACC依序将Status和其它数据搬移至各别之专用内存。在中断返回前,再反序将其它备份数据,Status和ACC回存,最后再执行RETI返回主程序。
Question 20
可以在Interrupt Service Routine内执行Call吗?
Answer
因为Phone MCU
Stack数目有限,在Interrupt中执行Call要特别注意,如果在进入Interrupt时Stack已经满了,则会造成Stack
Over,而使得程序无法返回。所以若要在Interrupt内执行Call,必需考虑在最差情况下之Stack使用数目,务必使在最差状况下进入Interrupt仍有Stack空间。
Question 21
中断处理中可否允许相同的中断再进入?
Answer
理论上在进入中断时MCU会自动清除EMI旗标 (EMI=0),并禁止所有中断的再进入,若中断处理中用软件设定EMI旗标
(EMI=1),则在Stack有空之下,所有中断(含相同中断)皆可再进入。要允许相同的中断再进入,需特别注意备份数据的处理,应避免已备份之数据被再进入的中断所破坏。若不是非常紧急中断,一般不建议中断再中断。
Question 22
选择不同的看门狗时钟来源,在应用上有什么差别?
Answer
看门狗的时钟选择可以有WDT OSC, fSYS/4以及32768Hz。
-
选择WDT OSC为Source, 则WDT在任何mode之下都会持续动作。
-
选择fSYS/4为Source,
则WDT在Sleep及Idle Mode时会停止动作。
-
选择32768Hz为Source, 则WDT在Idle Mode时会停止动作。
如果环境恶劣, 则WDT OSC是适合的选择, 因为它不会因为MCU处于任何状态而受影响。 WDT
OSC为另外一组电路, 所以会比其它两种选择多一些功耗。 如果环境噪声小且省电是特别需要的功能, 就比较不适合选择WDT
OSC。
Question 23
2个CLR WDT指令如何使用?
Answer
2个CLR WDT可以增加系统可靠性。若程序有2个主要的交替循环Loop;则可在1个Loop放CLR
WDT1,在另1个Loop放CLR
WDT2,一旦程序错误或受噪声干扰造成一直停留在某一个Loop时;WDT就会启动,发出WDT
Time-out重新启动CPU。
Question 24
是否无论在任何一种工作模式之下,拨号I/O均能产生动作?
Answer
拨号I/O必须有32768Hz的频率源,所以只能在Normal mode、Green mode或Idle
mode之下工作,在Idle mode下,拨号I/O无法正常动作。
Question 25
拨号I/O是如何产生变化,变化情形为何?
Answer
-
拨号I/O是依照正常电话操作的逻辑所设计的逻辑动作。用来触发的脚位有
HKS、HFI 、HDI
三个输入脚位,产生六个状态的 PO、 HFO、HDO 变化。
-
当 HKS发生Falling或Rising
edge变化时,同时也会产生中断信号,以及影响换PO 、 HFO
、HDO脚位的输出准位,详细逻辑变化情形如下图所示。
-
当 HFI 发生Rising edge时,同时也会产生中断信号,并影响换PO 、 HFO
、HDO脚位的输出准位,详细逻辑变化情形如下图所示。
-
当 HDI 发生Falling
edge变化时,同时也会产生中断信号,并影响换PO 、 HFO
、HDO脚位的输出准位,详细逻辑变化情形如下图所示。
|
| 拨号I/O在Normal、Green、Sleep模式下的变化情形
|
Question 26
为什么在Idle mode下,拨号I/O仍有动作?
Answer
-
当Phone MCU操作于Idle
Mode时,32768Hz的振荡同时也会关闭,所以拨号I/O的组合逻辑状态将不会依照正常逻辑行为而变化。
下图为Phone MCU的拨号I/O在Idle Mode省电模式下的变化情形。
-
请注意部分的输出组合是违反正常电话操作的结果。在程序设计上,如果要进入Idle
Mode省电模式,在处理拨号I/O要特别小心。
|
| 拨号I/O在IDLE省电模式下的变化情形
|
Question 27
HT95L、HT95C系列VLCD电压相关问题为何?
Answer
VLCD为提供LCD液晶显示的电源,改变VLCD的电压值同时也会影响液晶显示的亮度。如果VLCD的电源不是来自于VDD,必须注意VLCD不可以比VDD大,否则会导致严重的耗电。
Question 28
HT95L与HT95C系列的I/O与LCD 共享的脚位(COM/SEG),是否可以随时功能切换?
Answer
可以,I/O与LCD共享的脚位,是用内部缓存器在切换的,所以在程序设计时,允许随时切换成I/O或者是COM/SEG,但是要注意,在I/O时输出的准位,会因LCD的COM/SEG共享输出,造成LCD上的某些点被点亮或熄灭。
Question 29
Phone MCU的低电压检测LBD要如何使用?
Answer
-
Phone MCU中LBIN Pin来检测外部的电压低于1.15伏特。
-
我们建议用精密电阻分压的方式来作,如下图所示,而要侦测的外界的VDET电压,公式为
1.15 = VDET x (R2/(R1+R2)),举例说明,如果要侦测外部电压VDET=2.4伏特,则按公式得到R2=0.92R1,如果选用R1=2.2Mohm,则R2=2.0Mohm
。
-
程序设计上,只要将LBEN设成1,然后用软件来检查LBFG即可,如果LBFG=1,表示LBIN
Pin的电压小于1.15伏特,LBFG=0,表示LBIN Pin的电压大于1.15伏特。(LBEN位于[2Dh].5,
LBFG位于[2Dh].4)
Question 30
实际测量IC时,在进入Idle Mode,为何电流无法小于Data Sheet上所描述的2微安(µA)?
Answer
Idle mode 时,耗电流为2微安(µA)的测试条件如下:
-
LCD是否关闭,LCD如果没有关闭,5伏特下,将多耗电约30~40微安。
-
WDT source停止动作;若WDT source为WDT
OSC,则在Idle mode下,WDT OSC仍然继续震荡,在5伏特下,此耗电约为3~6微安。
-
LBD (Low battery
detect)必须关闭,LBD如果没有关闭,在5伏特下,将多耗电约50微安。
-
INT、HKS、TMR0、TMR1、RES等脚位必须由外部固定准位;如果没有固定准位而造成浮接现象,将会导致耗电。
-
注意检查所有Output脚位的连接状态不要有直流漏电路径发生;例如
output pin 选择 Pull-High,并且又Output Low,则会导致耗电。
-
所有Input脚位必须有固定准位,注意不要有直流漏电路径发生,否则会导致耗电。
Question 31
没有用到的I/O Pin如何处理?
Answer
若不用之I/O Pin浮接时,会造成IC的耗电,最好的处理方式就是将不用的I/O Pin设定成Output
Pin。如果要设成Input Pin则要选择Pull-high
电阻,如果不选用Pull-high电阻,则将Pin脚接地。
Question 32
DTMF Generator的输出,如何设定使用?
Answer
- 先让MCU进入Normal mode高频模式。
- 将D_PWDN ([20h].0)设成1,启动DTMF Generator,此时,DTMF脚位会有1/2 VDD
的偏压。
- 写入适当的值到DTMFD ([21h])缓存器。
- 再将TONE ([20h].2)缓存器设成1,此时,DTMF脚位会有双音复频信号输出。
- 至于DTMF Tone的输出时间就必须由程序自行加以控制。
Question 33
Power On之后,已将EMI与PERI设为1, 为何FSK的ring detect interrupt仍不会产生?
Answer
所有的peripheral interrupt均有自己的 interrupt mask bit。Interrupt
Mask bit必需为0, 该interrupt才能正常动作。在本状况中, 除了EMI ([0Bh].0)与EPERI
([1Eh].0)要设为1之外, RMSK ([29h].3)也必需clear为0, ring detect
interrupt才会正常。请参考Data sheet中Ring or Line reversal detect的说明。
Question 34
Holtek MCU 之Stack 除了做CHIP reset之外, 有无其它方法可以重设 stack
pointer?
Answer
堆栈指针会受到中断与呼叫附程序与返回指令影响,除此之外,除了透过CHIP reset,
并无其它方法可以重设(reset) Holtek MCU 的堆栈指针。
Question 35
HT95系列的LCD如何仿真?
Answer
因为HT95系列的仿真器上无LCD仿真接口,因此只能用HT-IDE3000的LCD
simulator来模拟,具体使用方法见Holtek LCD Simulator 的在线帮助。
Question 36
3 pin 之resonator/crystal用于MCU之时基时, 电容之Vss pin可改接Vdd吗?
Answer
3pin之resonator/crystal 用于MCU之时基时,配合Layout方便, 电容之Vss
pin亦可改接Vdd。
Question 37
写程序时,如欲在program memory建立Table,如何建于绝对地址,为何ORG不适用,有其它方法吗?
Answer
ORG expression : expression 是对于目前SECTION
起始地址的offset,并非绝对地址,可使用SECTION来建立Table于绝对地址,例如:
table .section at 300 'code' -即可将接下去之Table起始位置建立于绝对地址300。
Question 38
请问要如何以C语言读取OTP WRITER烧入IC之序号?
Answer
在C语言中须以Inline assembly来读取OTP WRITER烧入IC之序号, 程序范例如下:
首先, 宣告一变量并指定 ram 地址 unsigned long series_num @0x80;
然后, 将 serial number 读入此 variable, 方法如下:
|
#asm |
|
|
tblp equ [07h] |
; define table address |
|
mov a,20h |
|
|
mov tblp,a |
; set table pointer to 20h (series number at 20h of last
page) |
|
tabrdl [80h] |
; load first byte of series number to series_num
(0x80h); |
|
inc tblp |
|
|
tabrdl [81h] |
; second byte of series number |
|
inc tblp |
|
|
tabrdl [82h] |
; third byte of series number |
|
inc tblp |
|
|
tabrdl [83h] |
; fourth byte of series number |
|
#endasm |
|
Question 39
选用HT95X40X时,如何定义最后一页的表格数据以配合tabrdl指令的使用?
Answer
HT95X40X的rom容量为16k,地址从0000h~3fffh,分成两个bank,程序最后一页处于第二个rom
bank中其绝对地址是从3f00h~3fffh,但是要建表时要先定义在rombank
1的程序节区,再指定表格的地址,需要注意的是此时的地址是位于rombank
1的相对地址,必须是从1f00h~1fffh,具体可参考下面的表格定义语句:
ROMBANK 1 LASTPAGE LASTPAGE .SECTION AT 1FC0H 'CODE'
LASTTABLE: DC 01H,02H,03H,04H,05H,06H,07H,08H
Question 40
选用HT95X40X时,如何将程序定义在rombank 1中?
Answer
HT95X40X的rom容量为16k,分成两个bank,当用".SECTION"伪指令声明程序节区在rombank1时,必须要使用"ROMBANK"伪指令先声明程序节区所在的bank区域,否则编译器将默认程序在rombank0中.具体可参考下面的语句:
ROMBANK 1 TT TT .SECTION 'CODE'
注意事项
Question 1
Phone MCU发展系统提供的仿真行为与实际IC有何差异?
Answer
Phone MCU发展系统与实际IC有四点显著的差异
| 差异点 |
实际IC |
发展系统(仿真器) |
| LCD的信号输出 |
实际LCD信号,COM/SEG输出。 |
没有LCD信号输出,用LCD仿真器仿真。 |
| 低电压检测功能 |
存在低电压检测电路。 |
无法模拟 |
| 32768Hz及3.58MHz的系统频率 |
由32768Hz晶振,产生3.58MHz系统频率。 |
32768Hz与3.58MHz的频率均存在,由发展系统设定切换。 |
| LCD与I/O共享脚位的输出 |
LCD输出与I/O共享的部分,两者只会存在一项。 |
共享的部分切换至LCD输出时,I/O
Pin的输入/输出依然存在。 |
| 32768Hz的起振时间 |
32768Hz的起振时间受到crystal本身的制造,
接脚的电容, 当时的电流及电压等因素所影响。 |
除了Phone MCU本身会加入的1024个clock
delay之外, 实际的起振时间并不会被模拟出来。 |
Question 2
请问OTP dice 烧录流程为何?
Answer
Question 3
我需要使用OTP的DIE生产,请问如何烧录?
Answer
HOLTEK的OTP烧录会使用到11根引脚,所以如果需要使用OTP的DIE生产,在画PCB时,需要预留出这11根引脚,关于引脚的详细定义请向相关的代理商索取。使用者需制作治具将11根引脚连接到烧录器的40
PIN的Textool上,之后就可以按照OTP封装片的烧录程序烧录。
需要注意的是,在PCB
Layout的时候,使用到的这11根引脚在PCB上的走线不要过长,其中PA0~PA6做烧录使用避免连结到其它线路的输出,如无法避免则需串接1kohm电阻,
以免影响烧录;从PCB到烧录器的联机不要超过15cm,越短越好。
Question 4
我使用OTP DICE,但是发现烧录不良率较高,这是为什么呢?
Answer
首先,要排除打线不良的问题,一般来说打线不良是OTP
DIE烧录不良的重要原因。如果你自己没有办法确定打线是否良好,可以通过技术支持的方式,将绑定完好没有封胶的样片寄到HOLTEK相关的技术服务部门分析。
Question 5
请问MCU的Reset 与Oscillator线路设计有无需注意事项?
Answer
请参阅 "应用范例" 网页,其中的 "HA0075S" 供使用者参考。
其它
Question 1
Phone MCU在Power on时,Vdd上升的时间有何限制?
Answer
在Power on时为了让复位可以完全成功,建议Power on时Vdd的上升时间在80ms以内。
Question 2
Vdd 上升时间的定义为何?
Answer
Vdd从0V上升到MCU可以动作的电压。 以Phone MCU来说, 为 0V 到 2.4V所需的时间。
Question 3
如果Vdd上升时间太长, 可能导致什么问题发生?
Answer
有可能造成复位(power on reset)不良, 如此则MCU某些功能可能会不正常工作。
Question 4
发生复位不良时, 有什么方法可以补救?
Answer
一般来说, reset pin上的reset信号可以让MCU产生复位的行为。这样就可以让MCU恢复正常功能。
Question 5
发生复位不良时, 为什么我使用reset pin的复位方法, 有些功能还是无法恢复正常?
Answer
MCU中的register会被各种reset种类所初始化(initial), 请参考HT95 MCU Data
Sheet中关于Reset的说明。请参考在data sheet中Reset说明之后的表格可发现,
大部分的register均可被各种 reset种类(warm reset除外)所初始化; 但是有些缓存器只能在power
on reset被初始化, 其它的reset种类均无法初始化这些缓存器, 这一类的缓存器以HT95C400来说,
如下表所示:
| Register Name |
Address |
Bit |
| LINE |
22H |
7 |
| RTCC |
24H |
7,5 |
| MODE |
26H |
5 |
| LCDIO |
28H |
7,6,5 |
| LCDC |
2DH |
7,6,5,4,2,1,0 |
如果Vdd的上升时间可能过常, 我们建议在power on之后,
以软件的方式重新设置这些缓存器的值就可以避免这些缓存器所控制的功能产生错误动作。
Question 6
为什么 /PO pin在power on之后, 有时候会自动变为high?
Answer
到目前为止, 我们发现此问题的发生原因均为Vdd上升时间过久以致于引起power on
reset不良所造成。Power on reset不良可能导致dialer I/O错误的动作, 结果造成 /PO
pin的输出不正常的输出为high。
Question 7
使用Assembly Directives之MACRO,可否节省Program memory之空间,对MCU之执行速度有何影响?
Answer
在Assemble后MACRO所属指令将填入Program space,故对Program
memory之空间和MCU之执行速度没有影响,但其使的程序简化,容易维护。 |