[FX2 EVM] CY7C68013 USB 벌크 전송 테스트
FX2 Ez-USB를 이용하여 USB Bulk전송 테스트를 해 보았다.
먼저 CY7C68013쪽 펌웨어 에서 TD_Pool() 함수를 수정하여 USB로 데이터를 수신하거나 전송할 수 있다.
아래 코드는 USB로 PC에서 받은 데이터를 처리하는 부분이다. 주석을 보면 쉽게 이해할 수 있다.
FX2 Ez-USB BULK테스트 PC프로그램
Cypress API를 이용하면 쉽게 PC프로그램을 작성할 수 있다.
API를 사용하려면 DDK가 필요하다.
FX2 USB BULK 테스트 프로그램 소스코드
FX2 Ez-USB를 이용하여 USB Bulk전송 테스트를 해 보았다.
먼저 CY7C68013쪽 펌웨어 에서 TD_Pool() 함수를 수정하여 USB로 데이터를 수신하거나 전송할 수 있다.
아래 코드는 USB로 PC에서 받은 데이터를 처리하는 부분이다. 주석을 보면 쉽게 이해할 수 있다.
void TD_Poll(void)
{
WORD i;
WORD count;
//EndPoint로 데이터가 들어오면
if(!(EP2468STAT & bmEP2EMPTY))
{
//받은 데이터가 들어 있는 포인터의 주소를 Auto Buffer1로 할당한다.
APTR1H = MSB( &EP2FIFOBUF );
APTR1L = LSB( &EP2FIFOBUF );
//내가 사용할 메모리의 주소를 Auto Buffer2에 할당
AUTOPTRH2 = MSB( &Receive_Buffer );
AUTOPTRL2 = LSB( &Receive_Buffer );
//전송된 데이터 수 저장
count = (EP2BCH << 8) + EP2BCL;
DebugPrint("EP2 read: Size=%d.\r\n", count);
//내가 설정한 메모리로 저장
for(i=0; i<count; i++)
{
EXTAUTODAT2 = EXTAUTODAT1;
}
//데이터 처리
PorcessUsbEP2(Receive_Buffer, count)
SYNCDELAY;
EP2BCL = 0x80; // re(arm) EP2OUT
}
:
//데이터 전송 처리
{
WORD i;
WORD count;
//EndPoint로 데이터가 들어오면
if(!(EP2468STAT & bmEP2EMPTY))
{
//받은 데이터가 들어 있는 포인터의 주소를 Auto Buffer1로 할당한다.
APTR1H = MSB( &EP2FIFOBUF );
APTR1L = LSB( &EP2FIFOBUF );
//내가 사용할 메모리의 주소를 Auto Buffer2에 할당
AUTOPTRH2 = MSB( &Receive_Buffer );
AUTOPTRL2 = LSB( &Receive_Buffer );
//전송된 데이터 수 저장
count = (EP2BCH << 8) + EP2BCL;
DebugPrint("EP2 read: Size=%d.\r\n", count);
//내가 설정한 메모리로 저장
for(i=0; i<count; i++)
{
EXTAUTODAT2 = EXTAUTODAT1;
}
//데이터 처리
PorcessUsbEP2(Receive_Buffer, count)
SYNCDELAY;
EP2BCL = 0x80; // re(arm) EP2OUT
}
:
//데이터 전송 처리
FX2 Ez-USB BULK테스트 PC프로그램
Cypress API를 이용하면 쉽게 PC프로그램을 작성할 수 있다.
API를 사용하려면 DDK가 필요하다.
FX2 USB BULK 테스트 프로그램 소스코드
void main(void)
{
SystemInit();
Led1Init();
Led1Off();
Led2Init();
Led2Off();
Led3Init();
Led3Off();
DebugInit(BAUD_38400);
DebugPrint("FX2 EVM CY7C68013 USB BULK Test.\r\n");
// Initialize user device
TD_Init();
EZ-USB_Init();
while(TRUE)
{
// Poll User Device
TD_Poll();
EZ_USB_CtrlProcess();
}
}
{
SystemInit();
Led1Init();
Led1Off();
Led2Init();
Led2Off();
Led3Init();
Led3Off();
DebugInit(BAUD_38400);
DebugPrint("FX2 EVM CY7C68013 USB BULK Test.\r\n");
// Initialize user device
TD_Init();
EZ-USB_Init();
while(TRUE)
{
// Poll User Device
TD_Poll();
EZ_USB_CtrlProcess();
}
}
반응형