CY7C68013A工作在SlaveFIFO下的固件代码分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/snaking616/article/details/87936087

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)。

猜你喜欢

转载自blog.csdn.net/snaking616/article/details/87936087