Added ENET_IRQHandler

Made minor modifications
This commit is contained in:
Alexei 2023-02-13 00:44:19 +07:00
parent d828d31f23
commit 14157aaf99
5 changed files with 116 additions and 101 deletions

View File

@ -43,7 +43,16 @@
#define ipconfigUSE_DHCP 1
#define ipconfigUSE_DHCP_HOOK 1
#define ipconfigUSE_DNS_CACHE 1
#define ipconfigMAC_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY )
//#define ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES 1
//#define ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM 1
//#define ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM 1
//#define ipconfigZERO_COPY_RX_DRIVER 1
//#define ipconfigZERO_COPY_TX_DRIVER 1
#define ipconfigUSE_LINKED_RX_MESSAGES 1
//#define ipconfigUDP_MAX_RX_PACKETS 10
#define ipconfigSUPPORT_SIGNALS 1
#ifdef DEBUG
#define ipconfigHAS_DEBUG_PRINTF 1

View File

@ -82,6 +82,9 @@
//#ifdef RTE_Drivers_PHY_DP83848C /* Driver PHY DP83848C */
//#endif
#ifdef DEBUG
#define BKPT __asm volatile("BKPT #0\n") ;
#endif
static void receiveHandlerTask( void *pvParameters );
static TaskHandle_t receiveHandler = NULL;
@ -95,6 +98,24 @@ static ARM_ETH_MAC_CAPABILITIES capabilities;
extern ARM_DRIVER_ETH_PHY ARM_Driver_ETH_PHY_(0);
#define Driver_ETH_PHY0 ARM_Driver_ETH_PHY_(0)
/**
\fn void ENET_IRQHandler(void)
\brief Ethernet IRQ Handler
*/
void ENET_IRQHandler(void)
{
portBASE_TYPE pxHigherPriorityTaskWoken = pdFALSE;
if (SET == enet_interrupt_flag_get(ENET_DMA_INT_FLAG_RS))
{
enet_interrupt_flag_clear(ENET_DMA_INT_FLAG_RS_CLR);
vTaskNotifyGiveFromISR(receiveHandler, &pxHigherPriorityTaskWoken );
}
if( pxHigherPriorityTaskWoken == pdTRUE)
{
taskYIELD();
}
}
/**
\fn ARM_DRIVER_VERSION ARM_ETH_MAC_GetVersion (void)
\brief Get driver version.
@ -102,7 +123,7 @@ extern ARM_DRIVER_ETH_PHY ARM_Driver_ETH_PHY_(0);
*/
ARM_DRIVER_VERSION ARM_ETH_MAC_GetVersion (void)
{
ARM_DRIVER_VERSION eth_mac_driver_version = {1,1};
ARM_DRIVER_VERSION eth_mac_driver_version = {1,2};
return eth_mac_driver_version;
}
@ -145,15 +166,17 @@ int32_t ARM_ETH_MAC_Initialize (ARM_ETH_MAC_SignalEvent_t cb_event)
{
ErrStatus xResult = ARM_DRIVER_ERROR;
(void)cb_event;
if (SUCCESS == enet_init(ENET_AUTO_NEGOTIATION, ENET_AUTOCHECKSUM_DROP_FAILFRAMES, ENET_RECEIVEALL))
xResult = ARM_DRIVER_OK;
//enet_ptp_start(int32_t updatemethod, uint32_t init_sec, uint32_t init_subsec, uint32_t carry_cfg, uint32_t accuracy_cfg)
enet_interrupt_enable( ENET_DMA_INT_RIE );
/* enet_interrupt_enable( ENET_DMA_INT_TIE );
enet_interrupt_enable( ENET_DMA_INT_TBUIE );
enet_interrupt_enable( ENET_DMA_INT_ERIE );*/
enet_interrupt_enable( ENET_DMA_INT_NIE );
return xResult;
//enet_init(ENET_AUTO_NEGOTIATION, ENET_AUTOCHECKSUM_DROP_FAILFRAMES, ENET_RECEIVEALL);
//enet_ptp_start(int32_t updatemethod, uint32_t init_sec, uint32_t init_subsec, uint32_t carry_cfg, uint32_t accuracy_cfg)
//return pdTRUE;
}
/**
@ -220,10 +243,9 @@ int32_t ARM_ETH_MAC_SetMacAddress (const ARM_ETH_MAC_ADDR *ptr_addr)
*/
int32_t ARM_ETH_MAC_SetAddressFilter (const ARM_ETH_MAC_ADDR *ptr_addr, uint32_t num_addr)
{
#ifdef DEBUG
printf("ARM_ETH_MAC_SetAddressFilter\n");
__asm volatile("BKPT #0\n") ;
#endif
FreeRTOS_debug_printf(("ARM_ETH_MAC_SetAddressFilter\n"));
enet_address_filter_config(ENET_MAC_ADDRESS0, ENET_ADDRESS_MASK_BYTE0, ENET_ADDRESS_FILTER_SA);
enet_address_filter_config(ENET_MAC_ADDRESS0, ENET_ADDRESS_MASK_BYTE1, ENET_ADDRESS_FILTER_SA);
enet_address_filter_config(ENET_MAC_ADDRESS0, ENET_ADDRESS_MASK_BYTE2, ENET_ADDRESS_FILTER_SA);
@ -243,10 +265,7 @@ int32_t ARM_ETH_MAC_SetAddressFilter (const ARM_ETH_MAC_ADDR *ptr_addr, uint32_t
*/
int32_t ARM_ETH_MAC_SendFrame (const uint8_t *frame, uint32_t len, uint32_t flags)
{
#ifdef DEBUG
printf("ARM_ETH_MAC_SendFrame\n");
// __asm volatile("BKPT #0\n") ;
#endif
FreeRTOS_debug_printf(("ARM_ETH_MAC_SendFrame\n"));
if (frame != NULL & len > 0)
{
if (SUCCESS == enet_frame_transmit((uint8_t*)frame, len))
@ -268,10 +287,8 @@ int32_t ARM_ETH_MAC_SendFrame (const uint8_t *frame, uint32_t len, uint32_t flag
*/
int32_t ARM_ETH_MAC_ReadFrame (uint8_t *frame, uint32_t len)
{
#ifdef DEBUG
printf("ARM_ETH_MAC_ReadFrame\n");
// __asm volatile("BKPT #0\n") ;
#endif
FreeRTOS_debug_printf(("ARM_ETH_MAC_ReadFrame\n"));
if (frame != NULL & len > 0)
{
if (SUCCESS == enet_frame_receive(frame, len))
@ -300,10 +317,8 @@ uint32_t ARM_ETH_MAC_GetRxFrameSize (void)
*/
int32_t ARM_ETH_MAC_GetRxFrameTime (ARM_ETH_MAC_TIME *time)
{
#ifdef DEBUG
printf("ARM_ETH_MAC_GetRxFrameTime\n");
// __asm volatile("BKPT #0\n") ;
#endif
FreeRTOS_debug_printf(("ARM_ETH_MAC_GetRxFrameTime\n"));
//if ENET_RXTX_TIMESTAMP bit set in ENET_PTP_TSCTL register (enet_ptp_start(int32_t updatemethod, uint32_t init_sec, uint32_t init_subsec, uint32_t carry_cfg, uint32_t accuracy_cfg);)
enet_ptp_systime_struct systime_struct;
enet_ptp_system_time_get(&systime_struct);
@ -320,10 +335,8 @@ int32_t ARM_ETH_MAC_GetRxFrameTime (ARM_ETH_MAC_TIME *time)
*/
int32_t ARM_ETH_MAC_GetTxFrameTime (ARM_ETH_MAC_TIME *time)
{
#ifdef DEBUG
printf("ARM_ETH_MAC_GetTxFrameTime\n");
// __asm volatile("BKPT #0\n") ;
#endif
FreeRTOS_debug_printf(("ARM_ETH_MAC_GetTxFrameTime\n"));
//if ENET_RXTX_TIMESTAMP bit set in ENET_PTP_TSCTL register (enet_ptp_timestamp_function_config(ENET_PTP_SYSTIME_INIT);)
enet_ptp_systime_struct systime_struct;
enet_ptp_system_time_get(&systime_struct);
@ -341,10 +354,8 @@ int32_t ARM_ETH_MAC_GetTxFrameTime (ARM_ETH_MAC_TIME *time)
*/
int32_t ARM_ETH_MAC_Control (uint32_t control, uint32_t arg)
{
#ifdef DEBUG
printf("ARM_ETH_MAC_Control\n");
// __asm volatile("BKPT #0\n") ;
#endif
FreeRTOS_debug_printf(("ARM_ETH_MAC_Control\n"));
if((control >= 0) & (arg >= 0))
{
if(SUCCESS == enet_phy_write_read(ENET_PHY_WRITE, PHY_ADDRESS, control, (uint16_t*)&arg))
@ -364,10 +375,8 @@ int32_t ARM_ETH_MAC_Control (uint32_t control, uint32_t arg)
*/
int32_t ARM_ETH_MAC_ControlTimer (uint32_t control, ARM_ETH_MAC_TIME *time)
{
#ifdef DEBUG
printf("ARM_ETH_MAC_ControlTimer\n");
// __asm volatile("BKPT #0\n") ;
#endif
FreeRTOS_debug_printf(("ARM_ETH_MAC_ControlTimer\n"));
if((control >= 0) & (time != NULL))
{
if(SUCCESS == enet_phy_write_read(ENET_PHY_WRITE, PHY_ADDRESS, control, (uint16_t*)time))
@ -394,15 +403,11 @@ int32_t ARM_ETH_MAC_PHY_Read (uint8_t phy_addr, uint8_t reg_addr, uint16_t *data
return ARM_DRIVER_OK;
else
{
#ifdef DEBUG
printf("ARM_ETH_MAC_PHY_Read_ERROR\n");
#endif
FreeRTOS_debug_printf(("ARM_ETH_MAC_PHY_Read_ERROR\n"));
return ARM_DRIVER_ERROR;
}
}else
#ifdef DEBUG
printf("ARM_ETH_MAC_PHY_Read_ERROR_PARAMETER\n");
#endif
FreeRTOS_debug_printf(("ARM_ETH_MAC_PHY_Read_ERROR_PARAMETER\n"));
return ARM_DRIVER_ERROR_PARAMETER;
}
@ -422,15 +427,11 @@ int32_t ARM_ETH_MAC_PHY_Write (uint8_t phy_addr, uint8_t reg_addr, uint16_t data
return ARM_DRIVER_OK;
else
{
#ifdef DEBUG
printf("ARM_ETH_MAC_PHY_Write_ERROR\n");
#endif
FreeRTOS_debug_printf(("ARM_ETH_MAC_PHY_Write_ERROR\n"));
return ARM_DRIVER_ERROR;
}
}else
#ifdef DEBUG
printf("ARM_ETH_MAC_PHY_Write_ERROR_PARAMETER\n");
#endif
FreeRTOS_debug_printf(("ARM_ETH_MAC_PHY_Write_ERROR_PARAMETER\n"));
return ARM_DRIVER_ERROR_PARAMETER;
}
@ -441,6 +442,27 @@ int32_t ARM_ETH_MAC_PHY_Write (uint8_t phy_addr, uint8_t reg_addr, uint16_t data
\return none
*/
/*callback function for ARM_ETH_MAC_SignalEvent_t*/
void ethernet_mac_notify (uint32_t event) {
switch (event) {
case ARM_ETH_MAC_EVENT_RX_FRAME:
/*received frame,call receive fuction*/
//led1_toggle();
xTaskNotifyGive( receiveHandler );
break;
case ARM_ETH_MAC_EVENT_TX_FRAME:
/* deliver finished */
break;
case ARM_ETH_MAC_EVENT_WAKEUP:
break;
case ARM_ETH_MAC_EVENT_TIMER_ALARM:
/* do nothing */
break;
}
}
ARM_DRIVER_ETH_MAC Driver_ETH_MAC0 = {ARM_ETH_MAC_GetVersion,
ARM_ETH_MAC_GetCapabilities,
@ -464,27 +486,7 @@ ARM_DRIVER_ETH_MAC Driver_ETH_MAC0 = {ARM_ETH_MAC_GetVersion,
/*callback function for ARM_ETH_MAC_SignalEvent_t*/
void ethernet_mac_notify (uint32_t event) {
switch (event) {
case ARM_ETH_MAC_EVENT_RX_FRAME:
/*received frame,call receive fuction*/
//led1_toggle();
xTaskNotifyGive( receiveHandler );
break;
case ARM_ETH_MAC_EVENT_TX_FRAME:
/* deliver finished */
break;
case ARM_ETH_MAC_EVENT_WAKEUP:
break;
case ARM_ETH_MAC_EVENT_TIMER_ALARM:
/* do nothing */
break;
}
}
/* init the mac */
int32_t macIntialise(void)
@ -587,9 +589,8 @@ BaseType_t xNetworkInterfaceInitialise( void )
/* send tcp/ip buffer to mac buffer */
static void sendData(uint8_t *pucEthernetBuffer,size_t xDataLength){
if(mac->SendFrame(pucEthernetBuffer,xDataLength,ARM_ETH_MAC_TX_FRAME_EVENT|ARM_ETH_MAC_TX_FRAME_TIMESTAMP) == ARM_DRIVER_OK){
//success
}
else{
}else{
//error
}
}

View File

@ -50,7 +50,7 @@ extern uint32_t SystemCoreClock;
/* Constants that describe the hardware and memory usage. */
#define configCPU_CLOCK_HZ (SystemCoreClock)
#define configTICK_RATE_HZ ((TickType_t)1000)
#define configTOTAL_HEAP_SIZE ((size_t)4*8192)
#define configTOTAL_HEAP_SIZE ((size_t)6*8192)
#define configMINIMAL_STACK_SIZE ((uint16_t)256)
#define configSUPPORT_DYNAMIC_ALLOCATION 1
#define configSUPPORT_STATIC_ALLOCATION 0

View File

@ -125,7 +125,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)</Name>
<Name>(1010=1360,271,1810,828,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
@ -157,7 +157,7 @@
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>1008</LineNumber>
<LineNumber>612</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
@ -166,14 +166,14 @@
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>.\FreeRTOS\source\FreeRTOS_Sockets.c</Filename>
<Filename>.\FreeRTOS\source\portable\NetworkInterface\board_family\NetworkInterface.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<LineNumber>967</LineNumber>
<LineNumber>591</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
@ -182,23 +182,7 @@
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>.\FreeRTOS\source\FreeRTOS_Sockets.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>2</Number>
<Type>0</Type>
<LineNumber>865</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>.\FreeRTOS\source\FreeRTOS_Sockets.c</Filename>
<Filename>.\FreeRTOS\source\portable\NetworkInterface\board_family\NetworkInterface.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
@ -232,14 +216,24 @@
<Ww>
<count>5</count>
<WinNumber>1</WinNumber>
<ItemText>dma_current_txdesc</ItemText>
<ItemText>dma_current_rxdesc</ItemText>
</Ww>
<Ww>
<count>6</count>
<WinNumber>1</WinNumber>
<ItemText>xDHCPSocket</ItemText>
</Ww>
<Ww>
<count>7</count>
<WinNumber>1</WinNumber>
<ItemText>pxCurrentTCB</ItemText>
</Ww>
</WatchWindow1>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>0</SubType>
<ItemText>pxNetworkBuffer</ItemText>
<ItemText>0x200072FA</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
@ -260,7 +254,7 @@
</Mm>
</MemoryWindow3>
<ScvdPack>
<Filename>C:\Users\User\AppData\Local\Arm\Packs\ARM\CMSIS-FreeRTOS\10.5.1\CMSIS\RTOS2\FreeRTOS\FreeRTOS.scvd</Filename>
<Filename>E:\Arm\Packs\ARM\CMSIS-FreeRTOS\10.5.1\CMSIS\RTOS2\FreeRTOS\FreeRTOS.scvd</Filename>
<Type>ARM.CMSIS-FreeRTOS.10.5.1</Type>
<SubType>1</SubType>
</ScvdPack>
@ -306,12 +300,18 @@
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
<SystemViewers>
<Entry>
<Name>System Viewer\ENET_DMA</Name>
<WinId>35905</WinId>
</Entry>
</SystemViewers>
</TargetOption>
</Target>
<Group>
<GroupName>Source Group 1</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -367,7 +367,7 @@
<GroupNumber>1</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>1</FileType>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\PHY\PHY_DP83848C.c</PathWithFileName>
@ -651,7 +651,7 @@
<GroupNumber>2</GroupNumber>
<FileNumber>28</FileNumber>
<FileType>1</FileType>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\FreeRTOS\source\portable\NetworkInterface\board_family\NetworkInterface.c</PathWithFileName>
@ -699,7 +699,7 @@
<Group>
<GroupName>::Device</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>1</RteFlg>

7
main.c
View File

@ -239,8 +239,13 @@ static void vInitMCU(void)
/* Enable Ethernet MAC */
enet_descriptors_chain_init(ENET_DMA_TX);
enet_descriptors_chain_init(ENET_DMA_RX);
//enet_desc_receive_complete_bit_enable(dma_current_rxdesc);
enet_enable();
__disable_irq();
NVIC_ClearPendingIRQ(ENET_IRQn);
NVIC_SetPriority(ENET_IRQn, ipconfigMAC_INTERRUPT_PRIORITY);
NVIC_EnableIRQ(ENET_IRQn);
__enable_irq();
}
/**! \brief vTaskHelloWorld procedure