реклама на сайте
подробности

 
 
> mega128 -> UART1,2 -> mega162, аппаратная несовместимость, можно ли обойти ?
west329_
сообщение Nov 3 2008, 09:15
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Отлаживался проект до полного завершения на м128, изначально конечно использовать такой контроллер из за двух аппаратных юартов глупо, как замену был остановлен выбор на м162 собственно из за тех же 2 апаратных юартов.

Проект был закончен, вчера, попытались пересобрать на м162.

Как мы и предпологали, заменой одной только строчки
Код
#include "iom128.h"

на
Код
#include "iom162.h"

не обойдётся.

Сначало отказался работать таймер, пришлось коректировать
Код
void timer0_init(void)
{
#ifdef __ATmega128__
TCCR0 = 0x00; //stop             //10mSec
ASSR  = 0x00; //set async mode
TCNT0 = 0xB9; //set count
OCR0  = 0x47;
TCCR0 = 0x07; //start timer
TIMSK |= 0x01; //ovf T0 active
#endif

#ifdef __ATmega162__
TCCR0 = 0x00; //stop
TCNT0 = 0xB9; //set count
OCR0  = 0x47; //set compare value
TCCR0 = 0x05; //start timer

TIMSK |= 0x02; //timer interrupt sources
#endif
}


А также немного в других частях, в целом весь проект на С то 95% кода неизменно. А вот периферия sad.gif
Но как мы не старались запустить юарты у нас не получилось sad.gif
Из возможностей юарта используем только прерывание RX, при этом как только подключается устройство к порту контроллер падает и всё, помогает только передёргивание питания.


Если кто то уже использовал в свои разработках м162 с 2 юартами откликнитесь. Интересует участок инициализации.

С ув.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
west329_
сообщение Nov 3 2008, 09:35
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Код
void uart1_init(void)
{
  
UCSR1B = 0x00; //disable while setting baud rate
UCSR1A = 0x00;

UCSR1C = 0x06;

UBRR1L = 0x07; //set baud rate lo
UBRR1H = 0x00; //set baud rate hi
//UCSR1B = 0xB8;
//UCSR1A = 0x00; //enable  //???????????
UCSR1B = 0x98; //without UDR is now empty int


}


Возможно может проблема в режимах совместимости между 162 и 161 ?
Изначально при конфигурации фьюз битов я нетрогал флаг М161С, он так и остался пустым в ПониПрог
Go to the top of the page
 
+Quote Post
defunct
сообщение Nov 3 2008, 11:01
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(west329_ @ Nov 3 2008, 11:35) *
Возможно может проблема в режимах совместимости между 162 и 161 ?
Изначально при конфигурации фьюз битов я нетрогал флаг М161С, он так и остался пустым в ПониПрог

Да да, по умолчанию m162 в режиме совместимости.
Go to the top of the page
 
+Quote Post
west329_
сообщение Nov 3 2008, 11:25
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Цитата(defunct @ Nov 3 2008, 15:01) *
Да да, по умолчанию m162 в режиме совместимости.


тогдаб прогограмма для 162 не пошлаб, я то в ИАР чётко выбираю СРU
Код
#ifndef __IOM162_H
#define __IOM162_H


/* SFRs are local in assembler modules (so this file may need to be */
/* included in more than one module in the same source file), */
/* but #defines must only be made once per source file. */

/*==============================*/
/* Interrupt Vector Definitions */
/*==============================*/

/* NB! vectors are specified as byte addresses */
#ifndef __M161C__ //Define __M161C__ when you want to run in Mega161 compability mode.

#define    RESET_vect           (0x00)
#define    INT0_vect            (0x04)
#define    INT1_vect            (0x08)
#define    INT2_vect            (0x0C)
#define    PCINT0_vect          (0x10)
#define    PCINT1_vect          (0x14)
#define    TIMER3_CAPT_vect     (0x18)
#define    TIMER3_COMPA_vect    (0x1C)
#define    TIMER3_COMPB_vect    (0x20)
#define    TIMER3_OVF_vect      (0x24)
#define    TIMER2_COMP_vect     (0x28)
#define    TIMER2_OVF_vect      (0x2C)
#define    TIMER1_CAPT_vect     (0x30)
#define    TIMER1_COMPA_vect    (0x34)
#define    TIMER1_COMPB_vect    (0x38)
#define    TIMER1_OVF_vect      (0x3C)
#define    TIMER0_COMP_vect     (0x40)
#define    TIMER0_OVF_vect      (0x44)
#define    SPI_STC_vect         (0x48)
#define    USART0_RXC_vect      (0x4C)
#define    USART1_RXC_vect      (0x50)
#define    USART0_UDRE_vect     (0x54)
#define    USART1_UDRE_vect     (0x58)
#define    USART0_TXC_vect      (0x5C)
#define    USART1_TXC_vect      (0x60)
#define    EE_RDY_vect          (0x64)
#define    ANA_COMP_vect        (0x68)
#define    SPM_RDY_vect         (0x6C)
#else
#define    RESET_vect           (0x00)
#define    INT0_vect            (0x04)
#define    INT1_vect            (0x08)
#define    INT2_vect            (0x0C)
#define    TIMER2_COMP_vect     (0x10)
#define    TIMER2_OVF_vect      (0x14)
#define    TIMER1_CAPT_vect     (0x18)
#define    TIMER1_COMPA_vect    (0x1C)
#define    TIMER1_COMPB_vect    (0x20)
#define    TIMER1_OVF_vect      (0x24)
#define    TIMER0_COMP_vect     (0x28)
#define    TIMER0_OVF_vect      (0x2C)
#define    SPI_STC_vect         (0x30)
#define    USART0_RX_vect       (0x34)
#define    USART1_RX_vect       (0x38)
#define    USART0_UDRE_vect     (0x3C)
#define    USART1_UDRE_vect     (0x40)
#define    USART0_TX_vect       (0x44)
#define    USART1_TX_vect       (0x48)
#define    EE_RDY_vect          (0x4C)
#define    ANA_COMP_vect        (0x50)
#define    SPM_RDY_vect         (0x54)
#endif

из #include "iom162.h"

ключ __M161C__ я не определяю.
и в программе паралельно работает таймер0, то он бы неработал адрес несовпадает.

Щас отключил инит юартов, подключаю внешний девайс, программа несбоит, думал может уровни коротят, всётаки что то с настройками юартов.

Сообщение отредактировал west329_ - Nov 3 2008, 11:32
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 10:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01422 секунд с 7
ELECTRONIX ©2004-2016