6.芯片手冊tx-1c板載_第1頁
6.芯片手冊tx-1c板載_第2頁
6.芯片手冊tx-1c板載_第3頁
6.芯片手冊tx-1c板載_第4頁
6.芯片手冊tx-1c板載_第5頁
已閱讀5頁,還剩52頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、PDIUSBD12 固件編程指南介紹PDIUSBD12 是一款帶有并行總線和局部 DMA 傳輸能力的高速 USB 接口器件 固件設(shè)計的目標(biāo)就是使PDIUSBD12 在 USB 上達(dá)到最大的傳輸速率設(shè)備例如掃描儀 外部的海量器和數(shù)碼相機(jī)都可使用 PDIUSBD12 在 USB 上傳輸數(shù)據(jù) 這些設(shè)備的 CPU 要忙于處理許多設(shè)備控制和數(shù)據(jù)以及圖像處理等任務(wù) PDIUSBD12 的固件設(shè)計成完全的中斷驅(qū)動 當(dāng) CPU 處理前臺任務(wù)時 USB 的傳輸可在進(jìn)行 這就確保了最佳的傳輸速率和更好的結(jié)構(gòu) 同時簡化了編程和調(diào)試ISR 中斷服務(wù)程序 和前臺主程序循環(huán)之間的通過事件標(biāo)志和數(shù)據(jù)緩沖區(qū)來實現(xiàn) 例如 PD

2、IUSBD12 的批量輸出端點可使用循環(huán)的數(shù)據(jù)緩沖區(qū) 當(dāng) PDIUSBD12 從 USB 收到一個數(shù)據(jù)包 那么就對 CPU 產(chǎn)生一個中斷請求 CPU 立即響應(yīng)中斷 在 ISR 中 固件將數(shù)據(jù)包從 PDIUSBD12緩沖區(qū)移到循環(huán)數(shù)據(jù)緩沖區(qū)并在隨后清零 PDIUSBD12 的緩沖區(qū)以使能接收新的數(shù)據(jù)包 CPU 可以繼續(xù)它當(dāng)前的前臺任務(wù)直到完成 例如打印當(dāng)前頁 然后返回到主循環(huán)檢查循環(huán)緩沖區(qū)內(nèi)是否有新的數(shù)據(jù)并開始其它的前臺任務(wù)由于這種結(jié)構(gòu) 主循環(huán)不關(guān)心數(shù)據(jù)是來自 USB 串口還是并口 它只檢查循環(huán)緩沖區(qū)內(nèi)需要處理的新數(shù)據(jù) 這個概念很重要 這樣主循環(huán)程序?qū)W⒂跀?shù)據(jù)的處理而 ISR 能夠以最大可能的速

3、度進(jìn)行數(shù)據(jù)的傳輸相似的 控制端點在數(shù)據(jù)包處理時采用了同樣的概念 ISR 接收和保存數(shù)據(jù)緩沖區(qū)中的控制傳輸并設(shè)置相應(yīng)的標(biāo)志寄存器 主循環(huán)向協(xié)議處理程序發(fā)出請求 由于所有的標(biāo)準(zhǔn)器件 級別和廠商請求都是在協(xié)議處理程序中進(jìn)行處理 ISR 得以保持它的效率 而且一旦增加新的請求 只需要在協(xié)議層進(jìn)行修改結(jié)構(gòu)固件結(jié)構(gòu)評估板的固件有著如下的積木式結(jié)構(gòu)1PDIUSBD12 命令接口D12CI.C中斷服務(wù)程序ISR.C廠商請求PROTODMA.C標(biāo)準(zhǔn)請求CHAP_9.C主循環(huán) 發(fā)送 USB 請求 讀測試 Key 控制 LED 和處理 USB總線事件等等MAINLOOP.C硬件提取層 EPPHAL.C這是固件中的最

4、低層代碼 它執(zhí)行對 PDIUSBD12 和評估板硬件與 I/O 相關(guān)的臺接口時 這部分代碼需要修改或增加/*/*當(dāng)與其它 CPU 平/ File Name:EPPHAL.C/*/#include #ifdef C51 #include #include epphal.h #include d12ci.h#include mainloop.h/* spel function register declarations*/extern EPPFLAGS bEPPflags;void outportb(unsigned char port, unsigned char val)unsigned ch

