Change text encode to UTF-8
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
* main.c
|
* main.c
|
||||||
*
|
*
|
||||||
* Created on: 22 нояб. 2018 г.
|
* Created on: 22 нояб. 2018 г.
|
||||||
|
*
|
||||||
* Author: maxx
|
* Author: maxx
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* main.c
|
* main.c
|
||||||
*
|
*
|
||||||
* Created on: 22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2018 <EFBFBD>.
|
* Created on: 22 нояб. 2018 г.
|
||||||
* Author: maxx
|
* Author: maxx
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
@@ -198,8 +198,8 @@ void get_mcusr(void)
|
|||||||
volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
|
volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
|
||||||
|
|
||||||
//*********Program metrics
|
//*********Program metrics
|
||||||
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - Дата компиляции
|
||||||
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - Время компиляции
|
||||||
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v1.0 FATFS LFN Chang tst 17/12/2018\r\n"; // Program name
|
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v1.0 FATFS LFN Chang tst 17/12/2018\r\n"; // Program name
|
||||||
|
|
||||||
#if defined(__AVR_ATmega128__)
|
#if defined(__AVR_ATmega128__)
|
||||||
@@ -244,7 +244,7 @@ ISR (TIMER0_COMPA_vect)
|
|||||||
// Compare match Timer0
|
// Compare match Timer0
|
||||||
// Here every 1ms
|
// Here every 1ms
|
||||||
_millis++; // INC millis tick
|
_millis++; // INC millis tick
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Тест мигаем при в ходе в прерывание
|
||||||
// 500Hz FREQ OUT
|
// 500Hz FREQ OUT
|
||||||
// LED_TGL;
|
// LED_TGL;
|
||||||
if(++fatfs_10ms > 9 )
|
if(++fatfs_10ms > 9 )
|
||||||
@@ -283,18 +283,18 @@ static int uart0_putchar(char ch,FILE *stream);
|
|||||||
static void uart0_rx_flash(void);
|
static void uart0_rx_flash(void);
|
||||||
|
|
||||||
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||||
//PS. stdin <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> uart.h - api:
|
//PS. stdin не переназначаю, т.к. удобнее с ним работать через uart.h - api:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
* Т.е. например так
|
||||||
c = uart1_getc();
|
c = uart1_getc();
|
||||||
if (( c & UART_NO_DATA ) == 0)
|
if (( c & UART_NO_DATA ) == 0)
|
||||||
{
|
{
|
||||||
uart1_putc( (unsigned char)c );
|
uart1_putc( (unsigned char)c );
|
||||||
}
|
}
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> UART RX RINGBUFFER),
|
При этом чекаем что буфер приема не пуст и опрос идет неблокирующий (+ работаем через UART RX RINGBUFFER),
|
||||||
<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> stdin->getchar() <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
а если работаем в стиле stdin->getchar() там опрос блокируется пока символ не будет принят (поллинг)
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1_RX, <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
через UART1_RX, т.е. неудобно.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// STDOUT UART0 TX handler
|
// STDOUT UART0 TX handler
|
||||||
@@ -304,10 +304,10 @@ static int uart0_putchar(char ch,FILE *stream)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1 RX (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
|
// Очищаем буфер приема UART1 RX (иногда нужно)
|
||||||
static void uart0_rx_flash(void)
|
static void uart0_rx_flash(void)
|
||||||
{
|
{
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> ring-buffer UART1 RX
|
// Считываем все из ring-buffer UART1 RX
|
||||||
unsigned int c;
|
unsigned int c;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@@ -942,7 +942,7 @@ void fatfs_monitor(void)
|
|||||||
if (res) put_rc(res);
|
if (res) put_rc(res);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// <fo 0x1 123.txt> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FA_OPEN_READ = 0x1) <EFBFBD><EFBFBD><EFBFBD><EFBFBD> "123.txt"
|
// <fo 0x1 123.txt> - Открываем для чтения(FA_OPEN_READ = 0x1) файл "123.txt"
|
||||||
case 'o' : /* fo <mode> <name> - Open a file */
|
case 'o' : /* fo <mode> <name> - Open a file */
|
||||||
if (!xatoi(&ptr, &p1)) break;
|
if (!xatoi(&ptr, &p1)) break;
|
||||||
while (*ptr == ' ') ptr++;
|
while (*ptr == ' ') ptr++;
|
||||||
@@ -1206,8 +1206,8 @@ int main()
|
|||||||
avr_init();
|
avr_init();
|
||||||
|
|
||||||
// Print program metrics
|
// Print program metrics
|
||||||
PRINTF("%S", str_prog_name);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("%S", str_prog_name);// Название программы
|
||||||
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// Время Дата компиляции
|
||||||
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
||||||
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
||||||
|
|
||||||
@@ -1256,7 +1256,7 @@ int main()
|
|||||||
//led1_high(); //LED1 ON
|
//led1_high(); //LED1 ON
|
||||||
if(prev_sw1)
|
if(prev_sw1)
|
||||||
{
|
{
|
||||||
//!! <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (1->0 SW1)
|
//!! Здесь по факту нажатия кнопки (1->0 SW1)
|
||||||
//!! Debug only
|
//!! Debug only
|
||||||
PRINTF("SW1 is pressed\r\nADC0/PA0 is: %u\r\n", adc_read(0));
|
PRINTF("SW1 is pressed\r\nADC0/PA0 is: %u\r\n", adc_read(0));
|
||||||
//PRINTF("SW1 is pressed\r\n");
|
//PRINTF("SW1 is pressed\r\n");
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* main.c
|
* main.c
|
||||||
*
|
*
|
||||||
* Created on: 22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2018 <EFBFBD>.
|
* Created on: 22 нояб. 2018 г.
|
||||||
* Author: maxx
|
* Author: maxx
|
||||||
*/
|
*/
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
@@ -68,8 +68,8 @@ void get_mcusr(void)
|
|||||||
volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
|
volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
|
||||||
|
|
||||||
//*********Program metrics
|
//*********Program metrics
|
||||||
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - Дата компиляции
|
||||||
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - Время компиляции
|
||||||
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v1.0 Static IP Loop-back && FATFS SDCARD template WIZNET_5500 ETHERNET 20/12/2018\r\n"; // Program name
|
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v1.0 Static IP Loop-back && FATFS SDCARD template WIZNET_5500 ETHERNET 20/12/2018\r\n"; // Program name
|
||||||
|
|
||||||
#if defined(__AVR_ATmega128__)
|
#if defined(__AVR_ATmega128__)
|
||||||
@@ -117,7 +117,7 @@ ISR (TIMER0_COMPA_vect)
|
|||||||
// Compare match Timer0
|
// Compare match Timer0
|
||||||
// Here every 1ms
|
// Here every 1ms
|
||||||
_millis++; // INC millis tick
|
_millis++; // INC millis tick
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Тест мигаем при в ходе в прерывание
|
||||||
// 500Hz FREQ OUT
|
// 500Hz FREQ OUT
|
||||||
// LED_TGL;
|
// LED_TGL;
|
||||||
if(++fatfs_10ms > 9 )
|
if(++fatfs_10ms > 9 )
|
||||||
@@ -156,18 +156,18 @@ static int uart0_putchar(char ch,FILE *stream);
|
|||||||
static void uart0_rx_flash(void);
|
static void uart0_rx_flash(void);
|
||||||
|
|
||||||
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||||
//PS. stdin <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> uart.h - api:
|
//PS. stdin не переназначаю, т.к. удобнее с ним работать через uart.h - api:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
* Т.е. например так
|
||||||
c = uart1_getc();
|
c = uart1_getc();
|
||||||
if (( c & UART_NO_DATA ) == 0)
|
if (( c & UART_NO_DATA ) == 0)
|
||||||
{
|
{
|
||||||
uart1_putc( (unsigned char)c );
|
uart1_putc( (unsigned char)c );
|
||||||
}
|
}
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> UART RX RINGBUFFER),
|
При этом чекаем что буфер приема не пуст и опрос идет неблокирующий (+ работаем через UART RX RINGBUFFER),
|
||||||
<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> stdin->getchar() <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
а если работаем в стиле stdin->getchar() там опрос блокируется пока символ не будет принят (поллинг)
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1_RX, <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
через UART1_RX, т.е. неудобно.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// STDOUT UART0 TX handler
|
// STDOUT UART0 TX handler
|
||||||
@@ -177,10 +177,10 @@ static int uart0_putchar(char ch,FILE *stream)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1 RX (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
|
// Очищаем буфер приема UART1 RX (иногда нужно)
|
||||||
static void uart0_rx_flash(void)
|
static void uart0_rx_flash(void)
|
||||||
{
|
{
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> ring-buffer UART1 RX
|
// Считываем все из ring-buffer UART1 RX
|
||||||
unsigned int c;
|
unsigned int c;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@@ -500,8 +500,8 @@ int main()
|
|||||||
|
|
||||||
|
|
||||||
// Print program metrics
|
// Print program metrics
|
||||||
PRINTF("%S", str_prog_name);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("%S", str_prog_name);// Название программы
|
||||||
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// Время Дата компиляции
|
||||||
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
||||||
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* main.c
|
* main.c
|
||||||
*
|
*
|
||||||
* Created on: 22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2018 <EFBFBD>.
|
* Created on: 22 нояб. 2018 г.
|
||||||
* Author: maxx
|
* Author: maxx
|
||||||
*/
|
*/
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
@@ -64,8 +64,8 @@ void get_mcusr(void)
|
|||||||
volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
|
volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
|
||||||
|
|
||||||
//*********Program metrics
|
//*********Program metrics
|
||||||
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - Дата компиляции
|
||||||
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - Время компиляции
|
||||||
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v1.0 Static IP Loop-back WIZNET_5500 ETHERNET 25/11/2018\r\n"; // Program name
|
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v1.0 Static IP Loop-back WIZNET_5500 ETHERNET 25/11/2018\r\n"; // Program name
|
||||||
|
|
||||||
#if defined(__AVR_ATmega128__)
|
#if defined(__AVR_ATmega128__)
|
||||||
@@ -112,7 +112,7 @@ ISR (TIMER0_COMPA_vect)
|
|||||||
// Compare match Timer0
|
// Compare match Timer0
|
||||||
// Here every 1ms
|
// Here every 1ms
|
||||||
_millis++; // INC millis tick
|
_millis++; // INC millis tick
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Тест мигаем при в ходе в прерывание
|
||||||
// 500Hz FREQ OUT
|
// 500Hz FREQ OUT
|
||||||
// LED_TGL;
|
// LED_TGL;
|
||||||
}
|
}
|
||||||
@@ -144,18 +144,18 @@ static int uart0_putchar(char ch,FILE *stream);
|
|||||||
static void uart0_rx_flash(void);
|
static void uart0_rx_flash(void);
|
||||||
|
|
||||||
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||||
//PS. stdin <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> uart.h - api:
|
//PS. stdin не переназначаю, т.к. удобнее с ним работать через uart.h - api:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
* Т.е. например так
|
||||||
c = uart1_getc();
|
c = uart1_getc();
|
||||||
if (( c & UART_NO_DATA ) == 0)
|
if (( c & UART_NO_DATA ) == 0)
|
||||||
{
|
{
|
||||||
uart1_putc( (unsigned char)c );
|
uart1_putc( (unsigned char)c );
|
||||||
}
|
}
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> UART RX RINGBUFFER),
|
При этом чекаем что буфер приема не пуст и опрос идет неблокирующий (+ работаем через UART RX RINGBUFFER),
|
||||||
<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> stdin->getchar() <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
а если работаем в стиле stdin->getchar() там опрос блокируется пока символ не будет принят (поллинг)
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1_RX, <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
через UART1_RX, т.е. неудобно.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// STDOUT UART0 TX handler
|
// STDOUT UART0 TX handler
|
||||||
@@ -165,10 +165,10 @@ static int uart0_putchar(char ch,FILE *stream)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1 RX (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
|
// Очищаем буфер приема UART1 RX (иногда нужно)
|
||||||
static void uart0_rx_flash(void)
|
static void uart0_rx_flash(void)
|
||||||
{
|
{
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> ring-buffer UART1 RX
|
// Считываем все из ring-buffer UART1 RX
|
||||||
unsigned int c;
|
unsigned int c;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@@ -313,8 +313,8 @@ int main()
|
|||||||
|
|
||||||
|
|
||||||
// Print program metrics
|
// Print program metrics
|
||||||
PRINTF("%S", str_prog_name);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("%S", str_prog_name);// Название программы
|
||||||
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// Время Дата компиляции
|
||||||
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
||||||
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* main.c
|
* main.c
|
||||||
*
|
*
|
||||||
* Created on: 22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2018 <EFBFBD>.
|
* Created on: 22 нояб. 2018 г.
|
||||||
* Author: maxx
|
* Author: maxx
|
||||||
*/
|
*/
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
@@ -59,8 +59,8 @@
|
|||||||
volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
|
volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
|
||||||
|
|
||||||
//*********Program metrics
|
//*********Program metrics
|
||||||
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - Дата компиляции
|
||||||
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - Время компиляции
|
||||||
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v1.2 DHCP IP Loop-back WIZNET_5500 ETHERNET 26/11/2018\r\n"; // Program name
|
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v1.2 DHCP IP Loop-back WIZNET_5500 ETHERNET 26/11/2018\r\n"; // Program name
|
||||||
|
|
||||||
#if defined(__AVR_ATmega128__)
|
#if defined(__AVR_ATmega128__)
|
||||||
@@ -107,7 +107,7 @@ ISR (TIMER0_COMPA_vect)
|
|||||||
// Compare match Timer0
|
// Compare match Timer0
|
||||||
// Here every 1ms
|
// Here every 1ms
|
||||||
_millis++; // INC millis tick
|
_millis++; // INC millis tick
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Тест мигаем при в ходе в прерывание
|
||||||
// 500Hz FREQ OUT
|
// 500Hz FREQ OUT
|
||||||
// LED_TGL;
|
// LED_TGL;
|
||||||
}
|
}
|
||||||
@@ -138,18 +138,18 @@ static int uart0_putchar(char ch,FILE *stream);
|
|||||||
static void uart0_rx_flash(void);
|
static void uart0_rx_flash(void);
|
||||||
|
|
||||||
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||||
//PS. stdin <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> uart.h - api:
|
//PS. stdin не переназначаю, т.к. удобнее с ним работать через uart.h - api:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
* Т.е. например так
|
||||||
c = uart1_getc();
|
c = uart1_getc();
|
||||||
if (( c & UART_NO_DATA ) == 0)
|
if (( c & UART_NO_DATA ) == 0)
|
||||||
{
|
{
|
||||||
uart1_putc( (unsigned char)c );
|
uart1_putc( (unsigned char)c );
|
||||||
}
|
}
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> UART RX RINGBUFFER),
|
При этом чекаем что буфер приема не пуст и опрос идет неблокирующий (+ работаем через UART RX RINGBUFFER),
|
||||||
<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> stdin->getchar() <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
а если работаем в стиле stdin->getchar() там опрос блокируется пока символ не будет принят (поллинг)
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1_RX, <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
через UART1_RX, т.е. неудобно.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// STDOUT UART0 TX handler
|
// STDOUT UART0 TX handler
|
||||||
@@ -159,10 +159,10 @@ static int uart0_putchar(char ch,FILE *stream)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1 RX (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
|
// Очищаем буфер приема UART1 RX (иногда нужно)
|
||||||
static void uart0_rx_flash(void)
|
static void uart0_rx_flash(void)
|
||||||
{
|
{
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> ring-buffer UART1 RX
|
// Считываем все из ring-buffer UART1 RX
|
||||||
unsigned int c;
|
unsigned int c;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@@ -343,8 +343,8 @@ int main()
|
|||||||
|
|
||||||
|
|
||||||
// Print program metrics
|
// Print program metrics
|
||||||
PRINTF("%S", str_prog_name);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("%S", str_prog_name);// Название программы
|
||||||
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// Время Дата компиляции
|
||||||
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
||||||
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* main.c
|
* main.c
|
||||||
*
|
*
|
||||||
* Created on: 22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2018 <EFBFBD>.
|
* Created on: 22 нояб. 2018 г.
|
||||||
* Author: maxx
|
* Author: maxx
|
||||||
*/
|
*/
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
@@ -61,8 +61,8 @@
|
|||||||
volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
|
volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
|
||||||
|
|
||||||
//*********Program metrics
|
//*********Program metrics
|
||||||
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - Дата компиляции
|
||||||
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - Время компиляции
|
||||||
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v1.0 Static IP DNS Client WIZNET_5500 ETHERNET 25/11/2018\r\n"; // Program name
|
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v1.0 Static IP DNS Client WIZNET_5500 ETHERNET 25/11/2018\r\n"; // Program name
|
||||||
|
|
||||||
#if defined(__AVR_ATmega128__)
|
#if defined(__AVR_ATmega128__)
|
||||||
@@ -109,7 +109,7 @@ ISR (TIMER0_COMPA_vect)
|
|||||||
// Compare match Timer0
|
// Compare match Timer0
|
||||||
// Here every 1ms
|
// Here every 1ms
|
||||||
_millis++; // INC millis tick
|
_millis++; // INC millis tick
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Тест мигаем при в ходе в прерывание
|
||||||
// 500Hz FREQ OUT
|
// 500Hz FREQ OUT
|
||||||
// LED_TGL;
|
// LED_TGL;
|
||||||
}
|
}
|
||||||
@@ -140,18 +140,18 @@ static int uart0_putchar(char ch,FILE *stream);
|
|||||||
static void uart0_rx_flash(void);
|
static void uart0_rx_flash(void);
|
||||||
|
|
||||||
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||||
//PS. stdin <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> uart.h - api:
|
//PS. stdin не переназначаю, т.к. удобнее с ним работать через uart.h - api:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
* Т.е. например так
|
||||||
c = uart1_getc();
|
c = uart1_getc();
|
||||||
if (( c & UART_NO_DATA ) == 0)
|
if (( c & UART_NO_DATA ) == 0)
|
||||||
{
|
{
|
||||||
uart1_putc( (unsigned char)c );
|
uart1_putc( (unsigned char)c );
|
||||||
}
|
}
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> UART RX RINGBUFFER),
|
При этом чекаем что буфер приема не пуст и опрос идет неблокирующий (+ работаем через UART RX RINGBUFFER),
|
||||||
<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> stdin->getchar() <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
а если работаем в стиле stdin->getchar() там опрос блокируется пока символ не будет принят (поллинг)
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1_RX, <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
через UART1_RX, т.е. неудобно.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// STDOUT UART0 TX handler
|
// STDOUT UART0 TX handler
|
||||||
@@ -161,10 +161,10 @@ static int uart0_putchar(char ch,FILE *stream)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1 RX (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
|
// Очищаем буфер приема UART1 RX (иногда нужно)
|
||||||
static void uart0_rx_flash(void)
|
static void uart0_rx_flash(void)
|
||||||
{
|
{
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> ring-buffer UART1 RX
|
// Считываем все из ring-buffer UART1 RX
|
||||||
unsigned int c;
|
unsigned int c;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@@ -303,8 +303,8 @@ int main()
|
|||||||
|
|
||||||
|
|
||||||
// Print program metrics
|
// Print program metrics
|
||||||
PRINTF("%S", str_prog_name);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("%S", str_prog_name);// Название программы
|
||||||
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// Время Дата компиляции
|
||||||
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
||||||
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* main.c
|
* main.c
|
||||||
*
|
*
|
||||||
* Created on: 22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2018 <EFBFBD>.
|
* Created on: 22 нояб. 2018 г.
|
||||||
* Author: maxx
|
* Author: maxx
|
||||||
*/
|
*/
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
@@ -63,8 +63,8 @@
|
|||||||
volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
|
volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
|
||||||
|
|
||||||
//*********Program metrics
|
//*********Program metrics
|
||||||
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - Дата компиляции
|
||||||
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - Время компиляции
|
||||||
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v1.0 Static IP DNS Client & SNTP Client WIZNET_5500 ETHERNET 27/11/2018\r\n"; // Program name
|
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v1.0 Static IP DNS Client & SNTP Client WIZNET_5500 ETHERNET 27/11/2018\r\n"; // Program name
|
||||||
|
|
||||||
#if defined(__AVR_ATmega128__)
|
#if defined(__AVR_ATmega128__)
|
||||||
@@ -111,7 +111,7 @@ ISR (TIMER0_COMPA_vect)
|
|||||||
// Compare match Timer0
|
// Compare match Timer0
|
||||||
// Here every 1ms
|
// Here every 1ms
|
||||||
_millis++; // INC millis tick
|
_millis++; // INC millis tick
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Тест мигаем при в ходе в прерывание
|
||||||
// 500Hz FREQ OUT
|
// 500Hz FREQ OUT
|
||||||
// LED_TGL;
|
// LED_TGL;
|
||||||
}
|
}
|
||||||
@@ -142,18 +142,18 @@ static int uart0_putchar(char ch,FILE *stream);
|
|||||||
static void uart0_rx_flash(void);
|
static void uart0_rx_flash(void);
|
||||||
|
|
||||||
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||||
//PS. stdin <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> uart.h - api:
|
//PS. stdin не переназначаю, т.к. удобнее с ним работать через uart.h - api:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
* Т.е. например так
|
||||||
c = uart1_getc();
|
c = uart1_getc();
|
||||||
if (( c & UART_NO_DATA ) == 0)
|
if (( c & UART_NO_DATA ) == 0)
|
||||||
{
|
{
|
||||||
uart1_putc( (unsigned char)c );
|
uart1_putc( (unsigned char)c );
|
||||||
}
|
}
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> UART RX RINGBUFFER),
|
При этом чекаем что буфер приема не пуст и опрос идет неблокирующий (+ работаем через UART RX RINGBUFFER),
|
||||||
<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> stdin->getchar() <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
а если работаем в стиле stdin->getchar() там опрос блокируется пока символ не будет принят (поллинг)
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1_RX, <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
через UART1_RX, т.е. неудобно.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// STDOUT UART0 TX handler
|
// STDOUT UART0 TX handler
|
||||||
@@ -163,10 +163,10 @@ static int uart0_putchar(char ch,FILE *stream)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1 RX (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
|
// Очищаем буфер приема UART1 RX (иногда нужно)
|
||||||
static void uart0_rx_flash(void)
|
static void uart0_rx_flash(void)
|
||||||
{
|
{
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> ring-buffer UART1 RX
|
// Считываем все из ring-buffer UART1 RX
|
||||||
unsigned int c;
|
unsigned int c;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@@ -317,8 +317,8 @@ int main()
|
|||||||
|
|
||||||
|
|
||||||
// Print program metrics
|
// Print program metrics
|
||||||
PRINTF("%S", str_prog_name);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("%S", str_prog_name);// Название программы
|
||||||
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// Время Дата компиляции
|
||||||
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
||||||
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* main.c
|
* main.c
|
||||||
*
|
*
|
||||||
* Created on: 22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2018 <EFBFBD>.
|
* Created on: 22 нояб. 2018 г.
|
||||||
* Author: maxx
|
* Author: maxx
|
||||||
*/
|
*/
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
@@ -51,8 +51,8 @@
|
|||||||
volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
|
volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
|
||||||
|
|
||||||
//*********Program metrics
|
//*********Program metrics
|
||||||
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - Дата компиляции
|
||||||
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - Время компиляции
|
||||||
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v2.1 Static IP Telnet server WIZNET_5500 ETHERNET 01/12/2018\r\n"; // Program name
|
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v2.1 Static IP Telnet server WIZNET_5500 ETHERNET 01/12/2018\r\n"; // Program name
|
||||||
|
|
||||||
#if defined(__AVR_ATmega128__)
|
#if defined(__AVR_ATmega128__)
|
||||||
@@ -98,7 +98,7 @@ ISR (TIMER0_COMPA_vect)
|
|||||||
// Compare match Timer0
|
// Compare match Timer0
|
||||||
// Here every 1ms
|
// Here every 1ms
|
||||||
_millis++; // INC millis tick
|
_millis++; // INC millis tick
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Тест мигаем при в ходе в прерывание
|
||||||
// 500Hz FREQ OUT
|
// 500Hz FREQ OUT
|
||||||
// LED_TGL;
|
// LED_TGL;
|
||||||
}
|
}
|
||||||
@@ -129,18 +129,18 @@ static int uart0_putchar(char ch,FILE *stream);
|
|||||||
static void uart0_rx_flash(void);
|
static void uart0_rx_flash(void);
|
||||||
|
|
||||||
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||||
//PS. stdin <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> uart.h - api:
|
//PS. stdin не переназначаю, т.к. удобнее с ним работать через uart.h - api:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
* Т.е. например так
|
||||||
c = uart1_getc();
|
c = uart1_getc();
|
||||||
if (( c & UART_NO_DATA ) == 0)
|
if (( c & UART_NO_DATA ) == 0)
|
||||||
{
|
{
|
||||||
uart1_putc( (unsigned char)c );
|
uart1_putc( (unsigned char)c );
|
||||||
}
|
}
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> UART RX RINGBUFFER),
|
При этом чекаем что буфер приема не пуст и опрос идет неблокирующий (+ работаем через UART RX RINGBUFFER),
|
||||||
<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> stdin->getchar() <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
а если работаем в стиле stdin->getchar() там опрос блокируется пока символ не будет принят (поллинг)
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1_RX, <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
через UART1_RX, т.е. неудобно.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// STDOUT UART0 TX handler
|
// STDOUT UART0 TX handler
|
||||||
@@ -150,10 +150,10 @@ static int uart0_putchar(char ch,FILE *stream)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1 RX (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
|
// Очищаем буфер приема UART1 RX (иногда нужно)
|
||||||
static void uart0_rx_flash(void)
|
static void uart0_rx_flash(void)
|
||||||
{
|
{
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> ring-buffer UART1 RX
|
// Считываем все из ring-buffer UART1 RX
|
||||||
unsigned int c;
|
unsigned int c;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@@ -274,8 +274,8 @@ int main()
|
|||||||
|
|
||||||
|
|
||||||
// Print program metrics
|
// Print program metrics
|
||||||
PRINTF("%S", str_prog_name);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("%S", str_prog_name);// Название программы
|
||||||
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// Время Дата компиляции
|
||||||
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
||||||
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* main.c
|
* main.c
|
||||||
*
|
*
|
||||||
* Created on: 22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2018 <EFBFBD>.
|
* Created on: 22 нояб. 2018 г.
|
||||||
* Author: maxx
|
* Author: maxx
|
||||||
*/
|
*/
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
@@ -61,8 +61,8 @@
|
|||||||
volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
|
volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
|
||||||
|
|
||||||
//*********Program metrics
|
//*********Program metrics
|
||||||
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - Дата компиляции
|
||||||
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - Время компиляции
|
||||||
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v2.1 Static IP ICMP (ping) client-server WIZNET_5500 ETHERNET 03/12/2018\r\n"; // Program name
|
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v2.1 Static IP ICMP (ping) client-server WIZNET_5500 ETHERNET 03/12/2018\r\n"; // Program name
|
||||||
|
|
||||||
#if defined(__AVR_ATmega128__)
|
#if defined(__AVR_ATmega128__)
|
||||||
@@ -109,7 +109,7 @@ ISR (TIMER0_COMPA_vect)
|
|||||||
// Compare match Timer0
|
// Compare match Timer0
|
||||||
// Here every 1ms
|
// Here every 1ms
|
||||||
_millis++; // INC millis tick
|
_millis++; // INC millis tick
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Тест мигаем при в ходе в прерывание
|
||||||
// 500Hz FREQ OUT
|
// 500Hz FREQ OUT
|
||||||
// LED_TGL;
|
// LED_TGL;
|
||||||
}
|
}
|
||||||
@@ -140,18 +140,18 @@ static int uart0_putchar(char ch,FILE *stream);
|
|||||||
static void uart0_rx_flash(void);
|
static void uart0_rx_flash(void);
|
||||||
|
|
||||||
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||||
//PS. stdin <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> uart.h - api:
|
//PS. stdin не переназначаю, т.к. удобнее с ним работать через uart.h - api:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
* Т.е. например так
|
||||||
c = uart1_getc();
|
c = uart1_getc();
|
||||||
if (( c & UART_NO_DATA ) == 0)
|
if (( c & UART_NO_DATA ) == 0)
|
||||||
{
|
{
|
||||||
uart1_putc( (unsigned char)c );
|
uart1_putc( (unsigned char)c );
|
||||||
}
|
}
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> UART RX RINGBUFFER),
|
При этом чекаем что буфер приема не пуст и опрос идет неблокирующий (+ работаем через UART RX RINGBUFFER),
|
||||||
<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> stdin->getchar() <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
а если работаем в стиле stdin->getchar() там опрос блокируется пока символ не будет принят (поллинг)
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1_RX, <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
через UART1_RX, т.е. неудобно.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// STDOUT UART0 TX handler
|
// STDOUT UART0 TX handler
|
||||||
@@ -161,10 +161,10 @@ static int uart0_putchar(char ch,FILE *stream)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1 RX (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
|
// Очищаем буфер приема UART1 RX (иногда нужно)
|
||||||
static void uart0_rx_flash(void)
|
static void uart0_rx_flash(void)
|
||||||
{
|
{
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> ring-buffer UART1 RX
|
// Считываем все из ring-buffer UART1 RX
|
||||||
unsigned int c;
|
unsigned int c;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@@ -310,8 +310,8 @@ int main()
|
|||||||
|
|
||||||
|
|
||||||
// Print program metrics
|
// Print program metrics
|
||||||
PRINTF("%S", str_prog_name);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("%S", str_prog_name);// Название программы
|
||||||
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// Время Дата компиляции
|
||||||
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
||||||
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* globals.h
|
* globals.h
|
||||||
*
|
*
|
||||||
* Created on: 29 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2018 <EFBFBD>.
|
* Created on: 29 нояб. 2018 г.
|
||||||
* Author: maxx
|
* Author: maxx
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* main.c
|
* main.c
|
||||||
*
|
*
|
||||||
* Created on: 22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2018 <EFBFBD>.
|
* Created on: 22 нояб. 2018 г.
|
||||||
* Author: maxx
|
* Author: maxx
|
||||||
*/
|
*/
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
@@ -64,8 +64,8 @@
|
|||||||
volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
|
volatile unsigned long _millis; // for millis tick !! Overflow every ~49.7 days
|
||||||
|
|
||||||
//*********Program metrics
|
//*********Program metrics
|
||||||
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - Дата компиляции
|
||||||
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - Время компиляции
|
||||||
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v1.0 Static IP Simple WEBSERVER WIZNET_5500 ETHERNET 04/12/2018\r\n"; // Program name
|
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v1.0 Static IP Simple WEBSERVER WIZNET_5500 ETHERNET 04/12/2018\r\n"; // Program name
|
||||||
|
|
||||||
#if defined(__AVR_ATmega128__)
|
#if defined(__AVR_ATmega128__)
|
||||||
@@ -111,7 +111,7 @@ ISR (TIMER0_COMPA_vect)
|
|||||||
// Compare match Timer0
|
// Compare match Timer0
|
||||||
// Here every 1ms
|
// Here every 1ms
|
||||||
_millis++; // INC millis tick
|
_millis++; // INC millis tick
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Тест мигаем при в ходе в прерывание
|
||||||
// 500Hz FREQ OUT
|
// 500Hz FREQ OUT
|
||||||
// LED_TGL;
|
// LED_TGL;
|
||||||
}
|
}
|
||||||
@@ -143,18 +143,18 @@ static int uart0_putchar(char ch,FILE *stream);
|
|||||||
static void uart0_rx_flash(void);
|
static void uart0_rx_flash(void);
|
||||||
|
|
||||||
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||||
//PS. stdin <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> uart.h - api:
|
//PS. stdin не переназначаю, т.к. удобнее с ним работать через uart.h - api:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
* Т.е. например так
|
||||||
c = uart1_getc();
|
c = uart1_getc();
|
||||||
if (( c & UART_NO_DATA ) == 0)
|
if (( c & UART_NO_DATA ) == 0)
|
||||||
{
|
{
|
||||||
uart1_putc( (unsigned char)c );
|
uart1_putc( (unsigned char)c );
|
||||||
}
|
}
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> UART RX RINGBUFFER),
|
При этом чекаем что буфер приема не пуст и опрос идет неблокирующий (+ работаем через UART RX RINGBUFFER),
|
||||||
<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> stdin->getchar() <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
а если работаем в стиле stdin->getchar() там опрос блокируется пока символ не будет принят (поллинг)
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1_RX, <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
через UART1_RX, т.е. неудобно.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// STDOUT UART0 TX handler
|
// STDOUT UART0 TX handler
|
||||||
@@ -164,10 +164,10 @@ static int uart0_putchar(char ch,FILE *stream)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1 RX (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
|
// Очищаем буфер приема UART1 RX (иногда нужно)
|
||||||
static void uart0_rx_flash(void)
|
static void uart0_rx_flash(void)
|
||||||
{
|
{
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> ring-buffer UART1 RX
|
// Считываем все из ring-buffer UART1 RX
|
||||||
unsigned int c;
|
unsigned int c;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@@ -285,8 +285,8 @@ int main()
|
|||||||
|
|
||||||
|
|
||||||
// Print program metrics
|
// Print program metrics
|
||||||
PRINTF("%S", str_prog_name);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("%S", str_prog_name);// Название программы
|
||||||
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// Время Дата компиляции
|
||||||
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
||||||
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* globals.h
|
* globals.h
|
||||||
*
|
*
|
||||||
* Created on: 29 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2018 <EFBFBD>.
|
* Created on: 29 нояб. 2018 г.
|
||||||
* Author: maxx
|
* Author: maxx
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* main.c
|
* main.c
|
||||||
*
|
*
|
||||||
* Created on: 22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2018 <EFBFBD>.
|
* Created on: 22 нояб. 2018 г.
|
||||||
* Author: maxx
|
* Author: maxx
|
||||||
*/
|
*/
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
@@ -71,8 +71,8 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
//*********Program metrics
|
//*********Program metrics
|
||||||
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - Дата компиляции
|
||||||
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - Время компиляции
|
||||||
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v1.0 Static IP HTTPServer_LPC11E36->AtMega1284p WIZNET_5500 ETHERNET 06/12/2018\r\n"; // Program name
|
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v1.0 Static IP HTTPServer_LPC11E36->AtMega1284p WIZNET_5500 ETHERNET 06/12/2018\r\n"; // Program name
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -138,7 +138,7 @@ ISR (TIMER0_COMPA_vect)
|
|||||||
// Compare match Timer0
|
// Compare match Timer0
|
||||||
// Here every 1ms
|
// Here every 1ms
|
||||||
_millis++; // INC millis tick
|
_millis++; // INC millis tick
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Тест мигаем при в ходе в прерывание
|
||||||
// 500Hz FREQ OUT
|
// 500Hz FREQ OUT
|
||||||
// LED_TGL;
|
// LED_TGL;
|
||||||
}
|
}
|
||||||
@@ -170,18 +170,18 @@ static int uart0_putchar(char ch,FILE *stream);
|
|||||||
static void uart0_rx_flash(void);
|
static void uart0_rx_flash(void);
|
||||||
|
|
||||||
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||||
//PS. stdin <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> uart.h - api:
|
//PS. stdin не переназначаю, т.к. удобнее с ним работать через uart.h - api:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
* Т.е. например так
|
||||||
c = uart1_getc();
|
c = uart1_getc();
|
||||||
if (( c & UART_NO_DATA ) == 0)
|
if (( c & UART_NO_DATA ) == 0)
|
||||||
{
|
{
|
||||||
uart1_putc( (unsigned char)c );
|
uart1_putc( (unsigned char)c );
|
||||||
}
|
}
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> UART RX RINGBUFFER),
|
При этом чекаем что буфер приема не пуст и опрос идет неблокирующий (+ работаем через UART RX RINGBUFFER),
|
||||||
<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> stdin->getchar() <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
а если работаем в стиле stdin->getchar() там опрос блокируется пока символ не будет принят (поллинг)
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1_RX, <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
через UART1_RX, т.е. неудобно.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// STDOUT UART0 TX handler
|
// STDOUT UART0 TX handler
|
||||||
@@ -191,10 +191,10 @@ static int uart0_putchar(char ch,FILE *stream)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1 RX (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
|
// Очищаем буфер приема UART1 RX (иногда нужно)
|
||||||
static void uart0_rx_flash(void)
|
static void uart0_rx_flash(void)
|
||||||
{
|
{
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> ring-buffer UART1 RX
|
// Считываем все из ring-buffer UART1 RX
|
||||||
unsigned int c;
|
unsigned int c;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@@ -347,8 +347,8 @@ int main()
|
|||||||
|
|
||||||
|
|
||||||
// Print program metrics
|
// Print program metrics
|
||||||
PRINTF("%S", str_prog_name);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("%S", str_prog_name);// Название программы
|
||||||
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// Время Дата компиляции
|
||||||
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
||||||
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* globals.h
|
* globals.h
|
||||||
*
|
*
|
||||||
* Created on: 29 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2018 <EFBFBD>.
|
* Created on: 29 нояб. 2018 г.
|
||||||
* Author: maxx
|
* Author: maxx
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* main.c
|
* main.c
|
||||||
*
|
*
|
||||||
* Created on: 22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2018 <EFBFBD>.
|
* Created on: 22 нояб. 2018 г.
|
||||||
* Author: maxx
|
* Author: maxx
|
||||||
*/
|
*/
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
@@ -111,8 +111,8 @@
|
|||||||
#endif
|
#endif
|
||||||
*/
|
*/
|
||||||
//*********Program metrics
|
//*********Program metrics
|
||||||
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - Дата компиляции
|
||||||
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - Время компиляции
|
||||||
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v2.3d Static IP HTTP_server FLASH Pages WIZNET_5500 ETHERNET 12/12/2018\r\n"; // Program name
|
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v2.3d Static IP HTTP_server FLASH Pages WIZNET_5500 ETHERNET 12/12/2018\r\n"; // Program name
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -178,7 +178,7 @@ ISR (TIMER0_COMPA_vect)
|
|||||||
// Compare match Timer0
|
// Compare match Timer0
|
||||||
// Here every 1ms
|
// Here every 1ms
|
||||||
_millis++; // INC millis tick
|
_millis++; // INC millis tick
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Тест мигаем при в ходе в прерывание
|
||||||
// 500Hz FREQ OUT
|
// 500Hz FREQ OUT
|
||||||
// LED_TGL;
|
// LED_TGL;
|
||||||
}
|
}
|
||||||
@@ -210,18 +210,18 @@ static int uart0_putchar(char ch,FILE *stream);
|
|||||||
static void uart0_rx_flash(void);
|
static void uart0_rx_flash(void);
|
||||||
|
|
||||||
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||||
//PS. stdin <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> uart.h - api:
|
//PS. stdin не переназначаю, т.к. удобнее с ним работать через uart.h - api:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
* Т.е. например так
|
||||||
c = uart1_getc();
|
c = uart1_getc();
|
||||||
if (( c & UART_NO_DATA ) == 0)
|
if (( c & UART_NO_DATA ) == 0)
|
||||||
{
|
{
|
||||||
uart1_putc( (unsigned char)c );
|
uart1_putc( (unsigned char)c );
|
||||||
}
|
}
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> UART RX RINGBUFFER),
|
При этом чекаем что буфер приема не пуст и опрос идет неблокирующий (+ работаем через UART RX RINGBUFFER),
|
||||||
<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> stdin->getchar() <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
а если работаем в стиле stdin->getchar() там опрос блокируется пока символ не будет принят (поллинг)
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1_RX, <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
через UART1_RX, т.е. неудобно.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// STDOUT UART0 TX handler
|
// STDOUT UART0 TX handler
|
||||||
@@ -231,10 +231,10 @@ static int uart0_putchar(char ch,FILE *stream)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1 RX (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
|
// Очищаем буфер приема UART1 RX (иногда нужно)
|
||||||
static void uart0_rx_flash(void)
|
static void uart0_rx_flash(void)
|
||||||
{
|
{
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> ring-buffer UART1 RX
|
// Считываем все из ring-buffer UART1 RX
|
||||||
unsigned int c;
|
unsigned int c;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@@ -375,8 +375,8 @@ int main()
|
|||||||
|
|
||||||
|
|
||||||
// Print program metrics
|
// Print program metrics
|
||||||
PRINTF("%S", str_prog_name);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("%S", str_prog_name);// Название программы
|
||||||
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// Время Дата компиляции
|
||||||
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
||||||
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* globals.h
|
* globals.h
|
||||||
*
|
*
|
||||||
* Created on: 29 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2018 <EFBFBD>.
|
* Created on: 29 нояб. 2018 г.
|
||||||
* Author: maxx
|
* Author: maxx
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* main.c
|
* main.c
|
||||||
*
|
*
|
||||||
* Created on: 22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2018 <EFBFBD>.
|
* Created on: 22 нояб. 2018 г.
|
||||||
* Author: maxx
|
* Author: maxx
|
||||||
*/
|
*/
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
@@ -111,8 +111,8 @@
|
|||||||
#endif
|
#endif
|
||||||
*/
|
*/
|
||||||
//*********Program metrics
|
//*********Program metrics
|
||||||
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - Дата компиляции
|
||||||
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - Время компиляции
|
||||||
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v2.3d Static IP HTTP_server FLASH Pages WIZNET_5500 ETHERNET 12/12/2018\r\n"; // Program name
|
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v2.3d Static IP HTTP_server FLASH Pages WIZNET_5500 ETHERNET 12/12/2018\r\n"; // Program name
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -178,7 +178,7 @@ ISR (TIMER0_COMPA_vect)
|
|||||||
// Compare match Timer0
|
// Compare match Timer0
|
||||||
// Here every 1ms
|
// Here every 1ms
|
||||||
_millis++; // INC millis tick
|
_millis++; // INC millis tick
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Тест мигаем при в ходе в прерывание
|
||||||
// 500Hz FREQ OUT
|
// 500Hz FREQ OUT
|
||||||
// LED_TGL;
|
// LED_TGL;
|
||||||
}
|
}
|
||||||
@@ -210,18 +210,18 @@ static int uart0_putchar(char ch,FILE *stream);
|
|||||||
static void uart0_rx_flash(void);
|
static void uart0_rx_flash(void);
|
||||||
|
|
||||||
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||||
//PS. stdin <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> uart.h - api:
|
//PS. stdin не переназначаю, т.к. удобнее с ним работать через uart.h - api:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
* Т.е. например так
|
||||||
c = uart1_getc();
|
c = uart1_getc();
|
||||||
if (( c & UART_NO_DATA ) == 0)
|
if (( c & UART_NO_DATA ) == 0)
|
||||||
{
|
{
|
||||||
uart1_putc( (unsigned char)c );
|
uart1_putc( (unsigned char)c );
|
||||||
}
|
}
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> UART RX RINGBUFFER),
|
При этом чекаем что буфер приема не пуст и опрос идет неблокирующий (+ работаем через UART RX RINGBUFFER),
|
||||||
<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> stdin->getchar() <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
а если работаем в стиле stdin->getchar() там опрос блокируется пока символ не будет принят (поллинг)
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1_RX, <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
через UART1_RX, т.е. неудобно.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// STDOUT UART0 TX handler
|
// STDOUT UART0 TX handler
|
||||||
@@ -231,10 +231,10 @@ static int uart0_putchar(char ch,FILE *stream)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1 RX (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
|
// Очищаем буфер приема UART1 RX (иногда нужно)
|
||||||
static void uart0_rx_flash(void)
|
static void uart0_rx_flash(void)
|
||||||
{
|
{
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> ring-buffer UART1 RX
|
// Считываем все из ring-buffer UART1 RX
|
||||||
unsigned int c;
|
unsigned int c;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@@ -375,8 +375,8 @@ int main()
|
|||||||
|
|
||||||
|
|
||||||
// Print program metrics
|
// Print program metrics
|
||||||
PRINTF("%S", str_prog_name);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("%S", str_prog_name);// Название программы
|
||||||
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// Время Дата компиляции
|
||||||
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
||||||
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* globals.h
|
* globals.h
|
||||||
*
|
*
|
||||||
* Created on: 29 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2018 <EFBFBD>.
|
* Created on: 29 нояб. 2018 г.
|
||||||
* Author: maxx
|
* Author: maxx
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* main.c
|
* main.c
|
||||||
*
|
*
|
||||||
* Created on: 22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2018 <EFBFBD>.
|
* Created on: 22 нояб. 2018 г.
|
||||||
* Author: maxx
|
* Author: maxx
|
||||||
*/
|
*/
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
@@ -145,8 +145,8 @@ void get_mcusr(void)
|
|||||||
|
|
||||||
|
|
||||||
//*********Program metrics
|
//*********Program metrics
|
||||||
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_date[] PROGMEM = __DATE__; // Mmm dd yyyy - Дата компиляции
|
||||||
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
const char compile_time[] PROGMEM = __TIME__; // hh:mm:ss - Время компиляции
|
||||||
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v2.4d Static IP HTTP_server SDCARD Pages WIZNET_5500 ETHERNET 19/12/2018\r\n"; // Program name
|
const char str_prog_name[] PROGMEM = "\r\nAtMega1284p v2.4d Static IP HTTP_server SDCARD Pages WIZNET_5500 ETHERNET 19/12/2018\r\n"; // Program name
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -213,7 +213,7 @@ ISR (TIMER0_COMPA_vect)
|
|||||||
// Compare match Timer0
|
// Compare match Timer0
|
||||||
// Here every 1ms
|
// Here every 1ms
|
||||||
_millis++; // INC millis tick
|
_millis++; // INC millis tick
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Тест мигаем при в ходе в прерывание
|
||||||
// 500Hz FREQ OUT
|
// 500Hz FREQ OUT
|
||||||
// LED_TGL;
|
// LED_TGL;
|
||||||
if(++fatfs_10ms > 9 )
|
if(++fatfs_10ms > 9 )
|
||||||
@@ -252,18 +252,18 @@ static int uart0_putchar(char ch,FILE *stream);
|
|||||||
static void uart0_rx_flash(void);
|
static void uart0_rx_flash(void);
|
||||||
|
|
||||||
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
static FILE uart0_stdout = FDEV_SETUP_STREAM(uart0_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||||
//PS. stdin <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> uart.h - api:
|
//PS. stdin не переназначаю, т.к. удобнее с ним работать через uart.h - api:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
* Т.е. например так
|
||||||
c = uart1_getc();
|
c = uart1_getc();
|
||||||
if (( c & UART_NO_DATA ) == 0)
|
if (( c & UART_NO_DATA ) == 0)
|
||||||
{
|
{
|
||||||
uart1_putc( (unsigned char)c );
|
uart1_putc( (unsigned char)c );
|
||||||
}
|
}
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (+ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> UART RX RINGBUFFER),
|
При этом чекаем что буфер приема не пуст и опрос идет неблокирующий (+ работаем через UART RX RINGBUFFER),
|
||||||
<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> stdin->getchar() <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
а если работаем в стиле stdin->getchar() там опрос блокируется пока символ не будет принят (поллинг)
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1_RX, <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
через UART1_RX, т.е. неудобно.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// STDOUT UART0 TX handler
|
// STDOUT UART0 TX handler
|
||||||
@@ -273,10 +273,10 @@ static int uart0_putchar(char ch,FILE *stream)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UART1 RX (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
|
// Очищаем буфер приема UART1 RX (иногда нужно)
|
||||||
static void uart0_rx_flash(void)
|
static void uart0_rx_flash(void)
|
||||||
{
|
{
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> ring-buffer UART1 RX
|
// Считываем все из ring-buffer UART1 RX
|
||||||
unsigned int c;
|
unsigned int c;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@@ -587,8 +587,8 @@ int main()
|
|||||||
|
|
||||||
|
|
||||||
// Print program metrics
|
// Print program metrics
|
||||||
PRINTF("%S", str_prog_name);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("%S", str_prog_name);// Название программы
|
||||||
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
PRINTF("Compiled at: %S %S\r\n", compile_time, compile_date);// Время Дата компиляции
|
||||||
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
PRINTF(">> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ
|
||||||
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user