📄 lpc177x_8x_usbhost.c
字号:
{
int32_t rc;
Host_FillSetup(bm_request_type, b_request, w_value, w_index, w_length);
rc = Host_ProcessTD(EDCtrl, TD_SETUP, TDBuffer, 8);
if (rc == USB_HOST_FUNC_OK) {
if (w_length) {
rc = Host_ProcessTD(EDCtrl, TD_IN, buffer, w_length);
}
if (rc == USB_HOST_FUNC_OK) {
rc = Host_ProcessTD(EDCtrl, TD_OUT, NULL, 0);
}
}
return (rc);
}
/*********************************************************************//**
* @brief send the control information.
* @param[in] bm_request_type.
* @param[in] b_request
* @param[in] w_value
* @param[in] w_index
* @param[in] w_length
* @param[in] buffer
* @return USB_HOST_FUNC_OK if Success
* ERROR if Failed
**********************************************************************/
int32_t Host_CtrlSend ( uint8_t bm_request_type,
uint8_t b_request,
uint16_t w_value,
uint16_t w_index,
uint16_t w_length,
volatile uint8_t *buffer)
{
int32_t rc;
Host_FillSetup(bm_request_type, b_request, w_value, w_index, w_length);
rc = Host_ProcessTD(EDCtrl, TD_SETUP, TDBuffer, 8);
if (rc == USB_HOST_FUNC_OK) {
if (w_length) {
rc = Host_ProcessTD(EDCtrl, TD_OUT, buffer, w_length);
}
if (rc == USB_HOST_FUNC_OK) {
rc = Host_ProcessTD(EDCtrl, TD_IN, NULL, 0);
}
}
return (rc);
}
/*********************************************************************//**
* @brief fill the setup packet.
* @param[in] None.
* @return USB_HOST_FUNC_OK if Success
* ERROR if Failed
**********************************************************************/
void Host_FillSetup (uint8_t bm_request_type,
uint8_t b_request,
uint16_t w_value,
uint16_t w_index,
uint16_t w_length)
{
int i;
for (i=0;i<w_length;i++)
TDBuffer[i] = 0;
TDBuffer[0] = bm_request_type;
TDBuffer[1] = b_request;
WriteLE16U(&TDBuffer[2], w_value);
WriteLE16U(&TDBuffer[4], w_index);
WriteLE16U(&TDBuffer[6], w_length);
}
/*********************************************************************//**
* @brief initializes transfer descriptor.
* @param[in] td Pointer to TD structure.
* @return None.
**********************************************************************/
void Host_TDInit (volatile HCTD *td)
{
td->Control = 0;
td->CurrBufPtr = 0;
td->Next = 0;
td->BufEnd = 0;
}
/*********************************************************************//**
* @brief initializes endpoint descriptor.
* @param[in] td Pointer to ED structure.
* @return None.
**********************************************************************/
void Host_EDInit (volatile HCED *ed)
{
ed->Control = 0;
ed->TailTd = 0;
ed->HeadTd = 0;
ed->Next = 0;
}
/*********************************************************************//**
* @brief initializes host controller communications area.
* @param[in] hcca Pointer to HCCA.
* @return None.
**********************************************************************/
void Host_HCCAInit (volatile HCCA *hcca)
{
uint32_t i;
for (i = 0; i < 32; i++) {
hcca->IntTable[i] = 0;
hcca->FrameNumber = 0;
hcca->DoneHead = 0;
}
}
/*********************************************************************//**
* @brief infinite loop which breaks when ever a WDH interrupt rises.
* @param[in] None.
* @return None.
**********************************************************************/
void Host_WDHWait (void)
{
while (!HOST_WdhIntr) {
;
}
HOST_WdhIntr = 0;
}
/*********************************************************************//**
* @brief read an unsigned integer from a charecter buffer in the platform
* containing little endian processor.
* @param[in] pmem Pointer to the charecter buffer.
* @return val Unsigned integer.
**********************************************************************/
uint32_t ReadLE32U (volatile uint8_t *pmem)
{
uint32_t val;
((uint8_t *)&val)[0] = pmem[0];
((uint8_t *)&val)[1] = pmem[1];
((uint8_t *)&val)[2] = pmem[2];
((uint8_t *)&val)[3] = pmem[3];
return (val);
}
/*********************************************************************//**
* @brief write an unsigned integer into a charecter buffer in the platform
* containing little endian processor.
* @param[in] pmem Pointer to the charecter buffer.
* @param[in] val Integer value to be placed in the charecter buffer
* @return None.
**********************************************************************/
void WriteLE32U (volatile uint8_t *pmem,
uint32_t val)
{
pmem[0] = ((uint8_t *)&val)[0];
pmem[1] = ((uint8_t *)&val)[1];
pmem[2] = ((uint8_t *)&val)[2];
pmem[3] = ((uint8_t *)&val)[3];
}
/*********************************************************************//**
* @brief read an unsigned short integer from a charecter buffer in the platform
* containing little endian processor.
* @param[in] pmem Pointer to the charecter buffer.
* @return val Unsigned short integer.
**********************************************************************/
uint16_t ReadLE16U (volatile uint8_t *pmem)
{
uint16_t val;
((uint8_t *)&val)[0] = pmem[0];
((uint8_t *)&val)[1] = pmem[1];
return (val);
}
/*********************************************************************//**
* @brief write an unsigned short integer into a charecter buffer in the
* platform containing little endian processor.
* @param[in] pmem Pointer to the charecter buffer.
* @param[in] val Value to be placed in the charecter buffer
* @return None.
**********************************************************************/
void WriteLE16U (volatile uint8_t *pmem,
uint16_t val)
{
pmem[0] = ((uint8_t *)&val)[0];
pmem[1] = ((uint8_t *)&val)[1];
}
/*
**************************************************************************************************************
* READ BE 32U
*
* Description: This function is used to read an unsigned integer from a charecter buffer in the platform
* containing big endian processor
*
* Arguments : pmem Pointer to the charecter buffer
*
* Returns : val Unsigned integer
*
**************************************************************************************************************
*/
/*********************************************************************//**
* @brief read an unsigned integer from a charecter buffer in the platform
* containing big endian processor.
* @param[in] pmem Pointer to the charecter buffer.
* @return val Unsigned integer.
**********************************************************************/
uint32_t ReadBE32U (volatile uint8_t *pmem)
{
uint32_t val;
((uint8_t *)&val)[0] = pmem[3];
((uint8_t *)&val)[1] = pmem[2];
((uint8_t *)&val)[2] = pmem[1];
((uint8_t *)&val)[3] = pmem[0];
return (val);
}
/*********************************************************************//**
* @brief write an unsigned integer into a charecter buffer in the platform
* containing big endian processor
* @param[in] pmem Pointer to the charecter buffer.
* @param[in] val Value to be placed in the charecter buffer
* @return None.
**********************************************************************/
void WriteBE32U (volatile uint8_t *pmem,
uint32_t val)
{
pmem[0] = ((uint8_t *)&val)[3];
pmem[1] = ((uint8_t *)&val)[2];
pmem[2] = ((uint8_t *)&val)[1];
pmem[3] = ((uint8_t *)&val)[0];
}
/*********************************************************************//**
* @brief read an unsigned short integer from a charecter buffer in the platform
* containing big endian processor
* @param[in] pmem Pointer to the charecter buffer.
* @return val Unsigned short integer.
**********************************************************************/
uint16_t ReadBE16U (volatile uint8_t *pmem)
{
uint16_t val;
((uint8_t *)&val)[0] = pmem[1];
((uint8_t *)&val)[1] = pmem[0];
return (val);
}
/*********************************************************************//**
* @brief write an unsigned short integer into the charecter buffer in the
* platform containing big endian processor.
* @param[in] pmem Pointer to the charecter buffer.
* @param[in] val Value to be placed in the charecter buffer
* @return None.
**********************************************************************/
void WriteBE16U (volatile uint8_t *pmem,
uint16_t val)
{
pmem[0] = ((uint8_t *)&val)[1];
pmem[1] = ((uint8_t *)&val)[0];
}
#endif /*_USBHost*/
/**
* @}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -