Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Заготоффка для любительниц рестартов на м128. Добавляйте(+)

Отправлено Quasy 21 марта 2008 г. 16:43




Что забыл, что наврал???
Пятница.

///////////////////////////////////////
//------------------
void Init_Registers_As_Reset( void )
{
volatile unsigned char tmp_r;

SREG = 0x00; // Status Register. Запрет прерываний

///////////////////////////////////
// ПОРТЫ В/В И ВНЕШНИЕ ПРЕРЫВАНИЯ
///////////////////////////////////
// Порты, НЕ инициализуемые пользователем
// в startup/main - раскомментировать
// PINA = 0x00;
// DDRA = 0x00;
// PORTA = 0x00;
/////////////
// PINB = 0x00;
// DDRB = 0x00;
// PORTB = 0x00;
/////////////
// PINC = 0x00;
// DDRC = 0x00;
// PORTC = 0x00;
/////////////
// PIND = 0x00;
// DDRD = 0x00;
// PORTD = 0x00;
/////////////
// PINE = 0x00;
// DDRE = 0x00;
// PORTE = 0x00;
/////////////
// PINF = 0x00;
// DDRF = 0x00;
// PORTF = 0x00;
/////////////
// PING = 0x00;
// DDRG = 0x00;
// PORTG = 0x00;
/////////////////////
EIMSK = 0x00; // External Interrupt Mask Register
EIFR = 0xff; // Cброс флагов внешних прерываний
EICRA = 0x00; // External Interrupt Control Register A
EICRB = 0x00; // External Interrupt Control Register B
SFIOR = 0x00; // Special Function I/O Register
////////////////////

////////////////////
// УПРАВЛЕНИЕ MCU
////////////////////
RAMPZ = 0x00; // RAM Page Z Select Register
XDIV = 0x00; // XTAL Divide Control Register
__no_operation(); // ERRATA m128.
__no_operation(); // ERRATA m128
__no_operation(); // ERRATA m128
__no_operation(); // ERRATA m128
__no_operation(); // ERRATA m128
__no_operation(); // ERRATA m128
__no_operation(); // ERRATA m128
__no_operation(); // ERRATA m128
/////////////
////// MCUCSR. MCU general Control and Status Register.
////// Раскомментировать, если не проверяются флаги сброса:
// MCUCSR &= (~((1 << PORF)|(1 << EXTRF )|
// (1 << BORF )|(1 << WDRF )|(1 << JTRF)));
////////////////////

////////////////////
// Обращение к cледующим регистрам определяется
// требованиями контретного проекта.
////////////////////
MCUCR = 0x00; // MCU general Control Register
////// Чаще всего их лучше не трогать:
// OSCCAL = 0x00; // Oscillator Calibration Register.
// SP = 0x00; // Stack Pointer
// OCDR = 0x00; // On-Chip Debug Register
// WDTCR = 0x00; // Watchdog Timer Control Register
////////////////////

////////////////////
// Т А Й М Е Р Ы
////////////////////
TCCR0 = 0x00; // Init-stop T0
OCR0 = 0x00;
TCNT0 = 0x00;
ASSR = 0x00; // Asynchronous mode Status Register
/////////////
TCCR1B = 0x00; // Init-stop T1
ICR1 = 0x00;
OCR1B = 0x00;
OCR1A = 0x00;
TCNT1 = 0x00;
TCCR1A = 0x00;
OCR1C = 0x00;
TCCR1C = 0x00;
/////////////
TCCR2 = 0x00; // Init-stop T2
OCR2 = 0x00;
TCNT2 = 0x00;
/////////////
TCCR3B = 0x00; // Init-stop T3
ICR3 = 0x00;
OCR3C = 0x00;
OCR3B = 0x00;
OCR3A = 0x00;
TCNT3 = 0x00;
TCCR3A = 0x00;
TCCR3C = 0x00;
/////////////
TIMSK = 0x00; // Timer/Counter Interrupt Mask Register
ETIMSK = 0x00; // Extended Timer/Counter Interrupt Mask Register
TIFR = 0xff; // Timer/Counter Interrupt Flag Register
ETIFR = 0xff; // Extended Timer/Counter Interrupt Flag Register
/////////////////

/////////////////
// U S A R T
/////////////////
UCSR0B = 0x00; // USART0 Control and Status Register B
tmp_r = UDR0;
UBRR0H = 0x00; // USART0 Baud Rate Register High
UBRR0L = 0x00; // USART0 Baud Rate Register Low
UCSR0A = (1 << TXC0); // USART0 Control and Status Register A
UCSR0C = ((1 << UCSZ00)|(1 << UCSZ01));
/////////////
UCSR1B = 0x00; // USART1 Control and Status Register B
tmp_r = UDR1;
UBRR1H = 0x00; // USART1 Baud Rate Register High
UBRR1L = 0x00; // USART1 Baud Rate Register Low
UCSR1A = (1 << TXC1); // USART1 Control and Status Register A
UCSR1C = ((1 << UCSZ10)|(1 << UCSZ11));
////////////////

////////////////
// A D C & Comparator
////////////////
ADCSR = 0x00; // ADC Control and Status Register
ADMUX = 0x00; // ADC Multiplexer Selection Register
ACSR = 0x00; // Analog Comparator Control and Status Register
////////////////

////////////////
// S P I
////////////////
SPCR = 0x00; // SPI Control Register
tmp_r = SPSR;
tmp_r = SPDR;
SPSR = 0x00; // SPI Status Register
////////////////

////////////////
// E E P R O M
////////////////
while (EECR & ( 1 << EEWE ));
EEAR = 0x00; // EEPROM Address Register
EEDR = 0x00; // EEPROM Data Register
EECR = 0x00; // EEPROM Control Register
////////////////

////////////////
// External Memory Сontrol
////////////////
XMCRA = 0x00; // External Memory Control Register A
XMCRB = 0x00; // External Memory Control Register B
////////////////

////////////////
// T W I
////////////////
TWCR = ( 1 << TWINT); // TWI Control Register
TWBR = 0x00; // TWI Bit Rate Register
TWSR = 0x00; // TWI Status Register
TWAR = 0xfe; // TWI Address Register
/////// TWDR = 0xff; // TWI Data Register
////////////////

////////////////
// S P M C o n t r o l
////////////////
while( SPMCSR & ( 1 << SPMEN ) );
SPMCSR = (1 << RWWSB); // SPM Control and Status Register
////////////////
}


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 89:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru