||
以HT82K96为例,介绍USB相关的Register
这些Register主要分布在BANK0和BANK1
BANK0: USC, USR, SCC
BANK1: AWR, STALL, PIPE, SIES, MISC, FIFO0~FIFO3
1、USC只有bit0-bit3是跟USB相关的。
SUSP和RESUME,是USB总线状态表现的地方
RMWK,通知HOST进行WakeUp的,相当于Device这个秘书唤醒HOST
URST:USB Reset标示
2、SCC中跟USB相关的只有2个bit
SYSCLK:说明现在用的是6M还是12M,千万别添错,否则HOST不理你
USBCKEN:USB时钟允许,正常用的时候一定置1,置0的相当于USB关了,不给发薪怎么干活呢
3、USR跟USB相关的bit多了
EP0IF-EP3IF: Endpoint Interrupt flag,就是引起USB中断的来头,Firmware看这几个bit,
用完了还要记得清除,去大号当然要自己擦屁股了
SPS2:PS2使能,当然置0了,对待敌人要象秋风扫落叶一样.....
SUSB: USB使能,当然置1了,对待.....
ADREF: AD转换用的,跟我们的话题无关,自己看去
FIFO-cntl: 专门跟仿真器用的,操作FIFO时候,0读1写,我想烧OTP也不碍事吧,就一直用吧
下面是住在BANK1的寄存器介绍,写Firmware的时候记着用间接寻址来访问喔
1、AWR
USB地址(7个bit)+Remote Wake使能(1个bit),注意这7个bit的地址,是bit1-bit7,所以经常要shift 1个bit
2、STALL
STALL,死到死到,确实是负责各个端点死活的,不过不是死了拉到,1就死0就活,每个ENDPOINT一个bit
3、FIFO0~FIFO3
各个PIPE的FIFO了,各管各家,各养各妈
4、PIPE
这里就告诉你刚才哪个王妃(PIPE)被国王(HOST)临幸过,仍然是各管各家,每个PIPE一个bit
5、MISC
终于轮到这个最杂货的Register了,这可以PIPE访问的法官啊,它仲裁SIE和Firmware谁可以访问FIFO
因为Firmware是通过FIFO跟USB SIE联络的,于是FIFO就是临界区(不明白概念者,去看OS课本)
SELP0+SELP1:两个bit表示4个FIFO,别告诉我你想不通
TX:发送还是接受,也就是你要读还是写FIFO,1表示其中哪个,1当然表示发送了,人家名字叫TX啊
REQ和READY:分别用来提交申请和查看申请是否通过,大家最讨厌的罗嗦估计也跟它俩有关,不过人家也尽责了
剩下的几个bit估计比较独立了
Cleare:不管FIFO有没有READY,强制清除FIFO,说好听的叫做进入特别状态,不好听就叫做独裁
SCMD:告诉Firmware说FIFO里面的数据是Setup,它怎么有先见之明呢,人家SIE不是看过Token了吗
LEN0:告诉Firmware说HOST送来个长度为0的数据包,有这样送礼的吗?USB spec确实定义了这种流氓做法,这是后话
6、SIES
这个寄存器啊,新版的IC才有(详见官方datasheet)
Adr_set:这个有用啊,增加它Firmware可简化了不少,这是后话。
F0_Err: FIFO0专用的Error寄存器,作用呢,您仔细瞅吧,一出错标志而已,无非想证明FIFO0最重要