Porting PicoTCP WIP
This commit is contained in:
100
kernel/picotcp/include/arch/pico_pic24.h
Normal file
100
kernel/picotcp/include/arch/pico_pic24.h
Normal file
@ -0,0 +1,100 @@
|
||||
/*********************************************************************
|
||||
PicoTCP. Copyright (c) 2012-2017 Altran Intelligent Systems. Some rights reserved.
|
||||
See COPYING, LICENSE.GPLv2 and LICENSE.GPLv3 for usage.
|
||||
*********************************************************************/
|
||||
#ifndef PICO_SUPPORT_PIC24
|
||||
#define PICO_SUPPORT_PIC24
|
||||
#define dbg printf
|
||||
/* #define dbg(...) */
|
||||
|
||||
/*************************/
|
||||
|
||||
/*** MACHINE CONFIGURATION ***/
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
/* #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 <p24Exxxx.h>
|
||||
#elif defined(__PIC24F__)
|
||||
# include <p24Fxxxx.h>
|
||||
#elif defined(__PIC24H__)
|
||||
# include <p24Hxxxx.h>
|
||||
#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
|
||||
Reference in New Issue
Block a user