本文主要介绍了HT82J97E针对USB Joystick而设计的硬件功能。
USB低速设备发展到现在已经相当成熟。带震动的Joystick在市场上將會越來越普遍,为了让开发者更能简化程序和提高开发效率,盛群半导体设计出了HT82J97E,用以开发USB DEVICE。
功能及特点
图1.方框图
HT82J97E为八位高性能精简指令集单片机。专为USB产品而设计的。集成了USB SIE,支持USB和PS2端口复用。适用于Joystick和Mouse设备。主要功能和特点如下:
1. 工作电压:Fsys=6M/12MHz : 4.4V~5.5V;
2. 支持USB低速标准,有USB中断,可以从每个endpoint读取8*8位资料;
3. 最多可有20个双向输入/输出口,都可以通过选择是否带有上拉电阻,这样可以节省成本;
4. 2K*14位程序存储ROM、96*8位数据存储RAM和4层硬件堆栈;
5. PWM输出PWM1,PWM2(频率范围是23Hz~23KHz);
6. 16位可编程定时/计数器,具有溢出中断;
7. 6通道8位A/D转换器;
8. HALT功能和唤醒功能能减小功耗;
9. 低电压复位功能和Watch Dog定时器;
10. 3.3V标准输出,可以连接到USB D-,PC就可以判断其为USB低速设备;
USB和PS2端口共享
通过寄存器实现USB和PS2端口的切换
SELPS2=1BH.4 , SELUSB=1BH.5
SELPS2=1,SELUSB=0,工作在PS2状态;
SELPS2=0,SELUSB=1,工作在USB状态;
USB中断
USB中断是由USB以下列出事件触发,相关的中断请求位(USBF:INTC.4)被置位。
1. PC访问USB FIFO;
2. 接受来自PC的USB暂停信号;
3. 接受来自PC的USB恢复信号;
4. USB复位信号
为Joystick震动设计的PWM输出
PWM1DR(0CH)为PWM1占空比缓存器,PWM2(0DH)为PWM2占空比缓存器
PWMBR(18H)为PWM基础周期缓存器
PWM占空比计算:
基础周期=(4/Fsys)*(PWMBR+1)或(1/Fsys)*(PWMBR+1) (PWMBR=1~255)
4/Fsys或1/Fsys通过PORT_PC(16H)的PWM_S来定义。
PWM_S为1,1/Fsys;PWM_S为0,4/Fsys。
PWM周期=256*基础周期
PWM1占空比=(PWM1DR+1)/256*100% (PWM1DR=0~255)
PWM2占空比=(PWM2DR+1)/256*100% (PWM1DR=0~255)
通过设定PORTC_PC(16H)的PWM1_EN位或PWM2_EN位来允许PWM功能。
PWM1_EN为1,允许PWM1输出;PWM1_EN为0,不允许PWM1输出;
PWM2_EN为1,允许PWM2输出;PWM2_EN为0,不允许PWM2输出。
由以上方法,可以输出不同频率和Duty的PWM,输出控制给电机后得到的转动速度不同,这样使Joystick有不同的震动效果。
A/D转换
参考电压可以通过USR(0X1B) VRSEL位来进行选择。
VRSEL为0,VRH=PB7口电压,VRL=PB6口电压;
VRSEL为1,VRH=VDD,VRL=0。
这样让A/D转换更加灵活,能更好的适用于开发者使用。
软件设计
USB协议很复杂,遵循“PC提出问题,device回答”,由于篇幅有限,不详细介绍,这里只对如何读取和写入FIFO资料进行阐述。
(一)如何读取FIFO资料
1. 选择一组FIFO,设定为读取mode(MISC TX bit=0),设定REQ bit为1;
2. 检查Ready bit直到状态=1;
3. 透过FIFO指针Register读取FIFO资料,同时记录已读取资料数目;
4. 重复步骤2,3,直到Ready bit为0,标示FIFO资料已读完;
5. Set MISC TX bit=1;
6. 将REQ bit清除为0,完成读取动作;
故程序员在读取FIFO资料,是透过FIFO指针Register一个byte一个byte读取,同时要自行记录一Package读取有几个byte。HT82J97E最多只允许同一Package读取资料长度为8个bytes。
(二)如何写入FIFO资料
1. 选择一组FIFO,设定为写入mode(MISC TX bit=1),设定REQ bit为1;
2. 检查Ready bit直到状态=1;
3. 透过FIFO指针Register写入,同时记录已写入资料数目;
4. 重复步骤2,3直到资料已经写完或Ready bit为0,标示FIFO不允许写入资料;
5. Set MISC TX bit=0;
6. 将REQ bit清除为0,完成写入动作。
故程序员在写入FIFO资料,是透过FIFO指针Register一个byte一个byte写入,同时要自行记录一Package写入有几个byte。HT82J97E最多只允许同一Package写入资料长度为8bytes。
应用电路
图2.应用电路
X1能用6MHz或12MHz。
带*元件用于EMC。
带**元件只用于震荡器。