5、ar xdata *ext_address;MCU_HOSTDACK =1;ext_address=0 xff00 + port;*ext_address = val;MCU_HOSTDACK =0;unsigned char inportb(unsigned char port)unsigned char c;unsigned char xdata *ext_address;MCU_HOSTDACK =1;ext_address=0 xff00 + port;c = *ext_address ;MCU_HOSTDACK =0;2硬件提取層EPPHAL.Creturn c;void eppAw

6、rite(unsigned char A_data)MCU_HOSTDACK =1;if(bEPPflags.bits.vere)pr f(eppAwrite = 0 x%bx.n, A_data);P0 = (A_data | 0 x80);EPP_WRITE = 0;EPP_DSTROBE = 1;EPP_ASTROBE = 1;EPP_ASTROBE = 0;EPP_ASTROBE = 1;P0 = (A_data & 0 x7F);EPP_ASTROBE = 0;EPP_ASTROBE = 1;MCU_HOSTDACK =0;void program_cpld(unsigned sho

7、rt uSize, unsigned char bMCU_HOSTDACK = 1;d)outportb(outportb(T0, LSB(uSize);/ set CPLD counterT1, MSB(uSize);if(bEPPflags.bits.vere)pr f(CPLD counter read back = 0 x%bx, 0 x%bx.n, inportb(T0),inportb(T1);if(bd & 0 x1) MCU_DMARD_WR = 0;EPP_WRITE = 1;/ IN_TOKEN_DMA;else MCU_DMARD_WR = 1;3EPP_WRITE =

8、0;/ OUT_TOKEN_DMA;MCU_HOSTDACK = 0;void dma_start(PIO_REQUEST pio)eppAwrite( (pio-uAddressL 13) + program_cpld(pio-uSize, pio-b#endif(pio-bAddressH 3) );d);PDIUSBD12 命令接口 D12CI.C為了進(jìn)一步簡化 PDIUSBD12 的編程/*PDIUSBD12 功能固件定義了一套壓縮了所有令接口/*/File Name:/ 98/11/27/ 98/12/2ISR.CI/O mode Main endpo s read/write up

9、date (WK) Added D12_ReadMainEndpo(WK)/*/#ifdef C51 #include #else#include #endif/* spel function register declarations*/#include epphal.h #include mainloop.h#include d12ci.hextern EPPFLAGS bEPPflags;void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable)if(bEPPflags.bits.in_isr = 0)

10、 DISABLE;outportb(if(bEnable)MAND, 0 xD0);bAddress |= 0 x80;outportb(D12_DATA, bAddress);4if(bEPPflags.bits.in_isr = 0)ENABLE;void D12_SetEndpo Enable(unsigned char bEnable)if(bEPPflags.bits.in_isr = 0) DISABLE;outportb(if(bEnable)MAND, 0 xD8);outportb(D12_DATA, 1);elseoutportb(D12_DATA, 0);if(bEPPf

11、lags.bits.in_isr = 0)ENABLE;void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv)if(bEPPflags.bits.in_isr = 0) DISABLE;outportb(MAND, 0 xF3);outportb(D12_DATA, bConfig);outportb(D12_DATA, bClkDiv);if(bEPPflags.bits.in_isr = 0)ENABLE;void D12_SetDMA(unsigned char bMode)if(bEPPflags.bits.in_i

12、sr = 0) DISABLE;outportb(MAND, 0 xFB);outportb(D12_DATA, bMode);if(bEPPflags.bits.in_isr = 0)ENABLE;5unsigned short D12_ReaderruptRegister(void)unsigned char b1;unsignedj;outportb(MAND, 0 xF4);b1 = inportb(D12_DATA);j = inportb(D12_DATA);j = 8;j += b1;return j;unsigned char D12_SelectEndpo (unsigned

13、 char bEndp)unsigned char c;if(bEPPflags.bits.in_isr = 0)DISABLE;outportb(MAND, bEndp);c = inportb(D12_DATA);if(bEPPflags.bits.in_isr = 0)ENABLE;return c;unsigned char D12_ReadLastTranionS us(unsigned char bEndp)outportb(MAND, 0 x40 + bEndp);return inportb(D12_DATA);unsigned char D12_ReadEndpo S us(

14、unsigned char bEndp)unsigned char c;if(bEPPflags.bits.in_isr = 0)DISABLE;6outportb(MAND, 0 x80 + bEndp);c = inportb(D12_DATA);if(bEPPflags.bits.in_isr = 0)ENABLE;return c;void D12_SetEndpo S us(unsigned char bEndp, unsigned char bStalled)if(bEPPflags.bits.in_isr = 0) DISABLE;outportb(MAND, 0 x40 + b

15、Endp);outportb(D12_DATA, bStalled);if(bEPPflags.bits.in_isr = 0)ENABLE;void D12_SendResume(void)outportb(MAND, 0 xF6);unsigned short D12_ReadCurrentFraunsigned short i,j;mber(void)if(bEPPflags.bits.in_isr = 0)DISABLE;outportb(MAND, 0 xF5);i= inportb(D12_DATA);j = inportb(D12_DATA);i += (j8);if(bEPPf

16、lags.bits.in_isr = 0)ENABLE;return i;7unsigned short D12_ReadChiunsigned short i,j;(void)if(bEPPflags.bits.in_isr = 0)DISABLE;outportb(MAND, 0 xFD);i=inportb(portbase+D12_DATA); j=inportb(portbase+D12_DATA);i += (j len)j = len;for(i=0; ij; i+)*(buf+i) = inportb(D12_DATA);outportb(MAND, 0 xF2);8if(bE

17、PPflags.bits.in_isr = 0)ENABLE;return j;/ D12_ReadMainEndpo () added by V2.2 to support doub/ Caller should ame maxium 128 bytes of returned data. unsigned char D12_ReadMainEndpo (unsigned char * buf)unsigned char i, j, k = 0, bDblBuf = 1;uffering.if(bEPPflags.bits.in_isr = 0)DISABLE;outportb(MAND,

18、0 x84);if( (inportb(D12_DATA) & 0 x60) = 0 x60)bDblBuf = 2;whiDblBuf) outportb(MAND, 4);if(inportb(D12_DATA) & D12_FULLEMPTY) = 0)break;outportb(MAND, 0 xF0);j = inportb(D12_DATA);j = inportb(D12_DATA);for(i=0; ij; i+)*(buf+i+k) = inportb(D12_DATA);k += j;outportb(MAND, 0 xF2);bDblBuf -;if(bEPPflags

19、.bits.in_isr = 0)ENABLE;return k;9unsigned char D12_WriteEndpo (unsigned char endp, unsigned char * buf, unsigned char len)unsigned char i;if(bEPPflags.bits.in_isr = 0)DISABLE;outportb(MAND, endp);inportb(D12_DATA);outportb(MAND, 0 xF0);outportb(D12_DATA, 0);outportb(D12_DATA, len);for(i=0; ilen; i+

20、)outportb(D12_DATA, *(buf+i);outportb(MAND, 0 xFA);if(bEPPflags.bits.in_isr = 0)ENABLE;return len;void D12_AcknowledgeEndpo (unsigned char endp)outportb( outportb( if(endp = 0)outportb(MAND, endp);MAND, 0 xF1);MAND, 0 xF2);#ifndef C51 unsigned char D12Eval_inportb(void)return inportb(D12_EVAL_PORT_I

21、);void D12Eval_outportb(unsigned char val, unsigned char mask)s ic unsigned char last_val = 0;val = (val & mask) | (last_val & (mask);10outportb(D12_EVAL_PORT_O, val);last_val = val;#endif中斷服務(wù)程序 ISR.C這部分代碼處理由 PDIUSBD12 產(chǎn)生的中斷 它將數(shù)據(jù)從 PDIUSBD12 的器并建立正確的事件標(biāo)志以通知主循環(huán)程序進(jìn)行處理/*FIFO 取回到 CPU/*/ File Name: ISR.C/

22、 98/11/25Added I/O mode Main endpo s acs. (WK)/*/#include #include #ifdef C51 #include #else#include #endif/* spel function register declarations*/#include epphal.h #include d12ci.h #include mainloop.h#include usb100 hextern void bus_reset(void);extern void ep0_txdone(void);extern void ep0_rxdone(vo

23、id);extern void ep1_txdone(void);extern void ep1_rxdone(void);extern void main_txdone(void);extern void main_rxdone(void);extern void dma_eot(void);/*/*/ Public s ic data/*11*/EPPFLAGS bEPPflags;/* Control endpoTX/RX buffers */extern CONTROL_XFER ControlData;/* ISR s ic vars */unsigned char idata Ge

24、nEpBufEP1_PACKET_SIZE; IO_REQUEST idata ioRequest;unsigned long ClockTicks = 0;#ifndef C51 voiderrupt (*OldTimerIsr)(); voiderrupt (*OldUsbIsr)();unsigned long ClockIsr = 0; extern unsigned long dmaBuffer;extern unsigned long ioBuffer; / V2.1extern unsigned short ioSize, ioCount; / V2.1 #endif#ifdef

25、 C51 timer_isr()errupt 1DISABLE;ClockTicks+; bEPPflags.bits.timer = 1; ENABLE;#elsevoiderrupt timer_isr(void)DISABLE;ClockTicks+;bEPPflags.bits.timer = 1;(*OldTimerIsr)();ENABLE;#endif#ifdef C51 12usb_isr()errupt 0DISABLE;fn_usb_isr(); ENABLE;#elsevoiderrupt usb_isr(void)ClockIsr = ClockTicks;D12Eva

26、l_outportb(0 x0, 0 x80);fn_usb_isr();outportb(0 x20, 0 x20);D12Eval_outportb(0 x80, 0 x80);#endifvoid fn_usb_isr()unsignedi_st;bEPPflags.bits.in_isr = 1;i_st = D12_ReaderruptRegister();if(i_st != 0) if(i_st & D12_bus_reset();_BUSRESET) bEPPflags.bits.bus_reset = 1;else if(i_st & D12_EOT)dma_eot();if

27、(i_st & D12_SUSPENDCHANGE)bEPPflags.bitspend = 1;if(i_st & D12_ENDP0IN)ep0_txdone();if(i_st & D12_ENDP0OUT)13ep0_rxdone();if(i_st & D12_ENDP1IN)ep1_txdone();if(i_st & D12_ENDP1OUT)ep1_rxdone();if(i_st & D12_ENDP2IN)main_txdone();if(i_st & D12_ENDP2OUT)main_rxdone();bEPPflags.bits.in_isr = 0;void bus

28、_reset(void)void ep0_rxdone(void)unsigned char ep_last, i;ep_last = D12_ReadLastTranionSus(0); / Clearerrupt flagif (ep_last & D12_SETUPPACKET) ControlData.wLength = 0;ControlData.wCount = 0;if( D12_ReadEndpo (0, (unsigned char *)(&(ControlData.DeviceRequest),sizeof(ControlData.DeviceRequest) != siz

29、eof(DEVICE_REQUEST) ) D12_SetEndpo S us(0, 1); D12_SetEndpo S us(1, 1);bEPPflags.bits.control_s e = USB_IDLE;return;#ifdef C51 ControlData.DeviceRequest.wValue = SWAP(ControlData.DeviceRequest.wValue); ControlData.DeviceRequest.wIndex = SWAP(ControlData.DeviceRequest.wIndex); ControlData.DeviceReque

30、st.wLength = SWAP(ControlData.DeviceRequest.wLength);14#endif/ Acknowledge setup here to unlock in/out endp D12_AcknowledgeEndpo (0);D12_AcknowledgeEndpo (1);ControlData.wLength = ControlData.DeviceRequest.wLength;ControlData.wCount = 0;if (ControlData.DeviceRequest.bmRequestType & (unsigned char)US

31、B_ENDPO_DIRECTION_MASK)bEPPflags.bits.setup_packet = 1;bEPPflags.bits.control_s e = USB_IDLE;/* getd */else if (ControlData.DeviceRequest.wLength = 0) bEPPflags.bits.setup_packet = 1; bEPPflags.bits.control_s e = USB_IDLE;else /* setd */if(ControlData.DeviceRequest.wLength MAX_CONTROLDATA_SIZE) bEPP

32、flags.bits.control_s e = USB_IDLE;D12_SetEndpo S us(0, 1); D12_SetEndpo S us(1, 1);else bEPPflags.bits.control_s e = USB_RECEIVE;/* setd with OUTtoken */ / set / else set / if setup packetd with datadelse if (bEPPflags.bits.control_s e = USB_RECEIVE) i =D12_ReadEndpo (0, ControlData.dataBuffer + Con

33、trolData.wCount, EP0_PACKET_SIZE);ControlData.wCount += i;if( i != EP0_PACKET_SIZE | ControlData.wCount = ControlData.wLength) bEPPflags.bits.setup_packet = 1;bEPPflags.bits.control_s e = USB_IDLE;15else bEPPflags.bits.control_s e = USB_IDLE;void ep0_txdone(void)short i = ControlData.wLength - Contr

34、olData.wCount;D12_ReadLastTranionS us(1); / Clearerrupt flagif (bEPPflags.bits.control_s e != USB_TRANSMIT)return;if( i = EP0_PACKET_SIZE) D12_WriteEndpo (1, ControlData.pData + ControlData.wCount, EP0_PACKET_SIZE); ControlData.wCount += EP0_PACKET_SIZE;bEPPflags.bits.control_s e = USB_TRANSMIT;else

35、 if( i != 0) D12_WriteEndpo (1, ControlData.pData + ControlData.wCount, i); ControlData.wCount += i;bEPPflags.bits.control_s e = USB_IDLE;else if (i = 0)D12_WriteEndpo (1, 0, 0); / Send zero packe?bEPPflags.bits.control_s e = USB_IDLE;void dma_eot(void)if(bEPPflags.bits.dma_s e = DMA_PENDING) bEPPfl

36、ags.bits.setup_dma = 1;elsebEPPflags.bits.dma_s e = DMA_IDLE;void ep1_txdone(void)D12_ReadLastTranionS us(3); /* Clearerrupt flag */16void ep1_rxdone(void)unsigned char len;D12_ReadLastTranionS us(2); /* Clearerrupt flag */len = D12_ReadEndpo (2, GenEpBuf, sizeof(GenEpBuf);if(len != 0)bEPPflags.bits

37、.ep1_rxdone = 1;void main_txdone(void)#ifndef C51 unsigned short len; unsigned char far *fp; unsigned short seg, off;#endifD12_ReadLastTranionS us(5); /* Clearerrupt flag */#ifndef C51 seg = (ioBuffer + ioCount)4; off = (ioBuffer + ioCount)&0 xf; fp = MK_FP(seg, off);len = ioSize - ioCount; if(len =

38、 0) if(bEPPflags.bits.dma_s e = DMA_PENDING) bEPPflags.bits.setup_dma = 1;elsebEPPflags.bits.dma_s e = DMA_IDLE;else if(len 64)len = 64;len = D12_WriteEndpo (5, fp, len); ioCount += len;#endif17void main_rxdone(void)#ifndef C51 unsigned char len; unsigned char far *fp; unsigned short seg, off;#endif

39、D12_ReadLastTranionS us(4); /* Clearerrupt flag */#ifndef C51 seg = (ioBuffer + ioCount)4; off = (ioBuffer + ioCount)&0 xf; fp = MK_FP(seg, off);len = D12_ReadMainEndpo ( fp ); ioCount += len;if(ioCount = ioSize) if(bEPPflags.bits.dma_s e = DMA_PENDING) bEPPflags.bits.setup_dma = 1;elsebEPPflags.bit

40、s.dma_s e = DMA_IDLE;#endif主循環(huán) MAINLOOP.C主循環(huán)檢查事件標(biāo)志并進(jìn)入對應(yīng)的和鍵盤掃描/*序進(jìn)行進(jìn)一步的處理它還包含人機(jī)接口的代碼例如 LED/*/ File Name: MainLoop.C/ 98/11/25Added I/O acpport on Main endpo s. (WK)/*/#include #include #ifdef C51 #include #else#include #include #include #endif/* spel function register declarations*/18#include epphal.

41、h #include d12ci.h #include mainloop.h #include usb100 h #include chap_9.h #include protodma h/*/*/ USB protocol function po er arrays/*/code void (*StandardDeviceRequest)(void) =get_s us, clear_feature,set_feature,set_address, get_descriptor,get_configuration, set_configuration, get_ erface,set_ er

42、face,;code void (*VendorDeviceRequest)(void) =,19,read_write_register,;/*/*/ Public s ic data/*/extern EPPFLAGS bEPPflags; extern unsigned long ClockTicks;extern unsigned char idata GenEpBuf;extern IO_REQUEST idata ioRequest;CONTROL_XFER ControlData;code char * _NAME_USB_REQUEST_DIRECTION =Host_to_d

43、evice, Device_to_host;code char * _NAME_USB_REQUEST_RECIPIENT =Device,erface, Endpo (0), Other;code char * _NAME_USB_REQUEST_TYPE =Standard, Class,Vendor,;code char * _NAME_USB_STANDARD_REQUEST =20GET_SUS,CLEAR_FEATURE,SET_FEATURE,SET_ADDRESS, GET_DESCRIPTOR, SET_DESCRIPTOR, GET_CONFIGURATION,SET_CO

44、NFIGURATION,GET_SET_ERFACE,ERFACE,SYNC_FRAME;void help_devreq(unsigned char typ, unsigned char req)typ = 5;if(typ = USB_STANDARD_REQUEST) pr f(Request Type = %s, Request = %s.n, _NAME_USB_REQUEST_TYPEtyp,_NAME_USB_STANDARD_REQUESTreq);else #ifdef C51 if(bEPPflags.bits.vere)pr f(Request Type = %s, bR

45、equest = 0 x%bx.n, _NAME_USB_REQUEST_TYPEtyp,req);#elseif(bEPPflags.bits.vere)prf(Request Type = %s, bRequest = 0 x%x.n, _NAME_USB_REQUEST_TYPEtyp,req);#endif/* Configure Timer 0- Mode= 1-errupt= ENABLEDClock SourceEnable Gating Control=ERNAL= DISABLED*/21#ifndef C51 extern voiderrupt (*OldTimerIsr)

46、(); extern voiderrupt (*OldUsbIsr)();extern unsigned long ClockIsr;unsigned char far *privateBuffer; unsigned long dmaBuffer; unsigned long ioBuffer; / V2.1unsigned short ioSize, ioCount; / V2.1#endifvoid init_timer0(void)#ifdef C51 TMOD &= 0XF0; TMOD |= 0X1; TL0 = 0X0;TH0 = 0X0; ET0 = 1;TR0 = 1;PT0

47、 = 1;/* clear Timer 0*/* value set by user*/* value set by user */* IE.1*/* TCON.4 start timer */EA = 1;#elsedisable();OldTimerIsr = getvect(0 x8); setvect(0 x8, timer_isr); enable();#endif/*/*errupt Controit */* Enablederrupts inerrupt Enable Register *GLOBALERRUPT MUST BE ENABLED FOR ANY OTHERERRU

48、PT TO WORK!*/*GLOBALERRUPT DISABLED ALLERRUPTSARE DISABLEDExternalerrupt 0 Priority Level = 0 Timer 0errupt Priority Level = 0*/*/*/*/*/*/*/*/void init_spel_ errupts(void)22#ifdef C51 IT0 = 0;EX0 = 1;PX0 = 0;#elseunsigned char c, eo;OldUsbIsr = getvect(0 xD);setvect(0 xD, usb_isr);c = inportb(0 x21)

49、;c &= 0 xDF; outportb(0 x21, c);eo = 0 x0; D12Eval_outportb(eo, 0 x80); eo = 0 x80;D12Eval_outportb(eo, 0 x80);#endifvoid init_port()#ifdef C51 P0 = 0 xFF; P1 = 0 xFF; P2 = 0 xFF;#elseunsigned long phys;privateBuffer = (unsigned char far *)farmalloc(DMA_BUFFER_SIZE*2L); if(privateBuffer = NULL) pr f

50、(Error allocation memory!n); exit(1);phys = (unsigned long)FP_SEG(privateBuffer)*16 + FP_OFF(privateBuffer); if( (phys&0 x0 fL) = 0 ) dmaBuffer = phys;else phys &= 0 xf0000L; phys += 0 x10000;23dmaBuffer = phys;pr f(privateBuffer allocated at %p, dmaBuffer at %lx.n, privateBuffer, dmaBuffer);#endif/

51、*Serial Port */*ModeSerial Port/*Receive= 1 /8-bit UART= Disablederrupt*/= Enabled*/*Auto Addressing= Disabled void init_serial(void)#ifdef C51 SCON = 0X52;PCON = 0X80 | PCON; TMOD = 0X20;TCON = 0 x69;/* TCON */ TH1 = 0 xF3;#endif*/void on_exit(void)#ifndef C51 unsigned char c;disable();c = inportb(

52、0 x21);c |= 0 x20; outportb(0 x21, c);setvect(0 xD, OldUsbIsr);setvect(0 x8, OldTimerIsr);disconnect_USB();enable();farfree(privateBuffer); #endif24void main(void)BOOL in_loop = TRUE; unsigned char key, i;#ifndef C51 unsigned long ClockSec, last_clk; #endifinit_port();init_serial();init_timer0();ini

53、t_spel_ errupts();prprf(nPDIUSBD12 evaluation board firmware V2.2.n);f(Copyright (c) Philips Semiconductors, 1998.n);/*er on reset, lightup LEDs for 1 sec, disconnect and reconnect Soft-Connect */f(Re-connect PDIUSBD12 evaluation board to USB.n);prreconnect_USB();/* Main program loop */while( in_loo

54、p )#ifdef C51 if (bEPPflags.bits.timer) DISABLE;bEPPflags.bits.timer = 0;ENABLE;if(bEPPflags.bits.configuration)check_key_LED();if(RI) key = _getkey();#elseif (bEPPflags.bits.timer)DISABLE;25bEPPflags.bits.timer = 0;ENABLE;if(bEPPflags.bits.configuration)check_key_LED();ClockSec = ClockTicks*10/182;

55、 if(ClockSec != last_clk) pr f(Idle time = %ld sec.r, (ClockTicks - ClockIsr)*10/182); last_clk = ClockSec;if( bioskey(1) ) key = bioskey(0); key &= 0 xff;#endifswitch(key) case 0 x1b: /* ESC */#ifndef C51 in_loop = FALSE;#endifbreak; case r:D12_SendResume(); break;case i:if(bEPPflags.bits.control_s

56、e = USB_IDLE)pr f(Control s e = USB_IDLE.);else if(bEPPflags.bits.control_s e = USB_RECEIVE) pr f(Control s e = USB_RECEIVE.);else if(bEPPflags.bits.control_s e = USB_TRANSMIT) pr f(Control s e = USB_TRANSMIT.);pr f( ControlData.wCount = %x.n, ControlData.wCount);#ifndef C51 prf(Endpo4 (Bulk Out) S

57、us = %x, Endpo5 (Bulk In) S D12_ReadEndpo S us(4), D12_ReadEndpo S us(5);f(ioSize = %x, ioCount = %x.n, ioSize, ioCount);us = %x.n,pr#elseprf(Endpo4 (Bulk Out) S us = %bx, Endpo5 (Bulk In) SD12_ReadEndpo S us(4), D12_ReadEndpo S us(5);us = %bx.n,#endifif(bEPPflags.bits.dma_s e = DMA_IDLE)pr f(DMA_S

58、e = DMA_IDLE.n);26else if(bEPPflags.bits.dma_s e = DMA_RUNNING) pr f(DMA_S e = DMA_RUNNING.n);else if(bEPPflags.bits.dma_s e = DMA_PENDING)pr f(DMA_S e = DMA_PENDING.n);#ifndef C51 pr f(Last Device Request: bmRequestType = 0 x%x, bRequest= 0 x%x, wValue = 0 x%x, wLength = 0 x%x, wIndex = 0 x%x.n,Con

59、trolData.DeviceRequest.bmRequestType, ControlData.DeviceRequest.bRequest, ControlData.DeviceRequest.wValue, ControlData.DeviceRequest.wLength, ControlData.DeviceRequest.wIndex);#elseMCU_HOSTDACK = 1;pr f(CPLD counter read back = 0 x%bx, 0 x%bx.n, inportb(T0),inportb(MCU_HOSTDACK = 0;T1);pr f(Last De

60、vice Request: bmRequestType = 0 x%bx, bRequest= 0 x%bx,wValue = 0 x%x, wLength = 0 x%x, wIndex = 0 x%x.n,ControlData.DeviceRequest.bmRequestType, ControlData.DeviceRequest.bRequest, ControlData.DeviceRequest.wValue, ControlData.DeviceRequest.wLength,ControlData.DeviceRequest.wIndex);#endifpr f(Data:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論