Пн янв 30, 2017 06:52:19
Пн янв 30, 2017 07:50:31
Пн янв 30, 2017 12:32:47
//....тут стандартные инклуды - пропустил
#include "lan.h" //работа по TCP c 28J60
uint32_t tick_count=0;//возвращает количество мс с момента включения питания. Назначение мне пока не очень ясно...
ISR( TIMER2_OVF_vect ) // 1 кГц
{
tick_count++;//счетчик числа милисекунд от начала включения - нужно для lan.c
}//1кГц
uint8_t tcp_listen(uint8_t id, eth_frame_t *frame)
{
// Коллбэк, вызываемый при получении запроса на соединение. Должен возвращать ненулевое значение, если приложение
// подтверждает соединение. id — индекс соединения (которое будет открыто, если приложение подтвердит установку
// соединения), frame — указатель на буфер пакета, содержащий полученный пакет
ip_packet_t *ip = (void*)(frame->data);
tcp_packet_t *tcp = (void*)(ip->data);
if (tcp->to_port == htons(80)) return 1;
else return 0;
}
// Коллбэк, вызываемый при получении данных по TCP. id — индекс соединения, frame — указатель на буфер пакета, len — количество полученных полезных данных
void tcp_write(uint8_t id, eth_frame_t *frame, uint16_t len)
{
ip_packet_t *ip = (void*)(frame->data);
tcp_packet_t *tcp = (void*)(ip->data);
char *req = (void*)tcp_get_data(tcp);
///ИспользуемПолученнуюСтроку((unsigned char*)req);
wdt_reset();
}//proc
int main (void)
{
ip_addr = IP_ADDR;//определены в lan.h
ip_mask = IP_SUBNET_MASK;
ip_gateway = IP_DEFAULT_GATEWAY;
tick_count = 0;
lan_init();
sei();
wdt_enable(WDTO_1S);
while(1)
{
lan_poll();
wdt_reset();
}//while
}//main
uint8_t enc28j60_rxtx(uint8_t data)
{
SPDR = data;
while(!(SPSR & (1<<SPIF)))
;
return SPDR;
}
#define enc28j60_rx() enc28j60_rxtx(0xff)
#define enc28j60_tx(data) enc28j60_rxtx(data)
#define ENC28J60_SPI_SCK (1<<PA2)
#define ENC28J60_SPI_MOSI (1<<PA1)
#define ENC28J60_SPI_MISO (1<<PA0)
Сб фев 04, 2017 00:48:51
Сб фев 04, 2017 11:28:38
Ср фев 08, 2017 06:48:43