?? 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 + -