Stair56E UART project
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,266 +1,272 @@
|
||||
/*!
|
||||
* \file xc_hal_usb.c
|
||||
*
|
||||
* \brief Target xinchip hal usb implementation
|
||||
*
|
||||
* \copyright Revised BSD License, see section \ref LICENSE.
|
||||
*
|
||||
* \code
|
||||
*
|
||||
* _ __ _ ________ _
|
||||
* | |/ /(_)___ / ____/ /_ (_)___
|
||||
* | // / __ \/ / / __ \/ / __ \
|
||||
* / |/ / / / / /___/ / / / / /_/ /
|
||||
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
|
||||
* /_/
|
||||
* (C) 2022-2025 XinChip
|
||||
*
|
||||
* \endcode
|
||||
*
|
||||
* \author ( XinChip ) Alex-J
|
||||
*
|
||||
* \author ( XinChip )
|
||||
*/
|
||||
|
||||
/*-----------------------------------------------------------------------------------
|
||||
INCLUDE HEADE FILES
|
||||
------------------------------------------------------------------------------------*/
|
||||
#include "xc_hal_usb.h"
|
||||
#include "xc6xxx.h"
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Macros
|
||||
-------------------------------------------------------------------------------------*/
|
||||
#define USB_RESET_ON( ) cpr_rf_reg1__usb_rstn_reg__setf(0)//CLEAR_BIT(XC_CPR->RF_REG1, (1 << 20))
|
||||
#define USB_RESET_OFF( ) cpr_rf_reg1__usb_rstn_reg__setf(1)//SET_BIT(XC_CPR->RF_REG1, (1 << 20))
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Functions
|
||||
-------------------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief usb phy dm operation
|
||||
* @param uint32_t - bit
|
||||
* @retval None
|
||||
*/
|
||||
void USB_Phy_DM_Oprt(uint32_t bit)
|
||||
{
|
||||
cpr_rf_reg5__usb_rwreg__setf(bit << 3);
|
||||
// if(bit == PULL_UP)
|
||||
// SET_BIT(XC_CPR->RF_REG5, (bit << 3));
|
||||
// else if(bit == PULL_DOWN)
|
||||
// CLEAR_BIT(XC_CPR->RF_REG5, (bit << 3));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb phy dp operation
|
||||
* @param uint32_t - bit
|
||||
* @retval None
|
||||
*/
|
||||
void USB_Phy_DP_Oprt(uint32_t bit)
|
||||
{
|
||||
cpr_rf_reg5__usb_rwreg__setf(bit << 2);
|
||||
// if(bit == PULL_UP)
|
||||
// SET_BIT(XC_CPR->RF_REG5, (bit << 2));
|
||||
// else if(bit == PULL_DOWN)
|
||||
// CLEAR_BIT(XC_CPR->RF_REG5, (bit << 2));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb phy enable
|
||||
* @param void
|
||||
* @retval None
|
||||
*/
|
||||
void USB_Phy_Enable( void )
|
||||
{
|
||||
cpr_rf_reg5__usb_rwreg__setf(0 << 4);
|
||||
// CLEAR_BIT(XC_CPR->RF_REG5, (1 << 4));
|
||||
// SET_BIT(XC_CPR->RF_REG5, (1 << 4));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb phy disable
|
||||
* @param void
|
||||
* @retval None
|
||||
*/
|
||||
void USB_Phy_Disable( void )
|
||||
{
|
||||
cpr_rf_reg5__usb_rwreg__setf(1 << 4);
|
||||
// SET_BIT(XC_CPR->RF_REG5, (1 << 4));
|
||||
}
|
||||
|
||||
#define readl(addr) (*(volatile unsigned int *) (addr))
|
||||
#define writel(addr, value) (*(volatile unsigned int *) (addr) = (value))
|
||||
|
||||
/**
|
||||
* @brief 32M OSC multiper bbpll to 96M
|
||||
* @param void
|
||||
* @retval None
|
||||
*/
|
||||
void OSC32M_Multi_BBPLL_96M( void )
|
||||
{
|
||||
#if (XC6XX_5C != 1)
|
||||
if(xc_clock_hfclk_in_get() == CLOCK_HFCLK_IN_32M)
|
||||
{
|
||||
xc_clock_bbpll_common_cfg( );
|
||||
rf_ana27__bbpll_16m_sel__setf(DISABLE);
|
||||
rf_ana27__bbpll_core_96m_en__setf(ENABLE);
|
||||
rf_ana26__bbpll_loopdiv__setf(0x06);
|
||||
rf_ana26__clk_bbpll_en__setf(ENABLE);
|
||||
rf_ana26__clk_bbpll_rstn__setf(ENABLE);
|
||||
rf_ana26__bbpll_en__setf(ENABLE);
|
||||
rf_ana26__bbpll_core_64m_en__setf(ENABLE);
|
||||
|
||||
// /* BT_CLK 时钟控制寄存器 */
|
||||
// XC_CPR->BT_CLK_CTL = (CPR_BT_CLK_CTL_BT_CLK_EN_ENABLE | (CPR_BT_CLK_CTL_BT_CLK_EN_Msk << 16));
|
||||
// /* BT_MODEM_CLK 时钟控制寄存器 */
|
||||
//// XC_CPR->BT_MODEM_CTL = (CPR_BT_MODEM_CLK_CTL_BT_MODEM_CLK_EN_ENABLE |
|
||||
//// (CPR_BT_MODEM_CLK_CTL_BT_MODEM_CLK_EN_Msk << 16));
|
||||
// /* 配置 BT_PCLK_EN 使能 */
|
||||
// XC_CPR->CTLAPBCLKEN_GRCTL |= (CPR_CTLAPBCLKEN_GRCTL_BT_PCLK_EN_ENABLE |
|
||||
// (CPR_CTLAPBCLKEN_GRCTL_BT_PCLK_EN_Msk << CPR_CTLAPBCLKEN_GRCTL_MASK_OFFSET));
|
||||
//
|
||||
// SET_BIT(XC_BT_RF->BT.rx_pm_reg_l, (1 << 14));
|
||||
// XC_CPR_AO->AON_CORERFLDO_EN = 0x1;
|
||||
|
||||
|
||||
// SET_BIT(XC_BT_RF->ana26_reg_l, (0xf << 12));
|
||||
// SET_BIT(XC_BT_RF->ana27_reg_l, 0x02); // ana27 div 2
|
||||
// SET_BIT(XC_BT_RF->ana26_reg_l, 0x06); // ana26 6*32 / 2 = 192M / 2 = 96M
|
||||
}
|
||||
#else
|
||||
uint32_t last_idx = xc_clock_hfclk_in_get()/1000000;
|
||||
// CLEAR_BIT(XC_CPR->RF_REG4, (uint32_t)0x1f);
|
||||
// SET_BIT(XC_CPR->RF_REG4, (uint32_t)0x11);
|
||||
|
||||
// CLEAR_BIT(XC_CPR->RF_REG3, (uint32_t)(0x07 | (0x1f<<8) | (0x3f<<14)));
|
||||
// SET_BIT(XC_CPR->RF_REG3, (uint32_t)((0x1 << 1) | (0x07<<8) | (0x08<<14)));
|
||||
|
||||
uint32_t val = XC_CPR->RF_REG4;
|
||||
XC_CPR->RF_REG4 = (val & 0xFFFFFFE0) | 0x11; // div2
|
||||
|
||||
val = XC_CPR->RF_REG3;
|
||||
//[00-OSC32M],[01-bbpll direct output],[10-bbpll div output],[11-rc16M]
|
||||
XC_CPR->RF_REG3 = (val & (~(uint32_t)(0x07 | (0x1f<<8) | (0x3f<<14)))) |
|
||||
(0x1 << 1) | (0x07<<8) | (0x08<<14);
|
||||
|
||||
m_clock_cb.hfclk_in = CLOCK_HFCLK_IN_96M;
|
||||
|
||||
uint32_t baudrate, uart_clk, div, mul, clk_ctl, adj_div;
|
||||
|
||||
uart_clk = xc_clock_hfclk_in_get();
|
||||
baudrate = XC_CPR->UART0_CLK_CTL;
|
||||
mul = (baudrate >> 16) & 0xFFFF;
|
||||
div = (baudrate & 0xFFFF);
|
||||
|
||||
adj_div = uart_clk / 1000000;
|
||||
clk_ctl = (mul << 16 ) | ( div * adj_div / last_idx);
|
||||
|
||||
XC_CPR->UART0_CLK_CTL = clk_ctl;
|
||||
|
||||
SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk;
|
||||
SysTick_Config(xc_clock_hfclk_in_get() / 100);
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb bbpll close
|
||||
* @param void
|
||||
* @retval None
|
||||
*/
|
||||
void USB_BBPLL_Close( void )
|
||||
{
|
||||
rf_ana26__bbpll_core_64m_en__setf(DISABLE);
|
||||
rf_ana26__bbpll_en__setf(DISABLE);
|
||||
rf_ana26__clk_bbpll_rstn__setf(DISABLE);
|
||||
rf_ana26__clk_bbpll_en__setf(DISABLE);
|
||||
rf_ana26__bbpll_loopdiv__setf(0x00);
|
||||
// CLEAR_BIT(XC_BT_RF->ana26_reg_l, (0xf << 12));
|
||||
// CLEAR_BIT(XC_BT_RF->ana26_reg_l, 0x06);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb pll enable
|
||||
* @param void
|
||||
* @retval None
|
||||
*/
|
||||
void USB_PLL_Enable( void )
|
||||
{
|
||||
OSC32M_Multi_BBPLL_96M( );
|
||||
|
||||
cpr_rf_reg1__usb_mclk_div__setf(1);
|
||||
cpr_rf_reg1__usb_hclk_en__setf(1);
|
||||
cpr_rf_reg1__usb_mclk_en__setf(1);
|
||||
cpr_rf_reg1__usb_utmi_clk_div__setf(1);
|
||||
cpr_rf_reg1__usb_utmi_clk_en__setf(1);
|
||||
|
||||
// WRITE_REG(XC_CPR->RF_REG1, (XC_CPR->RF_REG1 & 0xE0FFCFF0) | 0x11003001); // usb clk enable
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb pll disable
|
||||
* @param void
|
||||
* @retval None
|
||||
*/
|
||||
void USB_PLL_Disable( void )
|
||||
{
|
||||
USB_BBPLL_Close( );
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb phy init
|
||||
* @param void
|
||||
* @retval None
|
||||
*/
|
||||
void USB_Phy_Init( void )
|
||||
{
|
||||
USB_PLL_Enable( );
|
||||
|
||||
USB_RESET_ON( );
|
||||
HAL_Delay(100);//for(int i = 0; i < 0x4550; i++);//HAL_Delay(100);
|
||||
USB_RESET_OFF( );
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb phy deinit
|
||||
* @param void
|
||||
* @retval None
|
||||
*/
|
||||
void USB_Phy_Deinit( void )
|
||||
{
|
||||
cpr_rf_reg1__usb_utmi_clk_en__setf(0);
|
||||
cpr_rf_reg1__usb_utmi_clk_div__setf(0);
|
||||
cpr_rf_reg1__usb_hclk_en__setf(0);
|
||||
cpr_rf_reg1__usb_mclk_en__setf(0);
|
||||
// WRITE_REG(XC_CPR->RF_REG1, (XC_CPR->RF_REG1 & 0xE0FFCFF0) | (~0x00003000)); // usb clk disable
|
||||
USB_Phy_Disable( );
|
||||
NVIC_DisableIRQ(USB_IRQn);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb phy reset
|
||||
* @param void
|
||||
* @retval None
|
||||
*/
|
||||
void USB_Phy_Reset( void )
|
||||
{
|
||||
USB_RESET_ON( );
|
||||
HAL_Delay(150); //for(int i = 0; i < 0x4550; i++);//HAL_Delay(100);
|
||||
USB_RESET_OFF( );
|
||||
HAL_Delay(10);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb current control
|
||||
* @param uint8_t - val
|
||||
* @retval None
|
||||
*/
|
||||
void USB_Current_Ctrl( uint8_t val )
|
||||
{
|
||||
cpr_rf_reg5__usbphy_usb_ibc__setf(val);
|
||||
|
||||
// CLEAR_BIT(XC_CPR->RF_REG5, (3 << 21));
|
||||
|
||||
// SET_BIT(XC_CPR->RF_REG5, (val << 21));
|
||||
}
|
||||
|
||||
/*!
|
||||
* \file xc_hal_usb.c
|
||||
*
|
||||
* \brief Target xinchip hal usb implementation
|
||||
*
|
||||
* \copyright Revised BSD License, see section \ref LICENSE.
|
||||
*
|
||||
* \code
|
||||
*
|
||||
* _ __ _ ________ _
|
||||
* | |/ /(_)___ / ____/ /_ (_)___
|
||||
* | // / __ \/ / / __ \/ / __ \
|
||||
* / |/ / / / / /___/ / / / / /_/ /
|
||||
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
|
||||
* /_/
|
||||
* (C) 2022-2025 XinChip
|
||||
*
|
||||
* \endcode
|
||||
*
|
||||
* \author ( XinChip ) Alex-J
|
||||
*
|
||||
* \author ( XinChip )
|
||||
*/
|
||||
|
||||
/*-----------------------------------------------------------------------------------
|
||||
INCLUDE HEADE FILES
|
||||
------------------------------------------------------------------------------------*/
|
||||
#include "xc_hal_usb.h"
|
||||
#include "xc6xxx.h"
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Macros
|
||||
-------------------------------------------------------------------------------------*/
|
||||
#define USB_RESET_ON( ) cpr_rf_reg1__usb_rstn_reg__setf(0)//CLEAR_BIT(XC_CPR->RF_REG1, (1 << 20))
|
||||
#define USB_RESET_OFF( ) cpr_rf_reg1__usb_rstn_reg__setf(1)//SET_BIT(XC_CPR->RF_REG1, (1 << 20))
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Functions
|
||||
-------------------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief usb phy dm operation
|
||||
* @param uint32_t - bit
|
||||
* @retval None
|
||||
*/
|
||||
void USB_Phy_DM_Oprt(uint32_t bit)
|
||||
{
|
||||
cpr_rf_reg5__usb_rwreg__setf(bit << 3);
|
||||
// if(bit == PULL_UP)
|
||||
// SET_BIT(XC_CPR->RF_REG5, (bit << 3));
|
||||
// else if(bit == PULL_DOWN)
|
||||
// CLEAR_BIT(XC_CPR->RF_REG5, (bit << 3));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb phy dp operation
|
||||
* @param uint32_t - bit
|
||||
* @retval None
|
||||
*/
|
||||
void USB_Phy_DP_Oprt(uint32_t bit)
|
||||
{
|
||||
cpr_rf_reg5__usb_rwreg__setf(bit << 2);
|
||||
// if(bit == PULL_UP)
|
||||
// SET_BIT(XC_CPR->RF_REG5, (bit << 2));
|
||||
// else if(bit == PULL_DOWN)
|
||||
// CLEAR_BIT(XC_CPR->RF_REG5, (bit << 2));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb phy enable
|
||||
* @param void
|
||||
* @retval None
|
||||
*/
|
||||
void USB_Phy_Enable( void )
|
||||
{
|
||||
cpr_rf_reg5__usb_rwreg__setf(0 << 4);
|
||||
// CLEAR_BIT(XC_CPR->RF_REG5, (1 << 4));
|
||||
// SET_BIT(XC_CPR->RF_REG5, (1 << 4));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb phy disable
|
||||
* @param void
|
||||
* @retval None
|
||||
*/
|
||||
void USB_Phy_Disable( void )
|
||||
{
|
||||
cpr_rf_reg5__usb_rwreg__setf(1 << 4);
|
||||
// SET_BIT(XC_CPR->RF_REG5, (1 << 4));
|
||||
}
|
||||
|
||||
#define readl(addr) (*(volatile unsigned int *) (addr))
|
||||
#define writel(addr, value) (*(volatile unsigned int *) (addr) = (value))
|
||||
|
||||
/**
|
||||
* @brief 32M OSC multiper bbpll to 96M
|
||||
* @param void
|
||||
* @retval None
|
||||
*/
|
||||
void OSC32M_Multi_BBPLL_96M( void )
|
||||
{
|
||||
#if (XC6XX_5C != 1)
|
||||
if(xc_clock_hfclk_in_get() == CLOCK_HFCLK_IN_32M)
|
||||
{
|
||||
xc_clock_bbpll_common_cfg( );
|
||||
rf_ana27__bbpll_16m_sel__setf(DISABLE);
|
||||
rf_ana27__bbpll_core_96m_en__setf(ENABLE);
|
||||
rf_ana26__bbpll_loopdiv__setf(0x06);
|
||||
rf_ana26__clk_bbpll_en__setf(ENABLE);
|
||||
rf_ana26__clk_bbpll_rstn__setf(ENABLE);
|
||||
rf_ana26__bbpll_en__setf(ENABLE);
|
||||
rf_ana26__bbpll_core_64m_en__setf(ENABLE);
|
||||
|
||||
// /* BT_CLK 时钟控制寄存器 */
|
||||
// XC_CPR->BT_CLK_CTL = (CPR_BT_CLK_CTL_BT_CLK_EN_ENABLE | (CPR_BT_CLK_CTL_BT_CLK_EN_Msk << 16));
|
||||
// /* BT_MODEM_CLK 时钟控制寄存器 */
|
||||
//// XC_CPR->BT_MODEM_CTL = (CPR_BT_MODEM_CLK_CTL_BT_MODEM_CLK_EN_ENABLE |
|
||||
//// (CPR_BT_MODEM_CLK_CTL_BT_MODEM_CLK_EN_Msk << 16));
|
||||
// /* 配置 BT_PCLK_EN 使能 */
|
||||
// XC_CPR->CTLAPBCLKEN_GRCTL |= (CPR_CTLAPBCLKEN_GRCTL_BT_PCLK_EN_ENABLE |
|
||||
// (CPR_CTLAPBCLKEN_GRCTL_BT_PCLK_EN_Msk << CPR_CTLAPBCLKEN_GRCTL_MASK_OFFSET));
|
||||
//
|
||||
// SET_BIT(XC_BT_RF->BT.rx_pm_reg_l, (1 << 14));
|
||||
// XC_CPR_AO->AON_CORERFLDO_EN = 0x1;
|
||||
|
||||
|
||||
// SET_BIT(XC_BT_RF->ana26_reg_l, (0xf << 12));
|
||||
// SET_BIT(XC_BT_RF->ana27_reg_l, 0x02); // ana27 div 2
|
||||
// SET_BIT(XC_BT_RF->ana26_reg_l, 0x06); // ana26 6*32 / 2 = 192M / 2 = 96M
|
||||
}
|
||||
#else
|
||||
uint32_t last_idx = xc_clock_hfclk_in_get()/1000000;
|
||||
// CLEAR_BIT(XC_CPR->RF_REG4, (uint32_t)0x1f);
|
||||
// SET_BIT(XC_CPR->RF_REG4, (uint32_t)0x11);
|
||||
|
||||
// CLEAR_BIT(XC_CPR->RF_REG3, (uint32_t)(0x07 | (0x1f<<8) | (0x3f<<14)));
|
||||
// SET_BIT(XC_CPR->RF_REG3, (uint32_t)((0x1 << 1) | (0x07<<8) | (0x08<<14)));
|
||||
|
||||
uint32_t val = XC_CPR->RF_REG4;
|
||||
XC_CPR->RF_REG4 = (val & 0xFFFFFFE0) | 0x11; // div2
|
||||
|
||||
val = XC_CPR->RF_REG3;
|
||||
//[00-OSC32M],[01-bbpll direct output],[10-bbpll div output],[11-rc16M]
|
||||
XC_CPR->RF_REG3 = (val & (~(uint32_t)(0x07 | (0x1f<<8) | (0x3f<<14)))) |
|
||||
(0x1 << 1) | (0x07<<8) | (0x08<<14);
|
||||
|
||||
m_clock_cb.hfclk_in = CLOCK_HFCLK_IN_96M;
|
||||
|
||||
uint32_t baudrate, uart_clk, div, mul, clk_ctl, adj_div;
|
||||
|
||||
uart_clk = xc_clock_hfclk_in_get();
|
||||
baudrate = XC_CPR->UART0_CLK_CTL;
|
||||
mul = (baudrate >> 16) & 0xFFFF;
|
||||
div = (baudrate & 0xFFFF);
|
||||
|
||||
adj_div = uart_clk / 1000000;
|
||||
clk_ctl = (mul << 16 ) | ( div * adj_div / last_idx);
|
||||
|
||||
XC_CPR->UART0_CLK_CTL = clk_ctl;
|
||||
|
||||
SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk;
|
||||
SysTick_Config(xc_clock_hfclk_in_get() / 100);
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb bbpll close
|
||||
* @param void
|
||||
* @retval None
|
||||
*/
|
||||
void USB_BBPLL_Close( void )
|
||||
{
|
||||
rf_ana26__bbpll_core_64m_en__setf(DISABLE);
|
||||
rf_ana26__bbpll_en__setf(DISABLE);
|
||||
rf_ana26__clk_bbpll_rstn__setf(DISABLE);
|
||||
rf_ana26__clk_bbpll_en__setf(DISABLE);
|
||||
rf_ana26__bbpll_loopdiv__setf(0x00);
|
||||
// CLEAR_BIT(XC_BT_RF->ana26_reg_l, (0xf << 12));
|
||||
// CLEAR_BIT(XC_BT_RF->ana26_reg_l, 0x06);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb pll enable
|
||||
* @param void
|
||||
* @retval None
|
||||
*/
|
||||
void USB_PLL_Enable( void )
|
||||
{
|
||||
clock_cb.hfclk_src = CLOCK_HFCLK_SRC_XTAL;
|
||||
clock_cb.hfclk_in = CLOCK_HFCLK_IN_48M;
|
||||
|
||||
extern void xc_clock_set_osc32m_bbpll_48m(CLOCK_InitCfg_t *cb);
|
||||
xc_clock_set_osc32m_bbpll_48m(&clock_cb);
|
||||
|
||||
clock_cb.hfclk_in = CLOCK_HFCLK_IN_48M;
|
||||
clock_cb.systick_unit = SYSTICK_UNIT_IN_48M;
|
||||
cpr_rf_reg1__usb_mclk_div__setf(1);
|
||||
cpr_rf_reg1__usb_hclk_en__setf(1);
|
||||
cpr_rf_reg1__usb_mclk_en__setf(1);
|
||||
cpr_rf_reg1__usb_utmi_clk_div__setf(1);
|
||||
cpr_rf_reg1__usb_utmi_clk_en__setf(1);
|
||||
|
||||
// WRITE_REG(XC_CPR->RF_REG1, (XC_CPR->RF_REG1 & 0xE0FFCFF0) | 0x11003001); // usb clk enable
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb pll disable
|
||||
* @param void
|
||||
* @retval None
|
||||
*/
|
||||
void USB_PLL_Disable( void )
|
||||
{
|
||||
USB_BBPLL_Close( );
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb phy init
|
||||
* @param void
|
||||
* @retval None
|
||||
*/
|
||||
void USB_Phy_Init( void )
|
||||
{
|
||||
USB_PLL_Enable( );
|
||||
|
||||
USB_RESET_ON( );
|
||||
HAL_Delay(100);//for(int i = 0; i < 0x4550; i++);//HAL_Delay(100);
|
||||
USB_RESET_OFF( );
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb phy deinit
|
||||
* @param void
|
||||
* @retval None
|
||||
*/
|
||||
void USB_Phy_Deinit( void )
|
||||
{
|
||||
cpr_rf_reg1__usb_utmi_clk_en__setf(0);
|
||||
cpr_rf_reg1__usb_utmi_clk_div__setf(0);
|
||||
cpr_rf_reg1__usb_hclk_en__setf(0);
|
||||
cpr_rf_reg1__usb_mclk_en__setf(0);
|
||||
// WRITE_REG(XC_CPR->RF_REG1, (XC_CPR->RF_REG1 & 0xE0FFCFF0) | (~0x00003000)); // usb clk disable
|
||||
USB_Phy_Disable( );
|
||||
NVIC_DisableIRQ(USB_IRQn);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb phy reset
|
||||
* @param void
|
||||
* @retval None
|
||||
*/
|
||||
void USB_Phy_Reset( void )
|
||||
{
|
||||
USB_RESET_ON( );
|
||||
HAL_Delay(150); //for(int i = 0; i < 0x4550; i++);//HAL_Delay(100);
|
||||
USB_RESET_OFF( );
|
||||
HAL_Delay(10);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief usb current control
|
||||
* @param uint8_t - val
|
||||
* @retval None
|
||||
*/
|
||||
void USB_Current_Ctrl( uint8_t val )
|
||||
{
|
||||
cpr_rf_reg5__usbphy_usb_ibc__setf(val);
|
||||
|
||||
// CLEAR_BIT(XC_CPR->RF_REG5, (3 << 21));
|
||||
|
||||
// SET_BIT(XC_CPR->RF_REG5, (val << 21));
|
||||
}
|
||||
|
||||
|
||||
@@ -1,68 +1,68 @@
|
||||
/*!
|
||||
* \file xc_hal_usb.h
|
||||
*
|
||||
* \brief The header of xc_hal_usb.c
|
||||
*
|
||||
* \copyright Revised BSD License, see section \ref LICENSE.
|
||||
*
|
||||
* \code
|
||||
*
|
||||
* _ __ _ ________ _
|
||||
* | |/ /(_)___ / ____/ /_ (_)___
|
||||
* | // / __ \/ / / __ \/ / __ \
|
||||
* / |/ / / / / /___/ / / / / /_/ /
|
||||
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
|
||||
* /_/
|
||||
* (C) 2022-2025 XinChip
|
||||
*
|
||||
* \endcode
|
||||
*
|
||||
* \author ( XinChip ) Alex-J
|
||||
*
|
||||
* \author ( XinChip )
|
||||
*/
|
||||
|
||||
#ifndef __XC_HAL_USB_H_
|
||||
#define __XC_HAL_USB_H_
|
||||
|
||||
|
||||
/*-----------------------------------------------------------------------------------
|
||||
INCLUDE HEADE FILES
|
||||
------------------------------------------------------------------------------------*/
|
||||
#include <stdint.h>
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Macros
|
||||
-------------------------------------------------------------------------------------*/
|
||||
//#define SET_REG_BIT(REG, BIT) ((REG) |= (BIT))
|
||||
|
||||
//#define CLEAR_REG_BIT(REG, BIT) ((REG) &= ~(BIT))
|
||||
|
||||
//#define READ_BIT(REG, BIT) ((REG) & (BIT))
|
||||
|
||||
//#define CLEAR_REG(REG) ((REG) = (0x0))
|
||||
|
||||
//#define WRITE_REG(REG, VAL) ((REG) = (VAL))
|
||||
|
||||
//#define READ_REG(REG) ((REG))
|
||||
|
||||
#define PULL_UP 1U
|
||||
#define PULL_DOWN 0U
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Exported Functions
|
||||
------------------------------------------- -----------------------------------------*/
|
||||
void USB_Phy_DM_Oprt(uint32_t bit);
|
||||
void USB_Phy_DP_Oprt(uint32_t bit);
|
||||
void USB_Phy_Enable( void );
|
||||
void USB_Phy_Disable( void );
|
||||
void USB_PLL_Enable( void );
|
||||
void USB_PLL_Disable( void );
|
||||
void USB_Phy_Init( void );
|
||||
void USB_Phy_Deinit( void );
|
||||
void USB_Phy_Reset( void );
|
||||
void USB_Current_Ctrl( uint8_t val );
|
||||
|
||||
|
||||
#endif /* __XC_HAL_USB_H_ */
|
||||
|
||||
/*!
|
||||
* \file xc_hal_usb.h
|
||||
*
|
||||
* \brief The header of xc_hal_usb.c
|
||||
*
|
||||
* \copyright Revised BSD License, see section \ref LICENSE.
|
||||
*
|
||||
* \code
|
||||
*
|
||||
* _ __ _ ________ _
|
||||
* | |/ /(_)___ / ____/ /_ (_)___
|
||||
* | // / __ \/ / / __ \/ / __ \
|
||||
* / |/ / / / / /___/ / / / / /_/ /
|
||||
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
|
||||
* /_/
|
||||
* (C) 2022-2025 XinChip
|
||||
*
|
||||
* \endcode
|
||||
*
|
||||
* \author ( XinChip ) Alex-J
|
||||
*
|
||||
* \author ( XinChip )
|
||||
*/
|
||||
|
||||
#ifndef __XC_HAL_USB_H_
|
||||
#define __XC_HAL_USB_H_
|
||||
|
||||
|
||||
/*-----------------------------------------------------------------------------------
|
||||
INCLUDE HEADE FILES
|
||||
------------------------------------------------------------------------------------*/
|
||||
#include <stdint.h>
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Macros
|
||||
-------------------------------------------------------------------------------------*/
|
||||
//#define SET_REG_BIT(REG, BIT) ((REG) |= (BIT))
|
||||
|
||||
//#define CLEAR_REG_BIT(REG, BIT) ((REG) &= ~(BIT))
|
||||
|
||||
//#define READ_BIT(REG, BIT) ((REG) & (BIT))
|
||||
|
||||
//#define CLEAR_REG(REG) ((REG) = (0x0))
|
||||
|
||||
//#define WRITE_REG(REG, VAL) ((REG) = (VAL))
|
||||
|
||||
//#define READ_REG(REG) ((REG))
|
||||
|
||||
#define PULL_UP 1U
|
||||
#define PULL_DOWN 0U
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Exported Functions
|
||||
------------------------------------------- -----------------------------------------*/
|
||||
void USB_Phy_DM_Oprt(uint32_t bit);
|
||||
void USB_Phy_DP_Oprt(uint32_t bit);
|
||||
void USB_Phy_Enable( void );
|
||||
void USB_Phy_Disable( void );
|
||||
void USB_PLL_Enable( void );
|
||||
void USB_PLL_Disable( void );
|
||||
void USB_Phy_Init( void );
|
||||
void USB_Phy_Deinit( void );
|
||||
void USB_Phy_Reset( void );
|
||||
void USB_Current_Ctrl( uint8_t val );
|
||||
|
||||
|
||||
#endif /* __XC_HAL_USB_H_ */
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user