Где купить просто тот же cortex-a7 ?Cortex A7 это ядро. А вам нужно выбрать конкретный чип на этом ядре. Поэтому открываете каталоги производителей микроэлектроники и ищете чип, который подойдет вам по параметрам.
Как сложно его будет программировать?Зависит от вашего опыта. Обычно под мощные камни не пишется голое приложение-прошивка (хотя никто не запрещает). Берется какая-нибудь ОС, способная работать на этом процессоре, и приложение пишется под нее. Тут уж как повезет. Если вы просто скопируете с минимальными изменениями какую-то известную платформу, то сборка ОС под нее, скорее всего, есть. Пара ударов в бубен - и все заработает. А если железо у вас экзотическое, ОС придется дорабатывать основательно. Вы пробовали писать драйверы и функции ядра для работы с устройствами? Это очень увлекательно =)
В чем его программировать?Обычно, производители чипа дают какой-никакой тулкит для программирования под него. Готовых сред разработки практически нет. Собирается что-то свое под нужные задачи: компилятор, линкер, модули к ним, дебаггер (если нужно), библиотек вагон и скриптов маленькая тележка.
Как подключить к нему внешнее ОЗУ и т.п.Интрерфейсы обычно стандартные, описаны в даташитах. А дальше повторяется п.1, но уже для памяти: подбор нужного вам чипа по параметрам, поиск его в продаже и т.д.
void setup()
{
//------ Timer0 ----------
TCCR0A = (1<<WGM01); // Режим CTC (сброс по совпадению)
TCCR0B = (1<<CS00); // Тактирование от CLK.
// Если нужен предделитель :
// TCCR0B = (1<<CS01); // CLK/8
// TCCR0B = (1<<CS00)|(1<<CS01); // CLK/64
// TCCR0B = (1<<CS02); // CLK/256
// TCCR0B = (1<<CS00)|(1<<CS02); // CLK/1024
OCR0A = 123; // Верхняя граница счета. Диапазон от 0 до 255.
// Частота прерываний будет = Fclk/(N*(1+OCR0A))
// где N - коэф. предделителя (1, 8, 64, 256 или 1024)
TIMSK0 = (1<<OCIE0A); // Разрешить прерывание по совпадению
//------ Timer1 ----------
TCCR1B = (1<<WGM12); // Режим CTC (сброс по совпадению)
TCCR1B |= (1<<CS10); // Тактирование от CLK.
// Если нужен предделитель :
// TCCR1B |= (1<<CS11); // CLK/8
// TCCR1B |= (1<<CS10)|(1<<CS11); // CLK/64
// TCCR1B |= (1<<CS12); // CLK/256
// TCCR1B |= (1<<CS10)|(1<<CS12); // CLK/1024
OCR1A = 2678; // Верхняя граница счета. Диапазон от 0 до 65535.
// Частота прерываний будет = Fclk/(N*(1+OCR1A))
// где N - коэф. предделителя (1, 8, 64, 256 или 1024)
TIMSK1 = (1<<OCIE1A); // Разрешить прерывание по совпадению
//------ Timer2 ----------
TCCR2A = (1<<WGM21); // Режим CTC (сброс по совпадению)
TCCR2B = (1<<CS20); // Тактирование от CLK.
// Если нужен предделитель :
// TCCR2B = (1<<CS21); // CLK/8
// TCCR2B = (1<<CS20)|(1<<CS21); // CLK/32
// TCCR2B = (1<<CS22); // CLK/64
// TCCR2B = (1<<CS20)|(1<<CS22); // CLK/128
// TCCR2B = (1<<CS21)|(1<<CS22); // CLK/256
// TCCR2B = (1<<CS20)|(1<<CS21)|(1<<CS22); // CLK/1024
OCR2A = 234; // Верхняя граница счета. Диапазон от 0 до 255.
// Частота прерываний будет = Fclk/(N*(1+OCR2A))
// где N - коэф. предделителя (1, 8, 32, 64, 128, 256 или 1024)
TIMSK2 = (1<<OCIE2A); // Разрешить прерывание по совпадению
sei (); // Глобально разрешить прерывания
}
ISR (TIMER0_COMPA_vect)
{
// Обработчик прерывания таймера 0
}
ISR (TIMER1_COMPA_vect)
{
// Обработчик прерывания таймера 1
}
ISR (TIMER2_COMPA_vect)
{
// Обработчик прерывания таймера 2
}
> желательно ближе
> цены адекватные
> работали нормально