/********************************************************************* PicoTCP. Copyright (c) 2012-2015 Altran Intelligent Systems. Some rights reserved. See LICENSE and COPYING for usage. *********************************************************************/ #ifndef PICO_SUPPORT_PIC24 #define PICO_SUPPORT_PIC24 #define dbg printf /* #define dbg(...) */ /*************************/ /*** MACHINE CONFIGURATION ***/ #include #include /* #include "phalox_development_board.h" */ #ifndef __PIC24F__ #define __PIC24F__ #endif /* #ifndef __PIC24FJ256GA106__ #define __PIC24FJ256GA106__ #endif */ #ifndef PICO_MAX_SOCKET_FRAMES #define PICO_MAX_SOCKET_FRAMES 16 #endif /* Device header file */ #if defined(__PIC24E__) # include #elif defined(__PIC24F__) # include #elif defined(__PIC24H__) # include #endif #define TIMBASE_INT_E IEC0bits.T2IE #ifdef PICO_SUPPORT_DEBUG_MEMORY static inline void *pico_zalloc(int len) { /* dbg("%s: Alloc object of len %d, caller: %p\n", __FUNCTION__, len, __builtin_return_address(0)); */ return calloc(len, 1); } static inline void pico_free(void *tgt) { /* dbg("%s: Discarded object @%p, caller: %p\n", __FUNCTION__, tgt, __builtin_return_address(0)); */ free(tgt); } #else # define pico_zalloc(x) calloc(x, 1) # define pico_free(x) free(x) #endif extern void *pvPortMalloc( size_t xWantedSize ); extern volatile pico_time __pic24_tick; static inline unsigned long PICO_TIME(void) { unsigned long tick; /* Disable timer interrupts */ TIMBASE_INT_E = 0; tick = __pic24_tick; /* Enable timer interrupts */ TIMBASE_INT_E = 1; return tick / 1000; } static inline unsigned long PICO_TIME_MS(void) { unsigned long tick; /* Disable timer interrupts */ TIMBASE_INT_E = 0; tick = __pic24_tick; /* Enable timer interrupts */ TIMBASE_INT_E = 1; return tick; } static inline void PICO_IDLE(void) { unsigned long tick_now; /* Disable timer interrupts */ TIMBASE_INT_E = 0; tick_now = (unsigned long)pico_tick; /* Enable timer interrupts */ TIMBASE_INT_E = 1; /* Doesn't matter that this call isn't interrupt safe, */ /* we just check for the value to change */ while(tick_now == __pic24_tick) ; } #endif