📄 notes for regs.txt
字号:
//寄存器说明
-----------IFCONFIG 配置-------------
IFCONFIG用于对端口、GPIF、SlaveFIFO接口模式进行配置
IFCONFIG.7 内外时钟选择(0外1内)
IFCONFIG.6 内时钟选择(0-30、1-48MHz)
IFCONFIG.5 IFCLK引脚输出使能(0三态,1使能)
IFCONFIG.4 反转IFCLK信号
IFCONFIG.3 SlaveFIFO同步方式选择(0同1异)
IFCONFIG.2 用于将GSTATE[2:0]驱动到端口PE[2:0]上
IFCONFIG.1 IFCFG1
IFCONFIG.0 IFCFG0
最后两位IFCFG1:0用于接口模式选择
IFCFG1:0 = 00 接口为普通IO口
IFCFG1:0 = 10 接口为GPIF
IFCFG1:0 = 11 接口为SlaveFIFO
-----------EPxCFG 配置-------------
EPxCFG用于对端点2、4、6、8进行配置
EPxCFG.7 激活(0禁止1激活,所有端点默认激活)
EPxCFG.6 端点方向(0输出、1输入)
EPxCFG.5 TYPE1
EPxCFG.4 TYPE0
//TYPE1:0
01 同步传输
10 块传输
11 中断传输
EPxCFG.3 SIZE
//SIZE 设置buffer大小
SIZE = 0 buffer = 512byte
SIZE = 1 buffer = 1024byte
端点4和8只能是512,2和6可选
EPxCFG.2 置0
EPxCFG.1 BUF1
EPxCFG.0 BUF0
最后两位BUF1:0设置buffer类型
BUF1:0 = 00 4重缓冲
BUF1:0 = 01 保留,不使用
BUF1:0 = 10 2重缓冲
BUF1:0 = 11 3重缓冲
其中4和8两个端点只能为2重缓冲
-----------EPxFIFOCFG 配置-------------
EPxFIFOCFG用于对端点2、4、6、8的SlaveFIFO进行配置
EPxFIFOCFG.7 0
EPxFIFOCFG.6 INFM1
EPxFIFOCFG.5 OEP1
EPxFIFOCFG.4 AUTOOUT
EPxFIFOCFG.3 AUTOIN
EPxFIFOCFG.2 ZEROLENIN 使能0长度的IN包
EPxFIFOCFG.1 0
EPxFIFOCFG.0 WORDWIDE
最后1位WORDWIDE设置数据总线长度
0-8位,1-16位
----端点2、4、6、8的AUTOIN包长度配置-------------
EP2AUTOINLENH、EP6AUTOINLENH 表示端点2和6的AUTOIN包长度的高字节
EP2AUTOINLENH.7 0
EP2AUTOINLENH.6 0
EP2AUTOINLENH.5 0
EP2AUTOINLENH.4 0
EP2AUTOINLENH.3 0
EP2AUTOINLENH.2 PL10
EP2AUTOINLENH.1 PL9
EP2AUTOINLENH.0 PL8
EP6AUTOINLENH.7 0
EP6AUTOINLENH.6 0
EP6AUTOINLENH.5 0
EP6AUTOINLENH.4 0
EP6AUTOINLENH.3 0
EP6AUTOINLENH.2 PL10
EP6AUTOINLENH.1 PL9
EP6AUTOINLENH.0 PL8
其中PL10:PL8表示数据包长度高三位
EP4AUTOINLENH、EP8AUTOINLENH 表示端点4和8的AUTOIN包长度的高字节
EP4AUTOINLENH.7 0
EP4AUTOINLENH.6 0
EP4AUTOINLENH.5 0
EP4AUTOINLENH.4 0
EP4AUTOINLENH.3 0
EP4AUTOINLENH.2 0
EP4AUTOINLENH.1 PL9
EP4AUTOINLENH.0 PL8
EP8AUTOINLENH.7 0
EP8AUTOINLENH.6 0
EP8AUTOINLENH.5 0
EP8AUTOINLENH.4 0
EP8AUTOINLENH.3 0
EP8AUTOINLENH.2 0
EP8AUTOINLENH.1 PL9
EP8AUTOINLENH.0 PL8
其中PL9:PL8表示数据包长度高2位
EPxAUTOINLENL表示了端点2、4、6、8包长度的低字节
EPxAUTOINLENL.7 PL7
EPxAUTOINLENL.6 PL6
EPxAUTOINLENL.5 PL5
EPxAUTOINLENL.4 PL4
EPxAUTOINLENL.3 PL3
EPxAUTOINLENL.2 PL2
EPxAUTOINLENL.1 PL1
EPxAUTOINLENL.0 PL0
-----------端点的ISO IN包-------------
EPxISOINPKTS为端点2、4、6、8的ISO IN数据包定义
EPxISOINPKTS.7 AADJ
EPxISOINPKTS.6 0
EPxISOINPKTS.5 0
EPxISOINPKTS.4 0
EPxISOINPKTS.3 0
EPxISOINPKTS.2 0
EPxISOINPKTS.1 INPPF1
EPxISOINPKTS.0 INPPF0
其中INPPF1:0表示ISO IN端点每帧发送的包数,可为1、2、3。
-----------IN数据包强制结束-------------
INPKTEND用于强制IN数据包结束,
INPKTEND.7 SKIP
INPKTEND.6 0
INPKTEND.5 0
INPKTEND.4 0
INPKTEND.3 EP3
INPKTEND.2 EP2
INPKTEND.1 EP1
INPKTEND.0 EP0
SKIP:当ENH_PKT(REVCTL.0)设置为1的时候,置SKIP=1将忽略IN数据包
EP3:0:将对应的端点号置1,可以自动打包IN数据包,强制传输
-----------OUT数据包强制结束-------------
OUTPKTEND用于强制OUT数据包结束,
OUTPKTEND.7 SKIP
OUTPKTEND.6 0
OUTPKTEND.5 0
OUTPKTEND.4 0
OUTPKTEND.3 EP3
OUTPKTEND.2 EP2
OUTPKTEND.1 EP1
OUTPKTEND.0 EP0
SKIP:当ENH_PKT(REVCTL.0)设置为1的时候,置SKIP=1将忽略OUT数据包
EP3:0:将对应的端点号置1,可以自动打包OUT数据包,强制传输
-----------PINFLAGSAB、PINFLAGSCD 配置-------------
PINFLAGSAB、PINFLAGSCD用于配置Slave FIFO模式下FLAGA、FLAGB、FLAGC、FLAGD引脚
PINFLAGSAB.7 FLAGB3
PINFLAGSAB.6 FLAGB2
PINFLAGSAB.5 FLAGB1
PINFLAGSAB.4 FLAGB0
PINFLAGSAB.3 FLAGA3
PINFLAGSAB.2 FLAGA2
PINFLAGSAB.1 FLAGA1
PINFLAGSAB.0 FLAGA0
PINFLAGSCD.7 FLAGD3
PINFLAGSCD.6 FLAGD2
PINFLAGSCD.5 FLAGD1
PINFLAGSCD.4 FLAGD0
PINFLAGSCD.3 FLAGC3
PINFLAGSCD.2 FLAGC2
PINFLAGSCD.1 FLAGC1
PINFLAGSCD.0 FLAGC0
FLAGxn的值对应功能
FLAGx3:FLAGx2:FLAGx1:FLAGx0 === 功能
0000==========FLAGA=PF,FLAGB=FF,FLAGC=EF,FLAG=EP2PF
0001~0011====保留
0100==========EP2PF
0101==========EP4PF
0110==========EP6PF
0111==========EP8PF
1000==========EP2EF
1001==========EP4EF
1010==========EP6EF
1011==========EP8EF
1100==========EP2FF
1101==========EP4FF
1110==========EP6FF
1111==========EP8FF
注意,默认配置值为0000,此时FIFO的选择通过FIFOADR1和FIFOADR0引脚来进行
FIFOADR1:FIFOADR0值===FIFO
00============EP2
01============EP4
10============EP6
11============EP8
-----------FIFORESET配置-------------
FIFORESET = 0x80;//对从主机发送的数据传输进行握手
//复位各个独立的FIFO
SYNCDELAY;
FIFORESET = 0x02;//
SYNCDELAY;
FIFORESET = 0x04;//
SYNCDELAY;
FIFORESET = 0x06;//
SYNCDELAY;
FIFORESET = 0x08;//
SYNCDELAY;
FIFORESET = 0x00;//保存操作
-----------FIFOPINPOLAR配置-------------
用于设置SlaveFIFO接口引脚的极性
FIFOPINPOLAR.7 0
FIFOPINPOLAR.6 0
FIFOPINPOLAR.5 PKTEND
FIFOPINPOLAR.4 SLOE
FIFOPINPOLAR.3 SLRD
FIFOPINPOLAR.2 SLWR
FIFOPINPOLAR.1 EF
FIFOPINPOLAR.0 FF
PKTEND:用于设置PKTEND的FIFO输入引脚极性。0==PKTEND引脚低电平有效,1==PKTEND引脚高电平有效
SLOE:用于设置SLOE的FIFO输入引脚极性。0==SLOE引脚低电平有效,1==SLOE引脚高电平有效
SLRD:用于设置SLRD的FIFO输入引脚极性。0==SLRD引脚低电平有效,1==SLRD引脚高电平有效
SLWR:用于设置SLWR的FIFO输入引脚极性。0==SLWR引脚低电平有效,1==SLWR引脚高电平有效
EF:用于设置SLRD的FIFO输出引脚极性。0==SLRD引脚低电平有效,1==SLRD引脚高电平有效
FF:用于设置SLWR的FIFO输出引脚极性。0==SLWR引脚低电平有效,1==SLWR引脚高电平有效
-----------REVCTL配置-------------
用于控制芯片的版本
REVCTL.7 0
REVCTL.6 0
REVCTL.5 0
REVCTL.4 0
REVCTL.3 0
REVCTL.2 0
REVCTL.1 DYN_OUT
REVCTL.0 ENH_PKT
硬件复位后,DYN_OUT、ENH_PKT均为0。
-----------AUTOPTRSETUP配置-------------
用于设置自动指针1和2。
AUTOPTRSETUP.7 0
AUTOPTRSETUP.6 0
AUTOPTRSETUP.5 0
AUTOPTRSETUP.4 0
AUTOPTRSETUP.3 0
AUTOPTRSETUP.2 APTR2INC //自动指针2激活
AUTOPTRSETUP.1 APTR1INC //自动指针1激活
AUTOPTRSETUP.0 APTREN //使能自动指针
-----------端点操作寄存器-------------
端点操作寄存器用于51对各个端点进行控制,在FIFO模式下应该没用。
EPxBCH、EPxBCL为各端点的字节计数器
-----------端点缓冲寄存器-------------
端点缓冲寄存器是各个端点缓冲区的标志,在FIFO模式下应该没用。
-----------CPU控制和状态寄存器-------------
CPUCS为EZ-USB的CPU的控制与状态寄存器。
CPUCS.7 0
CPUCS.6 0
CPUCS.5 PORTCSTB //跟PC端口和外部存储器读写有关
CPUCS.4 CLKSPD1
CPUCS.3 CLKSPD0
CPUCS.2 CLKINV //CLKOUT输出的时钟信号是否反转(0否1反)
CPUCS.1 CLKOE //CLKOUT输出使能(0输出有效,1悬空)
CPUCS.0 0
CLKSPD1:0用于CPU时钟速率选择
00=====12MHz(上电缺省状态)
01=====24MHz
10=====48MHz
-----------PORTACFG配置-------------
用于端口A的替换配置(第二功能配置)
PORTACFG.7 FLAGD
PORTACFG.6 SLCS
PORTACFG.5 0
PORTACFG.4 0
PORTACFG.3 0
PORTACFG.2 0
PORTACFG.1 INT1
PORTACFG.0 INT0
FLAGD:在IFCFG1:0=11时,如果FLAGD=1,则配置引脚PA7为FLAGD,这是一个可编程的FIFO标志。
SLCS:在IFCFG1:0=11时,如果SLCS=1,则配置引脚PA7为SLCS(低电平有效),这是FIFO的片选信号。
INT1:0:置1则PA端口相应引脚作为INT1或INT0输入引脚。
------------------------------------
初始化例子一:
void TD_Init(void) // Called once at startup
{
BREAKPT &= ~bmBPEN; // to see BKPT LED go out TGE
Rwuen = TRUE; // Enable remote-wakeup
// OED=0xFF;//端口D为输出状态,由于FD为16位,D15:8为D口,D7:0为B口
OEC=0xFF;//输出状态
SYNCDELAY;
OEE=0x00;//输入状态
// set the CPU clock to 48MHz
//CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1) ;
CPUCS =0x10; //48MZ,极性不反转,CLKOUT悬浮
SYNCDELAY;
// set the slave FIFO interface to 48MHz
//IFCONFIG |= 0x40;//内部时钟
IFCONFIG = 0xDB;//D7=1内部时钟,D6=1 48M,D5=0 三态,D4=1时钟极性反,D3=1,FIFO异步方式
SYNCDELAY; //D2=0,PE为普通管脚,D1D1=11,FIFO方式
REVCTL=0x03; //D1=1 不允许AUTOOUT从0到1翻转,D0=1允许CPU发数据包
SYNCDELAY;
EP2CFG = 0xEB;//0xA2;//1110 0010 D7=1激活端点,D6=0 OUT,D6=1 IN,D5:D4=10块传输,D3=0 512BIT,
SYNCDELAY; //D3=1 1024BIT,D1:D0=10 2重缓冲 IN
EP4CFG = 0x00;//0xA0;//1110 0000只512BIT,IN
SYNCDELAY;
EP6CFG = 0x00;//1110 0010 512BIT,2缓冲,IN
SYNCDELAY;
EP8CFG = 0x00;//1110 0000 只512BIT IN
SYNCDELAY;
PINFLAGSAB=0x00; //状态标志清零 ,空满标志
SYNCDELAY;
PINFLAGSCD=0x00; //状态标志清零 ,空满标志
SYNCDELAY;
PORTACFG=0x43; //D7=1,IFCFG1:0=11适保琍A7引脚为FLAGD,可编程FIFO标志,D6=0,PA7脚不为SLCS
SYNCDELAY; // D1D0=11,PA1,PA0 为INT1,INT0
FIFOPINPOLAR=0x00;
SYNCDELAY;
EP2AUTOINLENH=0x4;//FIFO达到512字节时自动发送
SYNCDELAY;
EP2AUTOINLENL=0x00;
SYNCDELAY;
// 置FIFO
EP2FIFOCFG=0x05;
SYNCDELAY; //0000 1101 配置自动打包,可以发送0长度,D0=1,16位FIFO,自动模式
SYNCDELAY;
INPKTEND=0x82;//清除FIFO中的未发字节,双缓冲
SYNCDELAY;
INPKTEND=0x82; SYNCDELAY;
INPKTEND=0x82; SYNCDELAY;
FIFORESET = 0x80; // activate NAK-ALL to avoid race conditions
SYNCDELAY; //
FIFORESET = 0x02; // reset, FIFO 2
SYNCDELAY; //
FIFORESET = 0x04; // reset, FIFO 4
SYNCDELAY; //
FIFORESET = 0x06; // reset, FIFO 6
SYNCDELAY; //
FIFORESET = 0x08; // reset, FIFO 8
SYNCDELAY; //
FIFORESET = 0x00;
j=-1;
//AUTOPTRSETUP |= 0x01;//使能自动激活
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -