Код: Выделить всё
OPTION_REG = (0<T0CS)|(0<PSA)|(1<PS2)|(1<PS1)|(1<PS1); // внутр тактовый генератор ТМРО, предделитель перед ТМРО, 1:256Понимаю что неправильно. Нулевые биты умножать надо,
как записать?
Код: Выделить всё
OPTION_REG = (0<T0CS)|(0<PSA)|(1<PS2)|(1<PS1)|(1<PS1); // внутр тактовый генератор ТМРО, предделитель перед ТМРО, 1:256так используйте тогда на последней микросхеме, на нее есть даташит по любому.
russo_turisto писал(а):Для нулей OPTION_REG &= (0<<T0CS)|(0<<PSA); //Это надо проверить!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Код: Выделить всё
OPTION_REG &= ~((1<<T0CS)|(1<<PSA)); Код: Выделить всё
OPTION_REG = (OPTION_REG&~((1<<T0CS)|(1<<PSA)))|(1<<PS2)|(1<<PS1)|(1<<PS1); На сколько мне известно, символ "!" обозначает логическое НЕ, а не инверсию. Для инверсии нужно использовать оператор "~".vitalik_1984 писал(а):в отличие от этой:Код: Выделить всё
OPTION_REG &= !((1<<T0CS)|(1<<PSA));
Так ваши биты точно сбросятся.
Код: Выделить всё
T0CS_bit = 0;
PSA_bit = 0;
PS0_bit = 1; //1:64
PS1_bit = 0;
PS2_bit = 1;Код: Выделить всё
typedef enum {TOGGLE, SET, CLEAR}eBITCHANGES;
unsigned char changeBit(unsigned char byte, unsigned char bitNr,
eBITCHANGES how)
{
if (how == TOGGLE)
byte ^= 1 << bitNr;
else if (how == SET)
byte |= 1 << bitNr;
else if (how == CLEAR)
byte &= ~(1 << bitNr);
return byte;
}Chettuser писал(а):И к тому и к другому.
Если FPGA, то конфигурация пишется в отдельное ЗУ. При включении считывается в FPGA, при выключении всё внутри FPGA пропадает.
Если CPLD, то как правило всё пишется во внутреннюю EEPROM память.
Chettuser писал(а):Интерфейс по которому загоняется прошивка называется JTAG.
Схему обвязки можете взять здесь, правда там под другой камень.
По поводу внешней микросхемы для конфигурации точно сказать не смогу - я в основном имел дело с CPLD MAX II, у них всё внутри. И с XILINIX на работе - у той есть маленькая микрушка рядом - это и есть конфигурационная память. общаются по последовательному протоколу, возможно разновидность SPI.