1. TD_Init代码
void TD_Init(void) // Called once at startup
{
// set the CPU clock to 48MHz
CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1);
SYNCDELAY;
IFCONFIG =0x43; //使用外部IFCLK,时钟频率48MHz
//数据读写与时钟同步,SlaveFIFO接口模式
SYNCDELAY;
EP2CFG=0xA0; //EP2为批量输出端点,buffer:512*4
SYNCDELAY;
EP4CFG=0; //EP4禁用
SYNCDELAY;
EP6CFG=0xE0; //EP6为批量输入端点,buffer:512*4
SYNCDELAY;
EP8CFG=0; //EP8禁用
SYNCDELAY;
FIFORESET = 0x80; //activate NAK-ALL to avoid conditions
SYNCDELAY;
FIFORESET = 0x02; //复位FIFO2
SYNCDELAY;
FIFORESET = 0x04; //复位FIFO4
SYNCDELAY;
FIFORESET = 0x06; //复位FIFO6
SYNCDELAY;
FIFORESET = 0x08; //复位FIFO8
SYNCDELAY;
FIFORESET = 0x00; //release "nak all"
SYNCDELAY;
PINFLAGSAB = 0x8C; //FLAGA-fixed FP2FF 满,FLAGB-fixed EP2EF 空
SYNCDELAY;
PINFLAGSCD = 0xFE; //FLAGC-fixed EP6FF 满,FLAGD-无效
SYNCDELAY;
PORTACFG = 0x0; //不使用FLAGD 和 SLCS
SYNCDELAY;
FIFOPINPOLAR = 0x00; //所有信号低电平有效
SYNCDELAY;
EP2FIFOCFG = 0x11;
SYNCDELAY;
EP6FIFOCFG = 0x09;
SYNCDELAY;
}
2. 寄存器配置说明
2.1 IFCONFIG
2.2 bEndpointAddress
bEndpointAddress为USB端点描述文件中一个参数,用于交代端点的传输类型和传输方向。
下方代码分别为一批量传输输入端点和一批量传输输出端点的描述代码:
;; Endpoint Descriptor
db DSCR_ENDPNT_LEN ;; Descriptor length
db DSCR_ENDPNT ;; Descriptor type
db 02H ;; Endpoint number, and direction
db ET_BULK ;; Endpoint type
db 00H ;; Maximun packet size (LSB)
db 02H ;; Max packect size (MSB)
db 00H ;; Polling interval
;; Endpoint Descriptor
db DSCR_ENDPNT_LEN ;; Descriptor length
db DSCR_ENDPNT ;; Descriptor type
db 86H ;; Endpoint number, and direction
db ET_BULK ;; Endpoint type
db 00H ;; Maximun packet size (LSB)
db 02H ;; Max packect size (MSB)
db 00H ;; Polling interval
描述代码的第三个参数的定义如下:
字段名 | 长度/字节 | 说明 |
bEndpointAddress |
1 |
指明端点的端点号及传输方向。 b0~b3:该端点的端点号。如0001端点1,0010端点2; b4~b6:保留,必须为0; b7:端点传输方向。1-IN传输;0-OUT传输 |
2.3 EP2CFG
EP2CFG=0x A0=0b 1010 0000
使能端点EP2,输出,批量,buffer:512*4
2.4 PINFLAGSxx
PINFLAGSAB = 0x8C = 0b 1000 , 1100
FLAGA-fixed FP2FF 满,FLAGB-fixed EP2EF 空
PINFLAGSCD = 0xFE = 0b 1111 , 1110
FLAGC-fixed EP6FF 满,FLAGD-fixed EP8FF,对EP6无效
2.5 EP2FIFOCFG
EP2FIFOCFG的第5位和第6位比较特殊,用于调整端点FIFO状态标识位的时序,第6位INFM1可使输入端点FIFO满标识信号滞后一个时钟,第5位OEP1可使输出端点空标识信号超前一个时钟。(INFM1,OEP1仅在FIFO工作在同步读写状态下可用)
EP2FIFOCFG = 0x11 = 0b 0001 0001
EP2设置为输出点,数据线宽度为1个字(16bit)。
EP6FIFOCFG = 0x09 = 0b 0000 1001
EP6设置为输入点,数据线宽度为1个字(16bit)。