_kp » 27 апр 2009, 11:48
Для начинающих:
В проэкте используется компилятор gcc-avr (winavr).
Начинающим, мое мнение, лучше им и пользоваться. Хоть по началу не самый простой, но самый мощный, и более соответствующий стаднартам.
Сам им и пользуюсь в связке со средой разработки eclipse.
makefile - это и есть файл проэкта.
speaker4.DSN - документ эмулятора Proteus, в котором все это можно запустить и послушать, без реального железа.
Но, при желании перенести проэкт под другой компилятор, или другой процессор нужно:
Добавить в свой проэкт файлы "Speaker2.c" и "Speaker.h", а пример использования посмотреть в "main.c".
1. Удалить в Speaker2.c строки:
#include "avr/io.h"
#include "avr/pgmspace.h"
И заменить на свои файлы каксающиеся периферии процессора, например:
#include <iom8.h>
2. Заменить атрибуты PROGMEM на атрибуты, указывающие размещение данных во флэш.
Например:
/*gcc-avr */ uint8_t PROGMEM sound_A []={( 46), 0xE1,0xC3,0xE1,0xC7,0x8F,0x0F };
/* ICCAVR */ flash unsigned char sound_A []={( 46), 0xE1,0xC3,0xE1,0xC7,0x8F,0x0F };
/*чистый с */ const uint8_t sound_A []={( 46), 0xE1,0xC3,0xE1,0xC7,0x8F,0x0F };
3. Заменить макросы pgm_read_byte и pgm_read_word на нормальное обращение к данным.
Например:
/*gcc-avr */ uint16_t FW=pgm_read_word(pFonem);
/*чистый с */ uint16_t FW=pFonem*;
/*gcc-avr */ Result.Addr=pgm_read_word( &snd_list[SndCode] );
/*чистый с */ Result.Addr=snd_list[SndCode];
4. Для отсчета задержек используется переменная F_CPU.
У меня она передаётся из makefile. Но можно и прямо в файле "Speaker2.c" переопределить её значение.
Сама задержка у меня генерируется ассемлерной вставкой:
#define delay_us(Time_uS)
При другом компиляторе или другом процессоре нужно изменить её.
Важно. В некоторых компиляторах есть готовые функции задержек.
Но не все они годятся. В том же gcc-avr это _delay_us(), но вычисление времени там сделано через
числа с плаваюшей точкой, и соответственно она не годится.
А вообще, в конечном устройстве задержки лучше обрабатывать через таймер.
Предоставленный же здесь пример - чисто дидактический, без всего лишнего.
5. Если не нужен, отладочный вывод, выкидаваем строку:
#include "stdio.h"
и закоментируем все printf/putchar.
Добавлено спустя 4 минуты 50 секунд:
Для русских букв в проэкте используется кодировка CP866(DOS).
Если удобнее работать с символами в кодировке Windows-1251, то для этого варириата
выкладываю изменённый файл "Speaker2.c".
- Вложения
-
- Speaker2_1251.zip
- (5.58 КиБ) Скачиваний: 66