Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: RS-232(проблема)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
mejia
unsure.gif Идея: по прерыванию, запись в буфер и чисто для себя(для проверки) обратно посылается буква U, естествнно не работает.... перерыл документацию по AT90S2313 , вроде все регистры отвечающие за прерывания включены, и все равно не работает huh.gif

можете сами у себя проверить, кроме как мистикой я это описать не могу

void main()
{
init_devices();
while(1);
}

// getting byte from COM PORT
#pragma interrupt_handler get_result:8
void get_result()
{//x.z no ne rabotaet

x[cou]=UDR;cou++;
if (cou==4) {cou=0;}//sort();}
putchar('U'); //vivod obratno !!!

}
void port_init(void)
{
DDRB =0xFF; //init port B na vixod
PORTB = 0x00; //vkl all
PORTD = 0x00; //port vkl
DDRD = 0x00; //vse na vxod
}
//call this routine to initialise all peripherals

void init_devices(void)
{
CLI();

port_init();
uart0_init();

SetBit (SREG,7); //bit maski prerivanii
MCUCR = 0x00;
GIMSK = 0xF0; //obshii registr maski prerivanii
GIFR = 0xF0;
TIMSK = 0x00; //0x00

SEI();

}

//UART0 initialisation
// desired baud rate: 9600
// actual: baud rate:9600 (0,0%)
//
void uart0_init(void)
{
UCR = 0x00; //disable while setting baud rate
UBRR = 0x17; //set baud rate
// UBRR = 0x23; //set baud rate
UCR = 0x09; //enable
}
Stranix
А ты ждешь когда тебе придет буква "U"? А ты почему при инициализации не включил трансмитер?
ssm
у меня на меге 8515:
;инициализация
UART_INIT:
ldi R16,0 ;режим U2x=0 MPCM=0
out UCSRA,R16
ldi R16,0x98 ;режим RXCIE=1 RXEN=1 TXEN=1
out UCSRB,R16
ldi R16,0x8f ;режим UCZ=011 USBS=1
out UCSRC,R16
ldi R16,low(UART_BAUD) ;скорость
out UBRRL,R16
ldi R16,high(UART_BAUD)
out UBRRH,R16
<порезано>

//передача байта
UART_SB:
out UDR,R16 ;передать
UART_SB1:
in R16,USR ;проверить USR.6=1?
andi R16,0x40
breq UART_SB1 ;нет, передача не закончена
in R16,USR ;сброс бита
ori R16,0x40
out USR,R16
ret

;прерывание по приему
UART_RINT:
<порезано>
in R16,UDR ;сохранить байт
st Z,R16
<порезано>
reti

чего-то у тебя с инициализацией не то...
mejia
Цитата(Stranix @ Jun 16 2005, 23:49)
А ты ждешь когда тебе придет буква "U"? А ты почему при инициализации не включил трансмитер?
*


какой трансмиттер sad.gif , в документации по AT90S2313 про "трансмиттер" ничего не нашел

void port_init(void)
{
DDRB =0xFF; //init port B na vixod
PORTB = 0x00; //vkl all
PORTD = 0x00; //port vkl
DDRD = 0x00; //vse na vxod
}

//call this routine to initialise all peripherals

void init_devices(void)
{
CLI();

port_init();
uart0_init();

SetBit (SREG,7); //bit maski prerivanii
MCUCR = 0x00;
GIMSK = 0xF0; //obshii registr maski prerivanii
GIFR = 0xF0;
TIMSK = 0xFF; //0x00
TIFR=0xFF

SEI();

}

//UART0 initialisation
// desired baud rate: 9600
// actual: baud rate:9600 (0,0%)
//
void uart0_init(void)
{
UCR = 0x00; //disable while setting baud rate
UBRR = 0x17; //set baud rate
// UBRR = 0x23; //set baud rate
UCR = 0x09; //enable
}
yung
Цитата(mejia @ Jun 17 2005, 09:01)
.......
void uart0_init(void)
{
UCR  = 0x00; //disable while setting baud rate
UBRR = 0x17; //set baud rate
// UBRR = 0x23; //set baud rate
UCR  = 0x09; //enable                                                <-----!!!!!!
}
*


Передатчик как раз включен, выключен приемник. RXEN установить надо. И прерывания от UART (RXCIE,TXCIE) почему-то выключены.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.