Fix Network module bug in ch32v208rbt6
Now ch32v208rbt6 can use chnet protocol. I add a small test in it. As follows: 1. Just connect the board with your computer with net line. 2. config the computer TCP/IPv4: a. set IP address as 192.168.1.100 b. set mask as 255.255.255.0 c. set gateway as 192.168.1.1 d. custom setup should be modified in wch_tcp_test.c 3. input the command "test_tcp_client" in your console. Fix bug as follows: 1. remove delay in method ETH_Init, because it doesn't restore the state of systick, causing the failure of systick interupt. 2. add ETH_IRQHandler and TIM2_IRQHandler for chnet protocol.
This commit is contained in:
parent
0961379b88
commit
ab8a00ca93
|
@ -11,10 +11,15 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
#include "ch32v20x_it.h"
|
#include "ch32v20x_it.h"
|
||||||
#include "board.h"
|
#include "board.h"
|
||||||
|
#include "ch32v20x_exti.h"
|
||||||
|
#include "ch32v20x_tim.h"
|
||||||
|
#include "eth_driver.h"
|
||||||
#include <xs_isr.h>
|
#include <xs_isr.h>
|
||||||
|
|
||||||
void NMI_Handler(void) __attribute__((interrupt()));
|
void NMI_Handler(void) __attribute__((interrupt()));
|
||||||
void HardFault_Handler(void) __attribute__((interrupt()));
|
void HardFault_Handler(void) __attribute__((interrupt()));
|
||||||
|
void ETH_IRQHandler(void) __attribute__((interrupt()));
|
||||||
|
void TIM2_IRQHandler(void) __attribute__((interrupt()));
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
* @fn NMI_Handler
|
* @fn NMI_Handler
|
||||||
|
@ -55,4 +60,43 @@ void HardFault_Handler(void)
|
||||||
FREE_INT_SP();
|
FREE_INT_SP();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* @fn ETH_IRQHandler
|
||||||
|
*
|
||||||
|
* @brief This function handles ETH exception.
|
||||||
|
*
|
||||||
|
* @return none
|
||||||
|
*/
|
||||||
|
void ETH_IRQHandler(void)
|
||||||
|
{
|
||||||
|
WCHNET_ETHIsr();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* @fn TIM2_IRQHandler
|
||||||
|
*
|
||||||
|
* @brief This function handles TIM2 exception.
|
||||||
|
*
|
||||||
|
* @return none
|
||||||
|
*/
|
||||||
|
void TIM2_IRQHandler(void)
|
||||||
|
{
|
||||||
|
// GET_INT_SP();
|
||||||
|
// /* enter interrupt */
|
||||||
|
// x_base level;
|
||||||
|
// level = DisableLocalInterrupt();
|
||||||
|
// isrManager.done->incCounter();
|
||||||
|
// EnableLocalInterrupt(level);
|
||||||
|
// WCHNET_TimeIsr(WCHNETTIMERPERIOD);
|
||||||
|
// TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
|
||||||
|
// /* leave interrupt */
|
||||||
|
// level = DisableLocalInterrupt();
|
||||||
|
// isrManager.done->decCounter();
|
||||||
|
// EnableLocalInterrupt(level);
|
||||||
|
// FREE_INT_SP();
|
||||||
|
// KPrintf("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
|
||||||
|
WCHNET_TimeIsr(WCHNETTIMERPERIOD);
|
||||||
|
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ extern uint32_t SystemCoreClock;
|
||||||
static uint32_t _SysTick_Config(uint32_t ticks)
|
static uint32_t _SysTick_Config(uint32_t ticks)
|
||||||
{
|
{
|
||||||
// SystemCoreClockUpdate();
|
// SystemCoreClockUpdate();
|
||||||
NVIC_SetPriority(SysTicK_IRQn, 1);
|
NVIC_SetPriority(SysTicK_IRQn, 0x01);
|
||||||
NVIC_SetPriority(Software_IRQn, 0xf0);
|
NVIC_SetPriority(Software_IRQn, 0xf0);
|
||||||
NVIC_EnableIRQ(SysTicK_IRQn);
|
NVIC_EnableIRQ(SysTicK_IRQn);
|
||||||
NVIC_EnableIRQ(Software_IRQn);
|
NVIC_EnableIRQ(Software_IRQn);
|
||||||
|
@ -60,6 +60,7 @@ static uint32_t _SysTick_Config(uint32_t ticks)
|
||||||
*/
|
*/
|
||||||
void InitBoardHardware()
|
void InitBoardHardware()
|
||||||
{
|
{
|
||||||
|
Delay_Init();
|
||||||
USART_Printf_Init(115200);
|
USART_Printf_Init(115200);
|
||||||
/* System Tick Configuration */
|
/* System Tick Configuration */
|
||||||
_SysTick_Config(SystemCoreClock / TICK_PER_SECOND);
|
_SysTick_Config(SystemCoreClock / TICK_PER_SECOND);
|
||||||
|
@ -68,19 +69,19 @@ void InitBoardHardware()
|
||||||
InitHwUart();
|
InitHwUart();
|
||||||
InstallConsole("uart1", SERIAL_DRV_NAME_1, SERIAL_1_DEVICE_NAME_0);
|
InstallConsole("uart1", SERIAL_DRV_NAME_1, SERIAL_1_DEVICE_NAME_0);
|
||||||
#ifdef BSP_USING_ETH
|
#ifdef BSP_USING_ETH
|
||||||
// InitHwEth();
|
InitHwEth();
|
||||||
#endif
|
#endif
|
||||||
KPrintf("consle init completed.\n");
|
KPrintf("consle init completed.\n");
|
||||||
KPrintf("board initialization......\n");
|
KPrintf("board initialization......\n");
|
||||||
// KPrintf("memory address range: [0x%08x - 0x%08x], size: %d\n", (x_ubase) MEMORY_START_ADDRESS, (x_ubase) MEMORY_END_ADDRESS, gd32vf103_SRAM_SIZE);
|
// KPrintf("memory address range: [0x%08x - 0x%08x], size: %d\n", (x_ubase) MEMORY_START_ADDRESS, (x_ubase) MEMORY_END_ADDRESS, gd32vf103_SRAM_SIZE);
|
||||||
KPrintf("memory address range: [0x%08x - 0x%08x] SRAM_SIZE: %d, ssize: %d\n", (x_ubase) MEMORY_START_ADDRESS, (x_ubase) MEMORY_END_ADDRESS, SRAM_SIZE, __stack_size);
|
KPrintf("memory address range: [0x%08x - 0x%08x] SRAM_SIZE: %d, ssize: %d\n", (x_ubase) MEMORY_START_ADDRESS, (x_ubase) MEMORY_END_ADDRESS, SRAM_SIZE, __stack_size);
|
||||||
/* initialize memory system */
|
/* initialize memory system */
|
||||||
x_ubase dynamic_buddy_start = ALIGN_MEN_UP((x_ubase)MEMORY_START_ADDRESS, MM_PAGE_SIZE);
|
// x_ubase dynamic_buddy_start = ALIGN_MEN_UP((x_ubase)MEMORY_START_ADDRESS, MM_PAGE_SIZE);
|
||||||
x_ubase dynamic_buddy_end = ALIGN_MEN_DOWN((x_ubase)MEMORY_END_ADDRESS, MM_PAGE_SIZE);
|
// x_ubase dynamic_buddy_end = ALIGN_MEN_DOWN((x_ubase)MEMORY_END_ADDRESS, MM_PAGE_SIZE);
|
||||||
KPrintf("dynamic buddy address range: [0x%08x - 0x%08x]\n", dynamic_buddy_start, dynamic_buddy_end);
|
// KPrintf("dynamic buddy address range: [0x%08x - 0x%08x]\n", dynamic_buddy_start, dynamic_buddy_end);
|
||||||
// memory address range: [0x20001440 - 0xcb0843e0]
|
// memory address range: [0x20001440 - 0xcb0843e0]
|
||||||
// dynamic buddy address range: [0x20002000 - 0xcb084000]
|
// dynamic buddy address range: [0x20002000 - 0xcb084000]
|
||||||
ShowMemory();
|
// ShowMemory();
|
||||||
KPrintf("board init done.\n");
|
KPrintf("board init done.\n");
|
||||||
KPrintf("start okernel...\n");
|
KPrintf("start okernel...\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -240,13 +240,13 @@ uint8_t InitHwEth()
|
||||||
KPrintf("version error.\n");
|
KPrintf("version error.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// WCHNET_GetMacAddr(MACAddr); // get the chip MAC address
|
WCHNET_GetMacAddr(MACAddr); // get the chip MAC address
|
||||||
KPrintf("mac addr:");
|
KPrintf("mac addr:");
|
||||||
for (i = 0; i < 6; i++)
|
for (i = 0; i < 6; i++)
|
||||||
KPrintf("%x ", MACAddr[i]);
|
KPrintf("%x ", MACAddr[i]);
|
||||||
KPrintf("\n");
|
KPrintf("\n");
|
||||||
|
|
||||||
// TIM2_Init();
|
TIM2_Init();
|
||||||
|
|
||||||
i = ETH_LibInit(IPAddr, GWIPAddr, IPMask, MACAddr); // Ethernet library initialize
|
i = ETH_LibInit(IPAddr, GWIPAddr, IPMask, MACAddr); // Ethernet library initialize
|
||||||
mStopIfError(i);
|
mStopIfError(i);
|
||||||
|
@ -263,7 +263,7 @@ uint8_t InitHwEth()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// memset(socket, 0xff, WCHNET_MAX_SOCKET_NUM);
|
memset(socket, 0xff, WCHNET_MAX_SOCKET_NUM);
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
|
@ -702,7 +702,7 @@ void WCHNET_ETHIsr( void )
|
||||||
void ETH_Init( uint8_t *macAddr )
|
void ETH_Init( uint8_t *macAddr )
|
||||||
{
|
{
|
||||||
ETH_LedConfiguration( );
|
ETH_LedConfiguration( );
|
||||||
Delay_Ms(100);
|
// Delay_Ms(100); // there is a bug: the Systick register didn't restore original state, causing systick interrupt failing.
|
||||||
ETH_Configuration( macAddr );
|
ETH_Configuration( macAddr );
|
||||||
ETH_DMATxDescChainInit(DMATxDscrTab, MACTxBuf, ETH_TXBUFNB);
|
ETH_DMATxDescChainInit(DMATxDscrTab, MACTxBuf, ETH_TXBUFNB);
|
||||||
ETH_DMARxDescChainInit(DMARxDscrTab, MACRxBuf, ETH_RXBUFNB);
|
ETH_DMARxDescChainInit(DMARxDscrTab, MACRxBuf, ETH_RXBUFNB);
|
||||||
|
|
Loading…
Reference in New Issue